Once #258 and the token-burn stack (#230, #257) have both landed, hook.py's transcript(), seed_cursor() and leave_transcript() need to follow each harness's layout. Today they assume Claude Code's.
- Codex: a subagent's hook carries the parent's
transcript_pathand anagent_id, andtranscript()builds a Claude-style<session>/subagents/agent-<id>.jsonlpath that does not exist. The subagent's rollout is its own file, named onSubagentStopasagent_transcript_path, andpostalready finds it fromCODEX_THREAD_ID. - Gemini CLI: a subagent's chat is
chats/<parent session>/<session>.jsonl. ItsSessionStartshould seed the cursor as Claude Code's does. - Cursor and Copilot CLI: the hint is left after the tool runs, so a context's first
posthas none, and the rest name the right transcript only iftranscript_pathis in the payload.
An integration test should run a session through the hook and then post, for each harness with a reader.