Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Baton 🏃

在 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

选择 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 启动,没有多余进程

Session 选择器

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/ -v

License

MIT

About

Relay conversations between Claude Code and Codex in the same directory. One command to switch tools with full context preserved.

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages