Headroom 使用教程:給 Claude Code、Codex 和 AI Agent 省上下文

Headroom 是一個 AI Agent 上下文壓縮工具。本文整理 Headroom 的安裝命令、Claude/Codex/Cursor wrap 用法、MCP Server、proxy 模式,以及如何減少日誌、工具輸出和 RAG 片段的 token 消耗。

chopratejas/headroom 是一個給 AI Agent 做上下文壓縮的工具。它解決的問題很現實:Agent 一邊跑命令、一邊讀日誌、一邊搜尋程式碼、一邊塞 RAG 片段,很快就會把上下文視窗填滿,成本和延遲一起上來。

Headroom 的想法是:在內容進入 LLM 之前,先把工具輸出、日誌、檔案、RAG 片段和會話歷史壓縮一次。 README 裡寫的目標很直接:減少 60-95% token,同時盡量保持回答品質。

它解決什麼問題

現在很多 Agent 工具不是模型不夠聰明,而是上下文太髒:

  • greprg、日誌查詢一次回傳幾百上千行;
  • RAG 檢索片段重複、冗餘、格式混亂;
  • JSON、stack trace、SQL 結果裡有大量低價值欄位;
  • 多輪調試後,舊輸出佔上下文不走;
  • Claude Code、Codex、Cursor、Aider 等工具各自維護上下文,難以共享記憶。

Headroom 做的是「進入模型前的清潔工」。它不取代 LLM,也不取代 RAG,而是在 LLM 前面加上一層壓縮、路由、快取和可回溯檢索。

核心能力

從 README 看,Headroom 主要有幾種使用型態:

  • Library:在 Python 或 TypeScript 裡直接呼叫 compress(messages)
  • Proxy:透過 headroom proxy --port 8787 做 OpenAI-compatible 代理程式;
  • Agent wrap:用 headroom wrap claude|codex|cursor|aider|copilot 包一層現有 Agent;
  • MCP Server:提供 headroom_compressheadroom_retrieveheadroom_stats 給 MCP 用戶端使用;
  • Cross-agent memory:讓 Claude、Codex、Gemini 等工具分享本地記憶並自動去重;
  • headroom learn:從失敗會話挖礦經驗,寫入 CLAUDE.mdAGENTS.md
  • Reversible compression:原文不刪除,需要時可透過檢索工具取回。

這幾個形態很關鍵。它不是只能嵌入程式碼裡的 SDK,也不是只能當代理。你可以從最輕的 wrap 模式開始試,再決定要不要接到自己的應用程式。

它怎麼壓縮

Headroom 的架構有幾個關鍵字:

  • ContentRouter:識別內容類型,選擇對應壓縮器;
  • SmartCrusher:偏向處理 JSON 等結構化內容;
  • CodeCompressor:偏向處理程式碼和 AST;
  • Kompress-base:用於文字壓縮;
  • CacheAligner:讓 prompt 前綴更穩定,提高提供者 KV cache 命中率;
  • CCR:儲存原文,需要時再透過 retrieve 找回來。

換成人話說,它不是把所有內容都粗暴摘要成一段話,而是先判斷內容類型,再選不同壓縮策略。程式碼、JSON、普通文字、日誌和 RAG 片段,壓縮方式不應該一樣。

快速安裝

README 給出的安裝方式很直接:

1
2
pip install "headroom-ai[all]"
npm install headroom-ai

Python 側需要 Python 3.10+。安裝後可以先試試這幾個指令:

1
2
3
headroom wrap claude
headroom proxy --port 8787
headroom perf

如果你用的是 MCP 客戶端,可以走:

1
headroom mcp install

如果你只是想驗證效果,最簡單的是先跑 headroom perf,看它對典型工作負載能省多少 token。確認可用後,再把它接到 Claude Code、Codex、Cursor 或自己的 OpenAI-compatible 用戶端。

和普通摘要有什麼區別

普通摘要最大的問題是不可逆。日誌被總結成“資料庫連線失敗”,你就看不到原始錯誤碼、時間戳記、呼叫棧和上下文了。 Agent 後面如果需要細節,只能重新檢查。

Headroom 的一個重點是 reversible:原始內容保存在本地,壓縮後傳給模型;如果模型需要原文,再透過 headroom_retrieve 取回。這個設計更適合調試、程式碼搜尋和生產日誌分析,因為這些場景經常需要回到細節。

當然,這也意味著你要管理本地儲存和隱私邊界。雖然 README 強調 local-first,但只要你把壓縮後的內容發給雲端模型,還是要依照自己的資料安全要求處理。

適合哪些場景

我覺得 Headroom 最適合這些場景:

  • Claude Code、Codex、Cursor 常常因為工具輸出太長而變慢;
  • 用 Agent 分析大倉庫,搜尋結果和文件片段很容易爆上下文;
  • SRE 排障時要把日誌、trace、設定和指令輸出交給模型看;
  • 做 RAG 應用,檢索結果冗餘嚴重;
  • 想在多個 Agent 工具之間分享本地記憶;
  • 想把 MCP 工具連接到已有 AI 工作流程。

如果你只是偶爾問幾句聊天,或者 prompt 很短,就不一定需要它。 Headroom 的價值主要在「Agent 真正在工作」的時候出現。

使用時要注意什麼

上下文壓縮不是魔法。它能省 token,但也可能帶來新問題:

  • 壓縮策略不合適時,模型可能拿不到關鍵細節;
  • 程式碼和日誌場景要測試 retrieve 是否可靠;
  • 接代理模式時,要確認請求到底經過哪些本地端和雲端環節;
  • 團隊使用時,要定義好本機快取、會話記錄和敏感資料保留策略;
  • 不要只看 token savings,也要看任務完成率和誤判率。

我的建議是用真實任務測試,而不是只看 demo。例如拿一組歷史 bug、CI 日誌、RAG 查詢和程式碼搜尋任務,分別比較「直接餵模型」和「經過 Headroom」後的成本、速度和答案品質。

Claude Code 原生 Token 與快取最佳化

Prompt Cache 快取的不是文字本身

Prompt Cache 不是簡單地把提示詞字串存起來。對 Transformer 模型來說,更關鍵的是前綴上下文經過注意力層計算後的 Key/Value 狀態,也就是常說的 KV cache。

這意味著兩個事實:

  • 同一段上下文,只要前綴保持穩定,就可以在後續請求中複用一部分計算結果。
  • 如果模型、工具定義、系統提示詞或前綴訊息發生變化,之前的快取就可能無法複用。

Anthropic 官方文件也把失效層級概括為 tools -> system -> messages。工具定義變化會影響整段快取,系統層變化會影響 system 和 messages,messages 層變化則主要影響訊息快取。

Claude Code 裡還會額外涉及 CLAUDE.md、Skills、MCP、外掛和子代理等上下文,所以實際使用時更容易踩到快取失效點。

快取殺手一:中途切換模型

切模型是影響最大的操作。

Prompt Cache 是按模型隔離的。Opus、Sonnet、Haiku 這類模型的結構和權重不同,同一段文字算出來的 KV cache 也不同。你在 Opus 裡跑了很長上下文,再切到 Sonnet,並不能讓 Sonnet 複用 Opus 的快取。

這會帶來一個反直覺結果:中途為了省錢切模型,可能反而讓前面已經累積的快取全部失效。原本可以按 cache read 價格讀取的上下文,需要重新寫入和計算。

更穩妥的做法是:

  • 主對話盡量固定一個模型。
  • 需要便宜模型處理支線任務時,用 subagent 隔離出去。
  • 讓支線代理完成搜尋、探索、整理,再把結果摘要交回主對話。

這樣主對話的長上下文盡量不動,快取命中率更穩定。

快取殺手二:中途新增 MCP 或重載外掛

MCP 會向 Claude Code 提供工具。新增 MCP 伺服器後,工具列表會變化,而工具定義處在上下文鏈條最左側。

從 Prompt Cache 的角度看,工具列表一變,後面的 system 和 messages 都可能需要重新計算。尤其是 MCP 很多時,工具定義本身就可能占用大量 Token,快取失效的代價會很明顯。

不過有一個細節:Claude Code 通常在會話啟動時讀取 MCP 配置。你中途改了配置,當前 session 不一定立刻受影響。真正需要小心的是觸發重新載入的動作,例如重啟、恢復會話、重新載入外掛或讓工具列表重新組裝。

建議是:

  • 開始長任務前,一次性裝好需要的 MCP。
  • 不要做一半才發現缺工具,再安裝並重載。
  • 對大型 MCP 工具集,優先考慮按需載入或減少預設啟用數量。
  • 不常用的 MCP 不要長期掛在預設配置裡。

如果工具定義穩定,Prompt Cache 才有長期命中的基礎。

快取殺手三:中途修改 CLAUDE.md

CLAUDE.md 是 Claude Code 的專案記憶文件,適合放構建命令、測試命令、架構約定、程式碼風格和專案注意事項。

它對 Claude Code 很有用,但也會進入上下文。官方說明指出,CLAUDE.md 會在 session 開始時讀取,並作為使用者訊息提供給 Claude;它也會使用 Anthropic 的 Prompt Cache。首次請求會按完整輸入計費,後續請求如果在快取有效期內命中,就按更低的 cache read 成本處理。

問題在於:CLAUDE.md 是內容定址的。你一改文件內容,舊快取就對不上了。

所以不要在長任務中途頻繁改 CLAUDE.md。更好的方式是:

  • 任務開始前先檢查 CLAUDE.md 是否夠用。
  • 把穩定規則寫進去,把臨時指令放在目前對話裡。
  • 如果只是一次性任務,不要為了臨時需求修改長期記憶文件。
  • 如果必須改,最好在一個階段結束後再開始新 session。

CLAUDE.md 應該是穩定的專案說明,而不是每輪任務都改的便條。

快取殺手四:中途安裝或更新 Skills

Skills 也是上下文的一部分。安裝新 Skill、更新 Skill,或者讓 Skill 列表發生變化,都會讓注入到會話裡的上下文不同。

這類變化通常不會在目前 session 裡立刻完整生效,而是在重新載入、恢復會話或新開會話時體現出來。問題是,一旦重新組裝 messages,舊快取就可能命中不了。

建議和 MCP 類似:

  • 開始任務前先確認需要哪些 Skills。
  • 同一類任務盡量固定 Skill 集合。
  • 不要在一個長任務中途邊做邊裝 Skill。
  • 如果安裝了新 Skill,最好把它當成新階段的開始。

對經常做內容生產、程式碼審查、部署、翻譯的工作流,可以把常用 Skills 固定下來,讓上下文結構盡量穩定。

快取殺手五:空閒時間超過 TTL

Prompt Cache 不是永久保存。常見預設有效期是幾分鐘級別,Anthropic 文件和 Claude Code 相關說明裡都提到過 5 分鐘左右的快取窗口。超過 TTL 後,即使你發送完全一樣的請求,服務端也可能已經清掉快取。

這也是很多長任務使用者的體感來源:剛才還很省,去喝杯咖啡回來,再發下一步,Token 又突然漲上去了。

長任務尤其容易遇到這個問題。你可能要看 Claude Code 的輸出、檢查文件、跑測試、思考下一步,這些操作一不小心就超過 5 分鐘。

如果你的使用環境支援,可以在長任務前啟用 1 小時 Prompt Cache TTL:

1
export ENABLE_PROMPT_CACHING_1H=1

在 Windows PowerShell 裡可以寫成:

1
$env:ENABLE_PROMPT_CACHING_1H="1"

需要注意的是,1 小時快取寫入成本通常會高於 5 分鐘快取寫入成本。它不適合所有短任務,但對大型程式碼庫、長對話、複雜多步驟開發任務,往往比頻繁快取過期更划算。

怎麼安排一次更省 Token 的 Claude Code 長任務

比較穩的流程可以這樣做:

  1. 任務開始前選定模型,不要中途頻繁切換。
  2. 提前啟用需要的 MCP,不用的 MCP 先關掉。
  3. 檢查 CLAUDE.md,只保留穩定、關鍵、長期有效的規則。
  4. 提前準備好本次任務需要的 Skills。
  5. 如果是複雜任務,考慮啟用 1 小時 TTL。
  6. 把大任務拆成幾個階段,但每個階段內部盡量保持上下文結構穩定。
  7. 需要探索支線問題時,用 subagent 或單獨 session,不要污染主對話。

這套做法的目標不是絕對不讓快取失效,而是避免那些代價最高、最容易被忽略的失效。

一個簡單判斷標準

你可以用一句話判斷某個操作是否危險:

這個操作會不會改變模型、工具定義、系統上下文或會話開頭的固定訊息?

如果答案是會,那它大概率會影響 Prompt Cache。越靠近上下文鏈條左側,影響越大。

常見操作可以這樣理解:

  • 切模型:高風險,模型快取隔離。
  • 新增 MCP 或重載外掛:高風險,工具列表變化。
  • 修改 CLAUDE.md:中高風險,專案記憶變化。
  • 安裝 Skills:中高風險,注入上下文變化。
  • 普通對話繼續追問:低風險,主要追加 messages。
  • 空閒超過 TTL:高風險,服務端快取過期。

小結

Claude Code 的 Prompt Cache 優化,關鍵不是背參數,而是讓會話前綴穩定。

模型不要隨便切,MCP 和 Skills 不要邊做邊裝,CLAUDE.md 不要當臨時草稿頻繁改,複雜任務盡量延長 TTL。只要這些基礎動作穩定下來,Claude Code 在長任務裡的 Token 成本和回應速度都會更可控。

最實用的一句話是:開始前配好,開始後少動。

小結

Headroom 是一個很典型的「上下文工程」工具。它不追求再造一個 Agent,而是站在 Agent 和 LLM 中間,把進入模型的內容壓乾淨、壓短,並保留取回原文的能力。

它適合已經在使用 Claude Code、Codex、Cursor、Aider、Copilot CLI 或 MCP 工具的人。如果你的痛點是“模型上下文經常被日誌和工具輸出撐爆”,Headroom 值得試;如果你的問題只是模型能力不夠,單純壓縮上下文就不一定能解決。

常見問題

這個專案是什麼?

它是本文介紹的一個 AI 工具專案,重點在於它能做什麼、怎麼使用,以及什麼情況下值得嘗試。

適合誰使用?

主要適合希望把專案接入真實工作流,而不是只閱讀 README 的開發者和 AI 工具使用者。

使用前應該檢查什麼?

先確認安裝方式、支援工具、資料與權限邊界,以及專案是否仍在快速變化。

適合直接用在生產環境嗎?

建議先小範圍測試。確認行為穩定後,再考慮用於敏感或生產任務。

參考來源