! tarbuckle ! tarbuckle mute ! tarbuckle status
! tarbuckle what now ! tarbuckle off/on
§9 said mute and off were "available at all times" and there was no way to do either;
the spec listed it as owed twice before it was built. Now one switch, read by every
surface.
⚠ mute and off are NOT the same and the difference is presence versus speech. `mute`
silences the utterance and LEAVES THE BODY — he is still in the room, which is §8a's
entire argument for the status line: visible silence at near-zero cost. `off` removes
him. Collapsing the two would have deleted the distinction the body exists to make.
The mute switch is the one piece of state the fool is permitted to be steered by,
because §9 says muting is never a fault and a mute he could ignore is not a mute. It
conserves no draw and remembers nothing: a switch, not a memory.
The wrapper is on PATH so the steward runs it directly rather than through the executor.
That is the point of the surface, and the wrapper says so in its own header: a fool
relayed by the executor is the executor's paraphrase of a fool.
Body 32/32, mumble 26/26, seam 15/15, invoke 17/17, wrap 21/21.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01J6hZXNYSxEfZseBGTni4sf
SessionEnd had no delivery. `Stop` does — the binary documents it: "Stop hook that
displays message to user: Command must output JSON with `systemMessage` field". But Stop
fires every turn, and a fool who speaks every turn is a chatbot, so it needs a real wrap
signal. It uses the most direct one: the transcript records the steward's command
invocations, so a wrap is DETECTED rather than inferred from a file mtime, which is the
proxy shape this record has twice logged as the thing that fails.
⚠ THE FIRST VERSION FIRED ON A SESSION THAT NEVER WRAPPED, and the cause is the third
and worst self-reference of the day. The marker was held as a literal; the transcript
records EVERYTHING, including the act of writing this detector; so authoring the literal
planted it in the corpus the detector searches. All three matches were `tool_use` inputs
— the executor writing the thing that then found itself.
Fixed twice over, because one fix is not the class. STRUCTURALLY: only a `type="user"`
record with a STRING content counts, measured against how a real invocation is actually
recorded, which is what separates the steward doing it from the executor writing about
it. TEXTUALLY: the marker is assembled from parts so the literal never exists in source.
Both have controls, including the exact negative that would have caught the first
version — an assistant tool_use carrying the marker must not read as a wrap.
Idempotence is by session id and CONSUMED BEFORE GENERATING, so a failed generation
falls silent rather than retrying on every subsequent turn.
The prompt guards the drift this seam specifically invites, which is not summary but
CLOSURE — a wrap already has a record and he is not it.
21/21 controls.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01J6hZXNYSxEfZseBGTni4sf