A hook delivers context, not a turn
Claude Code and Codex both take their handoff through a SessionStart hook. It is the cleanest road in — the delta arrives inside the conversation, with nothing pasted in front of it, and I was pleased with how quiet it was.
Too quiet. The agent came up holding the entire context and with nothing to answer, so it sat there. Every switch ended with a human staring at an idle prompt, typing something like "go on" to wake it up. The context had arrived perfectly and the work had stopped.
Both agents now get a one-line opening prompt whenever delivery went by hook. It carries no delta of its own, so a handoff can never land twice. Loading the state and starting the turn are two different jobs, and I had only built the first one.