Your AI coding sessions, freed from tool lock-in.
Start a task in one AI coding tool, finish it in another. Agent Session Migration moves coding-agent sessions between Claude Code, Codex, and ZCode in any direction -- messages, reasoning, and tool-call records included -- so the next tool picks up exactly where the last one left off. No re-explaining the context from scratch.
If you work with AI coding agents, you have probably hit some version of this:
- The quota wall. Your Claude subscription runs dry mid-task. The work isn't done, the context lives in that tool, and your only options are to wait -- or start over somewhere else and re-explain everything.
- The handoff tax. "Just ask the old agent to write a handoff summary" works only while it still answers -- and only as well as its already-compacted memory. Long sessions get summarized into summaries; the reasoning behind earlier decisions is gone.
- Lock-in by accident. Every tool keeps sessions in its own private format under its own directory. Your work history -- arguably your most valuable asset -- is scattered across stores that don't talk to each other.
- No model arbitrage. Want the strong model to design and the cheap one to grind through the CRUD? That only works if context can follow the work across tools. Otherwise you're paying premium prices for tasks a budget model would handle fine.
Agent Session Migration turns "migrate a session" into one click, locally, without uploading anything.
- Session overview -- Scans all Claude Code, Codex, and ZCode sessions on your machine into a single list, sorted by recent activity, with source badges plus per-source filters and search. Click any session to preview the full message stream.
- One-click migration -- Convert any session to any of the three tools (all six directions are supported). Migration only creates new files or new database rows; your existing sessions are never touched.
- Seamless continuation -- After migrating to Claude Code or Codex, copy the resume command the app hands you (or open it in Terminal with one click) and keep working with full context. Migrating to ZCode opens the ZCode desktop app, where the session appears in your task list.
Requirements: macOS 11 or later and a recent Rust toolchain. Windows and Linux builds are on the roadmap.
cargo build --release
./scripts/build-app.sh # produces dist/AgentSessionMigration.app
open dist/AgentSessionMigration.app # or double-click the app in FinderTo migrate a session:
- Pick a session in the list and review the preview.
- Click the migrate button for the target tool. If the target tool is currently running, the app warns you first and only writes after you confirm.
- Copy the resume command into your terminal -- or let the app open it for you -- and continue the conversation.
Each tool stores sessions in its own format: JSONL files under ~/.claude/projects and ~/.codex/sessions, and a pair of SQLite databases under ~/.zcode/. Agent Session Migration normalizes them through a three-stage pipeline:
reader (parse source format) --> unified IR --> writer (emit target format)
crates/hub-core-- the core library: per-tool readers, the unified intermediate representation, per-tool writers, plus the resume-command launcher and the pre-write safety checks.crates/hub-app-- the native desktop UI (built with egui/eframe).
Everything runs on your machine. The app makes no network requests.
- Local only. No network access, no telemetry, nothing uploaded.
- Additive only. Migration creates new files or new rows. Existing sessions are never modified or deleted.
- Atomic writes. File targets are written to a temporary file and renamed into place; ZCode targets are written inside a single SQLite transaction per database. A failure never leaves a half-written session behind.
- Guarded ZCode writes. Before touching ZCode's databases, the app verifies the schema version (and refuses to write if it does not recognize it) and makes timestamped backups; if a backup fails, the migration aborts.
- Running-tool detection. Writing while the target tool is running risks conflicts or corruption, so the app checks for running processes and asks you to confirm before proceeding.
- Dark mode
- Drag-and-drop migration
- Windows and Linux builds
- Redaction of sensitive data before migration
- Cross-machine session transfer
Issues and pull requests are welcome. To work on the app locally:
cargo test # run all tests
cargo run -p hub-app # run the app in dev mode
cargo clippy --all-targets # lintConversion logic lives in crates/hub-core; the UI lives in crates/hub-app.
Apache-2.0. See LICENSE.