策略性压缩技能¶
不依赖随意的自动压缩,而是在工作流的策略性节点建议手动执行 /compact。
激活时机¶
- 当运行接近上下文限制的长会话时(200K+ Token)
- 当执行多阶段任务时(调查 -> 计划 -> 实现 -> 测试)
- 当在同一会话内切换无关任务时
- 当完成主要里程碑并开始新任务时
- 当响应变慢或一致性下降时(上下文压力)
为什么需要策略性压缩¶
自动压缩会在任意点执行: - 经常在任务中途执行,导致丢失重要上下文 - 无法识别逻辑任务边界 - 可能中断复杂的多阶段任务
在逻辑边界处进行策略性压缩: - 探索后、执行前 -- 压缩调查上下文,保留实现计划 - 里程碑完成后 -- 为下一阶段提供全新起点 - 主要上下文切换前 -- 在开始其他任务前清理探索上下文
工作方式¶
suggest-compact.js 脚本在 PreToolUse(Edit/Write)中执行,并执行以下操作:
- 工具调用跟踪 -- 统计会话内的工具调用次数
- 阈值检测 -- 在可配置阈值处提出建议(默认:50 次)
- 周期性提醒 -- 超过阈值后每 25 次提醒一次
Hook 设置¶
如果以插件安装:无需额外设置。插件的 hooks/hooks.json 已注册 suggest-compact.js(Hook ID pre:edit-write:suggest-compact,在 standard 和 strict Hook 配置中启用)。请勿将下方代码块复制到 ~/.claude/settings.json —— 插件安装不包含 ~/.claude/scripts/,重复插件 Hook 会导致双重执行(${CLAUDE_PLUGIN_ROOT} 不会在用户 settings.json 中解析)。
如果手动安装(./install.sh),添加到 ~/.claude/settings.json:
{
"hooks": {
"PreToolUse": [
{
"matcher": "Edit",
"hooks": [{ "type": "command", "command": "node ~/.claude/scripts/hooks/suggest-compact.js" }]
},
{
"matcher": "Write",
"hooks": [{ "type": "command", "command": "node ~/.claude/scripts/hooks/suggest-compact.js" }]
}
]
}
}
配置¶
环境变量:
- COMPACT_THRESHOLD -- 首次建议前的工具调用次数(默认:50)
压缩决策指南¶
使用下表决定压缩时机:
| 阶段转换 | 压缩? | 原因 |
|---|---|---|
| 调查 -> 计划 | 是 | 调查上下文体积大,计划是提炼后的结果 |
| 计划 -> 实现 | 是 | 计划已存在于 TodoWrite 或文件中,可为代码保留上下文 |
| 实现 -> 测试 | 视情况而定 | 如果测试引用最近代码则保留;切换焦点时压缩 |
| 调试 -> 下一个功能 | 是 | 调试跟踪会污染无关任务的上下文 |
| 实现中途 | 否 | 丢失变量名、文件路径、部分状态的成本很高 |
| 失败尝试后 | 是 | 在尝试新方法前清理死胡同推理 |
压缩中保留的内容¶
了解哪些内容会保留,就能更有信心地执行压缩:
| 保留 | 丢失 |
|---|---|
| CLAUDE.md 指令 | 中间推理和分析 |
| TodoWrite 任务列表 | 之前读取的文件内容 |
记忆文件(~/.claude/memory/) |
多阶段对话上下文 |
| Git 状态(提交、分支) | 工具调用记录和次数 |
| 磁盘上的文件 | 口头提及的细微用户偏好 |
最佳实践¶
- 计划后压缩 -- 当 TodoWrite 中的计划确定后,为重新开始而压缩
- 调试后压缩 -- 在继续前清理错误解决上下文
- 实现中途不要压缩 -- 保留相关变更的上下文
- 阅读建议 -- Hook 告知何时,是否执行由你决定
- 压缩前记录 -- 在压缩前将重要上下文保存到文件或记忆中
- 配合摘要使用
/compact-- 添加自定义消息:/compact Focus on implementing auth middleware next
相关条目¶
- The Longform Guide -- Token 优化部分
- 记忆持久性 Hook -- 用于在压缩中保留状态
continuous-learning技能 -- 在会话结束前提取模式
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 ev/ECC