catchup / continue a Claude Code session in Codex

How to continue a Claude Code session in Codex

Run catchup fork claude --into codex. It reads the newest Claude Code session in the current directory, strips the tool calls and reasoning traces, and starts Codex with the remaining conversation as its opening prompt. Codex picks up knowing what was already decided.

$catchup fork claude --into codex

What crosses, and what doesn't. Going from one agent to another carries the conversation, not native session state. Codex opens a new session seeded with the Claude Code transcript. Nothing recreates Claude Code's internal state inside Codex, and no tool ever could — the two store different things in different formats.

Keeping the prompt small

A long refactor produces a transcript larger than you want to spend context on. Trim it before it is handed over:

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

Handing over a session that isn't the newest

By default catchup takes the most recent Claude Code session in the current directory. To choose another one, find it first:

$catchup --list

That lists recent sessions here across every agent. -q "rate limit" filters by keyword, claude/3 selects the third-newest Claude Code session, and --id <id> takes an exact one. See finding an older session.

Crossing machines instead of agents

The transcript is just text on stdout, so a file or a pipe is the transport:

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

--from accepts a file, - for stdin, or an http(s) URL, so the session Claude Code wrote on one machine can seed Codex on another.

Going the other way, and every other pair

The direction is symmetric — swap the two agent names:

$catchup fork codex --into claude

Any supported agent can be either end: Claude Code, Codex, Cursor, Cline, Kimi, Antigravity (agy), OpenCode, and Pi Agent. Every flag on this page works the same regardless of which pair you use.

Restarting the same agent cleanly

If the context is spent but the work isn't, and you want Claude Code itself to carry on with a fresh, smaller context rather than its accumulated one, point --into back at the same agent:

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

That restarts it clean, seeded with just the recent work. To instead resume with Claude Code's real session state, drop --into and run catchup fork claude — see the comparison.

Questions

Does Codex get the real Claude Code session state?

No. Crossing agents carries the transcript, not native session state — Codex starts a fresh session whose opening prompt is the Claude Code conversation. Native state is preserved only when you resume the same agent, with catchup fork claude.

What if the Claude Code session is too long to paste into Codex?

Trim it before it is sent. --since-compact keeps only the tail after the last compaction, and --last <N> keeps the last N exchanges. Both work with --into.

Do I need Claude Code and Codex installed on the same machine?

For the one-command form, yes: catchup reads Claude Code's local history and launches the codex binary. To cross machines, write the transcript to a file with catchup claude > handoff.md, move it, then run catchup fork --into codex --from handoff.md on the other side.