跨会话桥的口袋版:把当前会话压缩成临时目录里的移交文档,新会话引用它继续。 完整教学见 Lesson 0006; 原文见 SKILL.md(全部 16 行)、 docs 页、 ask-matt 的 Crossing sessions 一节。
把当前会话压缩成一份 markdown 移交文档,写进操作系统的临时目录(不是仓库); 你新开一个会话、把文档指给新 agent 看。只装还飘在空中的讨论(live thread), 已落盘的产物(spec / ADR / issue / commit / diff)只引用、不复制。
/handoff;模型不会自己伸手,其它 skill 也调不动它(无 prose 调用通道)。disable-model-invocation: true(frontmatter)+ policy.allow_implicit_invocation: false(agents/openai.yaml),两个 harness 同步。argument-hint 就是这句提示)。| 情境 | 用法 |
|---|---|
| 会话逼近 smart zone(约 12 万 token 后推理变钝),活没干完 | /handoff 换新线程;别带病硬撑(ask-matt 唯一的官方应急出口) |
| 收工 / 改天继续 / 交给另一个 agent 或人 | /handoff,参数写清下一节干什么 |
| 主流程里问题嘴上说不清,需要可运行的答案 | /handoff 出去 → 新会话 /prototype → /handoff 带回,主线引用答案 |
| 只想压缩一下、人还留在当前窗口 | 用 harness 自带的 /compact,不是 handoff |
| grill → spec → tickets 中途窗口变挤 | 不许 compact(mid-phase 会迷路);撑不住才 /handoff 换窗 |
| 活已干完,想给成果留记录 | 不归 handoff——那是 spec / issue / ADR / commit 的职责 |
/handoff forks → 新会话 + 临时目录留文件;选择性保真(活线索照写,产物只引用)
/compact continues → 留在原窗口;摘要替换逐字历史,有损;只用在阶段之间的有意断点
复制 = 制造第二个事实来源,spec 一改文档就撒谎;引用永远指向最新原文。 移交文档是一次性脚手架,过桥即弃;放仓库里会「变成又一个要维护的产物」并腐烂。 仓库的长期记忆在 spec / ADR / issue / commit 里,不归它管。
登场一(prototype 岔路,ask-matt step 2):
主线程 grill ──/handoff──▶ 新会话 /prototype ──/handoff──▶ 主线程引用答案继续
登场二(smart zone 应急出口,Context hygiene):
to-tickets 之前窗口要满 ──/handoff──▶ 新线程接着走(这段路禁用 /compact)
分界线:/to-tickets 之后,移交载体从 handoff 文档切换成 Issue tracker 里的 issue
(implement 每票新开会话是「计划内换窗」,不需要 handoff)
$TMPDIR / /tmp / %TEMP%)。| 症状 | 改哪里 |
|---|---|
| 文档把 spec / ADR 抄了一遍,又厚又旧 | handoff/SKILL.md 第 3 条指令(references, not copies) |
| 文档被写进仓库 | handoff/SKILL.md 第 1 条指令(temporary directory, not workspace) |
| suggested skills 建议得离谱 | handoff/SKILL.md 第 2 条;知识源头在 ask-matt 的 flow 描述 |
| 密钥 / PII 过了桥 | handoff/SKILL.md 第 4 条(redact)的覆盖范围 |
| 带不带参数生成的文档没差别 | handoff/SKILL.md 第 5 条;提示语在 frontmatter 的 argument-hint |
| 想让它被更常提起 | 改 ask-matt/SKILL.md 的路由文案;别给 description 塞触发词(人读的不带),别动 disable-model-invocation |
| Codex 选择器里名字 / 简介不对 | handoff/agents/openai.yaml 的 interface 块(别动 policy 块) |