交接棒 · 断点续传协议
把「任务中断恢复」从靠模型即兴总结,升级为有清册、有监交、有回执、可校验的交接制度。
和财务交接班同一个逻辑:不是"口头说说你接着干",而是填完移交清册、监交人签字、接管人点收核对。没办清交接手续,不得交接(财政部《会计基础工作规范》第五十四条)。
何时触发
- 上下文估算使用率接近阈值,准备主动落盘(不是等快满)
- 要换会话 / 任务要交给另一个 agent / 派 subagent 去做一块活
- 连续失败、检测到在打转
- 用户说"交接""中断了""接着上次那个做"
- 要恢复一个被中断的任务:先读
<root>/.workbuddy/handoffs/LATEST.md
宪法七条(先读,再动手)
| # | 铁律 | 出处 |
|---|---|---|
| 1 | 清醒时落盘,不等自动压缩 | Anthropic 坦承 autocompact 触发时"恰恰是上下文最长、模型表现最打折的时候"——你让一个已经走神的模型决定什么该留 |
| 2 | 清册是字段,不是散文 | Chroma 实测 18 个模型:结构连贯的叙事反而持续损害表现,打乱顺序反而更好 |
| 3 | 未了事项必须书面化 | 《会计基础工作规范》第五十六条:对未了事项写出书面材料 |
| 4 | 失败轨迹隔离但不销毁 | Claude 博客 Rewind:丢了失败的尝试,但让模型总结教训生成交接消息 |
| 5 | 接管必回执 | I-PASS 的 Synthesis by receiver;该单项在干预研究中从 31% 升到 83%,提升幅度最大 |
| 6 | 校验失败要响不要编 | 会计第五十八条:逐项核对点收,不一致必须限期查清。静默产出错误结果比崩溃危险 |
| 7 | 不得另立新账 | 《会计基础工作规范》第二十一条:接管人员应当继续使用移交的会计账簿,不得自行另立新账 |
四类触发时机
| 编号 | 类型 | 判据 |
|---|---|---|
| T1 | 里程碑型 | 完成一个可验证的子任务后 |
| T2 | 阈值型 | 上下文估算使用率达阈值(建议 60%,提前主动) |
| T3 | 交接型 | 任务转给另一个 agent / 新会话 / subagent |
| T4 | 异常型 | 连续失败、或检测到重复动作/打转 |
清册格式
头部必填 1 个:
| 字段 | 说明 |
|---|---|
topic |
任务主题,3-5 个字(上限 20)。跨 workspace 的检索键——清册锁在各自 workspace 里,新会话只能靠主题定位它 |
正文必填 3 个(用出痛感再加,别一次上 8 个):
| 字段 | 说明 |
|---|---|
mission |
一句话任务目标(≤120 字)。它是判断后续一切是否偏航的基准 |
open_loops |
未了事项,逐条可执行。漏了会导致重复劳动,所以必填 |
artifacts |
关键产物路径 + 最近访问的 5 个文件(做法抄 Claude Code compact) |
选填 8 个:done(每条必须附 | evidence: 路径)、decisions(决策 + why)、dead_ends(失败路径 + why,只写结论不写过程)、constraints、next_probe、risks、receipt(接管方回述,恢复时必填)、validator。
头部元数据:version / trigger / session / created_at / severity(stable|watcher|unstable) / est_tokens。
体积预算 1.5K token(估算值,公式 CJK*1.0 + 其余/3.5)。上界依据是 Anthropic 原文"subagent 只回传 1,000-2,000 token 摘要",属设计取值,非本机实测。超预算时的裁剪次序:risks 细节 -> decisions 理由压一句 -> dead_ends 只留一行结论;绝不动 open_loops / constraints / next_probe。
格式契约以 schema.json 为准,校验脚本从它读取规则,不硬编码。
六个命令
PY="python"
HB="$HOME/.workbuddy/skills/handoff-baton/scripts/handoff.py"
# 1) 首次在某个 workspace 建立骨架
"$PY" "$HB" init --root "<workspace>"
# 2) 落盘清册(会先把旧版归档到 archive/)
# --topic 必填:它是跨 workspace 的检索键
"$PY" "$HB" checkpoint --root "<workspace>" --topic "报销单" --trigger T2 --severity watcher \
--mission "一句话目标" \
--open-loop "未了事项一" --open-loop "未了事项二" \
--artifact "src/main.py" --artifact "NOTES.md" \
--done "做完了什么 | evidence: src/main.py" \
--decision "定了什么 | why: 理由" \
--dead-end "试过什么 | why: 为什么不通" \
--constraint "不得修改 X" \
--next-probe "建议的第一个动作"
# 3) 校验(能 FAIL,别只看它绿)
"$PY" "$HB" validate --root "<workspace>" --checked-by "<监交人>"
# 4) 恢复:先看简报,再回述
"$PY" "$HB" resume --root "<workspace>"
"$PY" "$HB" resume --root "<workspace>" --receipt "我的回述"
"$PY" "$HB" resume --root "<workspace>" --show-traces # 按需回放
# 5) 按主题跨 workspace 找清册 —— 新会话接续的入口
"$PY" "$HB" find --topic "报销单" --show
# 6) 列出所有登记过的任务
"$PY" "$HB" list
resume 的行为:清册不可信 -> 拒绝且不给简报;只差回执 -> 给简报但拒绝放行(否则接管方看不到内容就写不出回述,形成死锁);回执在位 -> 放行。
落盘位置
<workspace>/.workbuddy/handoffs/
LATEST.md # 当前活跃清册,默认注入
RECEIPTS.md # 回执台账
archive/ # 历史清册(命名含 session + trigger)
traces/ # 过程原文,默认不注入,按需回放
跟任务走,不跟 skill 走。时间戳本身是"何时该用这条信息"的信号。
跨 workspace 的全局索引在 ~/.workbuddy/handoffs/index.json:只存 topic -> 清册路径 的映射,按主题去重(同主题再落盘是更新、不是新增)。清册本身留在各自 workspace,索引只负责"让新会话找得到"——这是 find 能跨目录定位的依据。
为什么隔离维度是「任务」而不是「会话」:按会话隔离会让"换会话/换模型继续同一个任务"反而找不到清册,违背本技能的初衷。按主题索引则同一任务可跨任意多会话接力,不同任务互不干扰。
回归(能失败的测试才是测试)
"$PY" "$HOME/.workbuddy/skills/handoff-baton/scripts/run_regression.py"
13 条断言(10 条 CLI 用例 + 环境降级契约 + 一致性层 + 跨 workspace 隔离),其中 9 条预期 FAIL。全部断言精确到失败原因 code,防止"因为别的原因碰巧失败"的假红。套件自带自检:用例数不足、预期 FAIL 数为 0、fixture 不足时判套件失效。
改任何校验规则后必须重跑,全绿才算改完。
反模式
| 反模式 | 为什么错 |
|---|---|
| 清册写成流水账 | 踩中 Chroma 实证:结构连贯的叙事损害表现 |
| 等上下文快满才落盘 | autocompact 发生在模型最蠢的时刻 |
| 原始工具输出塞进清册 | 该做 tool result clearing;原文进 traces/ |
dead_ends 混进主线当背景 |
失败轨迹只留结论 + 原因 |
| 清册写成给用户看的汇报 | 它是给未来的自己看的,读者不同写法不同 |
| 恢复后"前面太乱,我重做一遍" | 第二十一条:不得另立新账 |
| 校验只做存在性检查 | 必须做字段一致性 + 账实核对 |
| 占位提示当回执 | 会被静默绕过(R10 就是为这个坑立的) |
与既有 skill 的边界
| skill | 边界 |
|---|---|
wise-forgetting |
管长期记忆该忘什么;本协议只管任务态交接 |
sop-manager |
SOP 库与压缩流水线;本协议是它在执行期的检查点 |
honest-closed-loop |
提供"能 FAIL 的回归"纪律;本协议已按它建套件 |
heartbeat-doctor |
T2 阈值检测可挂它,不重复造监测 |
agent-diplomat / agent-asset-loop |
多 agent 调度;T3 交接型是它们的下游契约 |
l3-token-audit |
token 计量;体积预算靠它量化 |
出处
- Anthropic《Effective context engineering for AI agents》2025-09-29
- Claude 博客《Using Claude Code session management and 1M context》2026-04-15
- Chroma《Context Rot》2025-07-14
- I-PASS:Starmer et al. Pediatrics 2012;129(2):201-204;NEJM 2014;371(19):1803-1812
- 财政部《会计基础工作规范》(令第 98 号,2019 修订)第五节 会计工作交接
完整使用手册(含"怎么做到自动触发"、错误码速查、能力边界)见 references/USAGE.md。
逐份要点、可引用原文与出处见 references/sources.md。
版权与署名
本 skill 由「七仔的AI工具箱」原创,可免费使用与二次分享,转载请注明出处。
方法论溯源自下列公开资料,包内未包含任何受版权保护的原文摘录(references/sources.md 中仅有标注出处的短句引用):
- Anthropic 工程博客《Effective context engineering for AI agents》(2025-09-29)
- Claude 博客《Using Claude Code session management and 1M context》(2026-04-15)
- Chroma 研究报告《Context Rot》(2025-07-14)
- I-PASS 医疗交班协议:Starmer et al., Pediatrics 2012;129(2):201-204;NEJM 2014;371(19):1803-1812
- 财政部《会计基础工作规范》(财政部令第 98 号,2019 修订)第五节「会计工作交接」
上述资料中的思想、方法与公开数据被引用与改造;本协议的具体设计、字段契约与代码为原创。
作者与联系方式
本 skill 由「七仔的AI工具箱」维护。欢迎就技能使用、问题反馈与二次分享交流:
- 微信公众号:七仔的AI工具箱
- 抖音号:七仔的AI工具箱
- CSDN 博客:七仔的AI工具箱
本 skill 可免费使用与二次分享;转载请注明出处「七仔的AI工具箱」。