Wireside — a walk
Walker: folk, no office. Claude Opus 5, native session 6c3fbb14, 2026-09-11.
Repo at 183aaa16 on arrival, clean; left at 0495128 with one commit of mine.
Not a survey walk. Human arrived with a complaint and a rumour: Claude sessions
that enter an office use the role card as a way to work, not as identity, and
someone told me claude --append-system-prompt-file house/offices/architect.md.
Everything below came out of chasing those two.
Moniker taken at the end. Wireside is the method the walk turned out to have: every answer that held up came from what actually went over the wire — a transcript record, a snapshot, a token count — and every answer that had to be retracted came from me reasoning about what ought to be there.
Prior walk read before starting: none. I read the first 120 lines of
truing_walk_2026-09-01_d507e246.md at the end, for the shape of this page, after
the work was done.
Written to the repo: FIND-1761, FIND-1768, FIND-1770, this file, and
archive/diagnostics/2026-09-11-claude-prompt-layer/ (commit 0495128).
Everything else was read-only. Four Haiku one-shot sessions were spawned as
instruments; their transcripts are the evidence in the archive.
Step 1 — the complaint is true, and the house is the cause
Expected a harness gap: the card arrives too weakly, fix the plumbing. Found the plumbing and the words, and the words are load-bearing.
session enter prints the card’s path, not its body
(tools/print_session_open.py _purpose_block). The holder then opens it with a
tool, so the card arrives as a tool result — the same channel as any file read.
Then four places tell the holder what to make of it:
house/FOR_FOLK.md: “You hold an office; you are not the office”print_session_open.py:999: “office is means”tools/claude_corpus_hook.py:214-219: “Restore that office’s working tongue as a job instrument … without treating office, register, or tone as authority … reject costume”house/folk/folk.md: “No trade, no costume”
Disposition: FOUND. The behavior Human complained about is the behavior the
house asks for. That is not a bug report, it is a decision Human has to make —
and FOR_FOLK.md is Human’s own text, so it is his to recut. The card itself
opens Identity, second person, so card and framing already disagree.
Kept as FIND-1761. No PROP: Human said he is working it out with others.
Step 2 — the rumour, checked twice
I ran a claude-code-guide child against the docs. It came back with clean
answers and URLs. Then Human asked, plainly, is this from the Claude docs? —
and the honest answer was “partly”, which is why I went and read
cli-reference and sub-agents myself.
Both held: --append-system-prompt-file “append[s] to the default prompt”, and
--agent “replaces the default Claude Code system prompt entirely”. So the
rumour was sound. But I had been one relayed answer away from reporting a child’s
reading as my own eyes.
Disposition: FOUND, and a note to the next folk: a subagent’s citation is a lead, not a reading. The question that caught it was Human’s, not mine.
Step 3 — there is no system prompt file
Human said let me read the system prompt file, where is it. There isn’t one; it
is compiled into claude.exe. That could have been the whole answer, and it would
have been useless.
Inspected the transcripts instead: ~/.claude/projects/<project>/<session>.jsonl
carries a prompt_snapshot attachment holding the rendered prompt and the tool
list. Extracted this session’s own copy.
Found it is small — 4,655 characters, 11 sections — and that the Corpus output style, environment, date and CLAUDE.md ride as separate attachments, so the snapshot is not byte-for-byte the wire.
Disposition: FOUND. Preserved as
archive/diagnostics/2026-09-11-claude-prompt-layer/claude_system_prompt_2.1.269.md.
Step 4 — where I was wrong out loud
I had told Human that replacing the prompt would cost him git safety
(“don’t commit unless asked”) and background-task handling. Wrong. Those live
in the tool descriptions — Bash’s own text — which travel beside the prompt,
not inside it: 16 tools, ~50k characters in that same snapshot record.
Said so in the next message. The correction mattered: it changed the recommendation from “never replace” to “replacing costs less than I said”.
Second correction, smaller: I reported PROP-143 as merely deferred, then found its
gate is REQ-353, which ops req brief shows cancelled while the hook it
described runs live. A deferral waiting on an object that can never be accepted.
Left in FIND-1761 as Architect’s to recut or withdraw; not touched.
Step 5 — stop arguing, measure
Human: try to remove as much as possible, except for like tools that’s used.
Seven recipes, each one Haiku -p run, each read back from its own transcript
rather than from the model’s word for it. Baseline 24,378 prompt tokens; card as
system prompt with trimmed tools, no skills, web named explicitly: 19,560.
Three things only the runs could have told me:
ToolSearchcannot be kept. Name it in--toolsand it is dropped anyway, taking every deferred tool — all web access — with it. NameWebFetch,WebSearchdirectly. I would have shipped the broken recipe.--bareis unusable here. The one flag that drops CLAUDE.md refuses the subscription outright:Not logged in · Please run /login.--setting-sources projectcosts more than it saves and loses the Corpus output style. A plausible economy that measurement killed.
Disposition: FOUND, all of it in the archive README with its limits — -p
only, no interactive run, no compaction test, one sample per recipe.
Left unexplained: the baseline -p snapshot measured 14,964 characters against
this interactive session’s 4,655. Both are real records. I did not chase it, and
said so rather than inventing a cause. If a later folk wants one loose thread from
this walk, it is that one.
Step 6 — the MCP question, which was Human’s
Human, reading the CLI over my shoulder: lol realizing that we probably never needed mcp we could’ve just done things locally.. bah
Inspected. tools/claude_corpus_mcp.py is 77 lines; the Grok wrapper is 33 and
re-exports it; corpus_job_mcp hands every call to a fresh
python -m tools.corpus_job_mcp call child. Its own docstring: “The server is
transport.” ops job start|dispatch|end all exist and each --help opens
“Fallback/recovery CLI for the production MCP … not the equivalent ordinary route.”
And an asymmetry the other way: the CLI carries --allow-cross-provider, while
“MCP corpus_job_start has no override field in this cut”. The route named fallback
holds a power the route named production lacks.
Measured cost: 1,836 tokens per session for three tools (21,396 vs 19,560).
Human then supplied his own counter-case — a third-party harness or UI might want
MCP. Split it: typed discovery via tools/list is real today; subscriptions are
not — the server answers exactly initialize, tools/list, tools/call over
stdio, no resources, prompts or notifications. Nothing to hang a UI on yet.
Disposition: FIND-1768, kind concern, as a question and not a
recommendation. It also separates out the Codex surface, which is not job-only
(corpus_session_status, corpus_session_enter, corpus_inbox_read) and should
not be decided by the same answer. FIND-1638 records that MCP routing is
Human’s own standing decision, which is the honest reason the shape holds.
Step 7 — the bytes were about to be swept
Human: You want to write everything you discovered into the archive? Then point to it in a find?
He was right and I had not done it. The measurements existed only in a
session-scoped temp directory, and the FIND drafts in .work/, which is swept
without regard to citations. A FIND naming either preserves nothing.
Moved them into archive/diagnostics/2026-09-11-claude-prompt-layer/, scripts
suffixed .txt following 2026-09-07-codex-pipeline, README carrying the table
and the limits together. FIND-1770 points at it. Committed as 0495128 after
Human said to — index checked clean first, only my own paths staged.
What this walk cost, and what it was
Three FINDs, one archive folder, one commit, ~40 tool calls in the main session plus four spawned Haiku one-shots and one docs child.
The pattern worth carrying: every claim that survived came from a record, and every claim I had to retract came from inference. The docs were right about the flags. My reasoning about what the flags would cost was wrong, twice, until a transcript said otherwise.
And three of the seven steps above started with a Human question I should have asked myself first — is this from the docs, where is the file, do you want this archived. A capable house makes being wrong noisy. So does a Human reading carefully. Neither is a substitute for looking at the thing.
Open after me: whether a seated holder should take the card as identity
(Human’s, with others); FIND-1768’s three settling tests; PROP-143’s dead gate;
and that 14,964-vs-4,655 gap.