ork · session-identity diagnosis

Auto-rename & color don't land — and the data says why

The haiku titler works: it produces a good name 81% of the time. But the result is pulled lazily on the next prompt — which usually never comes in time — so only 7% of sessions ever wear it. Color was never live-settable from a hook at all. Numbers below are real, from 687 sessions since 2026-06-12.

7.3%
sessions that actually got their AI title
81%
haiku produced a valid title (the AI works)
506
good titles thrown away by the lazy pull
0
hook fields that can set live color
§ The funnel — where 687 sessions leak
Generator spawned
687
haiku returned a valid {title}
556
hard-failed "Prompt is too long"
86
title adopted into the session
50
color record persisted (resume only)
70
⚠ The gap between 556 produced and 50 adopted is the disease: 506 perfectly good titles sit in session-identity.raw and are never pulled, because the harvest waits for a next prompt that the session never sends.
§ Replay a real session — toggle Today vs the Fix
how it behaves now
claude — orchestkit
(untitled session)
live prompt bar
STEP 1 / 4

First prompt submitted

step 1 of 4
§ Fix options — pick the combination
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