文章目錄

Claude Code 的對話變長時,會自動把先前的內容壓縮成摘要,因此我們不必開新的對話就能繼續工作。不過,只在碰到特定檔案時才載入的規則,壓縮後只剩摘要,當 Agent 不知道細節,就可能不再遵從規則。只要把這類規則改成每次啟動都載入,或是在壓縮後自動放回,Agent 就能繼續看到完整的規則。
測試環境是 Windows 11 與 Claude Code 2.1.309。
壓縮後保留的規則
依官方文件與實測,規則在壓縮後的狀態與處理方式如下。其中的 paths 是規則檔開頭的設定,用來指定碰到哪些檔案時才載入這份規則:
Agent 再次讀取或修改符合的檔案時,只剩摘要的規則會重新載入,在這之前 Agent 只能依照摘要工作。
呼叫過的 Skill 放回對話時,每個上限是 5,000 Token、合計上限是 25,000 Token,太長的 Skill 只會留下開頭,因此一定要遵守的步驟要寫在 SKILL.md 的開頭。由於關閉 Claude Code 後用 --resume 接回對話再壓縮時,Skill 不會放回,這時要輸入 / 加上 Skill 的名稱再呼叫一次。
每次工作都要遵守的規則
每次工作都要遵守的規則,只要拿掉 paths 或搬到專案根目錄的 CLAUDE.md,壓縮後就會自動放回,規則的內容也不用修改。不過這些規則每次工作都會佔用 Context,官方文件也建議每個 CLAUDE.md 控制在 200 行以內,因為檔案越長,Agent 遵守規則的程度就越低。至於其他規則,維持原樣即可。
打開 .claude/rules/ 裡的規則檔,刪除開頭類似下面的設定,之後想還原時再加回去即可:
1---
2paths:
3 - "docs/**"
4---
子資料夾 CLAUDE.md 裡的規則與對話中交代的要求,如果每次工作都要遵守,就寫進專案根目錄的 CLAUDE.md。
修改完成後,開新的 Claude Code 對話,再輸入 /context all。如果清單的 Memory files 底下列出規則檔,就代表它每次啟動都會載入。
只和特定檔案有關的規則
有些規則只和特定檔案有關,因此平常不需要佔用 Context,但工作進行到一半時不能忘記。這類規則可以保留 paths,再加上 SessionStart hook 的 compact 設定。Hook 是 Claude Code 在特定時機自動執行的指令。這個設定會在每次壓縮後讀取規則檔,並把內容放回對話。
-
打開專案的
.claude/settings.json,如果沒有這個檔案就新增一個。 -
加上下面的設定,並把
docs.md換成自己的規則檔。如果已經有hooks,就把SessionStart這段併進去:1{ 2 "hooks": { 3 "SessionStart": [ 4 { 5 "matcher": "compact", 6 "hooks": [ 7 { 8 "type": "command", 9 "command": "cat \"$CLAUDE_PROJECT_DIR/.claude/rules/docs.md\"" 10 } 11 ] 12 } 13 ] 14 } 15} -
設定完成後,開新的對話並請 Agent 讀取一個和這份規則無關的檔案,再輸入
/compact。這樣規則在壓縮前就不會載入,也不會出現在摘要裡。 -
壓縮完成後,請 Agent 不要使用工具,逐字說出這份規則的第一句。如果 Agent 說得出來,就代表 hook 已經把規則放回對話。
這個設定只在壓縮後執行,因此開新對話時不會多載入任何內容,帶有 paths 的規則也會照常在碰到符合的檔案時載入。
絕對不能發生的動作
寫在規則檔裡的內容只能作為一種提醒,模型不一定會完全遵從,即使沒有壓縮也一樣。像是直接推送 main 這類絕對不能發生的動作,要交給 Agent 執行指令前檢查的 hook。實測這類 hook 在壓縮前後都會擋下指令,做法可以參考用 PreToolUse hook 擋下 Agent 直接推送 main。
實測紀錄
我在隔離的測試 repo 裡替每種規則放一個獨特的識別碼,在互動的 Claude Code 對話中依序讀取 9 個檔案、呼叫 Skill 並輸入 /compact,再從對話紀錄檔確認原文是否還在,測試的模型是 Haiku 5.5。結果和「壓縮後保留的規則」那張圖相同,SessionStart hook 的輸出在壓縮後也是完整內容。
Agent 再讀一次符合的檔案後,帶有 paths 的規則會回到對話,畫面也會出現 Loaded 開頭的行。壓縮完成時列出的 Read 是 Claude Code 自動重新讀取的檔案,這個動作不會載入規則:

其他情境的結果如下:
- 調低門檻觸發自動壓縮時,保留的內容和手動輸入
/compact相同。 - Agent 用 Grep 或 Glob 搜尋到符合的檔案時,規則不會載入。用 PowerShell 的
Get-Content讀取,或用 Bash 的echo >>、sed -i、node -e寫入時也一樣。 - 只讀過 1 到 2 個檔案就壓縮時,規則檔也會被重新讀取而留下原文,讀過 9 個檔案時就沒有留下,因此用很短的對話測試時,會看到帶有
paths的規則還在。
總結
每次工作都要遵守的規則要改成每次啟動都載入,而只和特定檔案有關但不能忘記的規則,可以在壓縮時用 hook 放回。實測帶有 paths 的規則在壓縮後只剩摘要,但改成這兩種做法後,Agent 都能看到規則的原文。