Skill.md
Compact with Memory
标准的 /compact 会把对话历史替换成一份摘要——速度快,但有损耗。你花了几个小时讨论出来的架构决策、放弃的方案、用户纠正过你的行为规则,全部消失。下次 session 从零开始。
这个 skill 在压缩前加了两件事:记忆预处理(把机构知识写入持久化文件)和结构化 8 节摘要(让新 session 能直接继续工作)。核心原则是只持久化读代码和看 git 历史推不出来的内容——其他的都是噪音。
四类信号
| 类型 | 内容 | 示例 |
|---|---|---|
feedback | 协作规则(修正 + 确认) | "不要 auto-retry Stripe 调用";"用这种方式 OK,保持" |
project | 进行中的工作、决策背后的理由、放弃的方案 | "选择乐观锁,因为悲观锁在这个版本会死锁" |
user | 用户的角色、领域知识、偏好 | "资深后端工程师,第一次接触这个项目的 React 部分" |
reference | 外部系统指针 | "Bug 在 Linear INGEST 项目追踪" |
执行步骤
Step 1 — 记忆预处理
扫描对话,提取无法从代码或 git 历史推导出的信号。现在写入 memory 文件——压缩后这些内容将消失。质量标准:缺少 Why: 的信号跳过。一条好记忆胜过五条泛泛的记录。
Step 2 — 生成摘要
摘要将替换整个对话历史。它必须自包含:只读这份摘要的新 session 应该能直接继续工作,不需要追问发生了什么。
八个节——有内容的都要写:
- Task(任务) — 在做什么,以及为什么——是目标,不是执行步骤
- Current state(当前状态) — 会话结束时的确切状态:哪些完成了,哪些没完成,哪些进行中。最关键的节——必须反映对话的终点,而不是起点
- Key decisions(关键决策) — 做出的选择及其背后的理由,尤其是不显而易见的决策
- Eliminated approaches(放弃的方案) — 尝试过但排除的方案,以及为什么——防止下次 session 重复踩坑
- Open questions / blockers(待解决问题) — 未解决的问题和阻塞项,下次 session 需要优先处理
- Files changed(改动文件) — 修改了哪些文件,每个文件改了什么
- Next steps(下一步) — 按优先级排列的具体待办事项
- Context for next session(下次 session 的背景) — 其他一个新 session 需要知道但没放进上面的内容
摘要质量标准:
- 只读这份摘要的新 session 能继续工作
- 重推理而非罗列事实:记录为什么做决策,而不只是做了什么
- 当前状态准确反映对话终点
- 不填充:真的没内容的节直接省略
Step 3 — 执行 /compact
运行 /compact。在摘要注释中标注写入了哪些 memory:"Key decisions written to memory — see [filename] for [topic]。"
Step 4 — 汇报确认
报告:
- Compact:已完成,一句话描述摘要涵盖的内容
- Memory:写入/更新了几个文件,分别是哪些
- MEMORY.md 行数:当前行数(必须在 200 行以内)
触发方式
- 说
/compact - 说"压缩上下文"、"compact 一下"
- 当你看到 context 使用量接近上限
- 在重要决策后的自然会话检查点
什么不应该保存
- 代码模式、文件路径、架构概览——读代码可得
- Git 历史、谁改了什么——
git log是权威来源 - 调试过程或修复方案——代码是记录,commit message 有背景
- 任何已在 CLAUDE.md 文件里记录的内容
- 临时任务状态、当前 session 的进行中工作
边界测试:"如果是一个全新 session,在读任何代码之前就知道这件事,会有帮助吗?"如果没有——跳过。
与 memory-architect 的关系
compact-with-memory 是写入路径:在每次压缩时提取知识。memory-architect 是清理路径:当 MEMORY.md 积累了冗余、重复或过时条目时,做结构性重整。两者配合使用效果最好。
局限说明
这个 skill 依赖对话内容本身的质量——如果会话中的决策没有被明确表达过"为什么",提取出来的 memory 也会缺乏 Why: 背景。建议在做重要架构决策时主动说出理由,让 compact 时能提取到有价值的内容。