前言¶
长会话里最常遇到的一种失败是:模型还在工作,但上下文已经满了,输出开始变慢、变散,前面的分析再也回不来。多数工具的处理方式是自动压缩(auto-compact),触发点是固定的,不管你当时正做到哪一步。结果往往是任务做到一半被截断,关键上下文跟着一起丢掉。
CC 技能:战略性压缩(strategic-compact)是一个开发类 Agent Skill,它把压缩时机交给开发者判断:在任务阶段之间的自然边界上手动执行 /compact,而不是依赖任意触发的自动压缩。下面介绍它的定位、工作原理、安装配置和适用场景。
这是什么¶
一句话定位:在工作流的关键节点上建议你手动执行 /compact 的 Skill,附带一个在 Edit/Write 前检查上下文的 Hook。
- 出品方:SkillHub 页面显示发布者为「智雨科技」,来源 enterprise,坐标 @org-02qudk26/cc-skill-strategic-compact,版本 1.0.0,分类 dev-programming。
- 来源:Skill 的 metadata 中标注 origin: ECC,即 everything-claude-code。该仓库是一套 Claude Code 配置集合(agents、skills、hooks、commands、rules 等),strategic-compact 对应仓库中 skills/strategic-compact 目录,配套的 hooks/strategic-compact 目录提供脚本。
- 解决的问题:自动压缩不感知任务逻辑边界,可能在执行中途触发;这个 Skill 用 Hook 实时监控上下文规模,到阈值时提示你在合适的节点手动压缩。
- 是否要 API Key:标签 requires_api_key=false,即不需要。
说明:SkillHub 官方页在写作时无法抓取,下文的安装配置、阈值与决策指南均来自上游 everything-claude-code 仓库中 skills/strategic-compact 的 SKILL.md 原文,与 Skill 的 origin 标注一致。
核心功能¶
- 监控真实上下文规模:Hook 脚本 suggest-compact.js 在 PreToolUse(Edit/Write)时运行,从会话 transcript 的 usage 记录中读取最近一次的 input_tokens + cache_read_input_tokens + cache_creation_input_tokens,这是该轮实际的上下文大小。
- 按窗口比例设阈值:200k 窗口下默认在约 160k tokens 时首次建议 /compact,1M 窗口下约 250k;之后每再增长 60k tokens 提醒一次。窗口从模型 id 的
[1m]标记或观测到的 token 数推断。 - 工具调用数作为辅助信号:默认 50 次工具调用时提示一次,此后每 25 次再提示。官方原文明确说明这是弱信号——少数几次大文件读取就能填满窗口,而大量小调用可能到 50 次时窗口还很空。
- 压缩决策参考表:Skill 内置阶段切换与是否压缩的对照(研究→规划建议压缩、规划→实现建议压缩、实现→测试视情况、实现中途不要压缩、失败后换思路前建议压缩等)。
- 压缩后的存活清单:明确压缩后保留什么(CLAUDE.md、磁盘上的文件、memory 目录、git 状态)和丢失什么(中间推理、已读过的文件内容、对话上下文、工具调用历史)。
安装与启用¶
这是基于通用 SKILL.md 格式的 Skill,功能实际由 Hook 脚本驱动,安装方式分两种,按你当前的安装形式选其一。
方式一:以插件方式安装(推荐)。插件自带的 hooks/hooks.json 已经注册了 suggest-compact.js(hook id 为 pre:edit-write:suggest-compact,在 standard 和 strict 两个 hook profile 中生效),不需要任何手工配置。官方 SKILL.md 特别提醒:此时不要把下面的 Hook 配置块复制进 ~/.claude/settings.json,插件安装下 ~/.claude/scripts/ 目录不存在,重复注册还会导致脚本执行两次。
方式二:手动安装(执行仓库的 ./install.sh 后),需要在 ~/.claude/settings.json 中添加以下配置,让脚本在 Edit 和 Write 前运行:
{
"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" }]
}
]
}
}
关于 Cursor、Codex CLI 与其他工具:已抓取资料中没有说明该 Skill 在这些工具下的支持方式,脚本 hook 事件名(PreToolUse)也是 Claude Code 的机制,本文不推测,请以官方页面为准。
配置项¶
以下为 suggest-compact.js 支持的环境变量,全部为可选:
COMPACT_THRESHOLD=50 # 首次建议 /compact 前的工具调用数
COMPACT_CONTEXT_THRESHOLD=160000 # 触发建议的上下文 token 数(200k 窗口默认 160k,1M 窗口默认 250k)
COMPACT_CONTEXT_INTERVAL=60000 # 之后每增长多少 token 重复提醒
COMPACT_STATE_TTL_DAYS=14 # 临时目录中过期的按会话状态文件清理天数
ECC_CONTEXT_WINDOW_TOKENS= # 显式指定上下文窗口大小,覆盖自动检测
CLAUDE_CODE_AUTO_COMPACT_WINDOW= # Claude Code 原生 auto-compact 窗口,作为窗口推断的最后兜底
设置示例:如果你的模型实际窗口是 400k 但没有 [1m] 标记,可以显式声明,避免按 200k 默认值误报上下文占用:
export ECC_CONTEXT_WINDOW_TOKENS=400000
窗口推断的优先级是:ECC_CONTEXT_WINDOW_TOKENS → 模型 id 的 [1m] 标记 → 已知的大窗口模型族 → 观测 token 超过 200k 时的推断 → 原生 auto-compact 兜底 → 默认按 200k。显式设置的 COMPACT_CONTEXT_THRESHOLD 具有最高优先级,设为 0 可关闭上下文规模信号。
典型用法¶
以下流程来自 Skill 内置的决策指南和最佳实践。
- 先写计划再压缩。规划阶段结束后,把计划写到文件,然后执行 /compact,用干净的上下文进入实现阶段。
/compact
-
阶段切换时清理。研究→规划、规划→实现、调试结束换下一个功能、一种方案失败换新思路前,都是压缩点;实现做到一半则不要压缩,此时丢失变量名、文件路径和中间状态的代价很高。
-
压缩前确认计划已落盘。这是官方强调的一点:Claude Code 2.1.233 起在 Opus 4.8、Sonnet 5、Fable 5、Mythos 5 及更新模型上默认移除了 todo/task 工具(TodoWrite、TaskCreate/Get/Update/List),设置 CLAUDE_CODE_ENABLE_TODO_TOOLS=1 可以恢复,但这是每台机器的环境配置,不会随 Skill 一起分发。因此不要指望「任务清单压缩后还在」,把计划写进文件,文件在任何版本和模型上都持久。
-
收到 Hook 提醒时,结合当前所处阶段决定是否执行 /compact,而不是无脑忽略或无脑执行。
适用场景与注意¶
适合谁:运行长会话、任务分多个阶段(研究→规划→实现→测试)、在同一会话里切换不相关任务的开发者。当会话接近上下文上限,或你感觉响应变慢、变散时,这正是该 Skill 的触发场景。
注意事项:
- 它是提醒机制,不是自动压缩器。是否压缩、何时压缩仍由你判断,Skill 提供的是阶段决策表和阈值信号。
- 工具调用数信号偏弱,判断窗口压力时以上下文规模信号为准。
- 手动安装时注意配置文件的位置和 matcher 类型;插件安装时不要重复配置,否则脚本会执行两次。
- 大窗口模型如果没有可识别的标记,需要自己设置 ECC_CONTEXT_WINDOW_TOKENS,否则阈值按 200k 窗口计算,会高估上下文占用。
- 压缩会丢失中间推理和已读文件内容,压缩前需要的信息请先落盘。
结尾¶
战略性压缩的价值在于把「何时压缩」从系统默认行为变成可判断的工程决策:监控真实上下文规模、在阶段边界提醒、配合先写计划再压缩的习惯,让长会话在多个任务阶段间保持可控。官方地址:https://api.skillhub.cn/org-02qudk26/cc-skill-strategic-compact。