AIDive

我刪了真實專案裡 177 行的 CLAUDE.md,測量壞了什麼

AIDive · 發布

編碼 agent

刪除、測量、一條規則壞了

刪掉 CLAUDE.md,代表移除 Claude Code 在每一場對話開始時都會讀取的指示檔案。Claude Code 的創造者 Boris Cherny 曾在台上說,每六個月就該刪一次。七週內有 22 支影片重複這句話,沒有一支真正打開過一個專案。

這篇文章做了那些影片沒做的事:拿一個有 177 行 CLAUDE.md、三個 skill、四個指令和一個 hook 的真實應用,把五個日常任務分別在有檔案和沒檔案的情況下各跑一次,然後計算結果。44 次執行之後,剛好只有一條規則壞了。這個檔案在每個任務上都要花 token,數量從來不固定,而且其中有一行沒人能遵守。

那段影片,逐字重現,還有不是他說的兩句話

這段片段來自 Boris Cherny 在 YC Startup School 的演講,錄製於 Opus 5 發布隔天。他的原話是:每六個月,刪掉你的 CLAUDE.md,刪掉你的 skill,刪掉你的 hook,看看模型會怎麼做,可能會讓你驚訝。他說,對 Opus 5 而言,Anthropic 確實建議試試看:模型或許已經不再需要那麼多指示了。

三十秒之前,有一句沒人引用的但書。Anthropic 並不會刪掉整個程式庫,而是刪掉一大部分,並把這個過程稱為 ablation。完整的逐字稿今天依然保留這句話。Claude Code 系統提示裡有 80% 就是這樣處理的:先全部刪掉,再逐行找回來,逐行測量。

反應影片塞進他嘴裡的兩句話,演講裡根本沒有。「context、目標、以及完成的定義」這句話從未出現,最接近的說法是任務、防護規則、退出條件。「64 個 agent 一起重寫 Bun」也不是他的數字,那其實是 Jarred Sumner 在 Bun 那篇文章裡的說法。Cherny 自己說的是十一天,被問到數量時,他猜是數千次。

七週內有 22 支影片引用了這段片段,沒有一支真正做過測試。所以這篇文章做的,是他實際描述的方法:刪除、逐一找回來、測量。

測試工具:是 ablation,不是刪除

Ablation 指的是每次只拿掉設定裡的一個部分並測量效果,而不是全部刪掉再用猜的。CLAUDE.md 在每一場對話開始時會被讀取,而且每個回合都會再讀一次;skill 只有在被呼叫時才會載入。這個差異正是這次測量的重點。

Anthropic 內建了刪除開關:一個簡單的旗標,和 Cherny 在台上提到的變數一樣。這個專案是我自己的一個真實應用:177 行指示、三個 skill、四個指令,以及一個每次搜尋都會觸發的 hook。

項目 數值
日常任務 5(新增元件、編輯、重構、修改 store、架構問題)
設定組合 5(完整版、沒有檔案、沒有 skill、沒有 hook、什麼都沒有)
模型 固定一個
環境 空的設定目錄,每次執行前重新複製專案
執行次數 44
成本 $39

每次執行都用同一套方法評分,在同一份複製專案上,由腳本而非人工判斷。判斷是否壞掉的依據:專案自己的規則(import、型別、design token、翻譯),再加上 typecheck 和 lint。

目前唯一一個為這類 ablation 打造的工具 Caliper,只會拿掉 skill 和 MCP 伺服器,不會動到這個檔案;CLAUDE.md 的替換是手動完成的。限制只說一次:一個專案、一個模型、每個格子跑兩次、沒有逐字稿。第一組結果就定了調:重構任務的結果完全一樣,有檔案時花了 64 美分,沒有時是 63 美分。

壞掉的是什麼:一條規則,發生在新檔案

壞掉的那條規則是一條國際化(i18n)規則,用檔案自己的話說就是:一定要同時新增英文和法文,絕不把使用者看得到的字串寫死。在新增元件的任務上,有檔案時,四次執行全部都寫了翻譯檔案。沒有檔案時,四次裡有三次把標題寫死了。同樣的任務、同樣的專案、同樣的模型、同樣的提示。

新增元件 有寫翻譯檔案
有 CLAUDE.md 4 之 4
沒有 CLAUDE.md 4 之 1

編輯任務則說明了另外一半。每一種設定組合都做對了,即使什麼都沒有也一樣,因為周圍的程式碼已經教過模型:每個被編輯的元件旁邊,都已經有一個翻譯檔案。其他一切在全部 44 次執行中都維持一致:import 別名、用 type 而非 interface、design token、store 的寫法。程式碼本身就示範了這些,而這個檔案只是重複一遍。

ETH Zurich 的一篇論文在 138 個真實議題上測了同一件事。它的發現是:context file 不會提高成功率,成本卻平均多出約 20%,而且模型確實有遵循指示。有一個例外:有一次沒有檔案的執行,還是照樣寫了翻譯檔案。這條規則在沒有檔案時並非不可能做到,只是不可靠。只有一條規則壞了,就是程式碼教不會的那條。而省略這項工作的那次執行,也剛好是最便宜的一次。

這個檔案的成本,逐個任務

CLAUDE.md 的 token 成本,就是有檔案和沒檔案兩次執行之間讀取 token 數量的差異。

任務 沒有檔案時少讀的 token
新增元件 61%
編輯 15%
重構 5%
修改 store 4%
架構問題 14%
十次執行整體 32% token、22% 金額

32% 是每支影片都會拿來當標題的數字,但那是錯的數字。最大的節省來自那次沒有寫翻譯檔案的執行:便宜是因為做得比較少。當輸出結果完全相同時,這個檔案的成本是 4% 到 14%,而那篇論文的 20% 剛好落在這兩個數字之間。

這個機制大約是 1,800 個 token,每個回合都會重新讀取一次。Skill、hook 和知識圖譜,無論有沒有,都沒有產生可測量的差異。雜訊比其中大部分因素都更大:同一個任務、同一個檔案,一次花了 $2.11,另一次只花 $1.33。有兩次執行碰到了回合上限,一次有檔案、一次沒有。所以這個檔案到處都要花一點成本,只在一個地方值回票價,除非它也說了謊。

說謊的那些行

會說謊的行,指的是模型無法遵循、或者不管有沒有都不會改變結果的指示。前面提過的那一行就是:從 design-tokens 別名匯入 theme。這個別名根本不存在:TypeScript 設定只對應了一個前綴,而 tokens 資料夾裡也沒有 theme 檔案。每一次執行,不管有沒有這個檔案,做的都是和周圍程式碼一樣的事,同一行 import 寫了 44 次。

這個檔案裡有 82 行架構總覽。同樣的問題,問了六次,答案都一樣:六次全都找到同樣的九個檔案,從後端到畫面,順序也一樣,不管有沒有這份總覽都一樣。其中有一段指向一個這個複製專案裡根本沒有的知識圖譜;就算圖譜存在,這個問題的成本也沒有變。

指標 數值
Anthropic 的檔案長度建議 200 行以下
這個檔案 177 行
reporails 三萬個專案資料集裡的中位數檔案 50 個項目、12 條指示
這個檔案裡真正的指示行數 177 行中的 24 行

當兩條規則衝突時,決定哪一條勝出的是它們的位置,而模型從不會說明這一點,某家廠商的測試裡差距接近九十個百分點。這份總覽或許對這次沒測試到的任務有幫助:只問了一次,只有一個答案。所以總共有三種行:值回票價的那一種、程式碼已經教過的那一種、還有會說謊的那一種。

留下、搬走、刪除:精簡清單

分成三堆,每一堆背後都有測量依據。

分類 內容 測量依據
留下 程式碼示範不出來的規則 6 行,救回了 4 次執行
搬走 架構總覽和指令清單 107 行,沒有測到任何收益
刪除 會說謊的行,以及程式碼樹本身已經呈現的行 44 次一致的結果

留下模型錯過兩次的東西,這正是 Anthropic 自己對這個檔案的判準。把總覽和指令搬進一個需要時才會載入的檔案樹;Anthropic 七月那篇文章說,單一集中的檔案是個迷思。Hook 則保留下來:閘門不會因為模型變強而過期。要砍掉的是模型已經學會的那些文字,留下的是閘門本身。

事後的檔案大概剩七十行左右,加上那六行值回票價的規則。這就是 Cherny 方法完整的樣子:刪除、逐行找回來、測量。一個專案、一個模型、每個格子跑兩次;你分堆的結果會不一樣,方法不會。刪除只弄壞了一條規則,省下的也不多。找出那些會說謊的行,才是真正的收穫。

來源

常見問題

你該像 Boris Cherny 說的那樣刪掉你的 CLAUDE.md 嗎?
不能盲目照做。Cherny 的演講描述的其實是 ablation:刪除檔案、逐行找回來,然後逐行測量。在一個真實的 177 行檔案上,刪除它在 44 次執行中弄壞了一條規則,省下的也不多;真正的收穫是找出那些會說謊的行。
刪除 CLAUDE.md 會弄壞什麼?
在這個專案裡,只有一條規則:一定要同時新增英文和法文翻譯。沒有這個檔案時,在新增元件的任務上,4 次裡有 3 次把標題寫死。其他規則都沒事,因為周圍的程式碼已經示範過了。
CLAUDE.md 會耗費多少 token?
大約 1,800 個 token,每一個回合都會重新讀取一次。逐個任務來看,沒有這個檔案時讀取的 token 少了 4% 到 61%;當輸出結果相同時,這個檔案的成本是 4% 到 14%,這和 ETH Zurich 那篇論文在 138 個真實議題上測出的平均 20% 相符。
CLAUDE.md 裡應該留下什麼?
留下程式碼示範不出來的規則,這也正是 Anthropic 自己的判準:留下模型錯過兩次的東西。把總覽和指令清單搬進需要時才載入的檔案,刪掉指向不存在事物的指示,並保留 hook,因為閘門不會因為模型變強而過期。
像 CLAUDE.md 或 AGENTS.md 這樣的 context file 會提升編碼代理的表現嗎?
ETH Zurich 針對 138 個真實議題的論文發現,context file 不會提高任務成功率,還會讓推論成本平均多出超過 20%,即使模型確實有遵循指示。這次在單一專案上的測量結果也落在相同範圍內。
以 Claude Code 的說法,什麼是 ablation?
每次只拿掉設定裡的一個部分,固定同一個模型,每次執行前都重新複製專案,然後測量結果。Anthropic 用這個方法刪掉了 Claude Code 系統提示的 80%;這裡則測了五種設定:完整版、沒有檔案、沒有 skill、沒有 hook、什麼都沒有。

相關影片