Trust boundary
Constant does not claim shared native memory between agent CLIs. It reads visible local session evidence and authors a new session that the target runtime can resume. It still moves conversation content across a trust boundary, so read this before using it on sessions you care about.
Originals are seeds, never targets (F1)
A switch never overwrites your original session. Constant reads it as a seed and maintains its own Constant-owned projections per thread, kept in sync as you switch back and forth. A codex to claude to codex round trip leaves your untouched original plus exactly two stable projections: no proliferation, no silent data loss. All writes are atomic — a tmp sibling is written, fsynced, and renamed into place — so a crash mid-switch cannot destroy the newest turns.
What Constant writes
~/.claude/projects/<cwd-slug>/<id>.jsonl
~/.claude/history.jsonl
~/.codex/sessions/YYYY/MM/DD/rollout-<timestamp>-<id>.jsonl
~/.codex/session_index.jsonl
~/.codex/state_5.sqlite
~/.constant/trail.jsonl
~/.constant/snapshots/<conversation>/chNN-from-<runtime>.json (the record, 0700)OpenCode is never written directly: Constant hands export-shaped JSON to
opencode import, opencode's own validated door, and reads its store with
read-only sqlite queries. Gemini stores are read-only (carry source).
Command write behavior
| Command | Writes? |
|---|---|
doctor | reads CLI/version/store presence only |
status | reads runtime readiness, latest sessions, the trail |
trail, route, snapshots, ps | read the ledger, projection paths, the record, the process table |
sessions | reads metadata; --titles also reads transcripts |
carry --dry-run | reads and distills, writes nothing |
carry | writes a record snapshot, a target-native projection, and the trail |
host | writes only when you switch runtimes |
resume | re-hosts; reprints a projection from the record only if all are gone |
restore | mints a fresh native session; never overwrites anything |
rename | updates the ledger and re-stamps native picker titles |
pack | writes only the requested bundle file |
unpack | adds volumes and ledger rows; never overwrites existing volumes |
export | writes only the requested --out file, or stdout |
Redaction
Constant redacts common secrets from carried text — API keys, AWS access keys,
PEM private-key blocks, JWTs, tokens, auth headers, emails — and strips runtime
scaffold (system prompts, skill/plugin/memory blocks). With --with-tools,
every string inside tool payloads goes through the same redactor set. Redaction
happens before the record snapshot is written, so the record holds only
redacted text. See What carries.
Limits
Constant is early, alpha software. Session formats are private and can change between runtime releases; Constant has round-trip tests for the current shapes (CI runs them against the real opencode binary), but a runtime update can require a codec refresh. Validated against codex 0.139.x, claude 2.1.x, opencode 1.14.x, and gemini 0.40 (source only).