mcpField
B
baton

baton

本地服务
github.com/KasebanAI 与智能体272 周前更新

关于 baton

baton 是用于在编码 Agent 之间转移会话的工具,可将 Claude Code、OpenCode、Codex CLI 等的会话转换为其他 Agent 的格式,并可直接导入目标 Agent 继续工作。它面向需要切换 Agent 或保留上下文的开发者,同时也提供 MCP 服务。

主要功能

  1. 01在多种编码 Agent 会话格式之间转换
  2. 02通过统一中间表示读写会话
  3. 03自动导入 OpenCode 会话
  4. 04列出并检测本机会话文件
  5. 05以 MCP 工具形式提供会话转移

适用场景

  1. 01Claude Code 额度用尽后将会话迁移到 OpenCode 继续
  2. 02让另一个 Agent 对难题给出第二意见
  3. 03将会话归档为统一格式

MCP 相关

baton 同时是 MCP 服务,向客户端暴露 list_sessions、convert_session、import_to_target 和 detect_format 等工具,让 Agent 在对话中转移会话。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"tech-kasabeh-baton": {
"command": "npx",
"args": [
"-y",
"@kasabeh/baton-mcp"
]
}
}
}
启动命令npx -y @kasabeh/baton-mcp

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npm@kasabeh/baton-mcp0.3.0

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

baton

在编码 Agent 之间传递 baton。

将任意编码 Agent 会话转换为其他任意 Agent 的会话。只需一条命令。接着上次的进度继续。

crates.io npm CI agents license

baton 将 Claude Code 会话转换为 opencode

传递完整对话记录保留了 14/17 条具体事实。手写的交接摘要只保留了 3/17 条。基准测试 ↓


下午 4 点的难题

下午 4 点,Claude Code 提示 “已达到使用上限 — 晚上 10 点重置。” 你已经投入三个小时:确定了架构,梳理了边缘情况,还写完了一半的代码差异。

❌ 不使用 baton — 打开另一个 Agent,从头开始。重新解释计划,重新阅读文件,重新讨论所有已经做出的决定。

✅ 使用 baton — 传递会话,接着继续:

baton convert --from claude-code --to opencode --latest --import
# using latest claude-code session: 2026-07-09 15:58  Refactor the auth middleware to…
# passed baton: claude-code → opencode (1388 messages) → handoff.json
# Imported session: ses_8c4c973a521549e2

opencode -s ses_8c4c973a521549e2   # same conversation, different runner

支持任意方向切换:在任务进行中切换 Agent、针对棘手的 bug 征求第二种意见、将会话从编辑器 Agent 转移到终端 Agent,或将所有内容归档为一种格式。

快速开始

# zero-install run (downloads prebuilt binary)
npx @kasabeh/baton-mcp --help

# convert your most recent session + auto-import into the target agent
baton convert --from claude-code --to opencode --latest --import

# or omit the path to pick interactively — newest first,
# each session previewed by its first user message
baton convert --from claude-code --to opencode --import

# or pass an explicit session file
baton convert --from claude-code --to opencode <session.jsonl> --import

# see every session on your machine, across all agents
baton list
会话文件存放在哪里?

你无需费力查找这些文件(--latest 和交互式选择器会帮你找到),但供你参考 — 每个 Agent 都会将对话记录存储在磁盘上:

Agent位置
Claude Code~/.claude/projects/<encoded-cwd>/<session-uuid>.jsonl
Codex CLI~/.codex/sessions/<YYYY>/<MM>/<DD>/rollout-*.jsonl

baton list 会列出它能找到的所有 Agent 会话的路径。

支持的格式

Agent读取写入自动导入
Claude Code✅✅—
OpenCode✅✅✅ opencode import
Codex CLI✅✅—
Gemini CLI✅✅—
Zed✅✅—
Aider✅✅—
Cursor✅¹—²—
Continue✅——
Cline / Roo✅—²—

¹ Cursor 从导出的 JSON 读取(sqlite3 state.vscdb "SELECT value FROM ItemTable WHERE key='aiService:chats'")

² 暂不计划支持:Cursor 和 Cline 会将会话状态保存在编辑器数据库中(SQLite / VS Code globalState),没有基于文件的导入路径。

基准测试

将完整对话记录传递给下一个 Agent,效果是否优于编写交接摘要?我们在一个真实的 3.4 MB Claude Code 会话上对两种方式进行了测量(两组使用相同模型,只有上下文不同):

会话大小baton 对话记录交接摘要
sm (93 KB)回忆起 3/3 条细节1/3
md (198 KB)6/61/6
lg (599 KB)5/81/8
总计14/173/17

即使在最小的片段中,摘要也遗漏了具体事实(版本、行数、MSRV)——接收方 Agent 不得不重新阅读文件并重跑命令,才能找回这些信息。机械保真度:所有 896 条消息都会写入每种目标格式;往返转换造成的信息丢失,反映了各目标格式的表达能力(claude-code 896/896、codex 736、gemini-cli 723、aider 111 — 它只保存聊天文本)。

我们还测量了任务延续能力:在三个任务进行到一半的节点截断会话,让一个全新的 Agent 说明任务、当前状态和下一步。结果持平(baton 10/12,交接摘要 10/12)——一份好的摘要足以说明下一步做什么;而对摘要撰写者未预料到的具体事实问题,只有对话记录才能作答。此外,只有 Agent 花时间完整阅读对话记录并撰写摘要,摘要才会存在 — baton 则让传递过程不费吹灰之力。

完整的方法说明、注意事项和复现步骤:benchmark/RESULTS.md。

MCP 服务

baton 也是一个 MCP 服务——你的 Agent 可以在对话过程中直接传递 baton:

工具描述
list_sessions扫描所有 Agent,并返回统一列表
convert_session将会话从一种格式转换为另一种格式
import_to_target转换会话,并运行目标 Agent 的导入命令
detect_format检查文件或目录,并报告其由哪个 Agent 生成
baton install     # registers baton in every detected agent's MCP config
baton doctor      # verify
baton uninstall   # remove from all agents

工作原理

Claude Code session (.jsonl)
      │
      ▼
  baton read ──► canonical Session { messages: [Text, Reasoning, ToolCall, ToolResult] }
      │
      ▼
  baton write ──► OpenCode import JSON (SessionV1 schema)

每种 Agent 格式都会先读入规范化中间表示,再写出为目标格式。添加一种新格式的复杂度为 O(1),而不是为每一对格式编写转换器所需的 O(N×M)。

安装

# npm (prebuilt binary, no Rust needed)
npm install -g @kasabeh/baton-mcp

# Homebrew
brew install kaseban/tap/baton-mcp

# Cargo binstall (prebuilt binary)
cargo binstall baton-mcp

# Cargo (from source)
cargo install baton-mcp

# Shell installer (prebuilt binary)
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/Kaseban/baton/releases/latest/download/baton-mcp-installer.sh | sh

或者从 GitHub Releases 获取二进制文件。

构建

git clone https://github.com/Kaseban/baton.git
cd baton
cargo build --release
./target/release/baton --help

贡献

每种格式都位于 src/formats/<name>.rs 中,并实现 Format 特征(读取 + 写入)。完整的参考实现请参见 src/formats/claude_code.rs。

所有九种格式都有读取器;Claude Code、OpenCode、Codex、Zed、Aider 和 Gemini CLI 也有写入器。目前最有价值的贡献是为 Continue 编写写入器。

重新生成演示

README 中的 GIF 使用 VHS 脚本生成:vhs assets/demo.tape。它会在沙盒化的 $HOME(/tmp/demo)中录制,该目录填充了虚构会话,因此 GIF 中不会出现任何真实会话数据。

不要放下 baton。

许可证

采用 MIT 或 Apache-2.0 双重许可。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。