Carrying a thread
constant carry does the same carry as a host switch, but without opening a
hosted terminal. It writes the target runtime's native session and prints the
resume command.
Sources: codex, claude, opencode (ses_… ids resolve automatically), and
gemini (source only — existing gemini conversations carry out; carrying into
gemini lands after one live check). Targets: codex, claude, opencode.
Preview first
--dry-run reads and distills but writes nothing:
constant carry --from codex --to claude --dry-run
constant carry --from codex --to claude --dry-run --debugCarry
constant carry --from codex --to claude
# carried → claude session 8da587a7 (auth bug · ch02 ← codex · cobalt-37)
# carried 14 turns · dropped 3 tool events · 2 redactions
# resume with: claude -r 8da587a7Then resume in the target runtime with the printed command. The second line is the receipt — every carry declares what crossed, what was dropped, and how many secrets were redacted. The parenthesized stamp is the conversation's name, chapter, and handle.
Carry tool history too
--with-tools (experimental) carries tool calls and results instead of
dropping them — every string in their payloads is redacted, oversized outputs
are capped, and reasoning stays dropped. The receipt then reads
kept N tool events:
constant carry --from codex --to claude --with-toolsContinue vs. new
By default carry continues the current target projection for the conversation.
If codex[1] already has claude[1.1], another carry to Claude updates that
same Claude session. Use --new for a separate continuation:
constant carry --from codex --to claude --new
# codex[1] -> claude[1.2]Target a specific session
Instead of the latest session in the current directory, point at one explicitly:
constant carry --session <path-or-session-id> --to codexMachine-readable output
constant carry --from codex --to claude --jsondistill is kept as an alias for carry, but carry is the public verb.
Next: Sessions & trail.