壓縮是什麼?
壓縮(compaction)是 Claude Code 在 context window 逼近上限時,把較早的對話換成一份較短的摘要,然後在摘要之上繼續工作。它會自動發生,也可以手動用 /compact 觸發;相關設定包括 /autocompact 與環境變數 CLAUDE_CODE_AUTO_COMPACT_WINDOW。壓縮之後 Claude 看到的是摘要,而不是原本的逐字對話。
為什麼需要壓縮?
模型一次能讀的內容有上限,長 session 遲早會塞滿。不壓縮就只能清空重來,或讓舊內容擠掉新內容。壓縮是折衷:保留脈絡的大意,換回空間。代價是細節會遺失,官方 auto mode 設定頁就提醒過,你在對話裡口頭說「在我檢查之前不要 push」這類一次性邊界,可能因壓縮把那則訊息拿掉而失效,要持久就寫成 ask 或 deny 規則。
壓縮怎麼運作,什麼會留下?
官方 changelog 的幾個點:v2.1.304 起,壓縮後會重新把 Skill 清單送給 Claude,/reload-skills 只送新增或變更的;v2.1.309 起,過大的巢狀 CLAUDE.md 只載入開頭,避免讀到它之後反覆壓縮;v2.1.307 修了在讀大量 PDF 頁面或圖片的回合裡出現的 "Autocompact is thrashing" 錯誤;v2.1.296 起子代理 frontmatter 可設 autoCompactWindow(100000 到 1000000)。第三方整理(claudefa.st)說專案根目錄的 CLAUDE.md 會從磁碟重新注入、巢狀的不會,叫用過的 skill 內容有每個 5,000、總共 25,000 token 的上限;那篇另一句「啟動時的 skill 清單不會重新載入」與 v2.1.304 的官方說法相反,應視為過時。
對我有什麼影響?
三件實務:一,重要的長期規則寫進 CLAUDE.md 或權限規則,不要只在對話裡講;二,過大的 CLAUDE.md 或大量工具輸出會讓壓縮更頻繁,保持精簡;三,遇到「Claude 好像忘了剛剛說的」,先想是不是剛發生過壓縮。這三點是我對官方資訊的整理,不是官方的操作建議。
公開可查的例子:Claude Code 的 v2.1.309 更新說明寫,讀到超過大小限制的巢狀 CLAUDE.md 後,session 會反覆壓縮,所以改成只載入它的開頭。這說明壓縮不只是「context 滿了」的結果,輸入內容的大小設計也會把它推成迴圈。
優點是長 session 可以繼續而不必重來;缺點是細節與一次性指示可能遺失,而且過大的輸入可能造成反覆壓縮。