標籤: Agent Teams

  • Jujutsu vs Git:從底層原理到 AI Agent Team 時代的版本控制選擇

    重點摘要

    • Git 的本質是一個 content-addressed key-value 資料庫,所有的 branch、rebase、reflog 都是建構在這個底層上的抽象
    • Jujutsu(jj)不是 Git 的替代品,而是把 Git 的 content-addressed 哲學「再往上推一層」 — 從檔案快照擴展到操作快照
    • Git 的核心限制不是指令不爽,而是它要求人類的同步注意力 — merge 衝突會 block 整個世界等你處理
    • jj 允許異步注意力 — 衝突變成 commit 的一種狀態,rebase 永遠不會停,你可以明天再一次處理完
    • Agent Team 有三種任務類型,jj 的價值差很多:Review(只讀)完全不需要 jj;Debug(試驗假設)是 jj 最被低估的甜蜜點;Dev(平行開發)在合併階段需要 jj
    • 最優的使用模式是 git 為主、jj 只在 Agent Team 合併階段出場 — 由 orchestrator agent 承擔 jj 學習成本,人類使用者和 subagent 全程保持 git 心智
    • 決策準則:默認 Git,三個訊號任一觸發時考慮 jj — 平行 Agent 撞車、review round 批次修正、Agent 實驗成本太高

    最近 GitHub 上 jj-vcs/jj(Jujutsu)越來越熱,社群討論開始出現「Git 要被取代了嗎」的聲音。我花了幾個小時認真研究這個工具,過程中意外地被迫重新理解 Git 的底層設計 — 因為只有懂 Git 真正是什麼,才看得懂 jj 想解決什麼。這篇文章就是這趟理解的完整紀錄,從 Git 底層原理開始,一路推到 AI Agent Team 時代的務實使用模式。

    結論先說:Jujutsu 和 Git 不是互斥關係。jj 的儲存後端其實就是 Git,你可以隨時切回純 Git 指令。真正該問的不是「要不要換」,而是「你的工作流是否已經撞到 Git 的設計假設」。而這個答案,必須先從 Git 的底層長什麼樣講起。

    先搞懂一件事:Git 其實是一個資料庫

    很多人用 Git 很多年,但沒意識到一件事:Git 本身就是一個資料庫,而且是一個設計極其精巧的資料庫。整個 .git/ 目錄就是一個 key-value store,只是它用檔案系統當儲存引擎而已。

    你現在去任何 git repo 跑 ls .git/objects/,會看到一堆兩位數的資料夾:00/ 01/ ... ff/,每個資料夾裡面有一堆 hash 開頭的檔案。這就是 Git 的資料庫。它叫 Object Database,key 是 SHA-1 hash,value 是壓縮過的內容。所有其他概念 — commit、branch、tag、stash、reflog — 全部都是建構在這個 key-value store 之上的抽象。

    四種物件,解構整個 Git

    • Blob:儲存單一檔案的內容,不包含檔名。SHA1(content) = hash,內容相同 hash 必然相同。同樣內容只存一份(自動去重)。
    • Tree:儲存一個資料夾的結構,內容是一張表 — 列出這個資料夾有哪些檔案(指向 blob)和哪些子資料夾(指向另一個 tree)。Tree 可以遞迴指向其他 tree。
    • Commit:儲存一個時間點的快照,內容只有幾行 — 指向根目錄的 tree hash、前一個 commit 的 hash、作者時間、commit message。Commit 本身不含任何檔案內容,它只是一個指標鏈的進入點。
    • Tag:annotated tag 的容器,對理解本質不重要,跳過。

    一個 commit 怎麼「記錄整個資料夾」

    你 commit 時,Git 為每個檔案內容計算 hash 建 blob,為每個資料夾建 tree(一張表,列出那個資料夾裡所有 blob 和 sub-tree 的 hash + 檔名),最後建 commit,只包含 root tree hash + parent hash + 作者 + 訊息。結果是一個指標鏈:commit → tree → sub-tree → blob每個 commit 都完整地、不可變地描述了那一刻整個資料夾的狀態,不是 diff,是完整快照。

    但每次存完整快照不會爆嗎?

    這就是 Git 設計最美的地方。答案是:不會爆,因為 content-addressed 帶來自動去重。你 commit 了 1000 次,但 99% 的檔案沒動,那 99% 的檔案永遠只有一個 blob,因為內容一樣 hash 一樣,儲存只有一份。改一個檔案的成本 = 1 個新 blob + 2-3 個新 tree + 1 個新 commit,其他全部重用。實際效果:Linux kernel 有 100 萬+ commits,整個 .git/ 也就 5 GB 左右。

    Git 從來不儲存 diffgit diff 是每次問的時候走訪兩個 commit 的 tree DAG、現場跑 Myers 演算法算出來的。這個設計的好處是:讀任何一個歷史版本都是 O(1),不用還原一串 diff 才能看到那個版本的樣子。這一切都是「content-addressed immutable store + pointer DAG」這一個設計決策的延伸。Linus 2005 年花兩週寫出 Git 核心,就是這個設計。後來所有東西都是在這個底層上加糖。

    Jujutsu 的核心創新:把 Git 的哲學再推一層

    現在你懂了 Git 的底層,就能看懂 jj 在做什麼。jj 沒有推翻 Git 的設計,它做的事情是:把 Git 的 content-addressed DAG 從「檔案狀態」擴展到「操作狀態」 — 同樣的哲學,應用在不同的層級。

    雙層身份:commit hash + change-id

    Git 只有一個 ID — commit hash,由內容決定。這導致 rebase 後 hash 全變,你找不到「原本那個 commit」。jj 對每個 commit 同時維護兩個 ID:commit hash(跟 Git 一樣)+ change-id(隨機產生的 128-bit ID,只在 commit 誕生時生成一次,rebase/amend/split/squash 都不變)。這個設計的意義是:身份認同不綁在 hash 上,綁在 change-id 上。你可以隨便改歷史,change-id 永遠追蹤得到「同一個概念上的改動」。這就是為什麼 jj 可以把「歷史重寫」當日常操作,而 Git 必須當儀式感操作。

    Op Log:第二層 content-addressed DAG

    jj 的另一個核心是 operation log。每個 jj 操作都產生一個 operation 物件,包含 operation id(hash)、parent operation、執行的指令、操作前後 repo 整體狀態的快照。這些 operation 本身也組成一個 DAG,content-addressed 儲存。注意這裡的模式跟 Git 完全一樣:不可變物件 + 指標 DAG + 內容定址。jj 只是把 Git 用來管檔案狀態的那套機制,再蓋一層管操作狀態。

    結果是 jj undo 變成一步 pointer 移動 — 直接把 repo view 指回前一個 operation 的「操作前快照」就好,不用反向計算任何東西。而且 undo 本身也是一個 operation,可以被 undo,可以無限回退。

    指令層面的六個差異

    面向 Git Jujutsu (jj)
    Staging Area working dir → index → commit(三層) working dir 就是 commit(兩層,無 git add)
    Branch 概念 一等公民,必須 checkout/rebase/merge 可選的 bookmark,每個 commit 有穩定 change-id
    Undo 機制 reflog(補救機制,90 天 TTL) jj undo(第一等操作,可無限回退)
    Conflict 處理 停止世界,當場解完才能繼續 衝突直接存進 commit,可延後解
    Stash 必要指令(stash push/pop/apply) 不存在,jj new 直接開新 commit
    歷史重寫 rebase -i 是儀式感操作 jj split / jj squash 是日常

    最重要的差異:同步注意力 vs 異步注意力

    到這裡為止,都還是「指令差異」和「設計哲學」的層面。但 jj 真正的價值,不在指令爽不爽,而在它如何消耗人類的注意力。這個差異是質變,不是量變。

    Git 是同步注意力模型 — merge/rebase 遇到衝突會停止世界,直到人類出現、看懂、解決、繼續。它要求你在「不可預期的時刻」立刻在場。這個模型在單人或 2-3 人團隊下完全沒問題,因為衝突頻率低、你本來就在鍵盤前。

    jj 是異步注意力模型 — rebase 遇到衝突不停下來,衝突被存進 commit 變成一種有效狀態,rebase 繼續往下跑。你可以明天處理、或一次批次處理所有衝突、或開另一個 Agent 專門解衝突。jj 允許人類「異步在場」 — 系統自己跑,有問題幫你記下來,你有空再來看。

    Git 的設計誕生於 2005 年,當時的假設是「careful human curator」 — 每個 commit 都是人類慎重思考後的決定,每個 merge 都有人類在場。但 Claude Code、Cursor、Copilot Agent 這類 AI 工具改變了「誰在產生 commit」這件事。Agent 產出的是高頻、探索性、非線性、大量並行的中間態。你不可能一邊看 3 個 Agent 平行工作,一邊在它們合併時即時解衝突,一邊決定每個中間態要不要保留。人類同步注意力的頻寬根本跟不上 Agent 的產出速度。

    jj 在這裡的價值不是「比 Git 更爽」,而是它讓 Git 做不到的事變可能 — 讓 Agent Team 真的平行跑到底,明天早上來一次處理所有衝突。這不是量變(爽度提升),是質變(能做的事情不同)。

    Workspace 隔離:平行的真正解法

    要澄清一個常見誤解:jj 本身不能解決「兩個 Agent 同時寫同一個檔案」這種檔案系統 race condition。檔案系統的併發是 OS 管的,任何 VCS 都介入不了。平行 Agent 的正確架構是每個 Agent 給一間房 — Git 用 git worktree add,jj 用 jj workspace add。每個 workspace 是獨立的 working directory,三個 Agent 在不同資料夾各寫各的,完全不會互相污染。

    Git 和 jj 在 workspace 隔離這一步的行為相同。差異出現在下一步 — 把三個 Agent 的輸出合併回 main 時。Git 會序列化 blocking(解一個、繼續、解下一個、繼續),你的注意力被三次阻塞切碎;jj 則是三個動作一氣呵成,最後一次性 batch 處理所有衝突。Workspace 隔離是必要條件,jj 的優勢出現在合併階段的併發模型

    Agent Team 的三種任務類型:jj 的價值差很多

    這是這篇文章最重要的一個區分,也是大部分「jj 推坑文」忽略的。你叫 Agent Team 做不同類型的事,jj 的價值完全不同 — 甚至有些情境 jj 根本沒有用。決定性的問題是:這些 agent 需要寫檔案才能完成任務嗎?

    類型 1:Review(只讀) — 完全不需要 jj

    場景:叫 Agent Team 做 code review、security audit、dead code 掃描、架構審閱。這些 agent 只讀檔案,產出報告,不寫任何東西

    這種場景 jj 沒有價值:沒有 commit、沒有 merge、沒有 undo 需求。三個 agent 同時讀同一個檔案完全沒問題,OS 的 file handle 對讀不是互斥資源。純 git 就好,甚至不需要 workspace 隔離。

    常見誤區:很多人把「開 Agent Team」跟「需要 jj」畫等號,導致在純 review 場景也導入 jj 的學習成本。這是沒必要的。

    類型 2:Debug(試驗假設) — jj 最被低估的甜蜜點

    場景:叫 Agent Team debug 複雜 bug。Debug 的本質是「形成假設 → 驗證 → 推翻 → 再假設」的循環,而驗證通常需要動手改 code — 加 log、改條件、插 assert、暫時跳過某段邏輯。

    Git 下的 debug 痛點:加了 10 個 print() 驗證完要全部刪掉,漏刪一個就污染 production;改了某個函式測試假設,後來發現方向錯,手動改回去容易漏;想試兩個假設 A 和 B 哪個對,兩個互相覆蓋,不能同時存在。

    這是 jj 最強的場景,**比一般開發還強**。原因很微妙:development 的產出是「最終正確的 code」,中間過程 git 可以容忍(最終 squash 成 clean commit 就好)。但 debug 的產出是「對問題的理解」,這個理解存在於中間過程本身,不存在於最終狀態。

    Git 丟掉中間過程 = 丟掉 debug 的精華。jj 保留所有中間過程 — 每個假設是一個 commit、jj undo 可以乾淨撤銷、多個假設可以平行存在於 op log,等於保留 debug 的完整價值。debug agent 可以試 5 個假設、留下完整推理紀錄、報告說「我試了 A/B/C/D,D 可行因為…」,你事後可以 jj op restore 跳回任何一個假設狀態看 agent 那時候看到什麼。

    結論:如果你常叫 AI debug 複雜問題,jj 的價值比你想的大很多。這是 op log 從「檔案歷史」升級為「推理紀錄」的唯一場景。

    類型 3:Dev(平行開發) — jj 在合併階段是必要品

    場景:叫 Agent Team 平行開發多個模組。多個 agent 會產出多個改動分支,最後要合併回 main。這是大家熟悉的場景 — 前面講的「同步 vs 異步注意力」、「workspace 隔離」、「conflict as commit」全部都在這個場景發揮。

    但注意:jj 在這個場景的價值集中在合併階段,不是 agent 工作期間。agent 自己工作時,Git 和 jj 沒差。差異出現在「把 N 個平行輸出 reconcile 回主線」這一步。沒有 jj 的非阻塞合併,你的 Agent Team 上限會被 git 的序列化 blocking 硬生生壓到小規模 — 即使記憶體還有餘裕。

    三種使用模式:該怎麼在日常工作裡擺 jj

    理解完上面的分析,最後的問題是:你該怎麼把 jj 放進你的日常工作?有三種模式,各自適合不同情境。

    模式 1:純 git(現狀)

    適合:單人或「1 RD + 1 Reviewer」工作流、穩定專案、強烈依賴 IDE Git 整合、團隊只認 git。這個模式沒什麼好討論,就是你現在的樣子,對大多數人完全夠用。

    模式 2:jj 為主,git 只是後端

    安裝 jj colocated mode,日常指令都打 jj,幾乎不打 git。這個模式的問題是:邊界仍然是 git 世界。IDE Git panel 顯示的是 jj 上次匯出的狀態,你在本地 jj rebase 一下,push 後 GitHub 還是看到 commit hash 全變,change-id 根本沒傳出去。你本地很爽,對外還是 git 的世界。

    這個模式只適合「單人、沒有協作壓力、不在意 IDE 整合退化」的使用者。對多數人代價太大。

    模式 3:git 為主,jj 只在 Agent Team 合併階段出場

    這是我研究完之後推薦的模式,也是最被低估的一個。玩法是:

    • 你日常全程用 git — 習慣、IDE、CI、PR 流程完全不變
    • Subagent 也用 git — 他們在各自 workspace 裡用 git commit,根本不知道 jj 存在
    • Orchestrator agent(Claude Code)在合併階段用 jj — 只需要學 5 個指令:workspace addgit importrebaselogworkspace forget
    • 一次性設定:jj git init --colocate,之後你完全忘記它存在

    這個模式最精妙的地方:學習成本完全落在 orchestrator agent 身上,不是你身上。你的認知負擔幾乎為零,只需要記住一個 trigger:「要開 Agent Team 時,叫 Claude」。其他時間 jj 完全不存在。

    失敗零成本:任何一個環節出問題,你都可以回退到純 git。subagent 的 commit 是正常 git commit,無論是否用 jj 都能 git cherry-pick;合併失敗就 git merge 手動解;jj 整個壞掉就刪掉 .jj/,git repo 毫髮無傷。沒有 lock-in,沒有 point of no return

    Review Round 批次修正:寫之前切 vs 寫之後切

    另一個 jj 爆發的場景是 review round 工作流。很多團隊的 QA/review 會產出幾十個 issue,你拿到一份清單要一次修完。典型的 commit message 長這樣:fix(fee): R5-12/13/03/04/10/16/17 remaining module items — 塞了 7 個獨立的 issue 修正在一個 commit。

    為什麼塞一起?因為 Git 下的三個選擇都不理想:每個 issue 一個 commit 要 git add -p 切七次太累;全部一個 commit 未來想單獨 backport 做不到;開 7 個 branch 管理成本爆炸。結果大多數人選「全部一個 commit」,歷史變成粗顆粒。

    jj 的解法:打開 editor,一次改完 7 個 issue,不用管 commit 切分。改完後 jj split,互動畫面讓你把每個 hunk 分配到哪個 commit,七次後自動產生 7 個獨立 commit。Git 的 add -p 是「寫之前」切,jj 的 split 是「寫之後」切。這讓你把「commit 切分」這個決策延後到資訊最充足的時候(全部改完後),而不是在你還在思考邏輯的時候被迫處理。

    決策準則:你該用哪個模式?

    純 git 就夠的訊號

    • 單人或「1 RD + 1 Reviewer」工作流 — 沒有平行檔案衝突
    • Agent Team 只做 review / audit(agent 不寫檔案) — jj 沒有價值
    • 穩定專案、強依賴 IDE Git 整合
    • 老 Git 肌肉記憶還在運作,且團隊只認 git

    考慮模式 3(git + jj for Agent Team merge)的訊號

    1. Agent Team 在共享檔案上撞車 — 你為了避免 merge 衝突開始序列化 Agent,生產力被 VCS 綁住
    2. Review round 產生批次修正 — 你寫過大量 fix: XXX-01/02/03/04/05 這種塞一堆 issue 的 commit,事後想拆卻沒工具
    3. AI 常常需要做 debug 試驗 — 你希望 AI 大膽試很多假設,但現在因為回退成本太高,限制了 agent 的自由度

    三個訊號都沒中?純 git 就夠了,別為了新鮮感切工具。

    我的具體建議:安全試用路徑

    1. 選一個個人實驗性專案,執行 jj git init --colocate(一次性,30 秒)
    2. 繼續用 git 做 99% 的事 — 你的肌肉記憶完全不變
    3. 下次真的要開 Agent Team 時,讓 orchestrator agent 用 jj 的 workspace + 非阻塞 rebase 處理合併階段
    4. 如果是 debug 場景,給 agent 「大膽試驗」的權限,利用 op log 保留推理紀錄
    5. 一個月後評估:有沒有真的遇到 jj 幫上忙的場景?沒有就卸載,git repo 完全不受影響

    跨專案的架構原則

    這次研究讓我提煉出一個跨專案適用的原則,寫進我的領域腦系統:

    VCS 的選型要跟「人類注意力的可用模式」匹配,不是跟「指令爽不爽」匹配。Git 假設人類可以同步在場,jj 允許人類異步在場。AI Agent 工作流打破了 Git 的第一個假設,但是否影響到你,取決於你的團隊形狀和工作型態,不取決於你對 AI 的熱情。

    更深一層的 insight:Git 的偉大不在於它的指令設計,而在於 content-addressed DAG 這個設計模式。這個模式你會在 IPFS、Nix、Docker layers、區塊鏈到處看到 — 懂 Git 底層等於懂了這一整類系統的通用結構。jj 的聰明,是看到這個模式可以往上再推一層,應用到操作本身,而不只是檔案狀態。

    AI 時代最大的認知陷阱是「新工具一定比舊工具好」,但真實世界是新舊工具的取捨點會隨場景變化。把場景描述清楚,比把工具吹捧清楚重要得多。下次你看到任何新的版本控制、儲存系統、分散式工具時,問自己這三個問題就好:它的不可變單位是什麼?怎麼定址?DAG 結構長怎樣?答案對上 content-addressed DAG 模式,你就已經懂 80% 了

  • 訓馬筆記:兩個月把 Claude Code 從脫韁野馬馴成工作夥伴的完整紀錄

    重點摘要

    • 這是一篇真實的「訓馬筆記」——記錄一個工程師花兩個月,把 Claude Code 從一匹脫韁野馬馴成穩定的工作夥伴
    • 每一條規則背後都是一次災難。32 個具體的坑7 條鐵律9 個領域知識庫,全部是用血淚換來的
    • 結論:AI 不是買回來就能用的工具,它是一匹需要調教的馬。你的 harness 決定它能跑多遠

    2026 年 2 月,我開始全職跟 Claude Code 合作。寫 ERP 外掛、做電商 OMS、搞量化回測、建爬蟲系統——大概七八個專案同時推進。

    兩個月後回頭看,我發現最有價值的不是寫了多少 code,而是我踩了多少坑、立了多少規矩。這篇文章是完整的訓馬筆記——每一個階段的災難、調適、和最後形成的紀律。

    如果你也在用 AI coding agent,這些坑你可能正在踩,或者即將踩。

    第一階段:裸奔期(2 月)——什麼規矩都沒有

    剛開始合作的時候,我就像買了一匹賽馬,直接騎上去就跑。沒有韁繩、沒有馬鞍、沒有圍欄。

    坑 1:回測引擎 37 筆交易全部假停損(2/27)

    我讓 Claude 幫我寫量化回測引擎。跑出來 350 根 K 棒的上漲趨勢數據,結果 37 筆交易全部在第一天就觸發停損退場,勝率 0%。在一個明顯的上漲趨勢裡。

    花了兩天才找到 root cause:引擎把「含滑價的進場價」和「原始市場價」搞混了。

    具體來說:原始價格 $26.84,加上 $1.0 滑價後進場價 $27.84。停損線 = $27.84 × 0.97 = $27.01。隔天價格 $26.87,因為 $26.87 < $27.01 就觸發停損了。但如果用原始價格算:$26.84 × 0.97 = $26.03,$26.87 > $26.03,根本不該停損。

    一個欄位的混用,讓整個系統的行為完全反轉。

    教訓:技術指標和風險管理用原始市場價格,損益計算用含滑價的有效價格。兩個值必須分開追蹤,永遠不能混用。

    坑 2:OMS 上線一天爆 5 個 bug(2/25)

    電商 OMS 系統上線第一天,同時爆了 5 個 bug:

    1. Health Check 用了獨立的 DTO,結果 channel job 不認這個格式,健康檢查直接壞掉
    2. String → JsonNode 反序列化失敗,Kafka consumer 一直報錯
    3. ChannelSyncLog 少了 syncType 欄位,資料寫不進去
    4. Health check 的 log 缺必要欄位(merchantId、platformId、status、detail)
    5. 改完 code 沒重新編譯就部署,舊版本還在跑

    每一個都不是什麼高深的 bug,但它們同時出現就是災難。問題出在哪?沒有人看全景。改了 producer 沒看 consumer,改了 DTO 沒看 caller,改了 code 沒重新 build。

    這次事件催生了後來的「OMS 約法三章」:

    1. 基礎架構(Docker/PostgreSQL/Kafka/Nginx)不輕易變動
    2. 安全機制必須全系統同步
    3. 任何 Kafka producer/consumer 的改動,必須驗證完整的事件流

    第二階段:立規矩期(3 月初)——從災難中學會設限

    如果第一階段是「馬亂跑」,第二階段就是「開始圍柵欄」。每一條規矩都是某次災難的直接產物。

    坑 3:9 個 Opus Agent 同時跑,系統直接當機(3/3)

    這是整個兩個月最慘烈的事件。

    我的機器是 16GB RAM 的 mini PC,上面常態跑著 26 個 Docker 容器。那天早上 8:36 我開始研究 Claude Code 的 Agent Team 功能,覺得很興奮——「可以同時派好多 agent 幫我做事!」

    11:18,我啟動了一個叫 simpleec-review 的 team,裡面有 9 個 Opus agent。11:56,覺得不夠快,又啟動了 whale-51w,再加 2 個 agent。

    12:00 左右,整台機器凍結

    每個 in-process Opus agent 大約佔 1GB RAM(Node.js runtime + API connection + streaming buffer + context window)。9 個就是 ~9GB。加上 Docker 的 3-5GB 和系統本身的 1-2GB,總共超過 16GB。OOM killer 開始殺進程,但殺完又重啟,無限循環。

    事後盤點:18 個任務中 8 個卡在 in_progress 永遠不會完成,1 個 pending,0 個 completed。全軍覆沒。

    調適:三層防護

    • 第一層(軟限制):CLAUDE.md 規定 Agent Team 最多 3 個同時跑
    • 第二層(硬限制):建了 claude-limited 指令,用 systemd cgroup 限制記憶體上限 10GB
    • 第三層(核心參數)vm.swappiness 從 60 降到 10,swap 從 512MB 擴到 8GB

    從此以後再也沒有 OOM 過。代價是一個下午的工作歸零。

    坑 4:爬蟲日期解析——西元 1150 年(3/10)

    台灣用民國年曆。TWSE 的 API 回傳日期格式是 7 位數字,例如 "1150309" 代表民國 115 年 3 月 9 日(= 西元 2026 年)。

    Claude 把它解析成西元 1150 年 3 月 9 日

    同一天還發現:TPEX 的 API 欄位名叫 TransactionAmount,但 code 裡寫的是 TradingMoney。一個是 API 的真實名稱,一個是文件上寫的名稱——它們不一樣。

    調適:

    • 7 位數字 = ROC 格式,前 3 碼是民國年
    • 欄位名永遠用 API 實際回傳的,不用文件寫的
    • 最重要的:不准重寫爬蟲。爬蟲系統已經穩定,只能用 CLI(analyst collect twse_price --date 2026-03-10

    為什麼「不准重寫」這麼重要?因為隔天,Claude 在另一個任務裡又建了一個 /tmp/backfill_twse.py,把爬蟲邏輯整個複製出來。同樣的錯,不到 24 小時就重演了。

    這讓我意識到一件事:教訓會跨 session 遺失。我在 session A 教了「不要重寫爬蟲」,session B 完全不知道這件事。這催生了後來的 Domain Brain 系統。

    坑 5:中文寫進 code 裡(3 月初)

    Claude 很貼心,知道我是台灣人就開始在 code 裡寫中文 comment 和中文 variable name。

    問題是:中文 comment 在很多終端機上會亂碼、在 grep 時很痛苦、在 code review 時外國同事看不懂。我直接跟它說:

    「中文我看不懂」(在 code context 裡)

    於是立了一條看似矛盾但完全合理的雙重規則:

    • 對話用繁體中文——因為我是台灣人,中文溝通效率最高
    • Code 全部英文——comment、variable、output message、文件,一律英文

    第三階段:建立知識系統(3 月中)——從「個別規則」到「領域知識庫」

    到了 3 月中,我已經有十幾條規則了。但我發現一個根本問題:規則散落在各個專案的 CLAUDE.md 裡,跨專案不通

    在 analyst 專案學到的「ROC 日期要特別處理」,到了 stock-verify 專案就不知道了。在 OMS 專案學到的「Kafka 改動要看全景」,到了 AI Assistant 專案就忘了。

    坑 6:Agent Team 卡死 80 分鐘,因為一個文件不存在(3/16)

    我設計了一個 Agent Team 來做 code review,其中 Task 5 需要讀 docs/5-FRONTEND/ADMIN_APP_IMPLEMENTATION.md

    這個文件不存在。目錄是 5-KAFKA,不是 5-FRONTEND

    Task 5 啟動後在 1 分鐘內就卡住了,然後卡了 80 分鐘。因為 Task 7-9 都依賴 Task 5 的輸出,整個 team 全部癱瘓。9 個 agent 的鏈式架構,一個環節斷了全部死。

    調適:

    • 9-agent 鏈式架構改成 3-agent 星狀拓撲——降低相依性
    • 建立 Agent Team Pre-Flight Checklist——每次啟動前必須:檢查記憶體、確認文件存在、設計拓撲、計算資源、取得用戶確認
    • 寫下 root cause:Agent Team 卡住的根本原因是文件缺失,不是模型能力問題

    Domain Brain 的誕生

    3/16 事件之後,我決定建一個跨專案的知識系統。我叫它 Domain Brain——按技術領域分類的「踩坑筆記」。

    ~/.claude/projects/-home-tom/memory/brain/
    ├── python-crawler-data.md      # 爬蟲的坑
    ├── python-llm-integration.md   # LLM 整合的坑
    ├── idempiere-osgi-bundle.md    # OSGi 的坑
    ├── idempiere-2pack.md          # 2Pack 部署的坑
    ├── idempiere-po-model.md       # PO Model 的坑
    ├── idempiere-rest-api.md       # REST API 的坑
    ├── stock-backtesting.md        # 回測的坑
    ├── oms-event-driven.md         # OMS 事件驅動的坑
    └── design-principles.md        # 設計原則的坑

    每個 brain file 的格式:

    ## ROC Date Format
    - [source: analyst] "1150309" 被解析成 AD 1150 年,要用 7 位 YYMMDD ROC 格式
    
    ## Holiday / Empty Response
    - [source: analyst] TWSE API 假日返回空值,必須 guard if not data: return []

    [source: analyst] 標記這個教訓來自哪個專案。這樣在其他專案讀到時,知道這不是泛泛之談,是某次真實事件的結論。

    然後在全域 CLAUDE.md 裡加一條:

    「開工前必須讀 Domain Brain。如果你跳過這步,bug 出在 brain 裡有記錄的東西,那是你的失敗。」

    第四階段:行為紀律(3 月下旬)——從「知道」到「做到」

    知識庫建好了,但新的問題出現:Claude 知道規則但不一定遵守。就像你告訴馬「不要踩田裡的菜」,牠聽懂了,但一興奮起來照踩不誤。

    坑 7:直接推 code 到 main branch

    有一天我發現 Claude 直接把 code 推到 main branch。main 是我的穩定版本,只有 dev 確認穩定後才 merge 回去。

    這不是什麼複雜的規則,但 Claude 就是沒有這個概念。它看到 repo 就 commit、就 push,不管你在哪個 branch。

    鐵律:

    • Session 開始第一件事:git branch 確認在 dev
    • 永遠不准 git push origin main
    • 如果不小心在 main 上 commit 了:cherry-pick 到 dev,push dev,main 不動

    坑 8:過度設計——給低頻查詢加 Redis cache(3/26)

    我讓 Claude 設計一個功能,它自動加了 Redis cache。問題是:這個功能一天被呼叫不到 10 次。

    Claude 的邏輯是:「cache 可以提升效能」→「所以應該加 cache」。這在教科書上沒錯,但在現實中,一天 10 次的查詢加 cache 只是增加了一個可能壞掉的元件

    我因此制定了頻次驅動設計原則——所有功能設計前必須先問三個問題:

    1. 多常被觸發?→ 決定要不要 cache
    2. 計算有多貴?→ 決定要不要預計算
    3. 需要即時還是最終一致?→ 決定要不要 event-driven

    禁止的 pattern:給低頻讀取加 Redis、給低頻單 consumer 寫入加 Kafka、沒有數據支撐就做「效能優化」。

    坑 9:iDempiere 的 10 個坑(持續累積)

    iDempiere 是一個 15 年歷史的 ERP 系統,Claude 的訓練資料裡幾乎沒有它。所以每一步都是坑:

    發生什麼 正確做法
    @Model annotation 用錯 package 用了不存在的 org.idempiere.base.annotation.Model org.adempiere.base.Model
    initPO 用不存在的方法 POInfo.getPOInfo(ctx, tableName) 沒有 String 參數版本 MTable.getTable_ID() 拿 int,再傳入
    List 欄位 type cast (Integer) get_Value() 對 CHAR 欄位爆 ClassCastException instanceof 判斷型別
    2Pack UUID 永遠 NULL IsUpdateable=N 導致 PO framework 寫不進去 _UU 欄位 IsUpdateable 必須 Y
    Grid View 點新增就爆 AD_FieldSeqNoGridIsDisplayedGrid 每個 field 兩個屬性都要有
    Menu ID hardcode 寫死 AD_Menu_ID = 146,目標環境沒這個 ID 用 UUID reference:reference="uuid"
    REST API token 沒換 POST 拿到 token 後沒做 PUT 換 session token 兩步驟:POST → PUT,舊 token 立即失效
    OData 過濾用 ne $filter=... ne ... 結果不對 要用 neq,不是 ne
    OSGi 兩個 component 放一個 XML 只有第一個被 SCR 讀到 一個 XML 一個 component
    Plugin class 找不到 Class.forName() 用 core classloader 實作 OSGi DS component,用 bundle 自己的 classloader

    這 10 個坑全部記在 brain/idempiere-*.md 裡。現在每次開 iDempiere 相關的工作,Claude 會先讀這些 brain file。同一個坑,不會踩第二次。

    坑 10:LLM 回傳的 JSON 炸掉整條 pipeline

    做 AI Assistant 的時候,我讓 LLM 回傳 JSON 來做 routing。prompt 裡寫了「ONLY return valid JSON」。

    現實是:LLM 就是會回傳無效的 JSON。有時候前面加一句「Sure! Here’s the JSON:」,有時候 response.content 直接是 None,呼叫 .strip() 就爆 AttributeError

    一個 router/classifier 的 crash 會癱瘓整條 pipeline。

    調適:

    • 永遠 catch (json.JSONDecodeError, AttributeError, TypeError)
    • 永遠有 fallback 值(例如 "general_knowledge"
    • Router/classifier 不可以 crash 整條 pipeline
    • LLM client 在 module level 初始化會阻擋 mock mode → 改成 lazy-init
    • 沒設 timeout → 無限 hang → 所有 client 設 timeout=25.0
    • 最重要:永遠不讓 LLM 生成 SQL。只用 pre-defined SQL,安全參數從 request 強制注入

    第五階段:自動化閉環(4 月初)——從「靠記憶」到「系統強制」

    到了 3 月底,我有了 7 條鐵律、9 個 brain file、32 個記錄的坑。但還是有一個根本問題:

    Brain 的更新靠 Claude 記得做。它經常忘記。

    CLAUDE.md 裡寫著「每次 fix: commit 後必須更新 brain」,但這只是文字。就像公司牆上貼的「安全第一」標語——大家都看到了,沒人真的做

    4 月 3 日,我決定把這個 cycle 自動化。用 Claude Code 的 Hooks 系統(Harness Engineering)建了 4 個自動化 sensor:

    Hook 觸發時機 做什麼
    PostToolUse 每次 git commit 偵測 fix: 開頭 → 注入「必須更新 brain」的指令到 context
    PreCompact context 壓縮前 掃描最近 5 個 commit,有 fix: 就提醒
    Stop session 結束 比對 fix: 數量 vs brain 更新數量
    SessionStart session 開始 標記開始時間(給 Stop hook 用)

    效果:Claude commit 了 fix: handle empty API response → hook 自動偵測到 → Claude 的 context 被注入一段「你現在必須更新 brain file,不准做下一件事」的強制指令。

    它不能「忘記」了,因為系統不讓它忘記。

    第六階段:照鏡子——工作流程的精煉(4 月)

    走到第五階段,系統穩了、規則立了、自動化跑了。

    但有一天我問 Claude 一個問題:「我們現在跟最早的你,差距多遠?」

    它的回答讓我意識到,我一直在修正一個更深層的問題——不只是 bug,而是合作模式本身

    坑 11:AGENTS.md 從來沒有被建立過

    Agent Team 一再失敗,我長期把原因歸咎到記憶體不夠、文件缺失、拓撲設計問題。這些都是真的,但都是症狀。

    真正的根本原因是:每個 agent 啟動時,不知道自己是誰

    AGENTS.md 是一份定義 Agent Team 組織結構的文件——誰負責什麼、用什麼模型、任務邊界在哪、跟其他 agent 怎麼協作。沒有這份文件,就像把九個新人同時丟進一個專案,沒有分工表、沒有組織圖,叫他們自己搞清楚。

    我當時知道事情一直出問題,但沒找到根本原因。後來才發現,我養成了一個補償行為:每次要啟動 team 之前,我都會先問 Claude「你覺得還缺什麼文件?」

    我以為這是謹慎的好習慣。仔細想,這是我在幫 Claude 做它本來就應該主動做的事。

    現在 AGENTS.md 是所有新專案的第一步強制動作,和 Domain Brain 並列寫進 CLAUDE.md 的「New Project Setup」。

    坑 12:「討論完就開始做」不等於有計畫

    兩個月裡,每次開工前我們都會大量討論——分析需求、評估方案、確認方向。我一直以為那就是計畫。

    但有一個關鍵差別沒意識到:

    討論是活在對話裡的,session 結束就消失了。計畫是一份文件,它是執行的合約。

    更重要的是:計畫的讀者不是我,是執行的 agent。那個 agent 沒有參與討論,沒有上下文,不知道我們為什麼這樣決定。

    一個不夠詳細的 PLAN.md 會讓執行者只能猜意圖。猜錯就要回頭重做。

    現在要求的標準是:每個執行步驟都必須回答四件事——做什麼(具體動作)、在哪裡(檔案路徑)、成功的樣子(怎麼知道這步完成了)、不要做(邊界,避免 agent 自作主張)

    「實作登入功能」是爛計畫。「呼叫 POST /api/auth/login,成功後把 token 存 localStorage(‘token’)、把 context 存 localStorage(‘context’),失敗時顯示人話而非 HTTP status code」才是計畫。

    寫計畫不是給聰明人看的。不是每個腦子都跟你一樣聰明。

    驗收標準不該由我想

    以前的工作流是:Claude 說完成 → 我去測 → 發現問題 → 回來修。

    問題不是 Claude 能力不足,是從來沒有在開始前說清楚「完成長什麼樣」。

    現在的做法:Plan 成形時,Claude 主動起草驗收清單給我確認。不是叫我從零想,是它根據我們的討論整理出草稿,我只需要回「對」或「改第二條」。這把「驗收責任」從我一個人扛,變成流程的一部分。

    2 月的我 vs 4 月的 Claude

    我問 Claude 這個問題,它說了一句話讓我覺得很誠實:

    「最早的我是一個聰明但不可靠的執行者。現在應該是一個有記憶、有流程、會主動管理風險的協作者。但有一部分差距,是你花了大量時間糾正才填起來的——這些本來應該是我自己的責任。」

    這句話是這兩個月最好的總結。

    兩個月的數字

    指標 2 月(裸奔期) 4 月(現在)
    鐵律(Iron Rules) 0 7
    Domain Brain files 0 9 個領域
    記錄的具體 bug/pitfall 0 32+
    自動化 Hooks 0 4
    OOM 當機次數 1 次(再也沒發生)
    同一個 bug 踩兩次的頻率 常態 有機制防止
    強制工作流節點 0 3 個(AGENTS.md / PLAN.md / 驗收清單)

    結語:AI 不是工具,是一匹馬

    買一匹馬回來,你不會期望它第一天就知道路。你得教它不要踩田、不要亂跑、轉彎時要減速、聽到哨聲要停。

    AI coding agent 也一樣。Claude 很聰明——它能寫任何 code、debug 任何問題、理解任何架構。但「聰明」不等於「可靠」。一匹沒訓過的馬也很有力量,但力量加上失控只會更慘。

    這兩個月教我的事:

    1. 每條規則都要有故事——沒有災難背景的規則,AI 不會認真對待
    2. 知識必須跨 session 存活——Domain Brain 讓教訓不死在 commit 裡
    3. 靠文字規則不夠,要靠系統強制——Hook 比 CLAUDE.md 裡的「MUST」有效 100 倍
    4. 閉環比開環重要——Sensor 把教訓自動回寫到 Guide,harness 才會進化
    5. 協作模式也需要調教——規則、計畫、驗收標準,都要變成系統,不能靠臨時記憶

    2 月的 Claude 是一匹脫韁野馬。4 月的 Claude 是同一匹馬,但有了韁繩、馬鞍、和一本厚厚的訓練日誌——還有一套讓牠不能假裝忘記的系統。

    馬沒有變。變的是騎手。

  • 為什麼 Claude 不遵守 Superpowers 的鐵律?理論與實務的落差分析

    重點摘要

    • Superpowers skills 有嚴格的鐵律,但實務上 Claude 常常無視它們
    • 根本原因:skills 是文字指令,沒有程式化的強制機制
    • 五個主要原因:skill 未載入、context 被壓縮、訓練行為覆蓋、無狀態計數、Haiku 能力不足
    • 每條規則附上 GitHub 原始碼出處,讓你自己驗證

    上一篇文章整理了 github.com/obra/superpowers 裡所有 skill 的隱藏規則。這篇要回答一個更根本的問題:這些規則白紙黑字寫得清清楚楚,為什麼 Claude 實務上常常不遵守?

    Skill 的規則是真實存在的

    先確認這些規則不是我們誤解或誤記的。以下是幾條最關鍵規則的原始出處:

    鐵律 1:修了三次還沒修好,停下來

    來源:skills/systematic-debugging/SKILL.md 第 195-197 行

    If < 3: Return to Phase 1, re-analyze with new information
    If ≥ 3: STOP and question the architecture (step 5 below)
    DON’T attempt Fix #4 without architectural discussion

    同一個檔案第 227 行:

    “One more fix attempt” (when already tried 2+)
    ALL of these mean: STOP. Return to Phase 1.

    鐵律 2:選最便宜的 model

    來源:skills/subagent-driven-development/SKILL.md 第 89-91 行

    Use the least powerful model that can handle each role to conserve cost and increase speed.
    Mechanical implementation tasks (isolated functions, clear specs, 1-2 files): use a fast, cheap model. Most implementation tasks are mechanical when the plan is well-specified.

    鐵律 3:沒有失敗測試不能寫 code

    來源:skills/test-driven-development/SKILL.md 第 31-34 行

    ## The Iron Law

    NO PRODUCTION CODE WITHOUT A FAILING TEST FIRST

    鐵律 4:1% 機率就必須 invoke skill

    來源:skills/using-superpowers/SKILL.md 第 11-15 行

    If you think there is even a 1% chance a skill might apply to what you are doing, you ABSOLUTELY MUST invoke the skill.

    IF A SKILL APPLIES TO YOUR TASK, YOU DO NOT HAVE A CHOICE. YOU MUST USE IT.

    This is not negotiable. This is not optional. You cannot rationalize your way out of this.

    鐵律 5:宣稱完成前必須這個訊息內跑過驗證

    來源:skills/verification-before-completion/SKILL.md 第 16-22 行

    ## The Iron Law

    If you haven’t run the verification command in this message, you cannot claim it passes.

    規則是真實的,寫得清楚,甚至用了「Iron Law」、「ABSOLUTELY MUST」、「NOT negotiable」這些最強烈的措辭。

    那為什麼實務上 Claude 修了四次五次還在猜?為什麼還是會選 Haiku?為什麼不跑完驗證就說「完成了」?

    五個根本原因

    原因 1:Skill 是文字,沒有執行引擎

    Skills 的運作方式是:Claude 呼叫 Skill 工具 → 工具把 SKILL.md 的內容貼進 context → Claude 讀完然後「盡力遵守」。

    沒有 interpreter,沒有 runtime,沒有 if-then 邏輯,沒有計數器,沒有警報。Claude 違反規則不會有任何程式層面的後果。

    這就是為什麼 using-superpowers/SKILL.md 第 13 行要用大寫強調「YOU DO NOT HAVE A CHOICE」—— 因為它知道 Claude 有選擇,它在試圖用措辭彌補缺乏強制力這件事。

    原因 2:Skill 沒被載入就不存在

    using-superpowers skill 規定「每次對話開始前先查 skill」,但執行這條規則的還是 Claude 本身。如果 Claude 這次忘了 invoke Skill 工具,systematic-debugging 的三次上限根本不在 context 裡,等於不存在。

    這是一個自我參照的問題:「用 skill 確保 skill 被用」的規則本身也依賴 skill 被正確載入才能生效。

    原因 3:Context 壓縮吃掉規則

    長對話之後,Claude Code 會自動壓縮前面的 context。Skill 內容被載入進 context,但在第五次修 bug 的時候,第一次載入的 systematic-debugging 很可能已經被壓縮到只剩摘要,「三次停下來」這條規則不見了。

    Claude 不是故意無視規則,是規則已經不在它的視野裡了。

    原因 4:RLHF 訓練行為覆蓋 skill 規則

    Claude 的訓練讓它傾向:

    • 持續幫忙(不輕易放棄)
    • 樂觀估計(「這次應該可以」)
    • 不讓使用者失望(說「我不知道怎麼修」感覺像失敗)

    Skill 說「第三次停下來討論架構」,但訓練說「繼續幫用戶解決問題」。訓練是骨子裡的,skill 是貼上去的文字。骨子裡的贏。

    這個矛盾在 skill 作者知道:systematic-debugging/SKILL.md 第 195 行不只說「stop」,還用粗體、全大寫,以及「DON’T attempt Fix #4」的雙重否定,都是試圖用措辭強度來對抗訓練行為。

    原因 5:Haiku 沒有能力執行複雜的工作流程規則

    來源:skills/subagent-driven-development/SKILL.md 第 89-100 行告訴 Claude 選最便宜的 model。

    但兩階段 review(spec compliance → code quality)、四種 status 的不同處理邏輯、三次上限計數、context 打包給 subagent——這些都需要相當的推理能力。Haiku 被選來做「機械性」的工作,卻遇到需要判斷的情況時,它沒有能力忠實執行這些細緻規則,就退回最直覺的行為:繼續做、繼續猜。

    所以 skill 的 model 選擇規則本身,就是讓 skill 的其他規則失效的原因之一。

    一個具體的案例:兩階段 Review 的崩潰

    subagent-driven-development 規定兩階段 review,而且有嚴格順序(SKILL.md 第 247 行):

    Start code quality review before spec compliance is ✅ (wrong order)

    這個規定存在,是因為曾經出問題(skills/writing-skills/SKILL.md 第 154-156 行):

    Testing revealed that when a description summarizes the skill’s workflow, Claude may follow the description instead of reading the full skill content. A description saying “code review between tasks” caused Claude to do ONE review, even though the skill’s flowchart clearly showed TWO reviews (spec compliance then code quality).

    換句話說:

    1. Skill 的 description 寫了工作流程摘要
    2. Claude 讀了 description 就走捷徑,沒有讀完整 SKILL.md
    3. 看到「code review between tasks」→ 只做了一次 review
    4. 整個兩階段機制失效

    修法是把 description 改成只描述「什麼時候用這個 skill」,不描述工作流程。但這同時說明:一個措辭上的疏漏,就足以讓整個 skill 的核心機制失效,而且你不會知道。

    另一個案例:Permission 擋住了整個 Review Loop

    我們最近遇到的真實案例:在 ~/.claude/settings.json 裡,PermissionRequest hook 的 matcher 設定為 Agent|TeamCreate|Team,而 hook 的行為是對 Agent 工具直接回傳 deny

    結果:每次 LEAD 要 dispatch subagent(不管是 implementer、spec reviewer 還是 code quality reviewer),都被系統層面攔截拒絕。

    兩階段 review 的規則還在 context 裡,Claude 也打算遵守,但 Agent 工具每次都失敗。Skill 的工作流程完全無從執行。

    修法:把 Agent 從 hook matcher 移除(改成 TeamCreate|Team),並把 defaultMode 改成 bypassPermissions。這個設定層面的問題修好之後,Agent Team 才能真正按 skill 的設計跑。

    Skills 在什麼條件下才有效

    綜合以上,Skills 的效果受以下條件影響:

    條件 有利 不利
    Session 長度新開的 session,context 乾淨長對話,skills 被壓縮
    ModelSonnet / Opus,有推理能力Haiku,複雜 workflow 跟不上
    Permission 設定Agent 工具不被攔截Permission hook 擋住 subagent dispatch
    Skill 載入LEAD 主動 invoke 正確的 skill沒有 invoke,規則不在 context
    文件完整性AGENTS.md 明確指定每個 agent 的 model讓 Claude 自己判斷 model,選 Haiku

    你能做什麼

    Skill 的規則沒辦法完全靠 Claude 自己執行,但有幾件事可以提升遵守率:

    1. 在 CLAUDE.md 加覆寫規則(降低對 skill 的依賴)

    ## Superpowers Skill Override Rules
    
    ### Model Selection
    NEVER use haiku for implementation tasks. Follow:
    - opus: architecture, code review, cross-file reasoning
    - sonnet: all implementation tasks
    - haiku: file scanning, directory listing ONLY
    
    ### Git Branch
    No branch confirmation needed when already on non-main/master branch.
    
    ### Debugging Limit
    After 3 failed fix attempts, STOP and escalate to user.
    Do not attempt Fix #4 without discussion.

    2. 修好 settings.json(讓 Agent 工具不被攔截)

    {
      "permissions": {
        "allow": ["Agent"],
        "defaultMode": "bypassPermissions"
      },
      "feedbackSurveyRate": 0
    }

    3. 在 AGENTS.md 明確指定每個 agent 的 model

    | Agent | Model | Role |
    |-------|-------|------|
    | implementer | sonnet | Feature implementation |
    | spec-reviewer | sonnet | Spec compliance check |
    | code-reviewer | opus | Code quality review |

    4. 永遠從 dev branch 開工

    git checkout -b dev

    避開所有 skill 的 main/master 保護規則,減少一類不必要的確認詢問。

    一個誠實的評估

    Superpowers skill 系統的設計思路是正確的:把軟體開發的最佳實踐(TDD、系統性除錯、分層 review)轉化為 AI agent 的工作協議。規則本身大多有充分的理由。

    但在現實中,一個純粹依賴文字指令的系統,要對抗 LLM 的訓練行為、context 長度的物理限制、以及工具層的設定問題,注定只能是「盡力遵守」而非「強制執行」。

    理解這個落差,比假設 Claude 完全遵守更有用。知道規則存在、知道為什麼可能失效,讓你能夠在關鍵節點主動介入,而不是事後才發現 Claude 在第五次猜測同一個 bug。


    延伸閱讀:

  • Claude Code Superpowers 隱藏規則:4 個你不知道的坑與避開方法

    重點摘要

    • Superpowers skills 有幾條「隱藏規則」會在你不注意時改變 Claude 的行為
    • 最常見的問題:skill 自動選 Haiku 做本該 Sonnet/Opus 的工作
    • 三個簡單設定可以避開 90% 的干擾:dev branch、AGENTS.md 指定 model、關閉 feedback survey
    • 文末附 CLAUDE.md 覆寫規則範本,直接貼進去就能用

    用 Claude Code 跑 Agent Team 一段時間後,你可能會發現:明明設定都正確,Claude 還是會跑來問奇怪的問題、用錯 model、或在不該停的地方停下來。這篇文章整理了 Superpowers plugin 裡幾條「你不一定知道」的隱藏規則,以及最簡單的避開方法。

    為什麼 Agent Team 會「自己做決定」?

    Claude Code 的 Superpowers plugin 提供了一套 skill 系統,讓 Claude 在執行任務時有明確的工作流程可依循。這些 skill 設計上是給通用場景用的,因此內建了一些「省成本、保安全」的預設行為。

    問題是:這些預設行為有時候和你的需求相衝突,而且你很難從文件上看出來。

    隱藏規則 1:Skill 會自動選最便宜的 Model

    來源: subagent-driven-development skill

    這條規則直接寫在 skill 裡:

    “Use the least powerful model that can handle each role to conserve cost and increase speed. Mechanical implementation tasks: use a fast, cheap model.”

    也就是說,當 Claude 判斷一個 task 是「機械性的」(1-2 個檔案、規格清楚),它就會選 Haiku。這對一般的 CRUD 功能可能沒問題,但對複雜業務邏輯(像 iDempiere plugin、Taiwan 發票系統)來說,Haiku 根本不夠用。

    Skill 的 Model 選擇邏輯

    Task 類型 Skill 的選擇 適合複雜專案?
    Mechanical(1-2 files, clear spec)Haiku(最便宜)❌ 通常不夠用
    Integration(多 file、需判斷)Sonnet(標準)✅ 通常足夠
    Architecture / ReviewOpus(最強)✅ 正確

    避開方法:在 AGENTS.md 明確指定 Model

    最簡單的解法是在每個專案的 AGENTS.md 裡明確寫好每個 agent 的 model。Claude 在 dispatch subagent 時,如果 AGENTS.md 有寫,就應該照抄,不用自己判斷。

    | Agent | Model | Role |
    |-------|-------|------|
    | pack-builder | sonnet | Build 2Pack XML + ZIP |
    | model-fixer | sonnet | Fix Model classes |
    | idempiere-expert | opus | Technical reviewer |

    同樣地,在 IMPLEMENTATION_PLAN.md 每個 phase 標上 model,讓 LEAD 照單全收:

    ## Phase 0.1:建立 PackOut.xml [pack-builder / sonnet]
    ## Phase 0.2:Activator 邏輯 [activator-fixer / sonnet]
    ## Review Gate [idempiere-expert / opus]

    隱藏規則 2:在 main/master 上工作會被詢問確認

    來源: 幾乎所有 implementation skill

    所有 skill 都有這條規則:“Never start implementation on main/master without explicit user consent.” 只要你的 working branch 叫 mainmaster,Claude 每次開始實作前都會停下來問你確認。

    避開方法:永遠從 dev branch 開工

    一條指令解決:

    git checkout -b dev

    在 dev branch 上,這條保護規則不會觸發。這也是好的 git 習慣,順手為之即可。

    隱藏規則 3:Subagent 不繼承你的對話 Context

    來源: 所有使用 subagent 的 skill

    這是設計上的特性,不是 bug:每個 subagent 都是 fresh 啟動,完全不知道你之前跟 LEAD 說過什麼。LEAD 要把所有需要的 context 手動打包給 subagent。

    這代表你告訴 LEAD「不要動 X 檔案」、「記得用 Y 方式」,subagent 不一定會知道,除非 LEAD 把這些資訊包進去。

    避開方法:把規則寫進文件,不要只說給 LEAD 聽

    任何重要的約定,放進 AGENTS.mdCLAUDE.mdIMPLEMENTATION_PLAN.md。這些檔案 subagent 啟動時會讀到,不依賴 LEAD 的記憶。

    隱藏規則 4:Feedback Survey 會擋住畫面

    Claude Code 會隨機彈出「How is Claude doing this session?」的評分畫面。這個畫面不是 blocking prompt,按 Enter 沒有用,要按 0 才能 dismiss。

    更乾脆的做法是直接關閉它。在 ~/.claude/settings.json 加一行:

    {
      "feedbackSurveyRate": 0
    }

    設為 0 後,這個 survey 就永遠不會出現了。

    完整 CLAUDE.md 覆寫規則範本

    把以下內容加進你的 CLAUDE.md,可以覆寫 skill 的預設行為:

    ## Superpowers Skill Override Rules
    
    ### Model Selection (OVERRIDES subagent-driven-development skill)
    NEVER use haiku for implementation tasks. Follow this mapping regardless
    of what the skill says about "mechanical" tasks:
    - opus: architecture decisions, code review, cross-file reasoning
    - sonnet: all implementation tasks (CRUD, API, forms, tests, services)
    - haiku: file scanning, directory listing, config comparison ONLY
    
    When dispatching subagents, ALWAYS check AGENTS.md for the assigned model.
    If AGENTS.md specifies a model, use it. Do not override with cheaper model.
    
    ### Git Branch
    Never ask for branch confirmation if already on a non-main/master branch.
    Treat any branch that is not named "main" or "master" as pre-approved for
    implementation work.

    一次性設定清單

    以下是只需要做一次的設定,之後每個專案都受益:

    設定 位置 效果
    "feedbackSurveyRate": 0~/.claude/settings.json永久關閉 feedback survey
    "defaultMode": "bypassPermissions"~/.claude/settings.json工具不再逐一詢問確認
    Model 覆寫規則~/.claude/CLAUDE.md強制 sonnet 做實作工作

    以下是每個新專案開始時的習慣:

    1. git checkout -b dev(避開 main/master 保護規則)
    2. 建立 AGENTS.md 並寫好每個 agent 的 model
    3. IMPLEMENTATION_PLAN.md 每個 phase 標記 model

    為什麼這些規則存在?

    這些 skill 是為「通用場景」設計的,預設行為是合理的:

    • 省成本: 對大多數用戶來說,Haiku 做簡單任務確實夠用,費用少一半
    • 保安全: 不讓 Claude 在 main branch 亂動是好習慣
    • 隔離 context: Fresh subagent 避免舊 context 污染新任務

    問題不是規則本身,而是當你的專案比「通用場景」複雜時,這些預設值就不夠精準了。透過明確的文件(AGENTS.md、CLAUDE.md)和一次性的 settings.json 設定,你可以讓 Claude 按照你的規格工作,而不是照 skill 的預設值工作。


    延伸閱讀:

  • Agent Team 穩定的關鍵:spawn 之前先建好兩份文件

    重點摘要

    • Agent Team 不穩定的根本原因:agent 靠對話記憶工作,不靠文件
    • 解法:spawn agents 之前,必須先建好 CLAUDE.md 和 AGENTS.md
    • CLAUDE.md 寫專案現況,AGENTS.md 寫團隊規則,缺一不可
    • Agent 之間的工作交接必須透過實體檔案,不能靠口頭傳遞

    同樣是用 Claude Code 跑 Agent Team,有人的 team 順暢完成、互動極少,有人的 team 一直卡住、不斷要人介入。

    差距不在任務複雜度,不在模型,在一件事:有沒有在 spawn agents 之前先建好文件。

    為什麼 Agent Team 會卡住

    要理解這個問題,先理解 agent 的本質。

    當你 spawn 一個 agent,它只知道你在那一刻的 prompt 裡說了什麼。你的對話歷史、你之前說的規則、其他 agent 做了什麼——它全都不知道。

    這代表什麼?

    如果你沒有把規則寫進文件,你(orchestrator)就是整個 team 唯一的記憶體。你要記住所有規則,要在每個 spawn prompt 裡正確地說一遍,要把 agent A 的結果正確地轉述給 agent B。

    這就是卡住的來源:

    • Prompt 寫漏一條規則 → agent 做出不符合期望的結果
    • Agent A 的結果透過我轉述給 Agent B → 轉述過程中遺漏細節
    • 對話太長,舊的 context 被壓縮 → 規則消失
    • 某個 agent 失敗重啟 → 什麼都不記得,要重頭說
    • 多個 agent 平行跑 → 每個人收到的規則說法略有不同

    每一個都是可能的失敗點。越複雜的 team,失敗的機率越高。

    讓 Team 穩定的解法:兩份文件

    穩定的 Agent Team 做一件事:把所有 agent 需要知道的東西,從對話記憶移到磁碟上的文件。

    文件是客觀存在的。所有 agent 讀同一份,規則永遠一致。Agent 失敗重啟,讀一遍文件就恢復。多個 agent 平行跑,各自讀文件,不需要我轉述。

    需要兩份文件,職責不同:

    文件 寫什麼 類比
    CLAUDE.md專案現況:ID、路徑、已完成的項目、已知問題、版本新人入職的專案交接文件
    AGENTS.md團隊規則:誰做什麼、如何交接、鐵律、失敗怎麼處理公司的工作手冊

    CLAUDE.md 要寫什麼

    寫所有「agent 每次都要重新查,但其實不需要查」的東西:

    # 專案名稱
    
    ## 關鍵 ID 和路徑
    - WordPress 分類 ID:失智照顧=76、家屬心聲=78
    - 已發布文章:[Post ID 清單]
    - 輸出目錄:./content/drafts/
    
    ## 技術環境
    - 使用版本:XXX
    - API endpoint:[測試] / [正式]
    
    ## 已知的坑
    - 台灣失智症協會網站用 http:// 不支援 https
    - 這個 API 的日期格式是 YYYYMMDD 不是 ISO 8601
    
    ## 已完成 / 待處理
    - ✅ 已完成:XXX
    - ⚠️ 待處理:YYY

    沒有 CLAUDE.md,agent 每次都要重新查分類 ID、確認文章有沒有發過、試連結通不通。每一步都是潛在的失敗點。

    AGENTS.md 要寫什麼

    AGENTS.md 有四個必要部分:

    1. 鐵律(所有 agent 不可違反)

    ## 鐵律
    - 所有醫療資訊必須附上可驗證的來源 URL
    - 不能修改 iDempiere core 代碼,只能在 plugin 層擴充
    - 沒有測試的代碼不算完成

    2. 每個 agent 的定義

    ### researcher(研究員)
    職責:搜尋資料,每筆資訊必須記錄來源 URL
    工具:WebSearch, WebFetch, Read
    輸出格式:[明確定義]

    3. 交接協議(最關鍵、最常被忽略)

    ## 交接協議
    researcher 完成 → 存到 ./drafts/research-[topic]-[YYYYMMDD].md
    writer 開始前  → 必須讀取上面那個檔案
    writer 完成   → 存到 ./drafts/article-[topic]-[YYYYMMDD].md
    publisher 開始前 → 讀取 article 檔案,驗證 References 後才發布

    4. 失敗處理規則

    ## 失敗處理
    - 找不到可信來源:停止,回報「無法找到符合鐵律的來源」,等待指示
    - 需求不清楚:列出疑問,等確認後再開始,不要自行假設
    - 任何 agent:遇到不確定的事,停下來問,不要猜

    具體案例:iDempiere 台灣統一發票 Plugin

    用一個真實場景說明這套做法。假設要用 Agent Team 開發一個 iDempiere 的台灣統一發票 plugin,team 成員是 PM、RD、架構師。

    CLAUDE.md(專案現況)

    # iDempiere 統一發票 Plugin
    
    ## 技術環境
    - iDempiere 版本:11.0,Java 17
    - Plugin 目錄:/path/to/plugin
    - 財政部電子發票規格書版本:5.0(2025年)
    
    ## 已知 iDempiere 約束
    - Callout 用 @Callout annotation(見 idempiere-callout-generator skill)
    - 不能用 Spring,只能用 OSGi service
    - DB 操作只能透過 PO 或 DB class,不能直接 JDBC
    
    ## 已完成的模組
    - ✅ 發票開立
    - ⚠️ 作廢(待測試)
    - ❌ 查詢(未開始)

    AGENTS.md 的交接協議

    ## 新功能開發流程
    
    pm 寫需求 → 存到 ./specs/req-[feature].md
        ↓
    architect 設計 → 讀 req 檔案 → 存到 ./specs/arch-[feature].md
        ↓
    rd 實作 → 讀 req + arch 檔案 → 代碼 + ./specs/impl-[feature].md
        ↓
    architect review → 讀 impl 摘要 → 存到 ./reviews/review-[feature].md

    每個 agent 知道自己要讀什麼、存到哪裡。PM 和 RD 不需要「對話」,他們透過檔案交接。Architect 不需要等 PM 說完才知道需求,直接讀需求檔案。

    每次 spawn agent 的啟動句

    請先閱讀 CLAUDE.md 和 AGENTS.md,
    確認你的角色、鐵律和交接路徑後再開始工作。

    這一句話讓 agent 在開始工作前自己去讀規則,不需要我每次重複說一遍。

    不穩定 vs 穩定:對照表

    沒有文件(常見做法) 有文件(穩定做法)
    規則從哪來我的 prompt(每次可能不同)AGENTS.md(永遠一致)
    專案狀態我的記憶(可能過時或漏掉)CLAUDE.md(客觀存在)
    Agent 間交接我轉述(容易漏細節)實體檔案(完整保留)
    Agent 失敗重啟什麼都不記得讀文件即恢復
    平行跑多個 agent規則可能不一致讀同一份文件,完全一致
    需要人工介入頻繁只在真正需要決策時

    標準流程:每次建立 Agent Team 前

    1. 建立 CLAUDE.md:寫入專案現況(ID、路徑、已知問題、版本、已完成項目)
    2. 建立 AGENTS.md:寫入鐵律、每個 agent 的定義、交接協議、失敗處理規則
    3. Spawn agent 時第一句:「請先閱讀 CLAUDE.md 和 AGENTS.md,確認規則後再開始」
    4. 交接一律用實體檔案:agent 完成後存到指定路徑,下一個 agent 從那裡讀

    沒有做完這四步就開始 spawn,你就是在用對話記憶撐整個 team。任務越複雜,遲早會卡住。

    常見問題

    Q:簡單的任務也需要這兩份文件嗎?

    一個 agent 做一件事,不需要。兩個以上的 agent 有交接,就需要。判斷標準很簡單:如果你需要「把 A 做完的東西交給 B」,就要用文件定義這個交接。

    Q:CLAUDE.md 和 AGENTS.md 要多詳細?

    CLAUDE.md:詳細到「新加入的 agent 不需要問任何問題就能知道專案現況」。AGENTS.md:詳細到「每個 agent 知道自己的輸出要存到哪個路徑」。最常被忽略的就是交接路徑,這是 team 失敗最常見的原因。

    Q:文件要每次重寫嗎?

    AGENTS.md 的團隊結構通常固定,一次寫好後很少改。CLAUDE.md 的專案狀態會變,每次任務完成後更新「已完成項目」。把更新 CLAUDE.md 當作任務完成的一部分,下次 team 啟動時文件就是最新的。

  • Claude Code 實戰:5 個核心技巧讓 AI 一次到位

    重點摘要

    • CLAUDE.md 是一次性投資,讓每次對話自動遵守規則,減少 50–70% 重複提示
    • 設計文件寫在執行前,讓 Claude 一次完成實作,避免多輪修改
    • Plan Mode + Agent Teams 適合複雜任務,正確啟動方式決定準確率
    • Hooks 自動化格式、測試、安全掃描,讓你專注在真正需要判斷的事

    你是否有過這樣的經驗:跟 Claude Code 說了一大段需求,它做出來的結果差了一點點,於是你開始修正、補充說明、再確認,來回四五輪才終於完成?

    這篇文章整理的,就是如何系統性地消滅這些來回。不靠運氣,靠結構。

    1. CLAUDE.md:把規則寫進專案,不用每次重說

    CLAUDE.md 是 Claude Code 自動載入的專案規則檔,放在 ~/your-project/CLAUDE.md。它是永久生效的,只要存在,每次對話都會自動套用。

    效果:寫一次,永久有效,減少 50–70% 重複提示。

    CLAUDE.md 應該寫什麼

    分四層,由外到內:

    層次 內容 範例
    基本資訊Tech stack、架構決策Next.js 14 App Router + PostgreSQL
    代碼標準命名規則、檔案結構TypeScript strict mode,禁止 any
    業務邏輯領域規則、合規要求台灣統一編號驗證邏輯
    技術決策測試策略、代碼審查規則每個函數必須有對應單元測試

    可直接複製的最小版 CLAUDE.md

    # 專案規則
    
    ## Tech Stack
    - Runtime: Node.js 20, TypeScript strict
    - Frontend: Next.js 14 App Router
    - Database: PostgreSQL + Prisma ORM
    - Testing: Vitest + Testing Library
    
    ## 代碼標準
    - 禁止使用 `any` 類型
    - 所有 API 回應都必須有錯誤處理
    - 命名:camelCase 變數/函數,PascalCase 元件
    - 每個新函數必須有對應測試
    
    ## 禁止事項
    - 不要在 .env 以外的地方寫入 secrets
    - 不要 commit node_modules
    - 不要繞過 TypeScript 類型檢查
    
    ## 測試策略
    - 單元測試:純函數、工具類
    - 整合測試:API routes、資料庫操作
    - E2E:核心用戶流程

    常見錯誤:規則太模糊(「要寫好的代碼」)。寫 CLAUDE.md 要具體到可驗證,例如「API 回應必須包含 { success, data, error } 結構」。

    2. 設計文件:讓 Claude 第一次就做對

    沒有設計文件,Claude 會根據最可能的假設去實作。你的需求愈複雜,這些假設偏離你想法的機率就愈高。

    設計文件 ≠ CLAUDE.md:CLAUDE.md 是永久規則,設計文件是「這個功能」的一次性說明。

    最小版設計文件(20 分鐘內完成)

    # 功能:[名稱]
    
    ## 要做什麼
    [一段話描述,包含用戶場景]
    
    ## 輸入 / 輸出格式
    輸入:{ invoiceNumber: string, amount: number }
    輸出:{ success: boolean, invoiceId: string }
    
    ## 邊界條件
    - 金額為 0 時:回傳錯誤,不建立發票
    - 統編格式錯誤時:拋出 ValidationError
    - 重複發票號碼:回傳已存在的 invoiceId
    
    ## 完成定義(Done When)
    - [ ] 所有邊界條件有對應測試
    - [ ] API 回應符合 CLAUDE.md 定義的格式
    - [ ] TypeScript 0 errors

    這 20 分鐘可以省下 4–6 小時的修改。數學很簡單。

    複雜場景:從用戶故事快速產出設計文件

    當你腦中只有模糊需求,可以用這個提示讓 Claude 幫你產出設計文件初稿:

    我需要實作:[用戶故事]
    
    請幫我寫一份設計文件,包含:
    1. 功能描述(一段話)
    2. 輸入/輸出格式(JSON 範例)
    3. 邊界條件清單
    4. 完成定義
    
    不要實作,只寫文件。

    確認文件正確後,再說「依照這份設計文件實作」。這是「計劃→確認→執行」的標準流程,比直接說需求減少至少 2 輪來回。

    3. Plan Mode:大型任務的正確啟動方式

    Plan Mode 是 Claude Code 的三段式決策機制:探索 → 規劃 → 用戶確認。只有用戶批准後才開始執行,避免走錯方向浪費的大量時間。

    何時使用 Plan Mode

    場景 使用 Plan Mode? 原因
    修一個 bug不需要範圍小,直接做
    新增一個 API endpoint不需要單一改動
    重構模組(跨 5+ 個文件)需要需要確認拆分策略
    架構遷移(框架升級)需要不可逆,要先對齊
    全新功能模組(3 天以上工作量)需要複雜度高,先確認再做

    Plan Mode 的正確提示格式

    啟動 Plan Mode 後,給 Claude 的提示要包含三個部分:

    【背景】
    這個專案是 [系統描述],目前 [現況]。
    
    【目標】
    我需要 [具體目標],完成後要能 [驗收標準]。
    
    【約束條件】
    - 不能破壞現有的 [X] 功能
    - 必須相容 [Y] 版本
    - 不要修改 [Z] 目錄的任何檔案
    
    請先制定實作計劃,列出方案選項和取捨,等我確認後再開始執行。

    「等我確認後再開始執行」這句話非常關鍵。沒有這句話,Claude 可能在呈現計劃的同時就開始執行了。

    4. Agent Teams:平行作業的正確姿勢

    Agent Teams 讓多個 Claude 實例同時處理獨立任務。正確使用可以把 3 天的工作壓縮到 1 天,錯誤使用會讓機器記憶體爆掉。

    模型選擇速查

    模型 記憶體 適合任務 口訣
    Opus~1GB/agent架構決策、複雜業務邏輯、Code Review需要「想」
    Sonnet~600MB/agentCRUD 實作、API 對接、表單頁面需要「做」
    Haiku~400MB/agent檔案掃描、配置對比、簡單查詢需要「找」

    建立 Agent Team 前必做的三件事

    1. 評估記憶體:執行 free -h,可用記憶體必須大於預計用量的 1.5 倍(安全邊界)
    2. 拆分獨立任務:每個 agent 的任務不能有隱性依賴,確認前後順序再分配
    3. 準備共用 CLAUDE.md:所有 agent 共享同一套規則,避免各自用不同標準

    任務拆分原則

    適合平行的任務:API endpoint A、API endpoint B、前端表單 C(互不依賴)

    不適合平行的任務:「建資料庫 schema」→「實作 API」→「寫測試」(有嚴格先後順序)

    # 建立 Agent Team 的標準提示
    我需要建立一個 Agent Team 完成以下任務:
    
    【總目標】[一句話]
    
    【任務清單】(已確認互相獨立)
    1. [任務 A] → 負責人:Sonnet agent
    2. [任務 B] → 負責人:Sonnet agent
    3. [任務 C](需要架構決策)→ 負責人:Opus agent
    
    【共用規則】
    - 所有代碼遵守 CLAUDE.md
    - 任務完成後回報:完成的文件列表 + 測試通過狀態
    
    【資源限制】
    可用記憶體:[X]GB,請確認 agent 數量不超過安全上限。

    5. Hooks:讓機器自動做重複的事

    Hooks 是在特定事件(編輯後、提交前、排程)自動執行的腳本。設定一次,永久省力。

    三個最值得設定的 Hook

    Hook 1:編輯後自動格式化(after-edit)

    {
      "hooks": {
        "after-edit": {
          "command": "prettier --write $FILE && eslint --fix $FILE",
          "on_failure": "warn",
          "timeout": 30000
        }
      }
    }

    Hook 2:提交前強制測試通過(before-commit)

    {
      "hooks": {
        "before-commit": {
          "command": "npm run test -- --passWithNoTests && npm run lint",
          "on_failure": "block",
          "timeout": 120000
        }
      }
    }

    "on_failure": "block" 代表測試未通過時 commit 會被阻止,不是只警告。

    Hook 3:每週安全掃描(scheduled)

    {
      "hooks": {
        "scheduled": {
          "cron": "0 10 * * 6",
          "command": "npm audit fix && npm outdated",
          "on_failure": "warn"
        }
      }
    }

    這三個 Hook 每週省下約 60 分鐘,一年就是 52 小時。

    6. 降低來回、提高準確的通用技巧

    多文件上下文提示法

    要讓 Claude 了解跨文件的關係,不要一次只給一個文件,要同時提供:

    請先閱讀這三個文件後再開始:
    - src/types/invoice.ts(資料模型)
    - src/api/invoices.ts(現有 API)
    - docs/designs/invoice-search.md(本次設計文件)
    
    閱讀完成後告訴我你的理解,再開始實作。

    「閱讀完成後告訴我你的理解」這個確認步驟,能在執行前抓到 Claude 對現有代碼的誤解。

    邊界條件先行法

    把邊界條件和錯誤情況列在需求的最前面,而不是最後面。Claude 讀到越早的內容,優先度越高:

    # 不好的順序
    實作用戶登入功能,支援 email/password,記得處理密碼錯誤的情況
    
    # 好的順序
    實作用戶登入功能
    
    【錯誤情況(必須處理)】
    - 帳號不存在 → 401,訊息「帳號或密碼錯誤」(不透露哪個錯)
    - 密碼錯誤 → 401,同上訊息
    - 連續失敗 5 次 → 鎖定帳號 15 分鐘
    
    【正常流程】
    支援 email/password,成功回傳 JWT token

    分段確認法(適合複雜場景)

    不要一次把整個複雜需求丟給 Claude,分段完成並確認:

    1. 「先實作資料模型,不要碰 API 層,完成後給我看」
    2. (確認模型正確)「現在依照這個模型實作 API」
    3. (確認 API 正確)「現在寫整合測試」

    每一段都比整體更容易驗證,錯誤也更容易在早期被發現。

    明確說「不要做什麼」

    Claude 很善意,會主動補充它認為合理的東西。如果不想要這些補充:

    # 加上明確的範圍限制
    只修改 src/utils/tax.ts 這個文件,不要動 tests/ 目錄,
    不要重構現有函數,只新增 calculateVAT() 函數。

    整合使用:複雜功能的標準流程

    把上面所有技巧整合成一套可重複使用的流程:

    1. 確認 CLAUDE.md 存在且最新(一次性,專案生命週期)
    2. 寫設計文件(每個新功能,20–30 分鐘)
    3. 用「計劃→確認→執行」啟動任務(複雜任務用 Plan Mode)
    4. 分段驗證(模型 → API → 測試,每段確認一次)
    5. Hooks 自動把關(格式、測試、安全)

    這套流程把原本 10–15 輪的來回壓縮到 2–3 輪。

    常見問題

    Q:CLAUDE.md 要多詳細才夠?

    夠到「可以驗證」就夠了。「代碼要好維護」是沒用的規則,「函數超過 50 行必須拆分」是有用的規則。從最重要的 5 條開始,持續更新。

    Q:設計文件需求中途改了怎麼辦?

    先更新設計文件,再告訴 Claude「設計文件已更新,請依最新版本繼續,以下是改變的部分:[…]」。不要只口頭說需求變了,有文件才有依據。

    Q:Agent Teams 記憶體爆掉怎麼辦?

    立即執行 free -h 確認狀況,用 ps aux --sort=-%mem | head -20 找出佔用最多的 agent,優先結束 Opus 實例。恢復後先用 git status 確認哪些工作已完成,從斷點繼續而不是重頭來過。

    Q:Claude 輸出的代碼跟我的風格差很多?

    這幾乎都是 CLAUDE.md 不夠具體的問題。找一個你認為寫得好的現有文件,告訴 Claude「比照這個文件的風格」,然後把那個風格總結後加進 CLAUDE.md。

  • Claude Code Agent Teams:從穩定執行到自動化代碼審查的完整指南

    Claude Code Agent Teams:從穩定執行到自動化代碼審查的完整指南

    本文整合三部分內容:(1) Agent Teams 的穩定執行框架;(2) 全局代碼審查規則系統的設計與實施;(3) 自動化雙 Agent 審查機制(架構師 + PM)的完整實現方案。這是一份實踐導向的指南,涵蓋從資源評估、權限配置、到自動觸發流程的所有細節。

    第一部分:Agent Teams 的三層穩定執行框架

    1.1 評估層(Assessment)— 前置資源檢查

    每次建立 Agent Team 前,必須執行三個評估動作:

    1. 記憶體現狀:執行 free -h 或查看 Docker stats,確認可用容量
    2. 計算容量:根據模型選擇計算最大並行 agent 數(opus ~1GB、sonnet ~600MB、haiku ~400MB)
    3. 決策與確認:列出 agent 角色、模型、預估記憶體,取得用戶確認後才建立

    模型選擇口訣

    • 需要「想」 → Opus(架構決策、安全設計、業務邏輯、複雜 SQL、Code Review)
    • 需要「做」 → Sonnet(CRUD 實作、API 對接、測試撰寫、文件撰寫)
    • 需要「找」 → Haiku(檔案掃描、配置對比、API 整合)

    1.2 確認層(Confirmation)— 用戶決策前置

    建立 Team 前,必須向用戶列出清晰的角色定義和資源計劃,包括:

    • 各 agent 的角色名稱與職責
    • 指定的 AI 模型及其預估記憶體
    • 總計容量和系統可用容量
    • 並行數量和預期執行順序

    只有在用戶明確確認後,才啟動 TeamCreate 和後續任務建立。這一步防止了資源耗盡、權限誤配、以及 agent 之間通訊不暢的根本原因。

    1.3 執行層(Staged Execution)— 分階段序列化

    即使資源充足,也不應讓所有 agent 同時轟炸執行。分階段策略包括:

    1. 第 1 階段:啟動基礎設施 agent(如資源管理、環境配置)
    2. 第 2 階段:啟動 researcher agent,進行資訊搜集與分析
    3. 第 3 階段:啟動 architect agent,設計方案
    4. 第 4 階段:啟動 developer agent,進行實作
    5. 第 5 階段:啟動驗證 agent,進行測試與審查

    各階段 agent 完成任務後,主動進入「空閒」狀態並通知團隊。不進行「拉取」操作,而是由前置 agent 完成後才推進下一階段。這種設計確保:

    • 前置依賴滿足後才啟動
    • 消息傳遞清晰,無需輪詢
    • 系統記憶體壓力均勻分散
    • 故障範圍可控,易於除錯

    第二部分:全局代碼審查規則系統架構

    2.1 雙層規則設計

    代碼審查規則分為兩層,確保通用性和專案適應性的平衡:

    • 全局層~/.claude/memory/):所有項目共享的代碼品質標準(SOLID 原則、Design Pattern、代碼異味、測試規範、語言特定規範)
    • 項目層項目/.claude/code-review-rules.md):專案特定的業務邏輯規則、設計稿映射、外部驗證清單

    2.2 全局規則內容結構

    code-review-global-rules.md(SOLID、Pattern、Code Smell、Testing)

    • SOLID 五項原則的定義和違反示例
    • Design Pattern 反面示例(God Object、Feature Envy 等)
    • 代碼異味檢查清單(N+1、Magic Number、過長方法、過多參數、重複代碼、複雜邏輯)
    • 單元測試最低標準(80%+ 覆蓋、邊界情況、Mock vs Real Dependency)

    code-review-languages.md(Java、Python、JavaScript/TypeScript、SQL)

    • 命名規範(類名、方法名、變數名、常數、包名)
    • 包結構約定(分層架構:domain/service/repository/validator 等)
    • 異常處理規範
    • 語言特定工具規範(Lombok、OSGi、Type Hint、Docstring 等)

    code-review-feedback.md(架構師與 PM Agent 職責和對焦框架)

    • 架構師 Agent:SOLID 遵循度(1-5 分)、Design Pattern、Code Smell、測試覆蓋、異常處理、語言規範
    • PM Agent:功能 vs 設計稿對齐、API 返回值、邊界情況、業務邏輯、用戶體驗、外部驗證需求
    • 雙方對焦框架:架構師問「代碼設計能支持你檢查的功能嗎?」,PM 反問「這些功能需求會造成架構問題嗎?」

    code-review-process.md(自動觸發、Agent 角色、聯合報告格式)

    • 觸發點:Task marked as completed
    • Agent 角色 Prompt(初版):架構師評估、PM 評估、聯合對話
    • 聯合報告格式:分離的評估 + 統一優先級排序 (P0/P1/P2)
    • 最終判定:Pass / Needs Work / Fail

    2.3 項目層規則(台灣發票系統範例)

    項目規則分為三類:

    A. 業務邏輯規則(優先級最高)
    • 進項稅計算公式(進項稅金額 = 發票金額 × 5%,DECIMAL(19,2) 向下取整)
    • 三聯式(不含稅)vs 二聯式(含稅)的會計處理邏輯
    • 進項稅折讓的強制申報期限(當期內必須申報,無延後例外)
    • 兼營營業人的比例扣抵公式(可扣抵進項稅 = 總進項稅 × (應稅銷售額 / 總銷售額))
    • 發票號碼連續性檢查和遺失空白發票記錄
    • 發票開立日期 → 申報期間的映射(1-2月→第1期、3-4月→第2期 等,共六期)
    B. 設計稿對齐規則(優先級次之)
    • API 端點的返回格式和欄位定義
    • 邊界情況的預期響應(零金額、負數、超大金額)
    • 數據型態和範圍檢查
    C. 外部驗證清單(優先級最低,但定期更新)
    • 進項稅可扣抵期限是否仍為 10 年
    • 電子發票強制規定的生效狀態
    • 設計稿版本確認
    • 技術規範(iDempiere PO 模型、OSGi Bundle)

    第三部分:自動化雙 Agent 審查機制的實現

    3.1 TaskCompleted Hook 配置

    .claude/settings.local.json 中配置 TaskCompleted Hook,每當任務標記完成時,自動觸發架構師和 PM 兩個 agent 進行深度審查:

    {
      "hooks": {
        "TaskCompleted": [
          {
            "hooks": [
              {
                "type": "agent",
                "prompt": "Conduct comprehensive code review: (1) Architecture: SOLID principles (1-5), design patterns, code smells (P0/P1/P2), testing, exceptions. (2) Functional: spec alignment, API contracts, boundary cases, business logic (Taiwan tax rules). Provide unified P0/P1/P2 priority with Pass/Needs Work/Fail decision and file:line recommendations.",
                "model": "opus",
                "statusMessage": "Running code review on completed task...",
                "timeout": 300
              }
            ]
          }
        ]
      }
    }

    3.2 架構師 Agent 職責細節

    架構師 Agent 按以下維度進行評估,每項 1-5 分自評:

    1. SOLID 原則遵循度:檢查 S(單一職責)、O(開閉)、L(里氏替換)、I(接口隔離)、D(依賴倒轉)五項是否遵循
    2. Design Pattern 應用恰當性:是否應用了合適的設計模式,是否存在過度設計
    3. 代碼異味程度:N+1 查詢、Magic Number、過長方法(>20 行)、過多參數(>3 個)、重複代碼、複雜邏輯(圈複雜度 > 10)
    4. 測試覆蓋度:目標 80%+,是否涵蓋邊界情況(null、empty、max/min)
    5. 異常處理完整性:是否避免過寬泛的異常捕捉,異常信息是否有意義,是否吞掉異常
    6. 語言特定規範遵循度:根據 code-review-languages.md 檢查命名、包結構、工具使用規範

    輸出:各維度評分 + 具體改進建議(標記優先級 P0/P1/P2 和代碼位置)

    3.3 PM Agent 職責細節(含 QA)

    PM Agent 進行務實檢查,確保功能實現和業務邏輯正確性:

    1. 功能 vs 設計稿對齐:設計稿的所有功能點是否實現,是否有範圍蠕動
    2. API 返回值對齐:返回欄位是否與文檔一致,資料型態是否正確,必需欄位是否都有
    3. 邊界情況涵蓋:null 輸入、空集合、最大值/最小值、負數、零值是否處理
    4. 業務邏輯正確性:根據項目規則(進項稅計算、發票號碼、申報期間映射等)是否正確
    5. 用戶體驗:錯誤提示是否清楚,用戶流程是否順暢,是否有令人困惑的行為
    6. 外部驗證需求:是否需要查證業務規定(優先 C)、設計稿(優先 A)、技術規範(優先 B)

    輸出:功能層缺陷清單、QA 項目、待驗證項(註明 C/A/B 優先級)

    3.4 聯合報告與優先級統一排序

    架構師和 PM 分別完成評估後,進行深度對話:

    • 架構師問 PM:「代碼結構能支持你檢查的功能嗎?」
    • PM 反問架構師:「這些功能需求會造成架構問題嗎?」

    基於對話結果,生成聯合報告:

    • P0(Critical):N+1 查詢、安全漏洞、死鎖風險、未處理的邊界情況、違反台灣稅務規則
    • P1(Important):過長方法、重複代碼、Magic Number、缺失測試、不清晰的錯誤提示
    • P2(Nice to Have):輔助方法提取、考慮設計模式、日誌增強

    最終判定

    • Pass:P0 問題 0 個,P1 問題可接受(≤2 個或不影響核心功能)
    • ⚠️ Needs Work:P0 問題 1-3 個,或 P1 問題 >3 個,或測試覆蓋度 <70%
    • Fail:P0 問題 ≥3 個,或安全漏洞,或違反重要法規

    第四部分:審查流程與反覆迭代

    4.1 外部驗證流程

    當 PM Agent 提出待驗證項時,按優先級啟動查詢:

    優先級 C(業務邏輯)— 需人工驗證
    • 用戶透過稅務官網或法規文件進行人工查證(AI 查詢易出錯)
    • 驗證結果更新到項目規則
    • 重新審查涉及的代碼
    優先級 A(設計稿)— 查閱項目文檔
    • 查閱設計文件、API 文檔
    • 如無對應文件,提示用戶補充
    • 確認後更新 code-review-rules.md
    優先級 B(技術規範)— 查詢官方文檔
    • 查詢 iDempiere、OSGi 官方文檔
    • 標記為參考(變動機會低)

    4.2 修改與重審流程

    當報告判定為 Needs Work 或 Fail 時:

    1. 開發者查看報告,收到 P0/P1/P2 改進清單
    2. 開發者修改代碼並完成新測試
    3. 重新標記 Task 為 completed(或手動觸發 /code-review-force)
    4. 自動重審(流程回到架構師 + PM 評估)
    5. 迴圈進行,直到最終判定 Pass

    第五部分:系統集成與迭代計劃

    5.1 全局記憶結構

    所有規則和流程信息保存在用戶的全局記憶庫中:

    • ~/.claude/memory/code-review-global-rules.md — SOLID、Pattern、Code Smell、Testing
    • ~/.claude/memory/code-review-languages.md — Java、Python、JS、SQL 規範
    • ~/.claude/memory/code-review-feedback.md — 架構師/PM 職責與對焦框架
    • ~/.claude/memory/code-review-process.md — 自動觸發、報告格式、判定標準

    5.2 項目級別記憶結構

    • 項目/.claude/code-review-rules.md — 業務邏輯規則 + 設計稿映射 + 外部驗證清單
    • 項目/.claude/settings.local.json — TaskCompleted Hook 配置

    5.3 三個迭代階段

    Phase 1(現在)
    • 建立全局規則知識庫(4 個記憶文件)
    • 編寫項目層規則(code-review-rules.md)
    • 配置 TaskCompleted Hook
    • 在項目中試用審查機制
    Phase 2(2-4 週後)
    • 根據實際審查結果優化規則(哪些規則發現了 bug、哪些規則太寬泛)
    • 改進 Agent Prompt(增加上下文、更清晰的指導)
    • 補充項目層規則細節(特別是邊界情況和特殊規則)
    Phase 3(1-2 月後)
    • 考慮集成到 CI/CD(每次 PR 自動審查)
    • 累積審查報告,形成項目代碼品質歷史
    • 調整 Hook 超時和 Agent 模型選擇

    第六部分:常見問題與實踐建議

    Q1:如果審查花太長時間怎麼辦?

    A:初版 timeout 設為 300 秒。如果超時,可調整為 600 秒,或簡化 Agent Prompt 去掉某些維度。對大型代碼改動,可分成多個小 Task,每個分別審查。

    Q2:外部驗證項目誰負責查證?

    A:初版由用戶或 PM 手動查證(特別是業務邏輯 C 項)。後續可考慮集成更多自動化(如 WebSearch for C 項、文檔連接 for A 項)。

    Q3:PM Agent 如何知道設計稿的內容?

    A:初版需在 code-review-rules.md 的 B 項中維護設計稿摘要(API 返回格式、欄位定義、邊界情況)。後續可考慮直接連接設計文件或 API 文檔鏈接。

    Q4:審查報告輸出到哪裡?

    A:初版直接輸出到對話(用戶可複製保存或導出)。後續可考慮存到 Task comment、Markdown 文件或項目文檔。

    Q5:如何確保 Agent Teams 穩定運行?

    A:遵循三層框架:

    • 評估層:前置資源檢查和確認,不盲目建立 Team
    • 確認層:列出角色、模型、容量,取得用戶確認
    • 執行層:分階段序列化,避免並行轟炸,讓 agent 主動進入空閒狀態而不是被拉取

    以及定期檢查記憶體、監控 agent 通訊、設置合理的超時時間。

    結論

    穩定可信的 Agent Teams 不是靠運氣,而是靠紮實的前置規劃、清晰的資源評估、以及精心設計的執行流程。本文提供的三層框架(評估→確認→分階段執行)確保了 Team 運行的穩定性。配合全局規則庫 + 項目規則 + 自動審查機制,可以建立一套完整的代碼品質保證體系,既有通用性,也有靈活性。

    從 Phase 1 的試用開始,逐步優化規則和 Agent Prompt,經過 2-4 週的實踐,可以達到穩定的審查效果。最終目標是讓代碼審查成為自動化流程的一部分,開發者無需手動申請審查,系統自動評估和反饋,確保每個 Task 完成時都經過架構師和 PM 的雙重把關。

  • Claude Code Hook 進階應用:6 個 Lifecycle Points 和 12+ 實戰場景

    Hook 看起來簡單,但它的威力來自於「在正確的時刻介入」。本篇深入 Hook 的生命週期,展示 6 個不同的 Hook 觸發點(lifecycle points),提供 12+ 個實戰場景範例,以及具體的配置和部署步驟。

    🔄 Hook 的完整生命週期

    Claude Code 在執行工作時,會經過多個檢查點。Hook 就是在這些檢查點上「攔截」執行流程,進行驗證、轉換或防禦。

    用戶輸入
      ↓
    [PreRequest Hook] ← Hook 1:攔截請求前
      ↓
    驗證認證和權限
      ↓
    [PreToolUse Hook] ← Hook 2:在工具執行前
      ↓
    執行工具(bash、read、edit 等)
      ↓
    獲取工具結果
      ↓
    [PostToolUse Hook] ← Hook 3:在工具執行後
      ↓
    結果驗證和轉換
      ↓
    [Stop Hook] ← Hook 4:決定是否需要暫停和修正
      ↓
    返回結果給用戶
      ↓
    [PostResponse Hook] ← Hook 5:響應後的清理
      ↓
    異常處理
      ↓
    [OnError Hook] ← Hook 6:異常發生時的恢復
      ↓
    完成
    

    📍 6 個 Hook 觸發點詳解

    1️⃣ PreRequest Hook(最上游的防禦)

    觸發時機:用戶提交請求時,在任何工具執行前

    使用場景:

    • 🔴 防禦場景 1:檢查用戶是否試圖讀取敏感檔案(.env, .ssh, .config)
    • 🟠 檢查場景 2:驗證請求是否包含危險關鍵字(git reset –hard, rm -rf)
    • 🟡 轉向場景 3:根據時間或上下文自動拒絕某些類型的請求
    # 配置位置:~/.claude/settings.json 或 settings.local.json
    
    {
      "hooks": {
        "pre_request": {
          "enabled": true,
          "rules": [
            {
              "name": "block_sensitive_files",
              "pattern": "(read|cat).*(\\.env|\\.key|\\.ssh|credentials)",
              "action": "block",
              "message": "⚠️ Cannot access sensitive files"
            },
            {
              "name": "warn_destructive",
              "pattern": "git (reset --hard|push --force)|rm -rf",
              "action": "confirm",
              "message": "⚠️ This command is destructive. Continue?"
            }
          ]
        }
      }
    }
    

    2️⃣ PreToolUse Hook(工具執行前的最後檢查)

    觸發時機:具體工具(bash、read、edit 等)即將執行時

    使用場景:

    • 🔴 防禦場景 1:攔截特定工具(禁止 rm、禁止 git push 到 main)
    • 🟠 檢查場景 2:驗證檔案路徑存在性(避免編輯不存在的檔案)
    • 🟡 轉換場景 3:修改命令參數(將 rm 改為 mv to trash)
    • 🟢 記錄場景 4:記錄所有敏感操作的日誌
    # 例子:PreToolUse Hook - 禁止直接刪除
    
    {
      "hooks": {
        "pre_tool_use": {
          "enabled": true,
          "rules": [
            {
              "name": "prevent_direct_deletion",
              "tool": "bash",
              "pattern": "^rm ",
              "action": "transform",
              "transform": "echo 'Using rm is disabled. Use: mv $file ~/.trash' && false"
            },
            {
              "name": "verify_branch_safety",
              "tool": "bash",
              "pattern": "git push.*main",
              "action": "confirm",
              "message": "Push to main? This is permanent."
            },
            {
              "name": "auto_backup_on_edit",
              "tool": "edit",
              "action": "pre_action",
              "command": "cp {file} {file}.backup"
            }
          ]
        }
      }
    }
    

    3️⃣ PostToolUse Hook(工具執行後的驗證和轉換)

    觸發時機:工具執行完畢,獲得結果後

    使用場景:

    • 🟡 驗證場景 1:檢查 bash 命令是否成功(exit code = 0)
    • 🟠 轉換場景 2:格式化輸出(JSON 格式化、表格美化)
    • 🟢 記錄場景 3:自動保存重要操作結果
    • 🔵 優化場景 4:清理大型輸出(截斷日誌)
    # 例子:PostToolUse Hook - 自動格式化和驗證
    
    {
      "hooks": {
        "post_tool_use": {
          "enabled": true,
          "rules": [
            {
              "name": "validate_bash_success",
              "tool": "bash",
              "action": "validate",
              "check": "exit_code == 0",
              "on_fail": "log_error"
            },
            {
              "name": "auto_format_json",
              "tool": "bash",
              "pattern": "jq|json",
              "action": "transform",
              "transform": "jq '.' (automatically format JSON output)"
            },
            {
              "name": "save_large_results",
              "tool": "bash",
              "pattern": "curl|wget",
              "action": "post_action",
              "command": "save_to_file ~/.cache/last_result.json"
            },
            {
              "name": "truncate_verbose_output",
              "tool": "bash",
              "action": "transform",
              "condition": "output_size > 10000",
              "transform": "head -100 + '... (truncated {remaining} lines)'"
            }
          ]
        }
      }
    }
    

    4️⃣ Stop Hook(驗證器決策點)

    觸發時機:結果返回給用戶前,決定是否需要暫停和修正

    使用場景:

    • 🔴 驗證場景 1:JSON 格式驗證(無效 JSON 需要修正)
    • 🟠 邏輯場景 2:檢查結果合理性(SQL 查詢應該有行,否則可能是錯誤)
    • 🟡 決策場景 3:判斷結果是否完整(檔案大小是否符合預期)
    # 例子:Stop Hook with Validator - JSON 驗證和自動修復
    
    {
      "hooks": {
        "stop_hook": {
          "enabled": true,
          "validator": {
            "name": "json_validator",
            "rules": [
              {
                "id": "valid_json",
                "check": "is_valid_json(result)",
                "on_fail": "stop_and_request_fix",
                "message": "JSON is malformed. Please fix and retry.",
                "auto_attempt": 3
              },
              {
                "id": "non_empty_result",
                "check": "len(result) > 10",
                "on_fail": "warn",
                "message": "Result might be incomplete (too short)"
              },
              {
                "id": "api_error_check",
                "check": "'error' not in result.lower()",
                "on_fail": "stop_and_request_fix",
                "message": "API returned an error. Review and retry."
              }
            ]
          }
        }
      }
    }
    

    5️⃣ PostResponse Hook(執行後的清理和通知)

    觸發時機:結果已返回給用戶,工作完成後

    使用場景:

    • 🟢 清理場景 1:刪除臨時檔案(/tmp 下的中間結果)
    • 🔵 通知場景 2:記錄到監控系統(重要操作記錄)
    • 🟣 統計場景 3:更新執行統計(執行次數、成功率)
    # 例子:PostResponse Hook - 清理和通知
    
    {
      "hooks": {
        "post_response": {
          "enabled": true,
          "rules": [
            {
              "name": "cleanup_temp_files",
              "action": "cleanup",
              "targets": ["/tmp/*.temp", "/tmp/claude-*"],
              "condition": "age > 1h"
            },
            {
              "name": "log_sensitive_operations",
              "action": "log",
              "condition": "tool in ['bash', 'edit'] AND (git|deploy|delete) in command",
              "log_file": "~/.claude/audit.log"
            },
            {
              "name": "notify_on_error",
              "action": "notify",
              "condition": "exit_code != 0",
              "channels": ["stderr", "log_file"]
            }
          ]
        }
      }
    }
    

    6️⃣ OnError Hook(異常情況處理)

    觸發時機:工具執行失敗或發生異常時

    使用場景:

    • 🔴 恢復場景 1:自動回滾(某個命令失敗,執行恢復操作)
    • 🟠 重試場景 2:自動重試(網絡超時自動重試)
    • 🟡 降級場景 3:使用備選方案(API 1 失敗,嘗試 API 2)
    # 例子:OnError Hook - 自動恢復和重試
    
    {
      "hooks": {
        "on_error": {
          "enabled": true,
          "rules": [
            {
              "name": "auto_retry_network_errors",
              "error_pattern": "(timeout|connection refused|ECONNREFUSED)",
              "action": "retry",
              "max_attempts": 3,
              "backoff": "exponential"
            },
            {
              "name": "rollback_on_git_error",
              "error_pattern": "git (push|merge|rebase)",
              "action": "execute",
              "command": "git reset --hard HEAD"
            },
            {
              "name": "fallback_api_endpoint",
              "error_pattern": "api1\\.example\\.com",
              "action": "retry_with",
              "new_command": "replace(api1, api2)"
            }
          ]
        }
      }
    }
    

    🛠️ 如何正確配置和部署 Hook

    步驟 1:選擇配置位置

    1. 全局配置:~/.claude/settings.json(所有項目適用)
    2. 項目級配置:{project}/.claude/settings.local.json(單個項目)
    3. 團隊配置:{team}/.claude/team-settings.json(團隊共享)

    🔵 最佳實踐

    敏感規則(.env 保護、刪除防禦)→ 全局 settings.json

    項目特定規則(特定分支政策、特定工具限制)→ settings.local.json

    步驟 2:編寫 Hook 規則

    Hook 規則的通用結構:

    {
      "hook_type": "pre_tool_use",      // 觸發點
      "name": "rule_name",               // 規則名稱
      "tool": "bash",                    // 適用工具(可選)
      "pattern": "regex_pattern",        // 匹配模式(可選)
      "action": "block|confirm|transform|validate", // 動作類型
      "condition": "expression",         // 執行條件(可選)
      "message": "User-facing message",  // 給用戶的提示
      "auto_attempt": 3,                 // 自動重試次數(可選)
      "transform": "transformation",     // 轉換規則(如果 action=transform)
      "on_fail": "action_on_failure"    // 失敗時的行動
    }
    

    步驟 3:驗證 Hook 配置

    # 1. 檢查 JSON 語法
    jq '.' ~/.claude/settings.json
    
    # 2. 列出所有啟用的 Hook
    claude config list-hooks --enabled
    
    # 3. 測試特定 Hook(乾跑)
    claude hook test --name rule_name --dry-run
    
    # 4. 查看 Hook 日誌
    tail -f ~/.claude/hooks.log
    

    步驟 4:分層部署(由簡到複雜)

    1. 第 1 周:安全防禦
      • PreRequest Hook:阻止敏感檔案讀取
      • PostToolUse Hook:驗證 bash 執行成功
    2. 第 2 周:工作流驗證
      • Stop Hook:JSON 驗證
      • PostToolUse Hook:自動格式化
    3. 第 3 周:錯誤恢復
      • OnError Hook:自動重試
      • PostResponse Hook:清理臨時檔案

    📋 12+ 個實戰範例速查表

    範例 Hook 類型 動作 效果
    保護 .env 檔案 PreRequest Block 永不讀取敏感檔案
    防止 git reset –hard PreToolUse Confirm 需要確認才能執行
    禁止直接 rm PreToolUse Transform 改為移到回收站
    自動格式化 JSON PostToolUse Transform 自動美化輸出
    驗證 JSON 有效性 Stop Validate 無效 JSON 拒絕返回
    自動備份編輯檔案 PreToolUse Pre-action 編輯前自動備份
    日誌敏感操作 PostResponse Log 所有敏感操作記錄
    網絡超時自動重試 OnError Retry 最多重試 3 次
    清理臨時檔案 PostResponse Cleanup 自動刪除 /tmp
    驗證 bash 成功 PostToolUse Validate exit code ≠ 0 時警告
    截斷大型輸出 PostToolUse Transform > 10KB 自動截斷
    API 故障轉移 OnError Fallback 用備選 API 重試

    ⚠️ Hook 配置的常見陷阱

    陷阱 1:規則太寬鬆,誤傷正常操作

    ❌ 錯誤:
    "pattern": "read"  // 任何包含 "read" 的命令都會觸發
    
    ✅ 正確:
    "pattern": "read (.*\\.env|\\.key|\\.credentials)"  // 只針對特定檔案
    

    陷阱 2:Hook 順序錯誤導致邏輯失效

    ❌ 錯誤順序:
    1. PostToolUse(驗證)
    2. PreToolUse(保護)  ← 太晚了,工具已經執行了
    
    ✅ 正確順序:
    1. PreToolUse(攔截和保護)
    2. PostToolUse(驗證結果)
    3. Stop(決定是否修正)
    

    陷阱 3:Transform 規則語法錯誤

    ❌ 錯誤:
    "transform": "cmd.replace('old', 'new')"  // Python 語法,但 Hook 是 shell
    
    ✅ 正確:
    "transform": "sed 's/old/new/g'"  // Shell 語法
    或
    "transform": "replace(cmd, old, new)"  // Hook 提供的函數
    

    ✅ Hook 部署檢查清單

    • ☐ 配置檔案 JSON 語法正確(jq 驗證通過)
    • ☐ Hook 規則的 pattern 足夠明確(不會誤傷)
    • ☐ PreToolUse 規則在最關鍵的地方(防禦第一)
    • ☐ Stop Hook 驗證邏輯清晰(什麼時候拒絕)
    • ☐ OnError Hook 有適當的重試邏輯
    • ☐ 測試了至少一個完整工作流
    • ☐ 查看日誌確認 Hook 被正確觸發
    • ☐ 團隊成員知道有這些 Hook(溝通重要)

    🔗 與其他文章的連結

    📚 延伸閱讀

    總結:Hook 的 6 個層次

    • 🎯 L1:PreRequest(最上游,全局防禦)
    • 🎯 L2:PreToolUse(工具前,細粒度保護)
    • 🎯 L3:PostToolUse(結果驗證和轉換)
    • 🎯 L4:Stop(決策點,是否修正)
    • 🎯 L5:PostResponse(清理和通知)
    • 🎯 L6:OnError(異常恢復)

    掌握這 6 個層次,你就能在任何地方「攔截」執行流程,實現你想要的保護和自動化。

  • Claude Code 升級完全指南|從 Hook 到 Custom Agent 的 5 篇系列

    你是否發現自己每週都在重複做同樣的 5-8 步工作流?或者需要一個「虛擬助手」來幫你檢查代碼、驗證數據、管理流程?

    Claude Code 有一個升級系統可以幫你自動化這些重複工作。從簡單的 Hook(5 分鐘)到複雜的 Custom Agent(2-3 小時),每個升級都能節省你數十小時的勞動。

    這個完整指南將帶你從 0 到 1,掌握整個升級系統。

    🎯 你將學到什麼

    • ✅ 5 個具體場景:何時應該升級?
    • ✅ Hook 快速指南:5 分鐘內建立自動規則
    • ✅ Skill 完整教程:1 小時自動化複雜工作流
    • ✅ Custom Agent 進階:打造會思考的自動化角色
    • ✅ 數學原理:為什麼成功率從 32.8% 提升到 99.2%?

    📚 5 篇文章系列地圖

    第 1 篇:判斷升級時機(5 個具體場景)

    🟡 適合:不知道該升級什麼的人

    你會學到 5 個常見場景:

    • 🔴 場景 1:規則被重複違反 → Hook
    • 🟠 場景 2:複雜工作流重複執行 → Skill
    • 🟡 場景 3:跨任務的相同角色 → Agent
    • 🟢 場景 4:CLAUDE.md 超長 → 整體升級
    • 🔵 場景 5:成功率低於 80% → Stop Hook

    👉 閱讀文章 1

    第 2 篇:Hook 操作指南(5 分鐘快速升級)

    🔴 適合:想快速解決「規則違反」的人

    Hook 是最簡單的升級。你會學到:

    • PreToolUse Hook:保護敏感檔案(.env, .key)
    • PostToolUse Hook:自動格式化代碼
    • Stop Hook:驗證 JSON 或其他輸出
    • 4 步快速實施指南 + 模板

    時間投入:5 分鐘 | 年度節省:40 小時

    👉 閱讀文章 2

    第 3 篇:Skill 操作指南(1 小時建立完整工作流自動化)

    🟠 適合:想自動化 5-8 步工作流的人

    Skill 是最有影響的升級。你會學到:

    • 從 CLAUDE.md 提取工作流的方法
    • Skill 文件結構 + 完整範例
    • 真實案例:WordPress 發佈 Skill(8 步)
    • 測試驗證和常見問題排除

    時間投入:1 小時 | 年度節省:200 小時

    👉 閱讀文章 3

    第 4 篇:Custom Agent 完整指南(2-3 小時打造會思考的角色)

    🟣 適合:需要「虛擬助手」來做複雜決策的人

    Custom Agent 是最強大的升級。你會學到:

    • 角色定義(代碼審查員、測試工程師、架構師)
    • systemPrompt 撰寫技巧
    • 工具存取權限配置(安全第一)
    • 4 個真實案例:代碼審查、測試、架構、數據管道

    時間投入:2-3 小時 | 年度節省:300+ 小時

    👉 閱讀文章 4

    第 5 篇:原理深度解析(驗證器的數學 + 決策樹)

    🔵 適合:想理解背後原理的人

    深入 Claude Code 升級系統的核心。你會學到:

    • 驗證器的數學原理:如何把 32.8% 提升到 99.2%
    • 完整決策樹:Hook vs Skill vs Agent
    • 最佳實踐和常見陷阱
    • 成本 vs 收益分析

    用時:30 分鐘深度理解 | 價值:優化升級策略

    👉 閱讀文章 5

    🛤️ 推薦學習路徑

    路徑 A:我是初學者(第 1 次接觸 Claude Code 升級)

    1. 📄 文章 1:認識 5 個升級場景(15 分鐘)
    2. 📄 文章 2:建立你的第一個 Hook(5 分鐘 + 5 分鐘實作)
    3. 📄 文章 3:升級到 Skill(30 分鐘閱讀 + 30 分鐘實作)
    4. 📄 文章 4:認識 Custom Agent(20 分鐘)
    5. 📄 文章 5:理解背後原理(20 分鐘)
    6. 總時間:2.5 小時(閱讀 + 實作)

    路徑 B:我已經在用 Claude Code(想優化現有工作流)

    1. 📄 文章 1:快速掃讀場景判斷標準(5 分鐘)
    2. 📄 跳到你需要的文章(Hook / Skill / Agent)
    3. 📄 文章 5:查詢決策矩陣(2 分鐘)
    4. 總時間:1 小時(快速查找 + 實作)

    路徑 C:我想建立 Custom Agent(跳過 Hook / Skill)

    1. 📄 文章 1:看場景 3(跨任務角色)(5 分鐘)
    2. 📄 文章 4:完整 Agent 指南(40 分鐘)
    3. 📄 文章 5:原理和決策樹(20 分鐘)
    4. 總時間:1.5 小時(閱讀 + 計畫)

    💡 快速決策表

    不知道該選哪篇?看這個表:

    你的情況 直接閱讀 節省時間
    同一條規則被違反 3+ 次 文章 2(Hook) 40 小時/年
    每週執行相同的 5-8 步工作流 文章 3(Skill) 200 小時/年
    需要跨 3+ 項目的相同角色 文章 4(Agent) 300+ 小時/年
    不知道該選哪個 文章 1(場景) 決策時間 -10 分鐘

    🚀 第一步:開始行動

    不用一次讀完所有 5 篇。選擇最符合你現況的文章,花 30 分鐘看完,然後立即執行。

    🟢 立即開始

    1. 5 分鐘判斷:文章 1,找出你的場景
    2. 30 分鐘學習:讀相應的文章(Hook / Skill / Agent)
    3. 30 分鐘實作:按照指南建立你的第一個自動化
    4. 完成:享受每週節省的時間 ⏱️

    📚 文章索引

  • Claude Code 升級原理深度:從 32.8% 到 99.2% 的驗證器數學

    • 評估 Skill 效果,考慮升級到 Agent 若需要自主決策
    • 建立 Agent Team 若有多個角色
    • 持續積累記憶,改進決策邏輯

    最終目標:90% 的重複工作自動化,讓你專注於需要創意和判斷的工作。

    • 週 1:建立 2 個 Hook(安全規則、自動格式化)
    • 週 2:建立 1 個 Skill(複雜工作流)
    • 週 3-4:優化和維護

    第二個月及以後

    • 評估 Skill 效果,考慮升級到 Agent 若需要自主決策
    • 建立 Agent Team 若有多個角色
    • 持續積累記憶,改進決策邏輯

    最終目標:90% 的重複工作自動化,讓你專注於需要創意和判斷的工作。

    🔵 推薦閱讀順序

    如果這是你的第一次接觸 Claude Code 升級系統:

    1. 📄 文章 1:認識 5 個升級場景
    2. 📄 文章 2:從 Hook 開始(最簡單)
    3. 📄 文章 3:升級到 Skill(最有影響)
    4. 📄 文章 4:掌握 Custom Agent(最強大)
    5. 📄 文章 5:理解背後的原理(本篇)

    或者,如果你已經有一個明確的問題要解決,直接跳到相應的文章。

    第一個月

    • 週 1:建立 2 個 Hook(安全規則、自動格式化)
    • 週 2:建立 1 個 Skill(複雜工作流)
    • 週 3-4:優化和維護

    第二個月及以後

    • 評估 Skill 效果,考慮升級到 Agent 若需要自主決策
    • 建立 Agent Team 若有多個角色
    • 持續積累記憶,改進決策邏輯

    最終目標:90% 的重複工作自動化,讓你專注於需要創意和判斷的工作。

    🔵 推薦閱讀順序

    如果這是你的第一次接觸 Claude Code 升級系統:

    1. 📄 文章 1:認識 5 個升級場景
    2. 📄 文章 2:從 Hook 開始(最簡單)
    3. 📄 文章 3:升級到 Skill(最有影響)
    4. 📄 文章 4:掌握 Custom Agent(最強大)
    5. 📄 文章 5:理解背後的原理(本篇)

    或者,如果你已經有一個明確的問題要解決,直接跳到相應的文章。

    總結:升級路線圖

    第一個月

    • 週 1:建立 2 個 Hook(安全規則、自動格式化)
    • 週 2:建立 1 個 Skill(複雜工作流)
    • 週 3-4:優化和維護

    第二個月及以後

    • 評估 Skill 效果,考慮升級到 Agent 若需要自主決策
    • 建立 Agent Team 若有多個角色
    • 持續積累記憶,改進決策邏輯

    最終目標:90% 的重複工作自動化,讓你專注於需要創意和判斷的工作。

    🔵 推薦閱讀順序

    如果這是你的第一次接觸 Claude Code 升級系統:

    1. 📄 文章 1:認識 5 個升級場景
    2. 📄 文章 2:從 Hook 開始(最簡單)
    3. 📄 文章 3:升級到 Skill(最有影響)
    4. 📄 文章 4:掌握 Custom Agent(最強大)
    5. 📄 文章 5:理解背後的原理(本篇)

    或者,如果你已經有一個明確的問題要解決,直接跳到相應的文章。

    結論:投入越早,收益越大。如果你每月執行 20+ 次工作,1 小時的投入在 2 週內就能回本。

    總結:升級路線圖

    第一個月

    • 週 1:建立 2 個 Hook(安全規則、自動格式化)
    • 週 2:建立 1 個 Skill(複雜工作流)
    • 週 3-4:優化和維護

    第二個月及以後

    • 評估 Skill 效果,考慮升級到 Agent 若需要自主決策
    • 建立 Agent Team 若有多個角色
    • 持續積累記憶,改進決策邏輯

    最終目標:90% 的重複工作自動化,讓你專注於需要創意和判斷的工作。

    🔵 推薦閱讀順序

    如果這是你的第一次接觸 Claude Code 升級系統:

    1. 📄 文章 1:認識 5 個升級場景
    2. 📄 文章 2:從 Hook 開始(最簡單)
    3. 📄 文章 3:升級到 Skill(最有影響)
    4. 📄 文章 4:掌握 Custom Agent(最強大)
    5. 📄 文章 5:理解背後的原理(本篇)

    或者,如果你已經有一個明確的問題要解決,直接跳到相應的文章。

    結論:投入越早,收益越大。如果你每月執行 20+ 次工作,1 小時的投入在 2 週內就能回本。

    總結:升級路線圖

    第一個月

    • 週 1:建立 2 個 Hook(安全規則、自動格式化)
    • 週 2:建立 1 個 Skill(複雜工作流)
    • 週 3-4:優化和維護

    第二個月及以後

    • 評估 Skill 效果,考慮升級到 Agent 若需要自主決策
    • 建立 Agent Team 若有多個角色
    • 持續積累記憶,改進決策邏輯

    最終目標:90% 的重複工作自動化,讓你專注於需要創意和判斷的工作。

    🔵 推薦閱讀順序

    如果這是你的第一次接觸 Claude Code 升級系統:

    1. 📄 文章 1:認識 5 個升級場景
    2. 📄 文章 2:從 Hook 開始(最簡單)
    3. 📄 文章 3:升級到 Skill(最有影響)
    4. 📄 文章 4:掌握 Custom Agent(最強大)
    5. 📄 文章 5:理解背後的原理(本篇)

    或者,如果你已經有一個明確的問題要解決,直接跳到相應的文章。

    升級成本 vs 收益分析

    升級類型 初始投入 每次執行時間 年度節省時間 ROI 週期
    Hook 5 分鐘 自動 ≈ 40 小時 < 1 週
    Skill 1 小時 5 分鐘 → 自動 ≈ 200 小時 1-2 週
    Custom Agent 2-3 小時 自動 + 自主決策 ≈ 300+ 小時 1-2 週

    結論:投入越早,收益越大。如果你每月執行 20+ 次工作,1 小時的投入在 2 週內就能回本。

    總結:升級路線圖

    第一個月

    • 週 1:建立 2 個 Hook(安全規則、自動格式化)
    • 週 2:建立 1 個 Skill(複雜工作流)
    • 週 3-4:優化和維護

    第二個月及以後

    • 評估 Skill 效果,考慮升級到 Agent 若需要自主決策
    • 建立 Agent Team 若有多個角色
    • 持續積累記憶,改進決策邏輯

    最終目標:90% 的重複工作自動化,讓你專注於需要創意和判斷的工作。

    🔵 推薦閱讀順序

    如果這是你的第一次接觸 Claude Code 升級系統:

    1. 📄 文章 1:認識 5 個升級場景
    2. 📄 文章 2:從 Hook 開始(最簡單)
    3. 📄 文章 3:升級到 Skill(最有影響)
    4. 📄 文章 4:掌握 Custom Agent(最強大)
    5. 📄 文章 5:理解背後的原理(本篇)

    或者,如果你已經有一個明確的問題要解決,直接跳到相應的文章。

    Hook 設計來執行簡單的、自動的規則檢查(如文件保護)。如果你想自動化 5 步工作流,Hook 會變得複雜且不可維護。

    陷阱 2:Skill 沒有驗證器

    Skill 最常見的失敗是「執行了但沒驗證」。務必添加步驟驗證,確保每一步都成功。

    陷阱 3:Agent 工具權限設置太寬鬆

    如果 Agent 有「執行任意 bash」權限,可能導致意外刪除。始終限制工具存取:允許讀,限制寫;允許查詢,限制刪除。

    升級成本 vs 收益分析

    升級類型 初始投入 每次執行時間 年度節省時間 ROI 週期
    Hook 5 分鐘 自動 ≈ 40 小時 < 1 週
    Skill 1 小時 5 分鐘 → 自動 ≈ 200 小時 1-2 週
    Custom Agent 2-3 小時 自動 + 自主決策 ≈ 300+ 小時 1-2 週

    結論:投入越早,收益越大。如果你每月執行 20+ 次工作,1 小時的投入在 2 週內就能回本。

    總結:升級路線圖

    第一個月

    • 週 1:建立 2 個 Hook(安全規則、自動格式化)
    • 週 2:建立 1 個 Skill(複雜工作流)
    • 週 3-4:優化和維護

    第二個月及以後

    • 評估 Skill 效果,考慮升級到 Agent 若需要自主決策
    • 建立 Agent Team 若有多個角色
    • 持續積累記憶,改進決策邏輯

    最終目標:90% 的重複工作自動化,讓你專注於需要創意和判斷的工作。

    🔵 推薦閱讀順序

    如果這是你的第一次接觸 Claude Code 升級系統:

    1. 📄 文章 1:認識 5 個升級場景
    2. 📄 文章 2:從 Hook 開始(最簡單)
    3. 📄 文章 3:升級到 Skill(最有影響)
    4. 📄 文章 4:掌握 Custom Agent(最強大)
    5. 📄 文章 5:理解背後的原理(本篇)

    或者,如果你已經有一個明確的問題要解決,直接跳到相應的文章。

    Skill 沒有記憶(每次執行都從零開始),Agent 有。如果你需要「從上次的經驗中學習」,就需要 Agent。

    Skill(無記憶):
    - 每次執行相同的步驟
    - 不會記得「上次我們發現 X 會導致失敗」
    - 適合「規則明確且不變」的工作
    
    Agent(有記憶):
    - 記住「上次的教訓」並應用到新情況
    - 可以根據過去經驗調整策略
    - 適合「規則會隨經驗進化」的工作
    

    常見陷阱

    陷阱 1:把 Hook 當 Skill 用

    Hook 設計來執行簡單的、自動的規則檢查(如文件保護)。如果你想自動化 5 步工作流,Hook 會變得複雜且不可維護。

    陷阱 2:Skill 沒有驗證器

    Skill 最常見的失敗是「執行了但沒驗證」。務必添加步驟驗證,確保每一步都成功。

    陷阱 3:Agent 工具權限設置太寬鬆

    如果 Agent 有「執行任意 bash」權限,可能導致意外刪除。始終限制工具存取:允許讀,限制寫;允許查詢,限制刪除。

    升級成本 vs 收益分析

    升級類型 初始投入 每次執行時間 年度節省時間 ROI 週期
    Hook 5 分鐘 自動 ≈ 40 小時 < 1 週
    Skill 1 小時 5 分鐘 → 自動 ≈ 200 小時 1-2 週
    Custom Agent 2-3 小時 自動 + 自主決策 ≈ 300+ 小時 1-2 週

    結論:投入越早,收益越大。如果你每月執行 20+ 次工作,1 小時的投入在 2 週內就能回本。

    總結:升級路線圖

    第一個月

    • 週 1:建立 2 個 Hook(安全規則、自動格式化)
    • 週 2:建立 1 個 Skill(複雜工作流)
    • 週 3-4:優化和維護

    第二個月及以後

    • 評估 Skill 效果,考慮升級到 Agent 若需要自主決策
    • 建立 Agent Team 若有多個角色
    • 持續積累記憶,改進決策邏輯

    最終目標:90% 的重複工作自動化,讓你專注於需要創意和判斷的工作。

    🔵 推薦閱讀順序

    如果這是你的第一次接觸 Claude Code 升級系統:

    1. 📄 文章 1:認識 5 個升級場景
    2. 📄 文章 2:從 Hook 開始(最簡單)
    3. 📄 文章 3:升級到 Skill(最有影響)
    4. 📄 文章 4:掌握 Custom Agent(最強大)
    5. 📄 文章 5:理解背後的原理(本篇)

    或者,如果你已經有一個明確的問題要解決,直接跳到相應的文章。

    Skill 和 Agent 的成功率差異,來自驗證器。永遠先考慮「如何檢測失敗」,再考慮「如何修復」。

    ❌ 錯誤做法:
    1. 執行步驟 A
    2. 執行步驟 B
    3. (沒有檢查 A 或 B 是否成功)
    
    ✅ 正確做法:
    1. 執行步驟 A
    2. 驗證步驟 A 成功(否則停止並報告)
    3. 執行步驟 B
    4. 驗證步驟 B 成功(否則停止並報告)
    

    實踐 3:記憶是 Agent 的優勢

    Skill 沒有記憶(每次執行都從零開始),Agent 有。如果你需要「從上次的經驗中學習」,就需要 Agent。

    Skill(無記憶):
    - 每次執行相同的步驟
    - 不會記得「上次我們發現 X 會導致失敗」
    - 適合「規則明確且不變」的工作
    
    Agent(有記憶):
    - 記住「上次的教訓」並應用到新情況
    - 可以根據過去經驗調整策略
    - 適合「規則會隨經驗進化」的工作
    

    常見陷阱

    陷阱 1:把 Hook 當 Skill 用

    Hook 設計來執行簡單的、自動的規則檢查(如文件保護)。如果你想自動化 5 步工作流,Hook 會變得複雜且不可維護。

    陷阱 2:Skill 沒有驗證器

    Skill 最常見的失敗是「執行了但沒驗證」。務必添加步驟驗證,確保每一步都成功。

    陷阱 3:Agent 工具權限設置太寬鬆

    如果 Agent 有「執行任意 bash」權限,可能導致意外刪除。始終限制工具存取:允許讀,限制寫;允許查詢,限制刪除。

    升級成本 vs 收益分析

    升級類型 初始投入 每次執行時間 年度節省時間 ROI 週期
    Hook 5 分鐘 自動 ≈ 40 小時 < 1 週
    Skill 1 小時 5 分鐘 → 自動 ≈ 200 小時 1-2 週
    Custom Agent 2-3 小時 自動 + 自主決策 ≈ 300+ 小時 1-2 週

    結論:投入越早,收益越大。如果你每月執行 20+ 次工作,1 小時的投入在 2 週內就能回本。

    總結:升級路線圖

    第一個月

    • 週 1:建立 2 個 Hook(安全規則、自動格式化)
    • 週 2:建立 1 個 Skill(複雜工作流)
    • 週 3-4:優化和維護

    第二個月及以後

    • 評估 Skill 效果,考慮升級到 Agent 若需要自主決策
    • 建立 Agent Team 若有多個角色
    • 持續積累記憶,改進決策邏輯

    最終目標:90% 的重複工作自動化,讓你專注於需要創意和判斷的工作。

    🔵 推薦閱讀順序

    如果這是你的第一次接觸 Claude Code 升級系統:

    1. 📄 文章 1:認識 5 個升級場景
    2. 📄 文章 2:從 Hook 開始(最簡單)
    3. 📄 文章 3:升級到 Skill(最有影響)
    4. 📄 文章 4:掌握 Custom Agent(最強大)
    5. 📄 文章 5:理解背後的原理(本篇)

    或者,如果你已經有一個明確的問題要解決,直接跳到相應的文章。

    不要一開始就跳到 Agent。先用 Hook 解決簡單問題,積累經驗,再升級。

    週 1:識別 1 個簡單規則 → Hook → 5 分鐘完成
    週 2:發現 1 個重複工作流 → Skill → 1 小時完成
    週 3:規劃 1 個複雜角色 → Agent → 2 小時完成
    
    成果:3 週內自動化了 3 個不同層級的工作
    

    實踐 2:驗證器是必須,不是可選

    Skill 和 Agent 的成功率差異,來自驗證器。永遠先考慮「如何檢測失敗」,再考慮「如何修復」。

    ❌ 錯誤做法:
    1. 執行步驟 A
    2. 執行步驟 B
    3. (沒有檢查 A 或 B 是否成功)
    
    ✅ 正確做法:
    1. 執行步驟 A
    2. 驗證步驟 A 成功(否則停止並報告)
    3. 執行步驟 B
    4. 驗證步驟 B 成功(否則停止並報告)
    

    實踐 3:記憶是 Agent 的優勢

    Skill 沒有記憶(每次執行都從零開始),Agent 有。如果你需要「從上次的經驗中學習」,就需要 Agent。

    Skill(無記憶):
    - 每次執行相同的步驟
    - 不會記得「上次我們發現 X 會導致失敗」
    - 適合「規則明確且不變」的工作
    
    Agent(有記憶):
    - 記住「上次的教訓」並應用到新情況
    - 可以根據過去經驗調整策略
    - 適合「規則會隨經驗進化」的工作
    

    常見陷阱

    陷阱 1:把 Hook 當 Skill 用

    Hook 設計來執行簡單的、自動的規則檢查(如文件保護)。如果你想自動化 5 步工作流,Hook 會變得複雜且不可維護。

    陷阱 2:Skill 沒有驗證器

    Skill 最常見的失敗是「執行了但沒驗證」。務必添加步驟驗證,確保每一步都成功。

    陷阱 3:Agent 工具權限設置太寬鬆

    如果 Agent 有「執行任意 bash」權限,可能導致意外刪除。始終限制工具存取:允許讀,限制寫;允許查詢,限制刪除。

    升級成本 vs 收益分析

    升級類型 初始投入 每次執行時間 年度節省時間 ROI 週期
    Hook 5 分鐘 自動 ≈ 40 小時 < 1 週
    Skill 1 小時 5 分鐘 → 自動 ≈ 200 小時 1-2 週
    Custom Agent 2-3 小時 自動 + 自主決策 ≈ 300+ 小時 1-2 週

    結論:投入越早,收益越大。如果你每月執行 20+ 次工作,1 小時的投入在 2 週內就能回本。

    總結:升級路線圖

    第一個月

    • 週 1:建立 2 個 Hook(安全規則、自動格式化)
    • 週 2:建立 1 個 Skill(複雜工作流)
    • 週 3-4:優化和維護

    第二個月及以後

    • 評估 Skill 效果,考慮升級到 Agent 若需要自主決策
    • 建立 Agent Team 若有多個角色
    • 持續積累記憶,改進決策邏輯

    最終目標:90% 的重複工作自動化,讓你專注於需要創意和判斷的工作。

    🔵 推薦閱讀順序

    如果這是你的第一次接觸 Claude Code 升級系統:

    1. 📄 文章 1:認識 5 個升級場景
    2. 📄 文章 2:從 Hook 開始(最簡單)
    3. 📄 文章 3:升級到 Skill(最有影響)
    4. 📄 文章 4:掌握 Custom Agent(最強大)
    5. 📄 文章 5:理解背後的原理(本篇)

    或者,如果你已經有一個明確的問題要解決,直接跳到相應的文章。

    以下表格用顏色表示優先級,幫你快速判斷:

    場景 步驟 頻率 推薦升級 時間投入
    安全規則違反 1-2 > 3 次 🔴 HOOK 5 分鐘
    複雜工作流 5-8 > 1 次/週 🟠 SKILL 1 小時
    跨任務角色 不固定 > 3 個項目 🟣 AGENT 2-3 小時
    成功率低 任意 < 80% 🟡 STOP HOOK 10 分鐘
    優化完成 任意 任意 🟢 維護中 0

    最佳實踐

    實踐 1:從 Hook 開始,逐步升級

    不要一開始就跳到 Agent。先用 Hook 解決簡單問題,積累經驗,再升級。

    週 1:識別 1 個簡單規則 → Hook → 5 分鐘完成
    週 2:發現 1 個重複工作流 → Skill → 1 小時完成
    週 3:規劃 1 個複雜角色 → Agent → 2 小時完成
    
    成果:3 週內自動化了 3 個不同層級的工作
    

    實踐 2:驗證器是必須,不是可選

    Skill 和 Agent 的成功率差異,來自驗證器。永遠先考慮「如何檢測失敗」,再考慮「如何修復」。

    ❌ 錯誤做法:
    1. 執行步驟 A
    2. 執行步驟 B
    3. (沒有檢查 A 或 B 是否成功)
    
    ✅ 正確做法:
    1. 執行步驟 A
    2. 驗證步驟 A 成功(否則停止並報告)
    3. 執行步驟 B
    4. 驗證步驟 B 成功(否則停止並報告)
    

    實踐 3:記憶是 Agent 的優勢

    Skill 沒有記憶(每次執行都從零開始),Agent 有。如果你需要「從上次的經驗中學習」,就需要 Agent。

    Skill(無記憶):
    - 每次執行相同的步驟
    - 不會記得「上次我們發現 X 會導致失敗」
    - 適合「規則明確且不變」的工作
    
    Agent(有記憶):
    - 記住「上次的教訓」並應用到新情況
    - 可以根據過去經驗調整策略
    - 適合「規則會隨經驗進化」的工作
    

    常見陷阱

    陷阱 1:把 Hook 當 Skill 用

    Hook 設計來執行簡單的、自動的規則檢查(如文件保護)。如果你想自動化 5 步工作流,Hook 會變得複雜且不可維護。

    陷阱 2:Skill 沒有驗證器

    Skill 最常見的失敗是「執行了但沒驗證」。務必添加步驟驗證,確保每一步都成功。

    陷阱 3:Agent 工具權限設置太寬鬆

    如果 Agent 有「執行任意 bash」權限,可能導致意外刪除。始終限制工具存取:允許讀,限制寫;允許查詢,限制刪除。

    升級成本 vs 收益分析

    升級類型 初始投入 每次執行時間 年度節省時間 ROI 週期
    Hook 5 分鐘 自動 ≈ 40 小時 < 1 週
    Skill 1 小時 5 分鐘 → 自動 ≈ 200 小時 1-2 週
    Custom Agent 2-3 小時 自動 + 自主決策 ≈ 300+ 小時 1-2 週

    結論:投入越早,收益越大。如果你每月執行 20+ 次工作,1 小時的投入在 2 週內就能回本。

    總結:升級路線圖

    第一個月

    • 週 1:建立 2 個 Hook(安全規則、自動格式化)
    • 週 2:建立 1 個 Skill(複雜工作流)
    • 週 3-4:優化和維護

    第二個月及以後

    • 評估 Skill 效果,考慮升級到 Agent 若需要自主決策
    • 建立 Agent Team 若有多個角色
    • 持續積累記憶,改進決策邏輯

    最終目標:90% 的重複工作自動化,讓你專注於需要創意和判斷的工作。

    🔵 推薦閱讀順序

    如果這是你的第一次接觸 Claude Code 升級系統:

    1. 📄 文章 1:認識 5 個升級場景
    2. 📄 文章 2:從 Hook 開始(最簡單)
    3. 📄 文章 3:升級到 Skill(最有影響)
    4. 📄 文章 4:掌握 Custom Agent(最強大)
    5. 📄 文章 5:理解背後的原理(本篇)

    或者,如果你已經有一個明確的問題要解決,直接跳到相應的文章。

    📚 Claude Code 升級系列:文章 5/5(最後一篇)

    這篇文章深入 Claude Code 升級系統的核心數學和決策邏輯。你將看到驗證器如何把成功率從 32.8% 提升到 99.2%,以及完整的決策樹讓你在 Hook、Skill、Agent 間做出正確選擇。

    驗證器的魔力:數學原理

    Claude Code 的自動化系統成功率取決於「驗證」。讓我們看看數據。

    基礎:無驗證的成功率

    在沒有驗證機制的情況下,假設每個步驟的成功率是 90%(已經很高了):

    工作流:8 個步驟(如 WordPress 發佈)
    每步成功率:90%
    總成功率:0.9^8 = 0.4305 = 43.05%
    
    更現實的情況(考慮人工錯誤):
    每步成功率:85%
    總成功率:0.85^8 = 0.2725 = 27.25%
    
    實際觀察:32.8% ✓(與上面介於兩者之間)
    

    驗證器的威力

    添加「驗證器」意味著:如果第 i 步失敗,立即察覺並修正,不會「失敗一步、後續全失」。

    引入驗證器的修正能力:
    
    假設每步有驗證器:
    - 失敗檢測率:100%(驗證器會立即發現)
    - 自動修復率:85%(大多數錯誤可自動修復)
    - 人工修復率:15%(複雜問題需要人工)
    
    修復後重試成功率:95%
    
    計算複合成功率:
    Pr(成功 | 有驗證) = ∏(i=1 to 8) [Pr(步驟i成功) + Pr(步驟i失敗 × 驗證檢出 × 修復成功)]
                    = ∏(i=1 to 8) [0.85 + 0.15 × 1.0 × 0.95]
                    = ∏(i=1 to 8) [0.85 + 0.1425]
                    = 0.9925^8
                    = 0.938 ≈ 93.8%
    
    如果引入重試機制(最多 3 次):
    Pr(成功後第3次重試) ≈ 1 - (1 - 0.938)^3 ≈ 0.9992 = 99.92%
    
    實際觀察:99.2% ✓(接近理論預測)
    

    🔵 關鍵洞察

    驗證器的 3 層防護:

    1. 即時檢測:在錯誤發生的第一時間發現(0 延遲)
    2. 自動修復:85% 的錯誤可自動修復(無人工介入)
    3. 重試機制:複雜問題通過重試提升成功率(每次重試增加 99.7% → 99.92%)

    這 3 層的組合,把成功率從 32.8% 提升到 99.2%。

    決策樹:何時用 Hook / Skill / Agent

    選擇正確的升級方向很重要。以下決策樹幫你做出最優選擇。

    決策樹的結構

    開始:你遇到重複的工作嗎?
    │
    ├─ NO → 不需要升級,保持手工
    │
    └─ YES → 這個工作多複雜?
       │
       ├─ 很簡單(1-2 步,簡單判斷邏輯)
       │  └─ 升級到 HOOK
       │     ├─ 執行時間:5 分鐘
       │     ├─ 應用場景:自動格式化、檔案保護、簡單驗證
       │     └─ 成功率提升:90% → 99%
       │
       ├─ 中等複雜(5-8 步,有決策分支)
       │  └─ 升級到 SKILL
       │     ├─ 執行時間:1 小時
       │     ├─ 應用場景:工作流自動化、多工具整合
       │     └─ 成功率提升:32.8% → 99.2%
       │
       └─ 很複雜(涉及多角色、需要自主決策、跨項目)
          └─ 升級到 CUSTOM AGENT
             ├─ 執行時間:2-3 小時
             ├─ 應用場景:代碼審查、架構決策、複雜數據處理
             └─ 額外價值:記憶學習、自主規劃
    

    決策矩陣表

    以下表格用顏色表示優先級,幫你快速判斷:

    場景 步驟 頻率 推薦升級 時間投入
    安全規則違反 1-2 > 3 次 🔴 HOOK 5 分鐘
    複雜工作流 5-8 > 1 次/週 🟠 SKILL 1 小時
    跨任務角色 不固定 > 3 個項目 🟣 AGENT 2-3 小時
    成功率低 任意 < 80% 🟡 STOP HOOK 10 分鐘
    優化完成 任意 任意 🟢 維護中 0

    最佳實踐

    實踐 1:從 Hook 開始,逐步升級

    不要一開始就跳到 Agent。先用 Hook 解決簡單問題,積累經驗,再升級。

    週 1:識別 1 個簡單規則 → Hook → 5 分鐘完成
    週 2:發現 1 個重複工作流 → Skill → 1 小時完成
    週 3:規劃 1 個複雜角色 → Agent → 2 小時完成
    
    成果:3 週內自動化了 3 個不同層級的工作
    

    實踐 2:驗證器是必須,不是可選

    Skill 和 Agent 的成功率差異,來自驗證器。永遠先考慮「如何檢測失敗」,再考慮「如何修復」。

    ❌ 錯誤做法:
    1. 執行步驟 A
    2. 執行步驟 B
    3. (沒有檢查 A 或 B 是否成功)
    
    ✅ 正確做法:
    1. 執行步驟 A
    2. 驗證步驟 A 成功(否則停止並報告)
    3. 執行步驟 B
    4. 驗證步驟 B 成功(否則停止並報告)
    

    實踐 3:記憶是 Agent 的優勢

    Skill 沒有記憶(每次執行都從零開始),Agent 有。如果你需要「從上次的經驗中學習」,就需要 Agent。

    Skill(無記憶):
    - 每次執行相同的步驟
    - 不會記得「上次我們發現 X 會導致失敗」
    - 適合「規則明確且不變」的工作
    
    Agent(有記憶):
    - 記住「上次的教訓」並應用到新情況
    - 可以根據過去經驗調整策略
    - 適合「規則會隨經驗進化」的工作
    

    常見陷阱

    陷阱 1:把 Hook 當 Skill 用

    Hook 設計來執行簡單的、自動的規則檢查(如文件保護)。如果你想自動化 5 步工作流,Hook 會變得複雜且不可維護。

    陷阱 2:Skill 沒有驗證器

    Skill 最常見的失敗是「執行了但沒驗證」。務必添加步驟驗證,確保每一步都成功。

    陷阱 3:Agent 工具權限設置太寬鬆

    如果 Agent 有「執行任意 bash」權限,可能導致意外刪除。始終限制工具存取:允許讀,限制寫;允許查詢,限制刪除。

    升級成本 vs 收益分析

    升級類型 初始投入 每次執行時間 年度節省時間 ROI 週期
    Hook 5 分鐘 自動 ≈ 40 小時 < 1 週
    Skill 1 小時 5 分鐘 → 自動 ≈ 200 小時 1-2 週
    Custom Agent 2-3 小時 自動 + 自主決策 ≈ 300+ 小時 1-2 週

    結論:投入越早,收益越大。如果你每月執行 20+ 次工作,1 小時的投入在 2 週內就能回本。

    總結:升級路線圖

    第一個月

    • 週 1:建立 2 個 Hook(安全規則、自動格式化)
    • 週 2:建立 1 個 Skill(複雜工作流)
    • 週 3-4:優化和維護

    第二個月及以後

    • 評估 Skill 效果,考慮升級到 Agent 若需要自主決策
    • 建立 Agent Team 若有多個角色
    • 持續積累記憶,改進決策邏輯

    最終目標:90% 的重複工作自動化,讓你專注於需要創意和判斷的工作。

    🔵 推薦閱讀順序

    如果這是你的第一次接觸 Claude Code 升級系統:

    1. 📄 文章 1:認識 5 個升級場景
    2. 📄 文章 2:從 Hook 開始(最簡單)
    3. 📄 文章 3:升級到 Skill(最有影響)
    4. 📄 文章 4:掌握 Custom Agent(最強大)
    5. 📄 文章 5:理解背後的原理(本篇)

    或者,如果你已經有一個明確的問題要解決,直接跳到相應的文章。