Karpathy 四原則·給 Claude Code 的紀律手冊
CLAUDE.md.
Andrej Karpathy 在 X 上拋出三個對 LLM 寫程式的尖銳觀察:模型會替你做錯誤假設、會把 100 行能解決的問題寫成 1000 行、會順手改掉它根本沒看懂的程式碼。
Forrest Chang 把這些痛點翻成一個 CLAUDE.md 檔案、四條原則——直接放進你的專案,Claude Code 讀到就會照做。它沒有複雜的 plugin、沒有依賴、沒有設定檔——就是一個 markdown 檔。
這個 repo 在 GitHub 上有 89,071 顆星。本文把四條原則拆解成可立即套用的 stage——每條原則 + 細則 + 自我檢驗。讀完你可以直接把 CLAUDE.md 拉進自己的專案。
Legend · 圖例
- Structural
- Principle
- Test / Highlight
- The Pitfall
思考再動手
說出假設、呈現多解、必要時推回、困惑時停下——把預設的偷偷詮釋變成顯性對話。
極簡為先
解問題的最少程式、不寫推測性的東西、不做沒人要的彈性與可設定。
外科級修正
只碰你必須碰的、只清自己造成的爛攤子;每行改動都能追溯到使用者的請求。
目標驅動
把祈使句翻成可驗證目標——強的成功標準讓 LLM 自己 loop 到通過。
模型會替你做錯誤假設並繼續跑下去——不檢查、不管理自己的困惑、不問問題、不浮現不一致、不呈現權衡、該推回時不推回。
它們很愛把程式跟 API 弄複雜、膨脹抽象、不清死代碼⋯⋯把 100 行就能解決的事寫成 1000 行的臃腫構造。
它們有時候會改/刪自己沒看懂的程式或註解作為副作用——即使這些跟當前任務根本無關。
顯性說出假設
不確定時,不要猜——直接問。把你打算採用的假設寫在回應裡,使用者可以否決或修正。
呈現多種解讀
遇到模糊指令時,把可能的詮釋都列出來——而不是默默選一個跑下去。讓使用者選。
該推回時推回
如果你看到更簡單的做法、或對方的方向有問題——說出來。Pleaser 不是好工程師。
困惑時停下
不確定的時候停下來,明確說出哪裡不清楚,然後問。「假裝懂」是大多數失敗的起點。
不超出需求
沒被要求的功能不要寫——「我想說可能用得到」是過度工程的入口毒品。
單次使用不抽象
只用一次的程式不需要 helper、不需要 base class、不需要 strategy pattern——直接寫死最直白。
沒人要的彈性不做
不要主動加 config、選項、開關——除非使用者明確說過要這樣。「以後可能要改」≠「現在要做」。
不可能情境不防
不為「不可能發生」的情境寫錯誤處理。內部呼叫不需要驗證、框架保證的事不需要再檢查。
200 行能變 50,重寫
寫完一看 200 行,但其實 50 行能解決——直接重寫。看起來「精簡」勝過看起來「全面」。
不改鄰近程式
不順手「改善」附近的程式、註解、或排版——即使你看到了問題。
不改沒壞的東西
沒壞的東西不要重構。看起來「可以更好」≠「需要現在改」。
順從既有風格
跟著現有風格寫——即使你覺得自己會用不同的方式。一致性比個人偏好重要。
看到死代碼提一下
看到不相關的死代碼?提一下、別動手刪。讓使用者決定要不要清。
清掉自己造成的孤兒
但你的改動產生的 unused import、變數、函式——這些是你的責任,要刪掉。
不刪預先存在的死代碼
除非使用者明確要求,否則別動「在你動工前就已經死掉」的程式。
把祈使句翻成可驗證的目標——這是 LLM 真正擅長的工作模式:
| 原本的命令 | 翻成可驗證目標 | |
|---|---|---|
| 「加上 validation」 | → | 「為非法輸入寫測試,然後讓它們通過。」 |
| 「修這個 bug」 | → | 「寫一個能重現它的測試,然後讓它通過。」 |
| 「重構 X」 | → | 「確保改動前後測試都通過。」 |
多步任務時,先寫一個簡短的計畫——每步配一個可驗證的檢查:
1. [Step] → verify: [check] 2. [Step] → verify: [check] 3. [Step] → verify: [check]
LLMs are exceptionally good at looping until they meet specific goals. Don't tell it what to do — give it success criteria and watch it go.
四個可觀察的訊號
Diff 中沒多餘改動
每一次 PR 的 diff 都只動到該動的——沒有 drive-by 的 refactor、沒有附帶清理、沒有亂改注解。
不再因過度複雜重寫
第一次寫出來就夠簡單——不會走完一輪後才發現「啊這個 50 行就好了」再重做。
澄清在實作之前出現
模糊需求會在動工前被點出來——而不是寫了 200 行才發現方向錯了。
PR 簡潔且最小化
合併進去的東西乾淨——沒有跟主題無關的「順便改善」、沒有亂入的 formatting commit。
Install · 兩種裝法
→ github.com/forrestchang/andrej-karpathy-skillsClaude Code Plugin
# 在 Claude Code 裡執行
/plugin marketplace add forrestchang/andrej-karpathy-skills
/plugin install andrej-karpathy-skills@karpathy-skills
CLAUDE.md(單專案)
# 新專案:直接下載 curl -o CLAUDE.md \ https://raw.githubusercontent.com/forrestchang/andrej-karpathy-skills/main/CLAUDE.md # 既有專案:append 進去 echo "" >> CLAUDE.md curl ...CLAUDE.md >> CLAUDE.md
1B 模型時代
同一個 Karpathy 的另一個論點——未來 LLM 不會更大而是更小,認知核心 + 外部記憶才是正解。
Agent Skills 工作流
把這四條原則變成可重複的工程軌跡——idea-refine、spec、planning、TDD、review、release。
Claude Design 系統提示解剖
把 340 行系統提示拆成五層 Guide——理解 CLAUDE.md 為什麼能改變 agent 行為的底層機制。