第 8 章:会话卫生
出处
来源:PHASE-BOUNDARIES.md · handoff · wait-what · teach · 状态:已读
一句话
阶段边界上按顺序问五件事:能继续就继续;无关就清空;要旅行才交接;能无人值守就派子代理;否则才压缩。 除了继续,每一步都把一手材料变成二手摘要;先付这笔损失,再选走法。
核心概念
阶段是「觉得那段完了」
阶段是会话里的一块活:追问、实现、验收。定义故意模糊:阶段在你觉得「好,那件事完了」时结束。
阶段边界是两块之间的缝,也是这个决定唯一该出现的地方。阶段中途没有决定可做:继续,或把剩下的活拆给子代理。中途压缩会让 agent 丢线。
五种走法,第一问先否掉继续
| 走法 | 做什么 |
|---|---|
| 继续 | 留在这场会话。没有任何上下文切换 |
/clear | 清空窗口,从零开始。旧会话仍可恢复 |
/handoff | 写一份可携带的 markdown,拿去任何地方播一场新会话 |
| 子代理 | 把任务送到自己的窗口,拿回报告 |
/compact | 压缩当前上下文,用摘要播一场新会话 |
树从上往下走,第一个「是」赢。
- 还能留在这场会话吗? 两件事让答案为是:下一阶段需要这一阶段当一手材料,或你还剩够下一阶段的 smart zone(当前最强模型大约 15 万 token 以内还在锐利推理)。追问 → 实现是标准的「是」:实现要的是推理原文,不是摘要。继续不花钱、不丢东西,所以先否掉它,再谈别的。
- 这段上下文对接下来无关吗? 探索、决定、死胡同,全都可丢?那就
/clear。板上最便宜的一步:不花时间,窗口整段还回来。清空相关上下文,你丢掉的是建造背后的「为什么」,再读 diff 也回不来。 - 需要交接吗?
/handoff很窄。只在:换到新 harness(Claude → Codex)、搬到新目录或新仓库、送给同事、或阶段中途分出支线却不想带偏当前。这份清单就是全部条款。交接买的是可携带性:一份能走的文件。没有东西在旅行,就不需要它。 - 任务能无人值守做完吗? 范围紧到你不在键盘也能跑、不必转向?派子代理,本场会话不动。自动评审是标准情形。
- 否则,
/compact。 相关上下文、同一 harness、同一目录、你还要留在环里:树经常落在这里。给它一条指令(/compact we're going to QA this area),让摘要保住下一阶段需要的。压缩是默认,不是第一伸手。它坐在底下,因为上面四问都更便宜或更精确。从这里起步的失败模式:新会话对摘要压扁过的决定自信地错。
一手材料和二手材料
除了继续,每一步都把一手材料(会话当时发生的样子)变成二手材料(它的摘要)。交易形状总是一样:
| 材料 | 信息 | 噪声 | 活动空间 |
|---|---|---|---|
| 一手(继续) | 全 | 多 | 小 |
| 二手(压缩、交接) | 有损 | 少 | 大 |
所以第 1 问排第一。只有留下的代价大于它省下的,才付有损。
这些是带品味的判断,同一条边界两天可以走两条路。价值在按顺序问,在边界上问,而不是活做到一半问。
交接买可携带,不买压缩
/handoff 把当前对话收成一份 markdown,写到操作系统临时目录,不进工作区。下一名 agent 读它接活。
它买的是可携带性,不是压缩。听起来比实际窄。只有活必须旅行时才需要文件。没有东西在旅行,留在会话、/clear、子代理、/compact 覆盖普通的阶段结束;多数日子是压缩,不是交接。
人跳过的用法是分叉:你留在本场会话,把积下来的上下文拷一份给第二个并行的 agent。原型弯路用的就是这个。设计对话走到只有跑代码才能定的问题,你不想把建起来的线花在查明上。交接出去做原型,拿答案回来,从原线引用。两次穿越,一场活着的对话,什么都不用重讲。
文件携带进行中的线(在飞什么、为什么、下一步)外加 suggested skills,点名下一代理该去调哪些 skill。密钥先打码。已经写下的东西故意不带:规格、计划、决策记录、议题、提交、diff,用路径或 URL 指,不拷。文件保持小,拍板的细节只住一处。
已知毛边:临时目录路径长、各系统不同、有的环境会话之间会清临时目录(Codex 被点过名)。下场会话不是一小时内启动、或要换 harness,写好立刻自己拷到耐久的地方。把摘要粘进 claude "<summary>" 会在反引号和 $(...) 上静默截断;指向文件,不要粘。
反复被批评的一点:它抓住 what,不抓住 why。两件事有帮助。传入参(下场会话做什么),让和那件事相关的推理留下。盯住会话从未核实过、却写得像事实的句子(「X 没做」「Y 完了」)——下一代理把文件当合同,不会再查;信念写成事实,后面全是假前提。交出去之前自己读一遍,把只是假定的降级。
CLAUDE.md 是关于项目的站立上下文,每场会话都加载。交接是关于一件在飞的活,活一落地它就死。反复要重讲的事实是 CLAUDE.md 的问题;半成品任务才是交接。
没听懂:按项目的词重讲
/wait-what 是人打的急停。上一句没落地。重讲:补一点上下文,用 ASD-STE100 简化技术英语,用 CONTEXT.md 里的通行词(多上下文则经 CONTEXT-MAP.md 找到对的那份)。
它修的是第 1 章第 2 个失败在会话中途的样子:agent 已经有词可用,却退回了 20 个词说一件事。打它,不是「再说一遍」,是「用我们的词、用更简单的英语,再讲一次」。
跨会话教,不是跨会话做
/teach 把当前目录当成有状态的教学工作区:MISSION.md(你为什么关心)、reference/*.html(压缩过的速查)、RESOURCES.md、learning-records/(类似决策记录,记非显而易见的课)、lessons/*.html(一次课教一件钉在使命上的事)。哲学:知识来自高信任来源(不要信参数记忆)、技能来自交互课、智慧来自和其他学习者互动。
两笔学习账要分开:即时提取(当场能调出来)和长期记住(过几天还在)。主链上它不是一步;它证明同一套「状态写在目录里、跨会话续」的形状,也可以用在学习上,不只用在建造上。
关键洞察
- 压缩坐在树底,因为人们总是先伸手去压缩。 新会话对压扁过的决定自信地错,比窗口大一点更常见。先问「能继续吗」是在付一手材料的租金。
- 交接不是更好的压缩。 三种走法保住的东西不同:压缩保住意图,清空什么都不保,交接保住活移动的能力。分叉(你留下、拷一份出去)是交接真正赢过「会话恢复」叙事的地方。
- 主链把追问、规格、工单钉在同一扇窗口,就是在服从第 1 问。 规格阶段的推理是实现的一手材料。在
/to-tickets之前压缩,是把第 4 章的决定记录先做成二手。
个人思考
对照 Book 1 05-上下文治理:那里 compact 是运行时器官,上下文是资源不是垃圾桶。Matt 把同一器官放到人与 agent 的会话上,并且加了一条运行时没有的禁令:阶段中途不准压。下一章处理活落到代码之后还要过的两道闸:规范和规格分开审,以及只有人能走的步骤怎么从循环里拆出去。