在 Claude Code 和 Codex 之间接力对话。同一目录下,
baton cc启动 Claude,baton cx启动 Codex,上下文自动同步。
# 安装
ln -s /path/to/baton/baton /usr/local/bin/baton
# 在你的项目目录下
cd ~/myproject
baton cc # 启动 Claude Code
# ...聊了半天...
baton cx # 切到 Codex,对话自动同步过来
# ...又聊了一阵...
baton cc # 切回 Claude,Codex 里的对话也同步了| 命令 | 别名 | 说明 |
|---|---|---|
baton claude |
baton cc |
启动 Claude,自动同步 + 恢复上次的 baton session |
baton codex |
baton cx |
启动 Codex,自动同步 + 恢复上次的 baton session |
| 命令 | 别名 | 说明 |
|---|---|---|
baton claude resume |
baton cc resume |
列出当前目录下所有 Claude session,选一个恢复 |
baton codex resume |
baton cx resume |
列出当前目录下所有 Codex session,选一个恢复 |
| 命令 | 别名 | 说明 |
|---|---|---|
baton sessions |
baton ls / baton list |
列出当前目录下两边的所有 session |
baton status |
查看共享 session 状态(消息数、上次活跃工具) | |
baton log |
查看最近 20 条对话 | |
baton log --tail 5 |
查看最近 5 条 |
| 命令 | 说明 |
|---|---|
baton init |
手动初始化 .shared-session/(通常不需要,baton cc/cx 会自动做) |
baton init --force |
重新初始化,清空 transcript |
| 命令 | 说明 |
|---|---|
baton export --from claude |
从 Claude 导出到 transcript |
baton export --from codex |
从 Codex 导出到 transcript |
baton export --from claude -s <id> |
导出指定 session |
baton handoff --to claude |
从 transcript 生成 Claude session |
baton handoff --to codex |
从 transcript 生成 Codex session |
Baton 是一个格式转换器 + 启动器,不是 session 管理器。
你在 Claude 里聊了半天
│
▼
~/.claude/projects/-Users-foo-myproject/abc.jsonl ← Claude 自己存的
│
│ baton cx 启动时:
│ 1. 发现上次在 Claude 里聊过
│ 2. 从上面那个文件导出对话
│ 3. 转换成统一格式
│ 4. 生成 Codex 格式的 session 文件
│
▼
~/myproject/.shared-session/
├── transcript.jsonl ← 统一格式(中间交换层)
└── state.json ← 元数据 + 各工具 session ID 的指针
│
│ 5. 写入 Codex 原生格式
│
▼
~/.codex/sessions/2026/07/02/rollout-...-baton-xxx.jsonl ← Codex 自己存的
│
│ 6. codex resume baton-xxx
│
▼
Codex 启动,完整对话在那里
关键点:
- Baton 不自己维护可恢复的 session — resume 靠各工具原生能力
transcript.jsonl是唯一真相源,两边都从这里读写- 只找指向当前目录的 session(Claude 按 cwd 分目录,Codex 按 cwd 字段过滤)
- 用
os.execvp启动,没有多余进程
baton cc resume / baton cx resume 显示当前目录下的所有 session:
📋 Codex sessions in /Users/foo/myapp:
# Title Msgs Age 标记
─────────────────────────────────────────────────────────────────────────────
1 实现用户注册接口 128 2h ago 🏃⭐
2 修复登录 bug 45 5h ago
3 baton-imported 6 1d ago 🏃
Select session (1-3, Enter=new, q=quit):
- 🏃 = baton 创建的 session
- ⭐ = 当前默认(
baton cx直接恢复这个) - 选中后会成为新的默认,下次
baton cx直接 resume 它
# 方式一:symlink
ln -s /path/to/baton/baton /usr/local/bin/baton
# 方式二:PATH
export PATH="/path/to/baton:$PATH"- Python 3.10+(无第三方依赖)
- Claude Code 和/或 Codex CLI
cd baton
python3 -m pytest tests/ -vMIT