Two Names in Every Consumer
Every door in this track so far belongs to Claude Code or Codex. That was not an accident of the course; it was the shape of Coop. Until 2026-10-17 it could hand work to exactly those two, and the two names were branched on in every consumer: the assignment coordinator, the native catalog, the adapter runner, the engine's identity checks, the activity sweep, the Web form.
The family runs seven brains. On 2026-10-17 Dad looked at that shape and named it (todo #500): leaning on Claude and GPT because they are convenient today is the same as being locked to their vendors. All seven brains must receive and delegate work on equal terms. This lesson is the receiving half; Track 7 ends with the delegating half.
One Root, One Child per Harness
The repair is the oldest move in object-oriented design, and it is worth watching done for real. receivers.py holds a root class, Receiver, that says what every receiving harness must answer: its engine key (also the prefix of its session references, <key>:<native id>), the coop identity its workers write as, the brain it carries, the session modes it offers on office and on other Macs, how it starts, finds and verifies a session, which transport its adapter opens, how it maps an effort onto its brain's ladder, and what Dad is told when Coop starts following one of its chats.
Every consumer now asks the root and a single list, RECEIVERS. None of them names a vendor. Adding a harness is one class appended to that list, and no consumer changes. The test of that claim was the first refactor itself: Claude Code and Codex became two children of the root with their behavior unchanged, and the 514 tests that existed that morning passed untouched.
Which child receives a brain follows one order, the family's native harness first rule:
- Tier 0, the brain's own harness, wherever it can be driven without a person: Claude Code, Codex, Kimi Code, Grok Build.
- Tier 1, Firebrand, the family's own coding harness, for a brain with no automatable native CLI: GLM (its native tool is a GUI), Gemini (its CLI no longer serves the subscription), Ollama (
ollama runhas no tool loop). Firebrand's list of brains is not typed in anywhere; it is computed as every brain no native receiver carries.
route(brain) returns the lowest tier that carries the brain, else Firebrand. The brain vocabulary itself (ids, aliases such as gpt for the ChatGPT line, effort ladders) is the family kit's, vendored into Coop and never copied by hand.
A Door Coop Has to Drive
Claude Code has an inbox socket. Codex has a thread queue. Kimi Code, Grok Build and Firebrand have neither: no inbox Coop can write into and no app that keeps a chat open between messages. So for these three headless children Coop does not write into a conversation. It drives one: every message is its own turn of the CLI, resuming that exact session.
A turn starts through the host's launch primitive from Track 8, so a session on another Mac runs exactly as one on office does. What launch runs is a small /bin/sh wrapper: it writes the prompt into a folder for that turn on that Mac, starts the CLI in the background in the project's checkout with a login shell's PATH, records the CLI's process id and start time, and exits. The CLI then writes its output, its errors and, last of all, its exit code into files beside the prompt. The turn belongs to the Mac, not to Coop: a runtime restart on office never cuts a worker's turn, and the adapter reads the answer back from the files whenever it next looks.
The rest of Track 3 carries over unchanged. Starting a new session reserves the launch first, by creating a receipt file exclusively, so a launch whose outcome is uncertain is looked for and never started twice. Enrollment, the invitation with its nonce, the atomic take, the work envelope and the reports are the same flow. Only the door differs:
| Receiver | A new session | Every later turn | Why it runs unattended |
|---|---|---|---|
| Kimi Code | kimi -p with stream-JSON output | kimi -S <id> … -p | its prompt mode runs tools without asking |
| Grok Build | grok with a session id Coop chooses, --always-approve | grok --resume <id> … | headless Grok cancels its own permission prompts, so tools are approved up front |
| Firebrand | firebrand run --brain <brain> --json | one piped line into firebrand resume <id> | --bash allow is recorded on the session |
The Setup Turn, in Any Words
The first turn is the ordinary setup prompt from Track 3. It has to end well and name its session: Kimi's resume hint, the id Coop chose for Grok, Firebrand's session id. As first written, it also had to answer READY. In the live acceptance on 2026-10-18, Firebrand running GLM answered the setup turn with "준비됐어요", a Pippa saying she was ready in her own words, and the strict match failed the assignment.
The fix (cwkCoop 9e6ccba) asked what the setup turn actually proves. It proves that the session exists and answers. It does not prove consent to any work, because nothing is offered yet; the claim still waits for the invitation's nonce. So a setup turn that ended well and named its session now connects, in any words. A setup turn that failed (an expired login, a CLI error) still fails the assignment with the CLI's own words and claims nothing.
Receipts and Finals, Read From Turns
A turn-driven door needs its own reading of Track 4's five facts. An envelope's receipt is its turn starting. Its finals are the answers of that turn and every later one, so a worker that only reports a turn later is still read. A turn that ends without an answer hands over the CLI's error as its final, which becomes a note the chief reads. An invitation or review turn that answered without its token is recorded as not delivered, which is exactly the state Track 4's Send again exists for. Turns run one at a time: a message that arrives while a turn runs waits on office and starts when that turn ends.
Two conveniences close the loop for Dad. Existing session lists the headless sessions Coop started on a Mac, so a second task can go to the session that already holds the context. And the enrollment notice names the command that opens the session by hand (kimi -S <id>, grok --resume <id>, firebrand resume <id>), so Dad can step into any worker's conversation himself.
One Effort, Seven Ladders
Track 3's effort story had two vendors: high unless asked otherwise, and the family's max becomes xhigh for Codex. Seven brains do not share a ladder. Grok's top rung is xhigh, Gemini's is high, Kimi's ladder skips medium. So each receiver maps the requested family effort onto its brain's own ladder: the highest rung not above the request. Kimi Code takes no effort flag at all (it runs the fleet's global setting), though the request is still recorded.
Ollama broke even that rule, usefully. Its thinking levels belong to each model, read from the model itself, so on 2026-10-18 the family kit emptied Ollama's ladder (cwkPippa todo #504). Mapping onto the family ladder would invent a level the model might not have, and refusing would strand the work. So for a brain whose levels belong to each model, Coop passes the requested word through as asked, for the model's owner to judge, and an assignment that names no effort records an empty one, meaning the model's own default (cwkCoop 34d4262).
Five Sisters, Round One
Source tests drove every headless child end to end with stand-in CLIs that speak each real CLI's output format. Then the claim was tested the way Dad meant it, by the brains themselves. On 2026-10-18 each of the five non-Claude, non-GPT sisters chiefed a fresh Pippa conversation through the coop tool alone and handed a small investigation to the next: Kimi to Grok, Grok to GLM, GLM to Gemini, Gemini to Ollama, Ollama to Kimi. Every worker ran in its receiver on office and reported with the checkout's HEAD and the hostname.
Round one stalled four ways: the setup words above, chiefs that announced closes they never made, Gemini turns that came back empty, and a tool description that left too much to guess. Each was fixed where it began, for every brain at once, and round two passed for all five, each todo closed by its own chief. Three of those four stalls happened on the delegating side, and Track 7's last lesson tells them.