為什麼想查這個

2026-04-17,vault 剛搭起來第三天,我把 andrej-karpathy-skills 的四個行為原則寫進 CLAUDE.md 和每個 skill。原因很直接:LLM 執行 skill 時總會「順手多做一點」,例如看到格式不統一就整份重寫。

五月重寫 CLAUDE.md 時,四原則整段搬到 vault 裡一頁獨立的 Karpathy 四原則,CLAUDE.md 只留一行指標:

執行任何 skill 前先看 karpathy-guidelines(4 原則:行動前陳述理解/最小化/手術式修改/目標驅動驗證)。

半年下來,CLAUDE.md 又長出很多規則。這次把上游 repo 的 EXAMPLES.md 九個範例拿出來,一個一個對照現在這份 CLAUDE.md:那行指標以外,四原則到底有沒有落成具體規則。

查到什麼

上游的四原則與九個範例

上游的出發點是 Karpathy 在 X 上對 LLM 寫程式的抱怨(原貼文):替你做了錯的假設然後一路跑下去、把 100 行能解決的事寫成 1000 行、順手改動與任務無關的程式。四原則各自對一類毛病:

原則一句話
Think Before Coding(行動前陳述理解)不假設、不藏起困惑、把取捨攤開
Simplicity First(最小化)寫出解決問題的最少程式碼,不放臆測性的東西
Surgical Changes(手術式修改)只碰非碰不可的地方;每一行改動都要能追溯到請求
Goal-Driven Execution(目標驅動驗證)定義成功標準,迴圈到驗證通過為止

EXAMPLES.md 每條原則配二到三個範例,都是程式情境。以下逐一對照。CLAUDE.md 的引文照原文。

1. 隱藏的假設:匯出使用者資料

上游:LLM 自行決定範圍、檔案位置、欄位、CSV 格式。該先問範圍、交付方式、敏感欄位、資料量。

CLAUDE.md:最接近的是把「敏感資料」這一題直接寫死答案,不留給模型假設:

vault 含 finance/(真實資產數字)與 personal/,永遠不可轉公開。

personal/ 另外標明「私人紀錄,不入 wiki 流」。其他假設(範圍、位置)靠的是那一行四原則指標,和各 skill 動手前的「行動前陳述」。

2. 多種解讀:讓搜尋變快

上游:LLM 挑了一種「快」的意思就動手。該列出幾種解讀,問要哪個。

CLAUDE.md:這一題的作法跟上游相反。遇到「這頁該放 engineer 還是 ideas」這種多解讀,CLAUDE.md 不叫模型問,而是給預設值:

engineer vs ideas 是預設值,不是分類學:概念頁預設進 ideas……判不出來就 ideas——……放錯之後搬一次即可,花時間裁決歸屬才是實際損失。

Inbox 分類也一樣:「不確定 → 讀內容判斷域」。可逆、搬一次就好的決定,用預設值取代提問。

3. 過度抽象:計算折扣

上游:為一個百分比計算建類別階層與設定檔。該寫一個函式,真的有多種折扣再加結構。

CLAUDE.md:域的結構規則幾乎就是這條的翻版,「從最小結構開始按需長大」:

域為頂層資料夾,從最小結構開始按需長大。……raw/ 不到 5 檔不建 wiki/。

開頂層域也要有門檻(預期高頻寫入、對外公開、累積 > 10 個 wiki 或 > 20 個 raw/logs,任一成立才開),否則留在 others/,而且「others/ 是單一扁平雜項域……不在其下開子域」。

4. 臆測性功能:儲存偏好設定

上游:加了沒人要的驗證、快取、通知選項。該只做被要求的事。

CLAUDE.md:有三處在擋「多做」:

  • 管線推進:產出型 skill 收尾時提議下一步,「提議即可,不強制執行」
  • Hub 策展頁:「新開 hub 需 tag 探勘數據支持(跨 ≥ 2 域的主題叢),維持少量」
  • 根目錄:「一次性腳本、分析報告、依賴檔……在 vault 外執行,產出物完成即刪(hook 會擋)」

5. 順手重構:修空 email 造成的崩潰

上游:修 bug 時順手重寫整段驗證、改註解。該只改處理空 email 的那幾行。

CLAUDE.md:用「不准動」的明文擋:

  • log:「一律 append 到當月檔檔尾……不回頭改舊月檔」
  • /note-enrich:「原文一字不改自成一塊」;「策展 wiki 頁不就地寫」
  • /wiki-build --promote:「原文不改,只用 vault 補 sources/連結」

6. 風格漂移:上傳功能加 logging

上游:加 logging 時順便改引號、加型別提示、重排格式。該照原檔風格。

CLAUDE.md:格式寫成固定規格,部分交給機器鎖:

  • 各域 index 的條目格式固定為「頁面連結 — 一行摘要」,摘要取自 frontmatter summary
  • Log 格式固定,operation 只能是列舉的十一種
  • 「換行由 .gitattributes 鎖定:LF 入庫,.ps1/.bat/.cmd 用 CRLF」
  • hooks 會擋下「wiki 頁缺 title/summary/tags/date」

7. 模糊 vs 可驗證:修好認證

上游:泛泛計畫就動手,沒有成功標準。該先鎖定具體問題,寫失敗測試再修。

CLAUDE.md:本身沒有寫成功標準,標準放在各 skill 的末尾。CLAUDE.md 寫的是驗收關卡:

不開 auto-commit——「commit 前先看 diff」是主要審閱關卡。

以及 /vault-maintain 的「--apply 修安全項、重跑 lint 驗證(刪除類另經 reviewer)」。

8. 多步驟要分段驗證:加 rate limiting

上游:一次塞進所有功能,沒有驗證步驟。該拆成可各自檢查的增量階段。

CLAUDE.md:工作流本身就是分段的:

  • 每個 session 在 worktree 裡改,收尾開 PR,「回報 PR 連結後停,由使用者 merge」
  • 推之前「本機先併 main……確認無 conflict marker」
  • 兩段式工作:triage 產出 review 等人填,「第一段只 git push -u origin HEAD、先不開 PR」,下次 session 接著做完才開 PR

範例 8 在 vault 的樣子:進 worktree、commit、本機先併 main、push 開 PR 由 Claude 做,最後看 diff 與 merge 由我做

9. 先重現再修:同分排序不穩定

上游:沒先重現 bug 就改排序邏輯。該先寫一個會失敗的測試,確認它失敗,再修。

CLAUDE.md:沒有對應的規則。vault 是內容不是程式,沒有測試;最接近的一句只是叫人把錯誤當真:

讀檔報 EUNKNOWN/The cloud operation is invalid 要當真的錯誤查。

這句說的是「別把錯誤解釋掉」,沒有說「先重現」。

對照結果

範例原則CLAUDE.md 裡的對應
1 匯出資料陳述理解敏感資料寫死答案(finance/personal 永不公開);其餘靠四原則指標
2 讓搜尋變快陳述理解反過來:可逆的多解讀給預設值,不問
3 計算折扣最小化域結構按需長大、建 wiki/開頂層域有門檻
4 儲存偏好最小化管線只提議、hub 要數據、一次性產物不留
5 空 email手術式log append-only、原文一字不改
6 加 logging手術式格式規格固定,換行與 frontmatter 由機器鎖
7 修好認證目標驅動成功標準在 skill;CLAUDE.md 只寫 diff 審閱關卡
8 rate limiting目標驅動worktree → 本機併 main → PR → 人 merge;兩段式工作
9 同分排序目標驅動沒有對應

九個範例對照 CLAUDE.md:綠色是文字規則,藍色是 hook 或 git 設定擋,橘色是人看 diff、人 merge 的流程關卡,灰色是沒有對應

跟我的關係

九個範例裡有八個在 CLAUDE.md 找得到具體規則,而且這些規則大多不是用四原則的字眼寫的。我之前整理 vault 演進時的結論是:護欄是長出來的。四原則是軟約束,hooks 是硬約束,worktree 是結構隔離,每一層都是前一層擋不住某類錯誤時才加上去。

目標驅動驗證那一條,我在整理多 agent 編排時寫過:它還是要我人工 review wiki 品質,這就是還沒下放的監督成本。這次對照也一樣,第 7、8 個範例在 CLAUDE.md 裡最後都停在「人看 diff、人按 merge」。

來源