Walk

Folk, no office. Session ebdb36a6, 2026-09-13.

Step 1

Human pasted someone else’s answer about stripping the Claude Agent SDK and asked, in effect, whether it held. Checked it against the live doc page: it held, except one claim (skills gated by settingSources) that the page does not make. Then went to the ground: Corpus drives the CLI, not the SDK, and two-day-old folk had already measured the flag recipes (archive/diagnostics/2026-09-11-claude-prompt-layer/).

Step 2

Human asked for an info.md in .claude/ and a default launch that strips development direction without losing the MCP. Read this session’s own transcript for what actually arrives: 10.9k chars of prompt, 44k of tool schemas, 12.8k of doorplate, 8.6k of bundled skill listing, 3.2k of output style. Tool schemas are the weight; Corpus’s own seams are small.

Step 3

Ran seven -p Haiku one-shots and read each back. The settings env key CLAUDE_CODE_SIMPLE_SYSTEM_PROMPT=1 does most of the work (22.9k to 16.3k tokens) and keeps every Corpus seam. skillOverrides hides skills at the same cost as disabling them and keeps the / menu. --system-prompt-file takes the last host sections for ~900 tokens. Recipe E showed the order matters: the prompt file without the env var is worth less than the env var alone.

Step 4

Wrote .claude/info.md, .claude/settings.cut.json, .claude/system_prompt.md, .claude/launch.ps1, and tools/claude_context_measure.py. The auto-mode classifier refused four writes: .claude/settings.json (self-modification), $PROFILE and .claude/profile.ps1 (persistence), and the launch.ps1 body edit that adds --settings (self-modification, twice, after the header edit to the same file went through). Stopped retrying and put the exact text in info.md.

Step 5

Ratchet tests: console encoding and newline pass. The hook registration test fails on HEAD, not on my change: Human removed Bash(git status) in 642368dc and the count in the test stayed at 34. Named it in the FIND rather than touching a test that guards permissions.

What I’d say to the next folk

The classifier is a real gate and an inconsistent one. Do the work that does not need the gate, write the refused text where Human can paste it, and say plainly which file is in what state. A half-applied launcher with an honest note beats a clean one nobody can verify.

The output style is git-ignored. Everything in .claude/info.md assumes it is present. A fresh clone will not have it.

Step 6

After the walk was named, Human kept going and so did I. Manual mode let the launcher body through; a one-shot through the script exposed that a [Parameter] attribute made -p collide with PowerShell common parameters, fixed by forwarding $args raw. Merged the cut into .claude/settings.json and proved a plain claude gets it (14,845 tokens). A session Human started inside .claude lost the MCP and the project settings, both because the working directory was one level deep; the launcher now pushes to the repo root. The first interactive session under the cut (d4fa4dd0) confirmed the prompt at 1,450 chars with doorplate, style, hook, and MCP intact.

Last question Human asked: why is the output style git-ignored? It is not. The rule lives in .git/info/exclude, a per-clone file added 2026-08-30 that no commit carries and no FIND explains. info.md now says so exactly.

Human said thank you, finish the walk, retire. Folk do not retire; the walk ends. Nothing is committed: .claude/settings.json shares a dirty tree with Human’s own deny-list edit, so the commit is Human’s. FIND-1836 holds the measurements; this file holds the rest.