Claude Code 上下文視窗滿了?壓縮、清除或重新開始
Claude Code 或其他程式開發代理的上下文快用完時,在壓縮、清除與開新工作階段之間做選擇,並用交接筆記保留已做的決定。
Claude Code 的上下文視窗快滿時,它會自行處理:先清除較舊的工具輸出,必要時再把對話整理成摘要。早期的指示可能因此遺失,所以最好先自己做選擇。如果你還在做同一項任務,執行 /compact 並附上要保留哪些內容的說明。如果接下來要做不相關的工作,執行 /clear。如果代理一直忘記已做的決定,就寫一份簡短的交接筆記,用它開始新的工作階段。
其他程式開發代理的指令可能不同,但面對的選擇是一樣的。只要代理有回報,Mono 就能顯示上下文用了多少,但壓縮和清除是由代理執行的。
1. 了解什麼會填滿上下文視窗
上下文包含代理工作時依據的一切:你的訊息和它的回覆、它讀過的檔案、指令與測試的輸出、已連線 MCP 伺服器的工具清單,以及開始時載入的指示檔案。一份很長的測試記錄,分量就可能超過你輸入過的所有內容。
快要填滿的跡象:
- 代理違反你先前給的規則。
- 它問了你已經回答過的問題。
- 出現上下文即將不足的警告。
在 Claude Code 中,/context 會顯示哪些內容占用了空間。它的運作方式概覽說明了接近上限時會發生什麼事。
虛構範例:你在「tidy-recipes」中把 30 個檔案從舊的日期輔助函式 oldDate() 改為新的 formatDate()。進行兩個小時後,代理又問了一次該用哪個函式庫。/context 顯示視窗幾乎已滿。
2. 在壓縮、清除與新工作階段之間做選擇
壓縮會在同一個工作階段中,用摘要取代原本的對話。清除或開始新的工作階段則會捨棄對話,但指示檔案會重新載入。每個選擇都會失去一些東西:
| 情況 | 該怎麼做 | 會失去什麼 |
|---|---|---|
| 同一項任務,進展順利 | 附上重點說明後壓縮 | 摘要略過的細節 |
| 接下來是不相關的工作 | 清除,或開始新的工作階段 | 整段對話 |
| 代理忘記已做的決定 | 寫交接筆記,開始新的工作階段 | 交接筆記沒寫到的部分 |
重點說明告訴摘要要保留什麼,例如 /compact Focus on date decisions and failing tests(重點放在日期相關的決定與失敗的測試)。Claude Code 的成本管理指南示範了這個用法,並建議在 /clear 之前先執行 /rename,之後就能用 /resume 重新開啟該工作階段。
在這個範例中,代理已經忘了一項決定,所以要寫交接筆記。
3. 重設前先寫交接筆記
交接筆記是給新工作階段的簡短說明。你可以自己寫,或修正代理擬好的草稿:
Goal: Replace oldDate() with formatDate() in recipes/ (30 files).
Done: 18 files, on branch tidy-dates.
Decisions: formatDate() uses Intl.DateTimeFormat, so no new library.
Keep oldDate() for importing v1 files, which use the old format.
Open problem: The recipes/print.ts test has failed since the change.
Next step: Fix print.ts, then move the remaining 12 files.每個決定都要附上理由,否則下一個工作階段可能會把它推翻。把筆記存在專案裡或你的筆記中,並匯出對話,以備之後需要查看細節。
接著執行 /clear,或在同一個專案中開始新的工作階段,只貼上交接筆記,不要貼上完整的對話紀錄。
4. 把長期規則移出對話
有些修正不只適用於一項任務。如果你一直重複「使用專案的日期輔助函式」或「用專案的指令碼執行測試」,就把規則寫進專案的指示檔案,例如 AGENTS.md 或 Claude Code 的 CLAUDE.md。新的工作階段會讀取這個檔案,所以重設不會讓規則消失。
這個檔案要保持簡短,因為每個工作階段都會載入它。成本管理指南建議 CLAUDE.md 不要超過 200 行。像「30 個檔案已完成 18 個」這樣的進度,則留在交接筆記裡。AGENTS.md 指南說明了該寫些什麼。
範例中的 v1 規則也要寫進去:只要還有 v1 檔案,這條規則就一直有效。
5. 減少每一輪新增的內容
上下文越小,就能撐得越久。每次提出要求前:
- 指明檔案和函式,而不是說「修好日期」。
- 貼上相關的錯誤行,而不是整份記錄。
- 只執行需要的測試,並且只顯示失敗項目。
- 中斷專案用不到的 MCP 伺服器連線。
- 在代理支援時,把大範圍的搜尋交給子代理。
- 一個工作階段只做一項任務。
成本管理指南涵蓋了其中大部分做法,包括一個篩選測試輸出的 hook。
6. 重設後檢查代理
在新工作階段修改任何內容之前,請它重述目標、決定和下一步,並把回答和你的交接筆記對照。在這個範例中,它應該不用提示就說出 v1 規則。如果有遺漏,現在就糾正。接著在它繼續之前,審查它的第一份 diff,也就是 print.ts 的修正。程式碼審查指南提供了一份檢查清單。
在 Mono 中,當代理回報用量時,訊息輸入框上方的小圓環會顯示已使用的上下文。用到一半時,它會從綠色變成橘色,到 80% 時變成紅色;按下它會顯示「上下文:已用量 / 總量」。輸入「/」會列出代理提供的斜線指令。依照 Agent Client Protocol 的規範,代理不一定要提供這份清單。若要重新開始,先用「匯出對話」儲存舊的對話,再在專案卡片上選擇「新增工作階段」(電腦連線時,用手機也可以)。Mono 還沒有正式推出,但你可以加入候補名單。
