Compounding Engineering(複利式工程)
把 CLAUDE.md(專案手冊) 當持續累積的學習系統——每次 Claude 犯錯就加一條規則,下次就不會再犯。錯誤不再是錯誤,而是未來品質的本金。
起源
- 概念命名:Dan Shipper(Every CEO)
- Boris Cherny 採用:把 Anthropic 內部 CLAUDE.md 維護法歸納成此名(Boris Cherny 在 X 上稱:“Boris calls it their version of Compounding Engineering”)
- 核心比喻:軟體工程的複利——每次學習都加總到下一次的起點,時間越久優勢越大
機制
Claude 出錯
↓
工程師發現
↓
加一條規則進 CLAUDE.md
↓
下次 Claude 不犯同錯
↓
時間越久,CLAUDE.md 越精確 → Claude 越聰明 → 出錯越少
這跟「人類工程師每次犯錯都記在 wiki」一樣,只是這份 wiki 是機器讀的,自動套用到所有未來 session。
三個關鍵實踐
1. 寫「為什麼」而非「不能做什麼」
Boris 的建議:不要寫「不要用 var」,要寫「不要用 var,因為我們的 lint 規則會擋,而且所有現有 code 都用 const/let」。
寫原因 → Claude 能類推;只寫禁令 → 邊界稍偏就破功。
2. 全團隊共同維護
“Anytime we see Claude do something incorrectly we add it to the CLAUDE.md, so Claude knows not to do it next time.” — Boris
繁中:「每次看到 Claude 做錯事,我們就加一條進 CLAUDE.md,這樣下次 Claude 就知道不要再犯。」
Anthropic 團隊每週更新 CLAUDE.md 多次。每個工程師發現的錯都加進去,所有人共享。約 2,500 tokens、上百條規則。
3. @.claude 自動學習(最強的一環)
在 GitHub PR review 裡 tag @.claude,Claude Code 的 GitHub Action 自動把這條 review 寫進 CLAUDE.md,作為 PR 的一部分 commit 進去。
範例
// PR comment:
nit: use a string literal, not ts enum
@claude add to CLAUDE.md to never use enums,
always prefer literal unions
→ Claude 自動 commit:“Prefer type over interface; never use enum (use string literal unions instead)“
設定方式
$ /install-github-action裝完之後 PR comment 裡 @.claude 就會觸發。
4. 「結束時順便更新」(Boris 後續版本)
Boris 在 Jan 31 thread 補充另一個招式:每次糾正 Claude 後加一句:
“Update your CLAUDE.md so you don’t make that mistake again.”
繁中:「更新你的 CLAUDE.md,這樣你下次就不會再犯這個錯。」
→ Claude 自己寫規則進去。Boris 評論:
“Claude is eerily good at writing rules for itself.”
繁中:「Claude 寫規則給自己看時,準到讓人發毛。」
為什麼會「複利」
| 時間點 | CLAUDE.md 規模 | Claude 出錯率 |
|---|---|---|
| 第 1 週 | 10 條規則 | 高 |
| 第 1 個月 | 50 條 | 中 |
| 半年後 | 200+ 條 | 低(只在「沒人遇過的新場景」) |
| 1 年後 | 知識化石化 | 接近專家工程師水準 |
→ 新團隊與用了半年的團隊,犯錯率天差地別——但起點 CLAUDE.md 都是空的。差別在於有沒有持續加料。
跟 CLAUDE.md 4 層機制 的關係
兩個概念互補:
| CLAUDE.md 4 層機制 | Compounding Engineering | |
|---|---|---|
| 問題 | 規則放哪一層? | 規則怎麼累積? |
| 時間軸 | 一次性配置 | 持續演化 |
| 答案 | L1/L2/L3/L4 分層 | 飛輪 + @.claude |
合在一起:先用 4 層機制設好骨架,再用 Compounding Engineering 填血肉。
對 PAM 的應用
PAM 已有 ExamSystem/CLAUDE.md(2400+ 行)。可以加:
- 裝 Claude Code GitHub Action(
/install-github-action)→ PR review 直接@.claude - 建立糾錯模板:每次 Claude 寫錯 SQL(如 string concat)→ PR 評論:「`@claude add to CLAUDE.md: PAM 系統禁用 SQL string concatenation,一律用 EF Core / 參數化查詢」
- 每月 review CLAUDE.md:超過 5,000 tokens 就拆 L3 子目錄(如
Migrations/CLAUDE.md) - 建立反例檔:
{repo}/.claude/anti-patterns.md列出所有 Claude 曾經犯的錯與正確做法
反模式
- ❌ 只寫禁令、不寫原因 → Claude 邊界外的場景就破功
- ❌ 只有 1 個人加 → 變成個人 todo 而非團隊知識
- ❌ 加完就不 review → 規則互相矛盾、過時規則持續干擾
- ❌ 規則寫得太特定 → 換個檔案就不適用,等於沒加
相關概念
強連結(原文明確提及)
- CLAUDE.md(專案手冊) — 載體
- CLAUDE.md 4 層機制 — 互補的「靜態結構」面
- Boris Cherny — 命名與推廣者
- Boris Cherny 13 條心法 — 第 3、第 5 條的底層原則
- Slash Commands —
/install-github-action
推斷連結(LLM 認為相關,待確認)
- 反饋循環 ?? — 廣義來說是「人 → CLAUDE.md → Claude」的反饋
- Memory 記憶功能 ?? — Claude.ai 的對應飛輪機制
- wiki-ingest ?? — wiki 系統也是用「持續累積」的思想
深入閱讀
- 原文:Claude Code 之父怎麼用?Boris Cherny 的 10 個進階技巧
- howborisusesclaudecode.com Part 1 Tab 5
- Dan Shipper(Every)原始概念:https://every.to/
← 回到 wiki