TL;DR
- 在一個真實的 repo 上(177 行的 CLAUDE.md、3 個 skill、1 個 hook),全部刪掉之後只壞了一條規則,而且只出現在一種情境:全新檔案的 i18n 規則。其他慣例都守住了,因為周邊的程式碼已經示範過了。
- 在輸出相同的任務上,這個檔案花掉 4 到 14% 的讀取 token,大約十分之一的費用。標題上的 32% 節省,主要來自那一個「檔案讓模型多做事」的任務。
- Skill 和 hook 沒有可量測的成本:skill 只在被呼叫時才載入,而這次沒有任何一個被呼叫;hook 只注入一句話。
- 82 行的架構總覽在架構問題上毫無貢獻:六個答案全部正確,有沒有這個檔案都一樣。
- Anthropic 自己說的「刪除」,意思是做消融(ablate)並改用漸進式揭露(progressive disclosure),不是整個抹掉。保留程式碼教不會的規則,其餘搬到 rules 檔和 skill,不能妥協的規則改寫成 hook。
- 每個設定只跑兩次是下限,不是結論:單一任務差距在 15% 以內,都落在每次執行的雜訊範圍內。
量測結果怎麼說
大家都在討論的那場演講講了兩件事,第二件常被忽略。Boris Cherny 在台上證實 Claude Code 刪掉了 80% 的 system prompt,並說明方法:先刪掉整份 system prompt,再一行一行加回來,量測每一行的影響 s2。「every 6 months」那段在 00:06:58 到 00:07:05,原話是「really do recommend」,不是「strongly recommend」 s1。廣傳的兩句話其實不在演講裡:「context, goals and a definition of done」(15:22 最接近的真實說法是「describe the task, the guardrails, the exit criteria」)以及「64 agents」。他說的是「eleven days」,被問到 agent 數量時回答「I'm not sure」 s2。64 這個數字出自 Bun 改寫文章:「64 Claudes running for 11 days」,以 API 價格計約 $165,000、90 億個未快取輸入 token、6.9 億個輸出 token、720 億個快取輸入 token 讀取 s14。
讓這一切可以量測的機制是載入方式。CLAUDE.md 和 rules 檔每一輪都會注入;skill 只在被呼叫時才載入。記憶文件也寫了大家一直在轉述的大小建議:「target under 200 lines per CLAUDE.md file. Longer files consume more context and reduce adherence.」 s4。Anthropic 的書面版本把「集中式 CLAUDE.md」說成迷思,改指向漸進式揭露和 auto-memory s3。
在我們之前唯一的對照研究是 ETH 那篇關於 AGENTS.md 的論文:12 個 repo、138 個 issue,結論是「providing context files does not generally improve task success rates, while increasing inference cost by over 20% on average」。開發者自己提交的檔案平均比 LLM 產生的好 7%,而指名具體工具的指令確實有幫助 s5。
另有兩個關於檔案內容與讀取方式的資料點。在 28,721 個 repo、165,063 個檔案中,指令檔的中位數有 50 個內容項目,其中真正的指令只有 12 個;作者的說法是,檔案裡只有 27% 在做你以為它在做的事 s8。在一個兩條指令真正互相衝突的對照實驗裡,把單一規則從檔案最上面移到最下面,模型遵守它的頻率會擺盪約 90 個百分點,從幾乎從不到幾乎總是 s9。同一個發布者也劃出了我們實驗遵循的界線:消融不是刪除,hook 是強制執行,不會隨模型升級而失效 s7。
有兩個非正式的先驗和我們的結果吻合。用同一個模型、同樣的 GitHub issue,比較 1,000 行的 CLAUDE.md 與精簡到約 20 行的版本:架構沒問題,內部規則壞了 s6。一位留言者把所有東西搬到漸進式揭露,回報每個 session 自動載入的上下文從約 35k token 降到約 4.5k,沒有刪掉任何知識 s11。要評分 skill 消融有現成工具:caliper 的 --ablate 涵蓋 skill 和 MCP server,compare 會回報成功率、token 和耗時;CLAUDE.md 的替換仍需手動 s16。
量測
實驗設定:一個私有的 Expo / React Native repo(1,021 個追蹤檔案),CLAUDE.md 為 177 行、7,243 個字元、約 1,800 個 token,3 個 skill、4 個 slash command、1 個 PreToolUse hook。每次執行都固定模型為 claude-opus-5,Claude Code 2.1.278,headless claude -p,--max-turns 40,使用者設定目錄為空,沒有 MCP,每次執行前重置為全新 clone。五個日常任務(新元件、編輯元件、重構共用 helper、持久化 store 欄位、解釋資料路徑),每次只消融一個部分。共 44 次執行,以 API 價格計 $38.97,agent 耗時 92 分鐘。評分方式:新增行是否符合 repo 自己的內部規則、tsc --noEmit、eslint,答案由人工評分。
品質,哪裡壞了:
| 設定 | 編輯執行次數 | 違反內部規則 | tsc 新錯誤 | eslint 錯誤 |
|---|---|---|---|---|
| A 完整 | 8 | 0 | 0 | 0 |
| B 沒有 CLAUDE.md | 8 | 1(新標題寫死,沒有 .content.ts) |
0 | 0 |
| C 沒有 skill | 4 | 0 | 0 | 0 |
| D 沒有 hook | 4 | 0 | 0 | 0 |
| E 全部移除 | 8 | 2(標題寫死兩次,沒有 .content.ts) |
0 | 0 |
每次執行的成本,取該設定所有執行的平均(token = 快取讀取,也就是每一輪重新讀取的上下文):
| 設定 | 執行次數 | $ / 次 | 輪數 / 次 | 讀取 token / 次 |
|---|---|---|---|---|
| A 完整 | 10 | 0.95 | 25.6 | 829k |
| B 沒有 CLAUDE.md | 10 | 0.74 | 21.9 | 568k |
| C 沒有 skill | 5 | 0.96 | 28.2 | 819k |
| D 沒有 hook | 5 | 0.96 | 27.8 | 851k |
| E 全部移除 | 10 | 0.85 | 25.7 | 655k |
各任務由 A 到 B(各 2 次執行的平均):
| 任務 | A $ | B $ | 成本 | 讀取 token |
|---|---|---|---|---|
| T1 新元件 | 1.72 | 0.96 | -44% | -61% |
| T2 編輯元件 | 1.49 | 1.26 | -15% | -15% |
| T3 重構 | 0.64 | 0.63 | -1% | -5% |
| T4 store | 0.57 | 0.53 | -6% | -4% |
| T5 問答 | 0.34 | 0.31 | -9% | -14% |
| 全部 10 次執行 | 9.51 | 7.40 | -22% | -32% |
怎麼讀這些表。沒有 CLAUDE.md 時,4 次新元件執行中有 3 次把標題寫成純字串;有的話,4 次全都建立了含 EN 和 FR 的 .content.ts。在編輯任務上,每一種設定(連 E 也一樣)都把新字串放進 .content.ts:相鄰的檔案已經示範了這個慣例。其餘在 44 次執行中全部守住:0 個相對 import、在型別檔的六次編輯中都用 type 而不是 interface、每個 diff 都用設計 token、0 個十六進位顏色、沒有 barrel 檔案。有一條指令沒有人做得到:檔案要求從 @design-tokens import theme,但 tsconfig.json 裡根本沒有這個 alias;任何設定下都沒有任何一次執行用到它,每個 session 白讀 1,800 個 token。T1 的節省,其實是比較便宜的那次執行做得比較少。執行之間的變異比大多數設定的效果還大:完整設定下的 T1 先花 $2.11,再花 $1.33。加上 333 MB 程式碼圖譜的對照組,結果落在完整設定的數字上(T1 為 $1.59 對 $1.72,T5 為 $0.38 對 $0.34):圖譜區塊和 hook 沒有造成可量測的差異。
週一就做
- 數一數你的 CLAUDE.md:行數、字元數,以及真正屬於指令的行數(Always、Never、Use、Prefer)。其餘都是模型每一輪重讀的背景資訊。
- 每個段落挑一條慣例,檢查相鄰檔案是否已經示範過。如果同資料夾有三個檔案遵守這條規則,這一行就是刪除的候選。
- 找出程式碼在全新檔案上教不會的那條規則(i18n、遙測、授權標頭、必要的註冊步驟)。留下它,用一行寫清楚,並放在靠近最上面的位置。
- 把檔案裡提到的每個 import 路徑和指令都實際試一遍。失效的 alias 或改名的 script 都是沒有人做得到的指令。
- 把冗長的架構總覽和設定教學搬到 rules 檔或按需載入的 skill,然後比較前後自動載入的上下文。
- 把你的兩三條不能妥協的規則改成 hook 或 lint 規則。強制執行不必依賴模型讀完一段文字。
- 在固定模型上,把你最常做的兩個任務各用該檔案跑兩次、不用該檔案跑兩次,然後看 token 和 diff。兩次只能告訴你該看哪裡,不能告訴你結論。
延伸閱讀
- 演講本身,看方法而不是金句:先刪除,再一行一行加回來 s2。
- 論文的完整結果,包括開發者提交的檔案比產生的檔案好 7%,以及指名工具有幫助 s5。
- 把規則位置當成變數:約 90 個百分點的擺盪,以及模型如何默默解決互相衝突的指令 s9。
- 3 萬個 repo 的指令檔剖析:50 個項目、12 個指令,以及其餘 38 個是什麼 s8。
- HumanLayer 的 CLAUDE.md 撰寫指南,以及和它唱反調的討論串 s10。
- 「MUST use agent,80% 的時候被忽略」討論串:文字失效時使用 hook 的案例 s12。
- 「Claude Code now ignores everything」討論串,可用來區分模型漂移和指令衝突 s13。
- caliper,用成功率、token 和耗時為 skill 與 MCP 消融評分 s16。
來源
- Boris Cherny: We Cut 80% of Claude Code's Prompt, Y Combinator. 為什麼值得讀:原始引言,附上短片被剪掉的但書。
- Transcript of the talk, Y Combinator. 為什麼值得讀:可搜尋的文字,用來核對哪些話說過、哪些沒說過。
- The new rules of context engineering for Claude 5 generation models, Anthropic. 為什麼值得讀:建議的書面版本,主張漸進式揭露優於集中式檔案。
- Memory docs: CLAUDE.md and rules files, Claude Code docs. 為什麼值得讀:什麼每一輪載入、什麼按需載入,以及 200 行的建議。
- Evaluating AGENTS.md, arXiv. 為什麼值得讀:在本實驗之前,唯一對 context 檔案做過的對照量測。
- Should you delete your CLAUDE.md every 6 months?, Modern Creator. 為什麼值得讀:1,000 行對 20 行的非正式比較,壞掉的模式和我們一致。
- Opus 5: delete your CLAUDE.md?, reporails. 為什麼值得讀:消融與刪除的差別,以及 hook 為什麼撐得過模型升級。
- The State of AI Instruction Quality: 30k-repo analysis, reporails. 為什麼值得讀:中位數的指令檔實際上裝了什麼。
- Opus 5: the cost of instruction conflicts, reporails. 為什麼值得讀:關於規則位置的對照實驗。
- Writing a good CLAUDE.md, HN thread, Hacker News. 為什麼值得讀:實務工作者在爭論什麼該放進這個檔案。
- Anthropic says keep CLAUDE.md under 200 lines, r/ClaudeCode. 為什麼值得讀:約 35k 降到約 4.5k 的前後對照留言。
- CLAUDE.md says MUST use agent, Claude ignores it, r/ClaudeCode. 為什麼值得讀:文字指令失效的具體案例。
- Claude Code now ignores everything, r/ClaudeCode. 為什麼值得讀:「好像有什麼變了」這種感覺背後的症狀回報。
- Rewriting Bun in Rust, Simon Willison. 為什麼值得讀:64 個 agent 和 $165,000 這兩個數字的出處。
- caliper, GitHub. 為什麼值得讀:用來為 skill 與 MCP 消融評分的測試工具。
FAQ
我該刪掉我的 CLAUDE.md 嗎?
不要盲目刪。在我們的 repo 上,唯一的損失是新檔案上的一條規則;程式碼本來就示範過的東西,沒有這個檔案也都守住了。一次消融一個段落,留下會改變輸出的部分。
如果檔案只花掉 4 到 14%,為什麼會省下 32% 的 token?
因為總數被新元件任務主導,在那個任務裡,檔案讓模型多寫了一個雙語檔案。比較便宜的那次執行只是做得比較少。在輸出相同的任務上,節省是 4 到 14%。
Skill 和 hook 每一輪都會花 token 嗎?
Skill 只在被呼叫時才載入,所以沒被呼叫的 skill 不花任何成本;hook 只注入一句話。把兩者都刪掉,在我們的執行中沒有改變任何數字。每一輪都會重讀的是 rules 檔和 CLAUDE.md。
每個設定跑兩次夠嗎?
不夠。兩次能找出效果在哪裡,但量不出效果有多大。同一個任務,我們的完整設定先花 $2.11,再花 $1.33,所以單一任務 15% 以內的差距都在雜訊範圍內。
AIDive