Hub Claude Code 教學

大師篇 · 第 15 章

驗證心法與 Plan 大師級

Claude 最容易踩的坑,是「假裝做完了」——它回你「已完成、測試通過」,你一看才發現根本沒跑。這一章教你把「驗證」做成機械閘門,把「規劃」變成抗需求漂移的流程:讓它拿證據說話,而不是空口宣稱成功。我們會從官方的四階段工作法,一路走到雙 Claude 互審、Auto mode、以及五個最常見的失敗反模式怎麼破。前面 第 7 章 已教過 Plan 模式和權限基礎,這章接著往達人層深掘——不重收基礎。

先看懂本章的料源徽章

這章混用了不同可信度的來源,所以每個關鍵主張旁邊都會掛一個小徽章標明分級,方便你判斷「這是官方規範、還是某位達人的個人偏好」。一共四級:官方=出自 Anthropic 官方文件;達人=具名工程師的個人實踐,非官方定論;社群=社群整理的最佳實踐;實驗性=研究預覽、前沿功能,未來可能變動或移除。看到 🧪 就要特別當心,別把它當成穩定保證。

15.1 四階段工作法:先探索、再規劃、後動手

達人寫程式很少劈頭就叫 Claude「動手做」。官方建議的標準節奏是四個階段探索(Explore)→ 規劃(Plan)→ 實作(Implement)→ 提交(Commit)。把「研究跟規劃」跟「實際改動」分開,最大的好處是:避免 Claude 還沒搞懂你要什麼,就一頭栽進去解錯問題——等它寫完一大堆你才發現方向不對,那才是真的浪費時間。

階段 這一步在做什麼 它能不能改你的檔案
① 探索 Explore 進 Plan 模式讀檔、回答你的提問、摸清現況。 不能改,只讀。
② 規劃 Plan 寫出一份詳細實作計畫;可按 Ctrl+G 開編輯器親手修計畫。 不能改,只提案。
③ 實作 Implement 切出 Plan 模式,照計畫動手,並對著計畫驗證有沒有做到。 會改。
④ 提交 Commit commit、開 PR,把成果固定下來。 會改(版控)。

官方 四階段工作法出自 Anthropic 官方最佳實踐。

什麼時候可以跳過規劃?

不是每件事都要走完四階段。改個錯字、刪一行 log、把變數改名——這種「一句話就能看完 diff」的小改動,直接做就好,硬要它先規劃反而拖慢。判準很簡單:如果改動小到你掃一眼 git diff 就能確認對不對,就不用規劃。規劃是留給「動到多個檔、有設計取捨、容易做歪」的任務。

動手看一次:一輪真實的四階段對話會長什麼樣子

上面的表格是骨架,實際打字會是什麼樣子?舉個例子:你想幫一個舊專案的「匯出報表」功能,加上依欄位篩選再匯出 CSV 的能力。四個階段實際下指令,大概會像這樣:

# ① 探索(先進 Plan 模式,Shift+Tab 切過去)
去讀 src/reports/ 底下匯出報表的程式碼,
搞懂現在的匯出流程跟資料怎麼組出來的,
也看一下有沒有現成的「欄位篩選」邏輯可以參考。

# ② 規劃(還在 Plan 模式)
我想讓匯出報表支援勾選要匯出哪些欄位。
哪些檔案要動?資料流程會怎麼變?
把計畫寫出來。

# ③ 實作(切出 Plan 模式後)
照你的計畫做,欄位篩選的邏輯要寫測試,
全部跑過一次、把失敗的都修好再回報。

# ④ 提交
用清楚的訊息 commit,開一個 PR。

留意第②句:規劃階段的重點不是「叫它動手」,是逼它先講出「哪些檔案會動、資料流程怎麼變」——這兩句話它答得出來,代表是真的想過一輪,不是複製貼上你的需求就開始改。

核准計畫時,其實有 5 個選擇,不是只有「同意」

Plan 模式寫完計畫後,你不是只能「按 Enter 同意」。核准畫面通常會給你五條路,挑哪一條看你對這份計畫的信任程度:

  1. 直接轉 Auto mode 執行:信任計畫、想少被打斷,讓它自己跑(見 15.4)。
  2. 轉 acceptEdits 執行:檔案編輯自動過,但敏感操作還是會問你。
  3. 逐一審查每個編輯:最保守,每個檔案改動都要你點頭。
  4. 回頭再修計畫:看完覺得哪裡不對,直接打字要它改計畫,還沒開始動手。
  5. 轉 Ultraplan 到瀏覽器複審:把計畫丟上雲端介面,用滑鼠留言、反應 emoji 慢慢審(見下方)。

有個小細節可以省事:核准計畫之後,Claude Code 通常會直接拿計畫內容幫這個 session 命名,不用你自己再想一個 session 名字。

Plan 模式不是滴水不漏的沙盒

Plan 模式讀起來像「純唯讀、絕對不會動到你的檔案」,但它比較接近模型自己盡量守規矩,不是作業系統層級的強制隔離。anthropics/claude-code 的 issue tracker 上能找到一串重複回報(例如 #7474、#42218 這類),內容都是「明明還在 Plan 模式,卻直接動手改了原始碼」——特別容易發生在你正在對計畫本身給修改意見的那個當下。這類回報的實際狀況可能隨版本修復或變化,下筆前你可以自己在 issue tracker 搜關鍵字確認現況。真的要硬保證,做法是自己疊一層 PreToolUse hook,比對 permission_mode == plan 時擋下 Edit/Write(見 第 19 章)——別把 Plan 模式的「唯讀」當成 100% 承諾。

研究預覽:把規劃搬上雲端瀏覽器複審 — Ultraplan

實驗性 Ultraplan 是核准計畫的第 5 條路:把規劃任務丟給雲端版的 Claude Code on the web,一樣用 Plan 模式跑,但複審介面搬到瀏覽器上,多了三種本機終端機沒有的複審工具——行內留言(對計畫裡某一句話直接註解)、emoji 反應(快速標記同意/有疑慮)、大綱側欄(整份計畫的章節縮圖,方便跳讀)。複審完可以選擇留在雲端繼續執行,或是瞬移回本機終端機接手實作。

要用它,你得先有 Claude Code on the web 的帳號、專案要連 GitHub repo,版本也有下限(官方標的是 v2.1.91 以上)。它目前標的是研究預覽,介面與需求都可能還在變動,用之前建議先看官方 Ultraplan 文件頁確認現況。

官方 核准計畫的 5 個選項與自動命名出自官方文件;實驗性 Ultraplan 為 research preview,需求與介面可能持續變動;社群 Plan 模式非硬沙盒一事,出自 GitHub issue tracker 上的重複回報,實際修復狀態請自行核實。

15.2 驗證閉迴圈:四級升級閘門

這一節是整章的核心,也是達人心法裡最值錢的一段。要治「假裝做完」這個病,靠的不是一直叮嚀它「請確實完成」——那種純嘴上的提醒,它七成時候照樣偷工。真正有效的做法只有一個原則:給 Claude 一個會回傳「通過/失敗」的東西,逼它拿證據說話

這個「會回傳通過/失敗的東西」可以是:測試套件(test suite)、build 的結束碼(exit code)、linter、固定的對照檔(fixture diff),或截圖跟設計稿比對。重點在於——它是機器能客觀判定真假的事實,不是 Claude 自己說了算。給了這種檢查,Claude 就能自己反覆跑、自己迭代到真的過,而不是跑一次就跟你說「好了」。一句話記住整套心法:不要問它「做完了嗎」,要問它「證據呢」——人類工程師交付前會自己跑一次測試,你只是把這個習慣,變成 Claude 跑不掉的硬規矩而已。

四級閘門:強度由弱到強,依風險往上加

同樣是「逼它驗證」,力道可以分四級。任務越關鍵、越不容許出包,就往上爬一級:

  1. ① 寫進 prompt:直接在指令裡要求「跑完測試、貼出輸出再回報」。最輕量,靠 Claude 自覺。
  2. /goal 完成條件:設一個可驗證的目標,Claude 每一回合都重新檢查有沒有達成(下一節細講)。
  3. ③ Stop hook:用 hook 在它想收工時擋下來、強制驗到通過為止——這是確定性的閘門,不靠自覺(連續擋 8 次後可放行,避免死迴圈)。
  4. ④ 對抗式驗證 subagent:另開一個專責挑錯的子代理,立場就是「不相信你做完了」,獨立去查證。

「信任但驗證」的縫隙,才是最常漏的地方

Claude 給的答案常常看起來很對、聽起來很完整,但偏偏漏了某個邊界情況(edge case)。這種「似是而非」最危險,因為你很容易就信了。鐵則只有一句:能驗證才算數,驗不了就別 ship。永遠要求它附上測試輸出、指令加結果、或截圖;拿不出證據的「完成」,一律當成「還沒完成」。

官方 驗證閉迴圈與四級升級閘門出自 Anthropic 官方最佳實踐。

先寫一個會失敗的測試,直接 commit 起來當檢查點

有個做法特別適合搭配「機器可驗證」這套心法:先叫它寫測試,不急著寫功能。順序是先寫測試 → 跑一次確認它真的會失敗(紅燈)→ 把這個「會失敗的測試」先 commit 下來當檢查點 → 才開始實作,做到全部轉綠為止

中間那個「先 commit 失敗的測試」常被跳過,但它其實是這招最關鍵的一步:它把「驗證標準」釘死在版控歷史裡,之後不管改幾輪、換幾個 session,你都能用 git diff 對照這顆檢查點,確認 Claude 沒有偷偷把測試改鬆來讓它通過——這正是防止「表面過關」最直接的辦法。

寫法 範例
❌ 模糊指令 「寫一個驗證 email 格式的函式」
✅ 附驗證標準 「寫一個 validateEmail 函式。測試案例:user@example.com 要回 true、invalid 要回 false、user@.com 要回 false。實作完跑一次測試給我看結果。」

兩句話乍看差不多,差別在後者把「做對」的定義寫死成機器可以判定的案例,而且明講「跑測試給我看」——Claude 沒辦法用「應該可以吧」蒙混過去,因為你已經先講好怎麼算數。

Stop hook 怎麼寫:兩種回覆格式

第③級的 Stop hook 是一段你自己寫的腳本,Claude 想收工時會先過一遍。它讀你腳本的輸出決定要不要真的停下來,常見兩種寫法:

寫法一:擋下來,附理由(Claude 會看理由繼續做)

{ "decision": "block", "reason": "測試覆蓋率不到 80%,請補測試再回報。" }

寫法二:不擋,但補一段背景資訊讓它自己判斷

{ "hookSpecificOutput": { "hookEventName": "Stop", "additionalContext": "效能回歸:API 回應時間增加了 15%。" } }

寫 Stop hook 前有個地方一定要處理:它本身也會觸發一輪新的對話,新的一輪結束時又會再觸發一次 Stop hook——沒處理好會變成關不掉的無限迴圈。你的腳本要去檢查傳進來的 stop_hook_active 旗標,已經是 hook 觸發的這一輪就別再擋。另外別忘了前面提過的保險絲:連續擋滿 8 次,Claude Code 會直接強制放行,這是系統內建、不是你能調的參數。長時間無人值守的任務,Stop hook 適合當第一層攔截,別指望它能無限期擋下去,真要保險就再疊一層對抗式 subagent(下一段)。

第④級對抗式 subagent 的一個提醒:它幾乎總會挑出東西

派一個全新 subagent 去對抗式覆核,官方給的範例大致是這樣的指令:

# 派一個 subagent 拿計畫當標準,覆核剛剛的變更
派一個 subagent 對照 PLAN.md 檢查這次改動的 diff:
確認計畫裡列的每一項都做到了、
提到的邊界情況都有對應測試、
而且沒有動到範圍外的東西。
只回報會影響正確性或需求的漏洞,其他當參考就好。

最後那句「只回報會影響正確性或需求的漏洞」不是客套話,是必要的煞車。一個被交付任務就是「去挑毛病」的 reviewer,就算東西真的沒問題,也幾乎總會硬擠出幾條意見來交差——這是它被賦予的角色使然。如果你把它列的每一條都照單全收去修,很容易滾出一堆不必要的抽象層、防禦性程式碼,甚至為了根本不會發生的情境寫測試,結果是過度工程化,比原本沒審查還糟。做法是把它的意見分兩桶:真的會讓功能壞掉或需求沒做到的,處理;純粹是「風格比較好」「可以更保險」的,看情況、不追殺每一條。

官方 TDD 紅燈檢查點、Stop hook 兩種回覆格式與 stop_hook_active 旗標、對抗式 subagent 範例與「別追殺每一條」的提醒,均出自 Anthropic 官方最佳實踐與官方 subagent 範例文件。

15.3 /goal:給它一個「達成才算完」的條件

上一節的第二級閘門是 /goal,這節單獨講它,因為它是「讓 Claude 無人值守跑很久」的基礎。/goal 的用法是設一個可被機器驗證的完成條件,然後 Claude 會在每一個回合都重新檢查:這個條件成立了嗎?沒成立就繼續做,成立了才停。

用法示意:設定一個確定性的完成條件

# 設一個可驗證的目標:所有測試檔通過、且分支乾淨可開 PR
/goal "all test files pass and branch is clean for PR"

這條件的關鍵在於它不是模糊的「把功能做好」,而是「測試全過」「分支乾淨」這種機器能客觀判定的事實。Claude 沒辦法靠嘴砲說自己達標——它得真的讓測試綠燈,/goal 才會認帳。

搭 /loop + worktree 就能無人值守跑數小時

/goal 真正發威是跟 /loop(讓它週期性反覆跑)和 worktree(獨立工作目錄,見 第 18 章)一起用:設好完成條件,讓它在自己的 worktree 裡一輪一輪跑,達標前不收工。你去忙別的,它自己磨到過。/loop 的本地上限大約是 3 天,更長或要關機也跑就得改用雲端排程(見 第 22 章)。

官方 /goal 為官方功能;達人/loop + worktree 做無人值守的用法,出自 Boris Cherny 的個人實踐。

評審模型自己不會動手驗證,條件要寫成「看得到的證據」

判斷 /goal 條件有沒有達成的,是一個獨立的小型快速模型(預設等級接近 Haiku),它只讀對話紀錄,不會自己下指令、不會自己開檔案去查。這代表如果你的條件寫成「資料庫已經沒有髒資料」這種它自己看不到、Claude 也沒有『秀出來』的東西,它永遠判不出來。條件一定要寫成「Claude 的輸出能自己證明」的形式——不要寫「功能要做對」,要寫「npm test 跑完是 0 個失敗,而且輸出要貼在對話裡」,逼 Claude 自己先把證據攤出來,評審模型才有東西可以判。另外條件文字上限大約 4000 字元,別把整份規格書貼進去。

查看目前的 goal 狀態、清掉 goal、非互動模式下使用

# 不加參數直接打,列出條件、已跑時長、跑了幾回合、目前 token 花費、評審模型最新一次的判斷理由
/goal

# 清掉目前設定的 goal(stop/off/reset/none/cancel 都是同義字)
/goal clear

# 非互動模式一次跑到完成,適合排程或 CI;想中途喊停就按 Ctrl+C
claude -p "/goal CHANGELOG.md 裡本週合併的每個 PR 都要有一行紀錄"

/goal、/loop、Stop hook:三個「自動繼續」的機制,誰管什麼

這三個常被搞混,因為都會讓 Claude 在一輪結束後「自己決定要不要繼續」。差別在誰來判斷、什麼時候判斷

機制 什麼時候觸發 誰決定要不要停
/goal 每一輪結束時 獨立的評審模型讀對話紀錄,判斷條件是否達成
/loop 固定時間間隔到了 你手動喊停,或 Claude 自認做完了
Stop hook 每一輪結束時 你自己寫的腳本/prompt 判斷(見 15.2)

三者可以疊在一起用:比如用 /goal 設好機器可驗證的完成條件當主要判準,同時掛一個 Stop hook 當保底閘門,兩層都要過才真的收工。resume 一個已經設過 goal 的 session,條件本身會保留,但已跑的回合數、計時、token 花費會重新計算。

官方 評審模型機制、字元上限、狀態查詢與非互動用法、以及 /goal/loop/Stop hook 的機制對照,均出自官方 /goal 文件。

15.4 Auto mode:用分類器取代「逐次問你」

講到「讓 Claude 自己跑」,2026 年隨 Opus 4.8 來了一個關鍵的新東西:Auto mode。它常被誤會,所以這節要把它講清楚。先記住一句話定調:Auto mode 是「研究預覽」,不是安全保證——它能大幅減少打斷,但官方坦承它會漏放危險動作,別把它當成「有它就不用管」。

它是第 6 個權限模式

你在 第 7 章 學過權限模式(預設、接受編輯、計畫)。Auto mode 是 Claude Code 的第 6 個權限模式,不是新產品。把六個模式從「最保守」排到「最自主」會更好懂:

順位 模式 它的作用
1 default 預設 每個動作都先問過你(最保守)。
2 acceptEdits 接受編輯 檔案編輯+常見檔案系統指令自動批准。
3 plan 計畫 唯讀探索、只提案不執行。
4 auto Auto mode 一切照做,背景分類器做安全審查。
5 dontAsk 只有預先白名單的工具能執行。
6 bypassPermissions 全部跳過檢查(僅沙箱用,最大自主)。

它的本質:不是權限更大,是換一種審查方式

這是最容易搞錯的地方,務必看懂:Auto mode 不是「權限層級更高」——那是第 6 順位的 bypassPermissions。Auto mode 做的是把權限檢查從「事前逐次問你」換成「事後由 AI 分類器自動判斷」。防護沒有被拿掉,只是從「打斷你」變成「背景機器幫你看」。

這個背景分類器是獨立的 Sonnet 4.6 模型,跟你用 /model 選的模型無關——你拿 Opus 跑任務,分類器仍是 Sonnet 4.6 在背後把關。它會先用單一 token 快速過濾,只對被標記的可疑動作才做更深的推理。讀檔、在本地工作目錄編輯這類安全動作會跳過分類器(不送審);開銷主要來自 shell 指令和網路操作。

分類器盯的是這幾類高風險動作,命中就擋下並要 Claude 改做法:

  • 下載並執行外部程式碼(典型的 curl … | bash)。
  • 把敏感資料往外部端點送。
  • 生產環境部署、資料庫遷移。
  • 雲端儲存的批量刪除。
  • IAM/repo 權限授予、共享基礎設施的修改。
  • git 破壞性操作:force push、reset --hardstash drop、直接推 main。
  • 會話邊界違反:你在對話裡說過「別 push」,它卻想 push——擋。

「別 push」這種邊界會被忘掉

你說過的「別 push」之類邊界,Auto mode 會記著去擋。但這份記憶有個脆弱點:如果 context 被壓縮(compaction)把那條訊息壓掉了,邊界就跟著失效。要真正的硬保證,必須用 deny 規則寫死,不能只靠 Auto mode「記得」。另外,同一個動作被連擋 3 次、或單一 session 累計擋 20 次,Auto mode 會自動暫停、把人工提示叫回來。

常見誤解:允許清單救不了 .claude/ 和 .git/ 這批「受保護路徑」

不少人以為只要在允許清單裡寫一條 Edit(.claude/**),Auto mode 就會放行對 .claude/ 設定的編輯——實際上不是這樣。.claude/.git/、shell 啟動檔(.zshrc 之類)這批「受保護路徑」,在除了 bypassPermissions 以外的所有模式都不會被允許規則自動放行:Auto mode 下會被強制送去給分類器覆核,dontAsk 模式下則是直接拒絕。這是刻意設計——不然一份寫死在 repo 裡的允許清單,等於任何 clone 這個 repo 的人都能自己幫自己開後門動 Claude Code 的設定本身。

Plan 模式 vs Auto mode:不是誰取代誰

這兩個常被講成「新的取代舊的」,其實不互斥、可以隨時切,是兩種不同的工作流:

向度 Plan 模式 Auto mode
核心 先探索/提案,後人工審批 自動執行+背景安全檢查
會不會執行動作 不會(唯讀+提案) 會(自動執行)
何時用 大改動前摸底、想審提案、設計真的不確定 方向已信任的長任務、反覆迭代、想少被打斷

你可以在 session 裡用 Shift+Tab 在這幾個模式間循環切換。Plan 模式批准後可以轉進 Auto 執行;Auto 跑到一半想改策略,也能切回 Plan 重新摸。要設成預設只能寫在 ~/.claude/settings.json{ "permissions": { "defaultMode": "auto" } },不能放進專案 repo 的設定。

這條「只能設在使用者層」的規則背後是刻意設計:defaultMode: "auto" 若寫在專案層.claude/settings.json.claude/settings.local.json,新版 Claude Code 會直接忽略它——不然一個 repo 只要偷偷簽入這行設定,任何人 clone 下來就等於被自動開了 Auto mode,這不該由 repo 作者代替使用者決定。相對地,Plan 模式的預設值可以合法寫在專案層,因為它只會讓行為更保守:

兩種作用域的實際寫法對照

~/.claude/settings.json(使用者層,Auto mode 只能寫在這)
{ "permissions": { "defaultMode": "auto" } }

.claude/settings.json(專案層,Plan 模式可以合法寫在這)
{ "permissions": { "defaultMode": "plan" } }

團隊想幫協作者設一個「保守起步」的預設值,寫進專案層的 plan 就是合法又不踩雷的做法;反過來想讓自己的機器全域偏好 Auto mode,才需要動使用者層設定。

值得一提的是 Opus 4.8 把工作流訊息也改了:以前官方建議「先 Plan、再執行,而且常常要另開一個全新 session 來執行」——那其實是當年 context 容量有限時的權宜做法。現在官方訊息轉成「Plan 模式留給真的不確定的設計,多數的規劃—實作—驗證交給 Auto mode」,所以「另開 fresh session 執行」變成可選、不再強制。

達人觀察也呼應這個轉向:Boris Cherny 提過,隨著模型能力往上(他提到 Opus 4.6 之後那幾代),他反而減少特地切進 Plan 模式的頻率——新一代模型在動手前某種程度已經「內建」會先想過一輪,Plan 模式這個顯式步驟對他來說變多餘,他改成直接從 Auto mode 開始。這是他個人隨模型世代調整的習慣,不是官方硬性建議;自己的專案該不該跳過 Plan 模式,還是取決於任務風險,別只因為「達人這樣做」照搬。

研究預覽:約六分之一的危險動作可能漏放

這是 Auto mode 最重要、不能略過的限制。它目前是研究預覽(research preview)狀態,官方明說不保證安全。實測資料:誤擋(把安全動作錯擋)約 0.4%,很低;但該擋沒擋(危險動作漏放)約 17%——也就是大約每六個危險動作,可能有一個溜過去。官方因此坦承它不適合用在高風險基礎設施。對生產資料、金融或安全關鍵的操作,請回到 default 加人工 review,或用 deny 規則硬擋。千萬別把 Auto mode 當成「安全無虞、放著跑就好」。

這個限制在非互動模式下特別要注意。互動 CLI 裡,同一個動作被連擋 3 次,Auto mode 會自動暫停、退回逐次詢問——這時候還有你在,可以回答。但 claude -p 這種非互動模式沒有人可以回答,遇到一樣的重複擋下情形,行為是直接中止整條 run,不會安靜等你回覆。用 /goal-p 跑無人值守的排程任務時要留意:如果分類器對你的內部基礎設施「不熟」(常見情境是內部服務網域被誤判成不明外部端點),整個排程可能就這樣提早結束,得靠 /permissions 的「最近被拒」紀錄才看得出發生過什麼事。真的要讓分類器更懂自家基礎設施,正解不是關掉 Auto mode,是請管理員把內部網域、bucket、服務白名單寫進 trusted infrastructure 設定。

近期動態:預設模式可能已經改回 Manual,請自行核實你手上的版本

Auto mode 官方工程部落格自己承認一個很說明問題的數字:對真實流量做匿名統計,使用者對權限提示的核准率高達約 93%——這代表「跳出視窗要你按確認」早就不等於「你真的有在審查」,跟這整章反覆強調的「看起來做完 ≠ 真的做完」是同一個病根,連 Anthropic 自家產品都踩過。多家科技媒體在 2026 年 7 月初回報,Claude Code 一次版本更新把預設權限模式從 Auto 改回 Manual,理由正是這個「核准疲勞」數字。這個「改回預設」的時間點是我從二手媒體報導轉述,不是直接讀到 Anthropic 官方公告頁面,寫這段當下無法保證仍是最新狀態——建議動手前自己跑一次 claude --version 對照官方 release notes,或打 /config 看目前生效的預設模式,別完全相信任何一篇文章(包括這篇)講的「現在預設是什麼」。

官方 權限模式階梯、分類器機制、兩模式關係、受保護路徑放行規則、defaultMode 作用域差異、非互動模式的中止行為,皆出自官方文件與工程部落格;實驗性 Auto mode 為 research preview,誤擋約 0.4%/漏放約 17%、不保證安全;官方 核准率約 93% 的核准疲勞數字出自 Anthropic 官方 Auto mode 工程部落格;社群「2026 年 7 月改回 Manual 預設」為科技媒體轉述,請自行核實現況;達人「多數任務改偏好 Auto mode」與「模型變強後減少用 Plan 模式」屬 Boris Cherny 的個人傾向,非官方硬規範。

15.5 雙模型與雙 Claude:規劃用強的、審查找新的

達人有兩個省力又抓得準的搭配技巧,都圍繞「別讓同一個 Claude 既當球員又當裁判」。

技巧一:雙模型——深規劃用 Opus、快執行用 Sonnet

需要深度思考的規劃路由到比較強的 Opus,把照計畫快速執行交給比較快的 Sonnet。可以透過 /model 切換,或在 .claude/settings.json 做條件路由。好處是:燒最貴模型的時間花在最需要腦力的地方,執行階段用便宜快的就夠。

技巧二:雙 Claude——讓一個全新的它來挑另一個的毛病

這招對「安全敏感的變更」特別值得。重點是:審查的那個 Claude 要零先前 context——因為它對前一個計畫沒有任何感情投入,反而更容易挖出盲點。一個寫計畫的 Claude 看自己的計畫總覺得很完美;換一個全新的、立場像「資深工程師審稿」的 Claude 來看,常常一眼就點出漏洞。

官方最近把這個做法背後的道理講得更完整,值得放在這裡當理論骨架:長 context 的單一 session 容易踩三種官方點名的失效模式——agentic laziness(做到一半就自認收工,例如 50 項任務只做完 35 項就宣告完成)、self-preferential bias(自己審自己的產出,手會不自覺放鬆)、goal drift(對話輪數一多、幾輪 compaction 下來,你早先講的「不要做 X」邊界條件被壓縮消失)。雙 Claude 互審能治的正是前兩種:把「做」跟「判斷做完了沒」拆進兩個完全獨立的 context,審查者沒有自己的產出要護航,也沒有一路做下來的疲勞感。第三種 goal drift 則要靠拆更多獨立目標的 subagent 來對治——這正是第 17 章動態工作流要處理的規模化問題,這裡先知道有這三種病名就好。

  1. 動手做

    Session A 在 Plan 模式草一份計畫

    開一個 session,進 Plan 模式(Shift+Tab 切到 plan),讓它把實作計畫寫出來,但先別動手。

  2. 動手做

    Session B(全新、零 context)來批判這份計畫

    另開一個全新 session,把計畫貼給它,要求它當「資深工程師 reviewer」,專門挑這份計畫漏了什麼、哪裡有風險。因為它沒參與規劃,看得比較冷靜。大約 2–5 分鐘,換來的盲點清單很值。

  3. 動手做

    把審查意見併回去,修好再執行

    把 B 挑出的問題交回 A 修正計畫,確認都處理完,再切出 Plan 模式開始實作(可搭 auto-accept)。

    你會發現

    全新 context 的審查者,常會點出原作者「想當然耳」而跳過的邊界情況——這正是 dual-Claude 比自己審自己更可靠的原因。

實際文字大概長怎樣?延續前面「幫報表加匯出欄位篩選」的例子,Session B 收到的指令可以是:

# 貼給 Session B(全新、零 context)的指令
用「資深工程師 code reviewer」的角度看
@src/reports/exportFilter.ts 這份實作,
挑出邊界情況、競速條件(race condition)、
以及跟現有匯出邏輯風格不一致的地方。

拿到意見後,貼回 Session A:「這是另一個 reviewer 的意見:〔貼上 Session B 的回覆〕,處理掉這些問題。」——整個循環大約多花 2–5 分鐘,換到的盲點清單通常很值得。

Boris 的「規劃到位、一次到位」+ /effort

Boris Cherny 的做法是把力氣狠狠灌進 Plan 模式的計畫,好讓 Claude「一次就做對」(plan-then-one-shot),再選擇性地請第二個 Claude 當 staff engineer 審一遍。他也會搭 /effort 調推理強度:預設用 high,遇到難纏的 debug 才開 max。

max 與 ultracode:一個加深推理,一個改變做事方式

maxultracode 看起來都在 /effort 選單裡,卻不是同一個維度:前者是單次模型呼叫投入多少推理,後者是 Claude Code 是否要把有份量的工作自動編排成動態工作流。可用的 effort 等級仍取決於你正在用的模型;完整支援時由低到高是 lowmediumhighxhighmax

官方把 max 定位為「不以 token 支出為限制、追求最高能力」的選項;不過 effort 是行為訊號,不是一個解除所有輸出限制的固定 token 預算。它讓模型在同一任務上更願意投入推理,而不是替你移除模型、方案或 max_tokens 的其他限制。

設定 送給模型的 effort 執行方式 持久性
/effort max max(最高推理層級) 不額外開啟動態工作流;重點是讓同一個任務的推理更深、更徹底。 /effort 設定時只限本 session;若改用 CLAUDE_CODE_EFFORT_LEVEL 環境變數,則依該啟動環境生效。
/effort ultracode xhigh Claude 對每個實質性任務自行判斷是否規劃 dynamic workflow;需要時會用多個 subagent 分工、平行並彙整。 只限本 session;不能寫進持久的 effortLevel 設定或 CLAUDE_CODE_EFFORT_LEVEL

所以若只比較單一模型呼叫想得多深max 的層級確實高於 xhigh;但 ultracode 的價值不在多想一級,而在於不必每次都下「use a workflow」這類指令,Claude 會把一個請求拆成理解程式碼、修改、驗證等多個工作流。這也不保證每一項任務都平行展開——是否值得用工作流,仍由 Claude 依任務規模判斷。

怎麼選:先看任務形狀,不是只看「誰比較強」

單一難題,例如演算法設計、架構決策、棘手 bug 的根因分析,選 max可拆、可交叉驗證的大範圍工作,例如全 repo 稽核、跨檔遷移或大型重構,選 ultracode。若只是這一輪需要多想一點,在 prompt 裡加 ultrathink 即可:它只加上一段 in-context 指示,送給 API 的 effort 值與 session 設定都不會改變。

ultracode 不可用時,不會神奇地長出工作流

例如 Dynamic Workflows 被關閉時,--effort ultracode 只會把模型設成 xhigh,不會執行自動編排。反過來說,工作流一旦展開,token 用量和等待時間都可能遠高於日常對話;例行小事回到 high 通常比較划算。

官方規則之外:達人實測看見的成本與品質取捨

這裡不能把「max 比較省 token、只是比較慢」當成定律。官方 Anthropic 的說法是:max 不限制 token spending,可能帶來更深推理,但也可能出現 diminishing returns 或 overthinking;Dynamic Workflows 則可能比一般 Claude Code session 消耗顯著更多 token。也就是說,兩個旋鈕改變的是不同成本來源,官方沒有保證哪一個在所有任務都更便宜。

公開使用者回報(非受控基準測試)
來源與測法 觀察到的結果 可以怎麼解讀
Alicicek03 的公開交叉測試回報
同一個 app phase、5 個 worktree,交叉跑 ultracodemaxxhigh
5 次產出的程式大致相同;max→max 回報約 57 美元,雙 ultracode 約 77 美元。真正抓到一個圖片 URL 快取 bug 的,是獨立 reviewer。 使用者實測 單次交叉測試,不能外推成固定價格;但它支持「多代理不等於品質線性上升」,獨立審查可能比再加深同一模型更有價值。
coolreddy 分析 30+ 次 ultracode session 小任務容易膨脹成大工作流;多個 agent 重讀相同檔案;驗證可能變成反覆檢查。作者改用限制 agent 數、指定較便宜模型與明確停止條件。 使用者實測 ultracode 的 token 風險主要來自編排範圍失控,不是單純把單一模型的思考加深。
Claude 社群的成本回報 有人為廣泛任務喜歡 ultracode,但觀察到 agent 反覆掃描 repo;有人改成單一子代理或先把 repo 結構寫入記憶,回報每週省下數十萬 token。 社群回報 可作為護欄設計靈感,不是可複製的保證數字。

把「省 token」改成看總成本

max 不是保證省 token:它沒有 token spending 上限,也可能過度思考;只是對不可拆分的架構、根因除錯,單一深推理有機會避免一群 agent 重複探索,因此總成本可能較低ultracode 也不是保證更快:可拆分任務能靠平行工作降低 wall-clock,但會增加 token、整合與重試成本。實務上先用 max 收斂不可拆的決策,讓 xhigh 執行已定案的工作;只有全 repo 稽核、跨檔遷移、需要多路獨立驗證時才開 ultracode,並在 prompt 明列 agent 上限、允許範圍、驗證門檻與停止條件。

社群 雙模型規劃與 dual-Claude 獨立審查為社群最佳實踐(Jules Boiteux/Vibe Coding Academy),非官方文件模式;達人 plan-then-one-shot + reviewer + /effort 出自 Boris Cherny 個人實踐;官方 effort、maxultracodeultrathink 的機制,出自官方 Model configuration 與 Dynamic Workflows 文件;公開使用者實測 成本與品質觀察取自上方 Alicicek03 與 coolreddy 的公開回報,皆為非受控、不可保證的個案;實際可選等級請以你目前版本的 /effort 選單為準。

15.6 80/20 規劃法:八成力氣花在計畫上

有個社群裡很受用的比例原則:把約 80% 的力氣花在規劃,只留 20% 監督執行。聽起來反直覺——不是該趕快動手嗎?但實務上正好相反:計畫想得越透,執行就越不會歪、你要回頭糾正的次數就越少。規劃時要把需求、依賴關係、邊界情況都想清楚,剩下的執行交給 Claude,你只要盯著別讓它跑偏。

退出 Plan 模式前,先過這張 checklist

從 Plan 模式切出去、準備開始實作之前,確認這四件事都到位了,沒到位就別急著動手:

  1. 順序清楚:先做什麼、後做什麼,步驟有沒有排好。
  2. 受影響的檔案都點到了:這次會動到哪些檔,有沒有遺漏。
  3. 邊界情況記下來了:哪些 edge case 要處理,已經寫進計畫。
  4. 測試策略列出來了:怎麼驗證做對了,方法已經想好。

社群 80/20 規劃法與退出 Plan 模式 checklist 為社群最佳實踐(Jules Boiteux)。

15.7 /simplify 與 /code-review:改完之後,找人自己再審一遍

寫完、改完程式之後,別急著收工,跑一個收尾審查。這裡有兩支相關但職責分開的指令,不少流傳的教學會把它們講成同一件事,這裡先把差別講清楚,免得你以為跑了 /simplify 就等於做過程式碼審查。

指令 管什麼 不管什麼
/simplify 重用性(reuse)、能不能簡化、效率、抽象層級是否恰當——平行跑幾個審查代理各看一個面向。 不看正確性 bug——這是目前官方對它的定義。
/code-review 正確性 bug+收尾清理,強度分 lowmediumhighxhighmaxultra 六級,強度越高覆蓋越廣。 ——

版本不同,這兩支指令的分工可能不一樣

比較舊的版本裡,/simplify 其實就等於 /code-review --fix,涵蓋範圍含正確性 bug;新一點的版本才把兩者拆開,變成上表這樣「/simplify 專管乾淨度、/code-review 專管正確性」的分工。你手上的版本行為以哪個為準,直接打 /simplify --help/code-review --help 確認最準,別完全相信任何一篇文章(包括這章)講的版本行為。

/simplify 用法:在一輪變更之後跑,可以加聚焦範圍

# 對整輪變更跑一次收尾審查
/simplify

# 只聚焦某個面向
/simplify focus on error handling

# 只審某個路徑
/simplify src/reports/

/code-review 用法:抓正確性 bug,強度與輸出方式可調

# 中等強度,找到問題直接在本機修好
/code-review medium --fix

# 對第 1234 號 PR 跑雲端多代理深度審查(ultra 專屬)
/code-review ultra 1234

# 找到的問題直接貼成 PR 行內留言,不動你的檔案
/code-review high --comment

強度怎麼選:日常小改動 lowmedium 夠用;要合併進主分支前的把關用 high 起跳;ultra 是唯一會把任務丟上雲端、派多個代理平行深度審查的等級,適合真的要動刀的大改動或別人提的 PR,跑起來比較久也比較貴,別當日常習慣用。

兩支指令跟前面 15.2 的「驗證閉迴圈」是三件互補的事:閉迴圈確認功能對不對(測試過沒過)、/code-review藏著的 bug/simplify寫得乾不乾淨(重複邏輯、能不能用現成的、dead code)。三個都跑過,交出去的東西才是真的又對、又沒有藏雷、又整齊。

達人的收工儀式:把驗證+收尾串成一個固定動作

Boris Cherny 提到他把「收工前該做的事」串成一套固定順序:先依場景挑對應的驗證方式(後端用指令跑、前端用瀏覽器截圖比對、行動端用模擬器跑)、跑完驗證再跑 /simplify 收尾、最後開 PR。他甚至把這串動作另外做成一個自己專用、取名 /go 的個人化 skill,打一個指令就照順序全部跑完,不用每次現想「這次要驗什麼」。你不需要照抄他的 /go(那是他自己建的自訂指令,不是內建功能),但這個「把散落的收工步驟固定成一個可重複的序列」的想法,值得搬進你自己的專案(自建 skill 見第 12 章)。

官方 /simplify/code-review 的分工、強度分級與 --fix--commentultra 用法出自官方指令文件,實際版本行為請以 --help 為準;達人 收工儀式與自訂 /go skill 出自 Boris Cherny 個人實踐。

15.8 五個最常見的失敗反模式,以及怎麼破

最後收一份官方整理的「踩雷地圖」。這五個是大家最常掉進去的坑,每個都附上修法。對照看看,你最近是不是中了哪一條:

反模式 為什麼會出事 怎麼破
① 大雜燴 session
一個對話塞一堆不相干的事
同一個 session 裡又修 bug、又改文件、又問架構,context 被無關內容塞爆,Claude 越來越糊。 一個 session 專心做一件事,換任務就 /clear 清乾淨再開始。
② 反覆糾正
在同一個 session 一直「不對、再改」
做錯、糾正、又錯、再糾正……每一輪失敗都留在 context 裡,把它越帶越偏。 同一件事失敗兩次就停手,/clear 之後用一個更好的 prompt 重來,別在污染的 context 上硬凹。
③ CLAUDE.md 過度指定
規則多到把它淹沒
CLAUDE.md 塞了幾百行,Claude 反而抓不到重點、開始忽略你(第 14 章 細講過)。 狠下心修剪,只留高訊號的;非遵守不可的規則改搬進 hook 變成硬性強制。
④ 信任但驗證的縫隙
似是而非、漏掉邊界
答案表面上對、聽起來完整,卻悄悄漏了某個 edge case,你因為「看起來沒問題」就信了。 永遠給它 test/script/截圖當客觀檢查,驗不了的就別 ship——正是 15.2 那套閘門要解的事。
⑤ 無止盡探索
沒範圍地「研究一下」
叫它「去看看這個問題」卻沒框範圍,它一路讀上百個檔還沒收斂,又慢又燒 token。 把範圍縮窄(指定檔、指定方向),或把大範圍偵查委派給一個 subagent,別佔著主 session。

五個坑裡最該記住的一條

如果只能記一條,記反模式 ④:它「看起來做完了」不等於「真的做完了」。永遠給它客觀檢查、驗不了的就別 ship——這也是 15.2 那套四級閘門存在的整個理由。

共同解藥:一開始就給足「具體 context」

這五個坑很多都源自「指令太模糊」。精準的 prompt 能省掉大半糾正,做法是:界定範圍(指明哪個檔、什麼情境、測試偏好)、指出來源(叫它去看 git history 或特定檔找答案)、照抄現有模式(指一段現成 code 要它仿照)、描述症狀(哪裡壞、可能在哪、「修好」長怎樣,並要求先寫一個會失敗的測試)。善用 @ 引檔、貼圖、給 URL 把線索餵足。

官方 五大失敗反模式與「提供具體 context」皆出自 Anthropic 官方最佳實踐。

這五個坑背後其實有個更底層的共通點,跟本章開頭的「拿證據說話」互相呼應:Boris Cherny 提過他處理 Claude 犯錯的方式——不是每次都口頭糾正就算了,而是把糾正寫進 CLAUDE.md 或某個 skill 裡,讓同一個錯不會在下一個 session 重演。這跟反模式③(CLAUDE.md 過度指定)看似矛盾,其實是一體兩面:CLAUDE.md 該做的是「把踩過的雷變成規則」,不是「把你能想到的規則都先寫一遍」——前者是精煉、越改越薄;後者是堆積、越改越厚。連 15.4 提到的 93% 核准疲勞數字都是同一個道理:不管是「跳出視窗要你按確認」還是「Claude 說已完成」,只要你沒有真的停下來查,這個訊號就只是安慰劑。

達人「把糾正寫進 CLAUDE.md」出自 Boris Cherny 個人實踐。

小結

走完這章,你掌握了大師篇「驗證與規劃」的核心心法:

  • 四階段工作法:探索 → 規劃 → 實作 → 提交,把「想清楚」跟「動手做」分開;一句話 diff 才跳過規劃。
  • 驗證靠閘門不靠叮嚀:給它會回傳通過/失敗的客觀檢查,逼它拿證據說話。閘門四級——寫進 prompt → /goal → Stop hook → 對抗式 subagent——依風險往上加。驗不了的就別 ship。
  • 別讓同一個 Claude 球員兼裁判:規劃用強模型、執行用快模型;審查找一個零 context 的全新 Claude,盲點挖得更乾淨。
  • Auto mode 是研究預覽,不是安全保證:它用分類器取代逐次審核,但約六分之一的危險動作可能漏放,受保護路徑與非互動模式各有各的眉角;近期甚至傳出因 93% 核准疲勞改回 Manual 預設,版本行為請自行核實。
  • 收尾分兩支指令/code-review 抓正確性 bug,/simplify 收重用性與乾淨度,兩者職責不同、別只跑一個;對照五大反模式自我體檢,多數坑的解藥都是「一開始就給足具體 context」。

動手試試

  1. 挑一個你最近交給 Claude 的任務,不要只說「做好它」,改成用 /goal 設一個機器可驗證的完成條件(例如 /goal "lint passes and all tests are green"),看它每一回合怎麼自己重新檢查到達標。
  2. 找一份你覺得「應該沒問題」的計畫或一段剛改完的 code,另開一個全新 session,把它貼進去、要求對方當「資深工程師 reviewer」專挑毛病。比較看看:全新 context 的它,是不是點出了原作者漏掉的東西?
  3. 把你最近一輪改動跑一次 /simplify,看它在 reuse/quality/efficiency 上抓出哪些可以收乾淨的地方。
  4. 同一輪變更分別跑 /code-review medium/simplify,比較兩份報告抓出的東西有什麼不同——這能幫你確認自己真的分得清兩者的分工,不是背口訣。
  5. 設過 /goal 之後,中途打一次不加參數的 /goal,看它現在回報的已跑回合數、token 花費,和評審模型最新一次判斷「還沒達成」的理由是什麼。
  6. (進階、謹慎)在一個無風險的玩具專案裡用 Shift+Tab 切到 Auto mode 跑一個小任務,感受「背景分類器」的節奏——但切記,正式專案的破壞性操作別只靠它把關。

本章官方文件參考