AIHero
    17 / 25为真正的工程师打造的 AI 技能

    /handoff 技能

    把一次长会话整理成文档,让另一个智能体能接续。

    Matt Pocock
    Matt Pocock
    源代码下一页

    安装此技能

    npx skills@latest add mattpocock/skills --skill=handoff

    然后输入 /handoff 来调用它。

    本页内容

    它的作用

    handoff 把你所在的对话压缩成 交接文档 ——一个 markdown 文件,写入系统临时目录而不是工作区,一个新的 agent 能够阅读并接手工作。

    它买来的是 portability,而不是压缩。这让该技能比听起来更窄。只有当工作必须 travel ——给一个新的 运行框架,一个新目录、一个同事,或一个你想分叉出去的支线任务。如果没有东西在传递,你不需要交接:留在 会话, /clear,一个 子智能体 and /compact 覆盖阶段结束的常见情况,而 /compact 覆盖它的频率比这个技能更高。

    何时使用

    你通过输入 /handoff ——智能体不会自行调用它。把下一个会话用途的说明传给它,文档就会为它而写。

    四种情境构成全部触发条件:

    情境为什么是文件
    更换运行框架——Claude → Codex新运行框架看不到旧的 context
    移动到不同的目录或仓库原型目录是常见情况
    把工作发送给同事他们需要可阅读的东西
    分叉出阶段中途发现的支线任务你继续工作;第二个智能体接过分支

    其他情况——同一个运行框架、同一个目录,你就完成了 追问审视 并转入实现—— /compact 就是这一招。 ask-matt 在阶段边界上携带覆盖全部五个选项的有序树。

    分支是人们跳过的用法

    技能描述读起来像会话恢复:写摘要、在这里结束、在那里恢复。这样读它,看起来像一个更差的 /compact,所以会被一眼带过。值得了解的是 fork 的情况。你 留在你的会话中 并把累积上下文的副本交给并行工作的第二个智能体。

    这正是绕道 prototype 使用。你正深陷一场设计对话,撞上一个只有运行代码才能解决的问题,而你不想花掉已建立的线索去查明。交接给原型会话,拿到答案,把答案交回来,并从原线索引用它。两次跨越,一场活的对话,无需重新解释任何东西。

    阶段边界的五个选项中有三个保留不同的东西: /compact 保留你的意图, /clear 什么都不保留, /handoff 保留工作移动的能力。

    什么随行,什么不随行

    文档携带活线索——什么在进行中、为什么、下一步是什么——外加 建议技能 部分点名下一个智能体应该使用什么。密钥在写之前会被脱敏。

    它刻意不携带的是任何已写下的东西。规格说明、计划、ADR、issue、提交和 diff 以路径或 URL 引用,从不复制。这让文件保持小巧,也让已敲定的细节待在一个地方,而不是两个漂移的地方。

    常见问题

    交接还是压缩? /compact 除非有东西在传递。留在同一任务上是压缩,不是交接——同一个运行框架、同一个目录,而你需要留在循环中,这正是阶段边界树大多数时候落下的地方。 /handoff的优势不在于它总结得更好,而在于结果是一个可以随身带到别处的文件 /compact 够不到。

    那么 compact、clear 和 handoff 之间实际的区别是什么? 三样被保留的不同东西。 /compact 压缩这个上下文,让你在新窗口中继续推进——意图得以幸存。 /clear 清空窗口并从零开始——当你身后的一切都可丢弃时是对的,如果不是,那就是单向的。 /handoff 写一个可移植的文件——工作经得起搬到别处。注意三者都把 第一手资料 (按原样发生的对话)变成 二手资料 (它的摘要)。继续是唯一不会这样的动作,这正是要首先排除它的原因。

    我的交接文件去哪了? 临时目录,这是该技能被报告最多的摩擦:路径很长、因操作系统而异,而且在 Windows 上智能体有时要尝试好几次才能找到正确的。在继续之前把路径要回来并保存。临时是刻意的:交接是过境文档,不是你要维护的产物。它也不是持久文档——见下一个问题。

    我的交接文件在会话之间消失了。 有些环境会在会话之间清空临时目录——被报告的案例是 Codex——而 /private/tmp 重启后就没了。如果下一个会话不会在一小时内启动,或者将在不同的运行框架下启动,请在文件写入后立刻自己把它复制到持久的地方。文档 指向:引用了临时目录中其他文件的派发,是下一个智能体无法跟进的派发。

    到底怎么把它交给下一个智能体? 打开全新会话并把它指向路径:读这个文件,然后继续。指向文件,而不是把摘要粘贴进 shell 命令——含反引号或 $(...) 被插入 claude "<summary>",而通常的失败是静默截断而不是报错,所以新智能体带着一份悄然不完整的简报开始。

    这和 /branch, --fork-session,或内置的 /handoff? 相似但不相同,而且 /branch 在这里不是已发布的技能—— /handoff 是标准名称。fork 继承上下文的精确副本;这个技能产出的是 targeted 在文件中进行的、面向已声明下一任务的压缩。只要 fork 够用——同一台机器、同一个运行框架、同一个目录——fork 就是更省事的选择。当目的地是 fork 去不了的地方时,文件就赢了。

    什么时候某物该放进 CLAUDE.md 代替? 下个月再问它是否仍然成立。 CLAUDE.md 是关于项目的常驻上下文,无论是否相关都加载进每个会话。交接是关于一项进行中的工作,工作落地后即失效。不断被重新解释的事实,是 CLAUDE.md 问题;一个完成一半的任务是交接。

    它记录「做了什么」,而不是「为什么」。 一个公正且被反复提出的批评。有两件事有帮助。传入参数——告诉它下一个会话是干什么的——这样与 that 被保留而不是被抹平。还要警惕会话从未真正验证过的自信论断:「X 没构建」「Y 完成了」。下一个智能体把文档当作契约,不会重新检查,所以写成事实的信念会成为其后一切的错误前提。交接前读一遍文档,把所有你只是假设的东西降级。

    为什么它是一个技能而不是斜杠命令? 两者都有效;它们适合不同情境。作为一个技能,它与其他一切一样通过相同的安装路径发布和更新,这正是它可共享的原因——智能体不会自行触发它的约束由它的 frontmatter 设定,而不是由机制设定。

    做到以下就算成功

    • 文档只是对话的一小部分,规格说明、issue 和 diff 以路径和 URL 出现,而不是复制的文本。
    • 你可以冷读它,无需打开原会话,就知道下一步做什么。
    • 全新智能体直接开始工作,而不是让你重新解释配置。
    • 在 fork 的情况下,你回来时原始会话仍原封不动地待在那里。
    • 建议技能部分点名的技能,正是你自己会去用的那个。
    • 其中没有任何密钥、Token 或密码。

    在流程中的位置

    handoff 是一个 随时可调用的独立技能 住在会话之间的接缝上,而不是构建链内部——但它是窄的,诚实地讲,在阶段边界你会比另外四个选项更少用到它。它最近的邻居是 prototype,因为原型住在自己的目录里,出去再回来的往返正是这个技能要做的跨越。当你身处边界、不确定该继续、清空、交接、委托还是压缩时, ask-matt 携带给那五个排序的树——并为你规划整套其余技能。

    技能操作

    安装技能

    Live Skills.sh install count
    npx skills@latest add mattpocock/skills

    安装整套技能,然后在智能体中输入 /handoff 来调用它。

    用以下命令更新: npx skills updateSkills.sh