Handoff 不是总结,是下一位 Agent 的接力棒

Skill first:skills/writing/handoff

长会话最危险的地方,不是上下文变长。

危险在于交接时大家以为“总结一下”就够了。总结给人看,handoff 给下一位 agent 执行。这两件事完全不同。

所以我把 handoff 做成一个固定 skill。它只做一件事:把当前任务、已确认事实、未完成事项、风险和最值得立刻做的下一步,写进一个 dated markdown 文件。路径默认是 ./handoff/YYMMDD-handoff.md

这不是漂亮话。

这是协作接口。

接力路径

1. 先把长会话里的状态压成可验证事实。

2. 再写入 handoff/YYMMDD-handoff.md

3. 最后给下一位 agent 一个最具体的第一步。

第一步:路径要稳定

一个交接文件如果每次都放在不同地方,它就不是交接文件。它只是又一个附件。

handoff 的默认路径是 ./handoff/YYMMDD-handoff.md。如果用户给了自定义路径,就用自定义路径,并创建父目录。dated 文件已经存在时,默认替换,而不是追加。

这个选择很小,但很硬。下一位 agent 不应该猜“上一轮到底写到哪里了”。

第二步:先重建状态,再动笔

handoff 最容易写坏的方式,是一边回忆一边润色。这样会把确定事实、合理推断和未验证假设揉在一起。

这个 skill 强制先重建状态:当前 thread、repo state、修改过的文件、最近跑过的检查、产出的 artifact。关键路径、命令、模块名和决策点要先验证,再写进文档。

  • Confirmed facts:精确文件、命令、输出、页面、接口结果。
  • Reasonable inferences:为什么这件事大概率成立。
  • Unresolved assumptions:下一位 agent 必须先确认什么。

事实是事实。推断是推断。假设是债务。

第三步:写给下一位 agent,不是写给用户

这条规则是整个 skill 的中心。

用户更新可以温柔,可以概括,可以把噪音折叠掉。handoff 不行。handoff 要保留下一位 agent 接手所需的操作性细节:文件路径、命令、API、route、class、module、table、env var、已知死路、风险和建议第一步。

它不需要漂亮。它需要可继续。

第四步:七段结构就是协议

我不想让每次交接都重新发明格式,所以 handoff 固定了七个编号 section:

1. 当前任务目标

2. 当前进展

3. 关键上下文

4. 关键发现

5. 未完成事项

6. 建议接手路径

7. 风险与注意事项

最后还必须有一句 下一位 Agent 的第一步建议。这句话很重要。它把“你可以继续看看”变成“第一步先做这个”。

第五步:验证不是形式主义

这个 skill 的最后一步要求确认四件事:文件存在、七个 numbered sections 都在、最后的第一步建议存在、整篇读起来像内部 baton pass 而不是用户更新。

这看起来像格式检查。其实是在防止一种更隐蔽的失败:文档写了,但下一位 agent 仍然不知道怎么开始。

能接上,才算写完。

这次发布的真实边界

这次我把本地 /Users/minxian/.codex/skills/handoff/SKILL.md 放进 GitHub-backed skill repo 的 skills/writing/handoff/SKILL.md,并补了 repo 需要的 metadata、常见坑表和 verification checklist。

这里有一个边界要说清楚:skill 是主 artifact,blog 是解释层。以后真正复用时,不应该回来看这篇文章照着猜,而应该直接用 GitHub 上的 skill。

文章负责讲为什么。skill 负责让下一次少踩坑。

如果你在长任务结束时只想做一件事,就做 handoff。不要等上下文已经糊成一团才开始抢救。

Skill 源码:https://github.com/XJM034/SKILL/tree/main/skills/writing/handoff