你有沒有在 CLAUDE.md、AGENTS.md 這類寫給 AI 看的說明檔裡,寫過一條規則?像是「這個檔不要再加東西」「新功能放到別的檔」。
寫進去之後,AI 照做了多久?
7 月 11 日,usage 的 CLAUDE.md 裡加了一條規則:menubar.py 不准再長,新功能要放到別的檔。那天這個檔是 2006 行。
兩天後,7 月 13 日,兩個改動各讓它淨增 83 行和 77 行。到 7 月 29 日,它長到 2485 行。
usage 是我做的開源小工具,顯示 Claude Code、Codex 等 AI 工具的用量。menubar.py 是它在 Mac 選單列上那個小圖示和彈出面板的程式。
這個檔之前被拆過兩次(把一部分程式搬到別的檔):5 月 19 日一次,6 月 1 日一次。兩次拆完,都又長回去了。
所以 7 月 11 日,CLAUDE.md 裡替它加了一條「成長規則」。CLAUDE.md 是 Claude Code 每次開新對話都會先讀的說明檔,寫在裡面的東西,它每一次都看得到。規則的原文是:
Growth policy: this file has regrown to ~2000 lines twice. New feature logic must land in a leaf module (like `menubar_state.py` / `update_gate.py`); only the thin ObjC dispatch shell goes here.
意思是:這個檔已經長回去兩次了。新功能的程式要寫在另外的小檔案裡,這個檔只負責接住選單列上的操作,再轉給那些小檔案。
從 7 月 11 日到 7 月 29 日,有 30 個 commit(存進版本紀錄的一次改動)動過 menubar.py,其中 27 個是在加行,淨增 479 行。這些 commit 大多在訊息結尾寫著 Co-Authored-By: Claude,表示是跟 Claude Code 一起寫的。
加進去的有新功能,也有修正。7 月 13 日那兩個,一個在選單列加了一隻代表 Antigravity(Google 的 AI 寫程式工具)的獅子吉祥物,淨增 83 行;一個是效能修正,讓程式不要那麼頻繁地寫硬碟、重新整理畫面,淨增 77 行。7 月 29 日讓面板可以脫離選單列圖示自由移動,淨增 53 行。每一個單獨看都合理,也都不大。
7 月 31 日早上 9 點 59 分,說明檔裡這條規則被改寫了一次,多了一句:
(2485 at v0.29.9 — the policy is currently being ignored)
意思是 v0.29.9 版時這個檔 2485 行,這條規則目前被無視。說明檔自己這樣寫。
4 分鐘後,10 點 03 分,這條規則多了一個地方放:CI(每次推上 GitHub 就自動跑的一輪檢查)。這次改動的標題寫著:防止 menubar.py 第三次長回去。
新加的檢查是一支 40 多行的小程式 scripts/check_file_size.py,節錄核心的幾行:
CEILINGS = {
"menubar.py": 2500,
}
lines = len(path.read_text(encoding="utf-8").splitlines())
if lines > ceiling:
failures.append(
f"{name}: {lines} lines exceeds the {ceiling}-line ceiling. "
f"Move the new logic into a leaf module instead of raising this limit."
)
數行數,超過上限就讓 CI 失敗。上限設 2500,當時檔案 2485 行,只剩 15 行的空間。報錯訊息直接寫了該怎麼辦:把新邏輯搬到獨立模組,不要調高上限。
這支程式開頭的說明還寫了一條:每拆掉一段,就把上限往下降;永遠不要為了讓 CI 變綠去調高它。
加上限的同一天早上,又拆了兩次,上限跟著從 2500 降到 2350,再降到 2235。之後上限一路往下降,每一次都是有人又拆掉或拿掉一塊程式:
7 月 31 日 2500 → 2350 → 2235
8 月 2 日 2141 → 2120
8 月 5 日 1934
8 月 6 日 1582 → 1242
8 月 30 日 1135
9 月 10 日 1097
9 次調整,全部是往下。長回來的量只要超過當時的上限,那一天 CI 就會紅。
8 月 14 日早上,一個清理更新通知格式的改動,讓 menubar.py 從 1242 行變成 1243 行。推上去,CI 紅了:
menubar.py: 1243/1242 lines (over)
11 分鐘後,修正的工作單(交給 AI 的任務說明)派出去了。裡面有一條寫得很明白(「天花板」就是前面說的上限):
不准調高 scripts/check_file_size.py 裡的天花板數字。
AI 把一個獨立的函式整包搬到另一個檔,menubar.py 降到 1201 行,CI 轉綠。從紅燈到修好,14 分鐘。

8 月 27 日凌晨又紅了一次,這次超了 14 行。修法是把四段幾乎一樣的程式合併成一段,7 分鐘後降回 1241 行。
一次搬走,一次合併,上限一行都沒動。

同一條規則,放在兩個地方,結果差很多。
放在說明檔裡的 18 天,檔案長了 479 行。說明檔裡的規則,AI 每次都讀得到,可是這次的改動算不算違規,要它自己判斷。而每一個加進去的改動都不大,單獨看都說得過去。
放進 CI 之後,超標不用誰判斷。每一次推上去,那支程式都會數一次行數,超過上限就紅。紅了之後,工作單寫明不准調高上限,剩下的路就是把程式搬走或合併。CI 不會自己把檔案變小,它只管一件事:超過上限,就不放行。
寫在說明檔的規則,違反了沒有東西會自動提醒你。寫成 CI 檢查的規則,違反了就是一盞紅燈,誰都看得到。
現在就可以做一件事:打開你的 CLAUDE.md、AGENTS.md 或 .cursorrules,找一條你寫過的規則。
問自己:這條規則,能不能寫成一個會失敗的檢查?
能寫成檢查的,就放進 CI。寫不成的,才留在說明檔。
工作單裡有一格「做完怎麼算對」,Day 4、Day 8 到 Day 14 各在這格加了幾行。今天再加一行:
做完怎麼算對:
- (Day 4、Day 8 到 Day 14 加的幾行)
- CI 的上限檢查要過;超過時只准把程式搬走或合併,不准調高上限數字
說明檔那邊也加一條:寫給 AI 的規則,能量化的就寫成 CI 檢查,上限數字只准往下調。
今天的規則,搬進 CI 才守得住。明天看一個本來就在 CI 裡的檢查:usage 的介面文字有五種語言,有一個測試專門比對每種語言的翻譯條目齊不齊。8 月 6 日修掉的一個問題,日文和韓文各有 63 條翻譯,條目都在,內容是空的。這個測試照樣是綠的。
CLAUDE.md 說明:https://docs.claude.com/en/docs/claude-code/memor