RC2 · context blowout
Strip the child's context do first
Spawn the haiku titler so it loads nothing from the project — no MCP, no skills, no agents.
- cwd: os.tmpdir() → no project .claude/ or .mcp.json
- --strict-mcp-config --mcp-config '{}' → 0 MCP servers
- Child drops from ~213K → <2K tokens; finishes in ~1–2s
cost: low · kills the 13% hard-fail outright
RC1 · harvest-miss (the big one)
Adopt on turn 1, not "next turn" biggest win
Stop relying on the next prompt to pull the result. Once the child is cheap (RC2), close the gap.
- A — bounded inline wait on turn 1 (≤2s, fail-open) then emit the title that same turn
- B — harvest in the Stop hook to pre-stage, so turn 2 adopts instantly
- keep the lazy pull as a safety net under both
cost: A adds ≤2s to first prompt · lifts 7% → ~80%
RC3 · color is live-impossible
Carry color in the title structural limit
No hook field sets live color — ever. So put the signal in the one live channel we own: the title.
- prefix a semantic emoji: 🔴 fix · 🟢 feat · 🔵 docs · 🟣 infra
- keep the agent-color jsonl append for the /resume picker
- fix path-resolution so persistence beats today's 3.8%
cost: low · honest: live accent stays CC-owned