前言¶
長會話裏最常遇到的一種失敗是:模型還在工作,但上下文已經滿了,輸出開始變慢、變散,前面的分析再也回不來。多數工具的處理方式是自動壓縮(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。