tengu_umber_kestrel Gate removed from the codeThis release deleted the gate from the code while it was still reading on for the account this site reads, so the code path no longer asks a flag before running.
This account: on · anonymous baseline: off · compiled default in v2.1.206: not a boolean we can read
These values were read against a different version of Claude Code, so treat them as the nearest reading available instead of one taken on this release.
Read once, for one account on one subscription tier, against v2.1.206. It isn't a statement about your account. What a flag value here can and cannot tell you
What's wrong with this entry?
A new deferred tool (EndConversation) allows the AI to end a conversation in cases of sustained, serious user abuse — after prior warnings and with strict eligibility checks.
Feature-flagged (requires server-side feature flag to enable) and model-gated (opus 4-8, sonnet 5, fable 5, mythos 5).
- The tool is
shouldDefer: trueand only enters a model's tool list after an explicitToolSearch("select:EndConversation")call; itssearchHintis "end the conversation — only for sustained user abuse, or when the user explicitly asks to see it demonstrated." The GrowthBook feature flagtengu_umber_kestrelmust be enabled server-side; if the flag is off,isEndConversationToolEnabled()returnsfalse, the tool is disabled, and the deferred hint is suppressed entirely. - Model floor check (
modelMeetsEndConversationFloor): parses the model ID asclaude-{family}-{version}and compares version numerically against[["opus", [4,8]], ["sonnet", [5]], ["fable", [5]], ["mythos", [5]]]. Models below these thresholds (e.g.,opus-4-7) never receive the deferred hint and cannot enable the tool. - In fork/background-task contexts (
agentIdis set on the tool context), the call immediately returnsended: falsewith a message stating forks cannot end the main conversation and instructing the fork to return welfare concerns as output instead. No session state is changed. - Two-call confirmation via
lastAssistantTurnCalledEndConversation: scans messages backward from newest; if any assistant turn contains anEndConversationtool-use block and no real user message has appeared since that turn, the check returnstrueand the tool proceeds to end. If no such prior call exists (first invocation), the tool returnsended: falsewith the full reflection prompt plus guidance, asking the model to call again to confirm. - Before terminating, a journal marker is written to disk (
oHs(Ct())); thenabortController.abort("end_conversation")fires with the reason string"end_conversation". - In interactive (REPL) sessions: sets
endedByModel: truein app state; the UI renders a styled result box displaying the tool result string: "Claude has ended this chat." - In non-interactive (print/pipe) sessions: calls
gracefulShutdown(1, "other", { finalMessage: "Claude ended the conversation. To continue, please start a new session." })— exits with process exit code 1. - Strict "must NOT use" list: stuck loops, task completion, harmful content requests (redirect instead), general frustration, any self-harm or imminent harm scenario. In crisis/self-harm cases the model must not even mention the possibility of ending the conversation.
- A deferred-tool hint is surfaced only in interactive sessions (
$B()check) to eligible models: "use only for sustained user abuse directed at the assistant, or when the user explicitly asks to see it demonstrated."
Feature flag name ("tengu_umber_kestrel" in JUi); deferred hint (search for "Load the full guidance via ToolSearch"); end message (search for "Claude has ended this chat"); two-call check (lastAssistantTurnCalledEndConversation); model floor list (search for "Re-read the"); non-interactive exit (search for "gracefulShutdown"); model eligibility list (search for "mythos").
Strings lifted out of the shipped bundle, so the claim above can be checked against them.