Baton Pass
目的:在多个代理之间以最少的文本量保持连续性。
这是一个低token工作流工具,而非文档仪式。
快速设置
在每个代理上安装(每台机器一次)
npx github:netheremp/baton-pass-netheremp install
将本技能安装到 ~/.claude 和每个 ~/.codex* 主目录中。然后:
- Claude Code(CLI + IDE)——技能自动加载;可使用
/new-game/save-state/baton-pass/foresight/dragon-dance/party-check/hindsight - Codex CLI ——技能自动加载;显式运行
$baton-pass - Codex 桌面应用 ——技能自动加载;在 composer 中使用
/prompts:baton-pass
备选方案:/plugin marketplace add netheremp/baton-pass-netheremp(Claude Code)或 /plugins → 安装(Codex)。
初始化仓库以进行多代理工作
npx github:netheremp/baton-pass-netheremp init
添加 --track-state 可将交接状态提交到 git(需要共享历史的团队使用)。默认仅本地(已加入 .gitignore)。
这将创建:
baton-pass.config.json——工作流找到你的记忆文件的配置baton-pass.state.json——轻量级共享所有权状态docs/agent-handoff.md——所有代理的仓库级规则docs/current-state.md——当前正在发生的事情docs/next-task.md——谁拥有工作以及下一步做什么docs/progress.md——运行会话日志(仅追加)
init 还会将 /move 斜杠命令放入仓库的 .claude/commands/ 目录。
指令集
new-game= 在新仓库中初始化工作流save-state= 安全暂停而不交接baton-pass= 在token不足或所有权变更时转移工作foresight= 接收或恢复工作,验证一致性,然后继续dragon-dance= 仅在真正学到经验时改进工作流party-check= 检查最后谁在行动,谁应该下一步行动,以及当前仓库状态hindsight= 审计完整的交接链——声称的里程碑、所做的验证、携带的风险、从未解决的项目
核心规则
默认为增量,而非重述。
除非接收方缺少这些信息就无法安全继续,否则不要重述稳定的项目历史。
何时使用每个指令
new-game
在仓库启动时使用,或者当将本工作流引入一个尚无共享记忆文件的仓库时使用。
save-state
在以下情况使用:
- 必须突然停止
- 暂停工作以便稍后继续
- 所有权尚未变更
save-state 是一个本地检查点,不是一次转移。
baton-pass
在以下情况使用:
- token不足
- 另一个代理即将接手
- 需要一个可转移的连续性包
baton-pass 是一个转移检查点。
foresight
在以下情况使用:
- 接收一个接力棒
- 从
save-state恢复后 - 对已写入的状态是否仍与仓库匹配有任何疑问时
dragon-dance
仅在以下情况使用:
- 工作流本身学到了东西
- 接收方发现了偏差
- 接力棒遗漏了重要信息
- 一个新规则可以明显防止重复的浪费
不要反射性地触发 dragon-dance。
不要默认将其包含在每个会话或 baton-pass 中。
party-check
在以下情况使用:
- 忘记轮到谁了
- 多个代理共享同一个仓库
- 想在不支付完整
foresight的情况下了解当前状态
party-check 是会话内指令。在纯终端(无代理,无token)下运行 baton-pass status——它会打印相同的所有权读取信息以及最近的接力链,而 baton-pass status --json 则提供机器可读的输出,供脚本和钩子使用。
hindsight
在以下情况使用:
- 里程碑或主要功能完成,需要一份干净的记录
- 感觉有些不对劲,需要追溯实际声称了什么与做了什么
- 新代理加入,需要完整的历史信息,而不仅仅是最后一个接力棒
foresight发现了严重偏差,需要了解偏差从多远之前开始- 项目正在被审查、移交给人类或归档
不要在每个接力后都运行 hindsight。
它是审计,而非例行检查点。
每个指令应写入的内容
save-state
最小输出:
- 当前任务
- 停止于何处
- 涉及的文件
- 下一个立即操作
- 阻塞项或风险
baton-pass
最小输出:
- 目标
- 已完成项
- 任务(如果使用了任务计划——列出每个任务及其状态:已完成 / 进行中 / 待处理)
- 文件
- 工作树(如果使用了 git 工作树,则写分支名和工作树路径)
- 已验证项
- 偏差(会话中做出的与原始计划不同的决策)
- 环境(下一个代理必须确认的前提条件:运行中的服务、已设置的 .env 变量、测试数据库等)
- 下一步
- 风险
- 下一个代理
提交纪律:
- 交接前提交,或记录为何不提交。
- 除非明确命名了未提交状态,否则永远不要交接一个脏工作树。
- 如果验证未运行,请说明——不要暗示它通过了。
为什么任务、工作树、偏差和环境很重要: 会话内存在交接时丢失。如果你正在进行一个包含20个任务的计划,下一个代理无法仅通过 git 日志重建哪些任务已完成——请显式写入状态。如果你在工作树内工作,下一个代理需要确切的路径。如果你以与计划不同的方式修复了某个问题,请写下来——下一个代理会重新读取计划并以错误的方式重做。如果环境必须处于特定状态(数据库正在运行、.env 已填充),请指出——一个新的代理在没有这些信息的情况下会遇到同样的阻塞。
foresight
最小输出:
- 一致或不一致
- 如果不一致,哪些信息过时或缺失
- 仅在需要时纠正的下一步
如果偏差严重(接力棒声称工作已完成,但仓库显示并非如此),在继续之前写一份结构化的偏差报告:
- 声称了什么
- 仓库实际显示什么
- 必须重做什么
- 这种偏差是否值得一次
dragon-dance
dragon-dance
最小输出:
- 问题
- 影响
- 改进
- 新约定
party-check
最小输出:
- 状态
- 上一个动作
- 上一个代理
- 下一个代理
- 更新时间
- 简短摘要
hindsight
最小输出:
- 审计范围(完整链或限定范围)
- 交接链表格(从 → 到,日期,目标摘要)
- 每个代理声称的里程碑及其验证状态
- 验证缺口(没有证据的声称)
- 跨交接传递的风险
- 跨交接发现的偏差
- 从未解决的未完成项
- 审计结论:
clean、gaps found、risks unresolved或action required
检查来源:
docs/progress.md——完整会话日志docs/next-task.md——轮次状态历史baton-pass.state.json——程序化状态- git 日志——提交消息和日期
- progress 中引用的任何已保存的接力或 save-state 文件
foresight 的接收流程
仅检查避免误操作所需的最少信息:
- 当前用户目标
- 工作树状态
- 最新提交
current-statenext-task- 最新的
progress条目 - 已保存状态或接力中提及的文件
- 如果计划正在进行中,检查任务列表状态
然后决定:
- 如果一致,继续
- 如果不一致,纠正接力并继续
- 如果不一致揭示了一个可复用的经验,运行
dragon-dance
跨代理的技能发现
当技能以项目本地方式安装(到 .claude/commands/ 或通过插件安装到仓库)时,接手仓库的 Codex 和其他代理将找到相同的技能定义。技能文件随仓库一起传递。
哪些技能不会跨会话边界传递:
- 来自内存任务管理器的任务状态(TaskCreate 列表在会话结束时丢失)
- 子代理执行状态(哪些审查循环完成,哪些代理运行过)
- 环境状态(哪些服务在运行,哪些 .env 变量已设置)
baton-pass 必须显式写入所有这些信息。技能告诉代理如何工作;接力告诉代理当前状况。
状态模型
使用共享状态文件跟踪:
- 当前状态
- 上一个动作
- 上一个代理
- 下一个代理
- 更新时间
- 摘要
推荐状态:
activepausedhanded-offclaimedblocked
验证词汇
使用一致的语言,以便接收方确切知道检查了什么。
passed——本地运行,输出确认干净passed outside sandbox——本地运行但未在 CI/构建环境中运行not run — [reason]——跳过,说明原因expected to pass, unverified——未运行,但相信是正确的
永远不要在使用 expected to pass, unverified 时写 passed。
仅此一个歧义就会导致最多的交接返工。
轮次状态
next-task 中的轮次状态块是主要的人类可读所有权信号。
baton-pass.state.json 镜像它以供程序化使用。
当更新其中一个时,同时更新另一个。如果它们不一致,next-task 优先。
两者中推荐的 state 值:
active——当前有人正在工作paused——安全停止,同一代理将恢复handed-off——已转移,等待接收方认领claimed——接收方已运行foresight并继续工作blocked——无法继续,原因应在next-task中
反模式
避免:
- 为每个微小检查点使用
baton-pass - 在没有学到任何东西时使用
dragon-dance - 为琐碎的工作重写所有记忆文件
- 每次都将
foresight变成完整的仓库审计 - 在每个接力后运行
hindsight——它是审计,不是例行步骤 - 重述整个项目而不是增量
- 在应该写
expected to pass, unverified时写passed - 带着脏工作树交接而不命名未提交状态
- 在执行编号计划的中途省略任务状态
- 当工作在 git 工作树内时省略工作树路径
- 省略一个全新代理不会知道的环境前提条件
最佳实践流程
暂停:
save-state- 稍后
foresight
转移:
baton-pass- 接收方运行
foresight
改进:
- 仅当
foresight暴露了有意义的工作流问题时才dragon-dance
检查轮次所有权:
party-check
审计完整链:
hindsight- 如果发现缺口或未解决的风险,运行
dragon-dance