Follow Discord
Sweep 22 Oct 2026 · 04:32Z Build v2.1.308 527 read Stable v2.1.308 Latest v2.1.308 Next v2.1.308 Feeds RSS JSON llms.txt llms-full.txt Unofficial

Claude Code v2.1.206 ·

EndConversation Tool [Feature-Flagged]

Entry
JSON All of v2.1.206
EntryKind: in v2.1.206,
In DevelopmentSection of the release
What

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.

Status

Feature-flagged (requires server-side feature flag to enable) and model-gated (opus 4-8, sonnet 5, fable 5, mythos 5).

Details
  • The tool is shouldDefer: true and only enters a model's tool list after an explicit ToolSearch("select:EndConversation") call; its searchHint is "end the conversation — only for sustained user abuse, or when the user explicitly asks to see it demonstrated." The GrowthBook feature flag tengu_umber_kestrel must be enabled server-side; if the flag is off, isEndConversationToolEnabled() returns false, the tool is disabled, and the deferred hint is suppressed entirely.
  • Model floor check (modelMeetsEndConversationFloor): parses the model ID as claude-{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 (agentId is set on the tool context), the call immediately returns ended: false with 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 an EndConversation tool-use block and no real user message has appeared since that turn, the check returns true and the tool proceeds to end. If no such prior call exists (first invocation), the tool returns ended: false with 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())); then abortController.abort("end_conversation") fires with the reason string "end_conversation".
  • In interactive (REPL) sessions: sets endedByModel: true in 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."
Evidence

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.

Read from
Feature flag
tengu_umber_kestrel Gate removed from the code

This 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 has happened since
Flag reading moved The flag server now returns on for tengu_umber_kestrel, read as this account. A reading is one sample. Claude Code evaluates its flags remotely, so no client sees the targeting rule behind a value and this says nothing about your account.
Flag reading moved The flag server now returns off for tengu_umber_kestrel, read as this account. A reading is one sample. Claude Code evaluates its flags remotely, so no client sees the targeting rule behind a value and this says nothing about your account.
Flag reading moved The flag server now returns on for tengu_umber_kestrel, read as this account. A reading is one sample. Claude Code evaluates its flags remotely, so no client sees the targeting rule behind a value and this says nothing about your account.
Flag reading moved The flag server now returns off for tengu_umber_kestrel, read as this account. A reading is one sample. Claude Code evaluates its flags remotely, so no client sees the targeting rule behind a value and this says nothing about your account.
Flag reading moved The flag server now returns on for tengu_umber_kestrel, read as this account. A reading is one sample. Claude Code evaluates its flags remotely, so no client sees the targeting rule behind a value and this says nothing about your account.
Flag reading moved The flag server now returns off for tengu_umber_kestrel, read as this account. A reading is one sample. Claude Code evaluates its flags remotely, so no client sees the targeting rule behind a value and this says nothing about your account.
Flag reading moved The flag server now returns on for tengu_umber_kestrel, read as this account. A reading is one sample. Claude Code evaluates its flags remotely, so no client sees the targeting rule behind a value and this says nothing about your account.
Flag reading moved The flag server now returns off for tengu_umber_kestrel, read as this account. A reading is one sample. Claude Code evaluates its flags remotely, so no client sees the targeting rule behind a value and this says nothing about your account.

See this across every release →

How sure we are
One source agreesOne thing we can check says the same as this entry.
The name it cites is new in this buildNew in this build: tengu_umber_kestrel

See this entry in the whole of v2.1.206 →

Feedback