catchup / native resume vs. HANDOFF.md vs. cross-agent handoff

Native resume vs. HANDOFF.md vs. cross-agent handoff

Three ways to carry a coding-agent session forward. Native resume keeps real session state but only within the same agent. A hand-written HANDOFF.md works anywhere but costs you the writing and forgets what you left out. A transcript handoff crosses agents with the conversation and source-marked failures, but never native state.

Native resumeHANDOFF.mdTranscript handoff
Keeps native session stateYesNoNo
Works across different agentsNoYesYes
Effort to produceNoneYou write itNone
CompletenessFullOnly what you rememberedWhole conversation
Context cost in the targetNoneLowProportional to the transcript
Works after the agent is closedUsuallyYesYes

Native resume — the default you should reach for first

When an agent has a CLI resume path, catchup delegates to it rather than reimplementing it:

$catchup fork claude

Without --into, this is the agent's real resume, and what that means differs by agent. Only four have a fork of their own; most of the rest resume the original session in place rather than branching from it, and one has no CLI to resume from at all:

Agent<agent>Same-agent forkWhat it runs
Claude CodeclaudeForks — original untouchedclaude --resume <id> --fork-session
CodexcodexForks — original untouchedcodex fork <id>
OpenCodeopencodeForks — original untouchedopencode --session <id> --fork
Pi Agentpi-agentForks — original untouchedpi --fork <id>
CursorcursorResumes in placecursor-agent --resume <id>
ClineclineResumes in placecline -i --id <id>
KimikimiResumes in placekimi --session <id>
AntigravityagyResumes in placeagy --conversation <id>
Copilot CLIcopilotResumes in placecopilot --resume=<id>
DeepSeek HarnessdeepseekResumes in placedsh --profile tui --resume <id>
ZCodezcodeNo CLI to resumeContinue inside ZCode, or catchup fork zcode --into <agent>

catchup delegates to each agent's real command rather than reimplementing it, so this table tracks upstream. Every agent can be read, searched, and used as the source of a handoff. Claude Code, Codex, Copilot CLI, Cursor, Cline, Antigravity, OpenCode, and Pi Agent can be launched as interactive --into targets.

If you are staying in one agent and it is still running, you do not need a tool. Use the agent's own resume. catchup is worth installing for the cases below — crossing agents, crossing machines, or not remembering which session held the work.

HANDOFF.md — a summary you write yourself

The common workaround: before switching, write a Markdown file describing where things stand, then paste it into the next agent. It is portable and short, and the act of writing forces you to decide what matters.

The costs are that it takes time exactly when you have least of it, and it can only contain what you thought to include. A decision made forty messages ago that turns out to matter is simply gone.

Transcript handoff — what catchup does

The conversation already exists on disk. Rendering it costs nothing:

$catchup fork claude --into codex --since-compact

A direct handoff includes the conversation and source-marked failed tool calls. Successful tool activity and reasoning traces stay out, so it is a briefing rather than a raw execution log. Because stdout is the wire format, a clean transcript can also cross machines:

$ssh box catchup codex | catchup fork --into claude --from -

The tradeoff is length. A transcript is bigger than a summary you would have written, which is why --since-compact and --last <N> exist.

Questions

When do I not need catchup at all?

When you are staying in the same agent and it has not stopped. Every CLI agent catchup reads ships its own resume, and using it directly is simpler. catchup earns its place when you are crossing agents, crossing machines, or cannot remember which session held the work.

Is a hand-written HANDOFF.md worse than a transcript?

Not worse, different. A summary you wrote is shorter and reflects your judgment about what mattered; a transcript is complete but longer and includes detail nobody needs. The transcript's advantage is that it costs nothing to produce and cannot forget something you did not think to write down.

Which agents can actually fork a session rather than resume it?

Claude Code, Codex, OpenCode, and Pi Agent have a fork of their own, so continuing leaves the original session untouched. Copilot CLI, Cursor, Cline, Kimi, Antigravity, and DeepSeek Harness resume in place. ZCode has no CLI resume. All eleven can supply a handoff; Claude Code, Codex, Copilot CLI, Cursor, Cline, Antigravity, OpenCode, and Pi Agent can be launched as interactive targets.

Can any tool move native session state between two different agents?

No. Agents store different things in incompatible formats, so nothing can reconstruct one agent's internal state inside another. Anything crossing agents carries a transcript. Only same-agent resume preserves real state.