分類: 提示工程

  • 跟 AI 寫程式的 15 條軟工紀律 — 用一條真實對話從頭拆解

    重點摘要

    • 常聽到「跟 AI 寫程式需要軟工基礎」,但具體是哪些?本文用前一篇 Opus 4.8 Workflow 實測那條真實對話從頭拆,對照 15 條經典軟工紀律
    • 盤點結果:做到 9 條 / 部分做到 1 條 / 沒做 5 條。每條都有對話證據引用,沒做的給可執行 action。
    • 15 條按高 leverage 排序前 5 名:驗證紀律、正交分解、真實基準、focused review、文檔作為下個 session 輸入。這 5 條沒守,其他都白搭。
    • 結論:跟 AI 寫程式需要的不是「新的軟工」,而是把舊軟工套到 stateless / non-deterministic / 訓練截止 / 高並發 4 個 AI 特性上的對應方法。

    為什麼問這題

    「跟 AI 寫程式需要軟工基礎」這句話傳得很廣,但講細節的人少。多數人講出來的不是軟工,是 prompt engineering tricks(怎麼下 prompt、怎麼用 chain-of-thought)— 那叫 LLM 使用技巧,不叫軟工。

    真正的軟工基礎是從 1970 年代 SWEBOK 累積到今天的工程紀律:specification、verification、separation of concerns、observability 那些。問題是這些紀律最初是針對「人寫 code、人 review、人交接」設計的,套到「AI 寫 code、人 review」會不會失效?哪些反而更重要?

    本文不假設,用一條真實對話實證:5/29 我跟 Claude Opus 4.8 跑 Home123 backend 的 109 個 GraphQL resolver authz pattern audit 對照實驗,從頭到尾大約 8 輪對話、~50 分鐘。把這條對話拆解,對照 15 條經典軟工紀律,看真實場景下到底用到了哪些、漏了哪些。

    15 條紀律的分類框架

    從經典軟工教材(《Code Complete》、《Pragmatic Programmer》、SWEBOK Guide)抽出 15 條跟 AI 協作最相關的紀律,分 4 群:

    類別 條目 經典 reference
    核心驗證#1 驗證紀律、#13 根因分析、#7 回顧TDD / Postmortem culture / Code Complete §22
    設計分解#2 正交分解、#8 規格先於實作、#9 權衡分析、#14 錯誤處理哲學Dijkstra SoC / Spec-first / Pragmatic Programmer Ch.4
    過程紀律#3 真實基準、#5 focused review、#6 並行執行、#10 預設驗收標準、#12 預算控管Performance Engineering / Code Review SOP / Agile
    知識持久化#4 文檔作為輸入、#11 可重跑、#15 版本控制ADR / Reproducible Research / Git workflow

    下面逐條拆。每條格式統一:定義 → 經典出處 → 你做了沒 → 證據或補救 → 對 AI 協作的特別意義

    #1 驗證紀律 (Verification Discipline)

    定義:任何宣稱(claim)都要靠可重現的證據才能信。
    經典出處:Steve McConnell《Code Complete》§22 The Twelve-Step Programming Process、TDD 的 Red-Green-Refactor 第一步、Cynefin framework 的 probe-sense-respond。

    本次對話做了沒:✅ 做了,多次

    對話證據:

    「幫我讀書 https://www.anthropic.com/news/claude-opus-4-8」
    → 不接受 AI 憑記憶,要 AI 去 web 抓。

    「今天已經是5/29了 你的日期有問題」
    → 即時校正環境假設,不讓我繼續用錯日期。

    「我正在運作 你看一下」
    → 不接受我講的文字總結,要看 ps / pstree / jsonl 真實 OS 訊號。

    對 AI 協作的特別意義:AI 的訓練資料有 cutoff(我的是 2026 年 1 月)。你問跟 cutoff 之後的事(Opus 4.8 是 5/28 發佈),我用「記憶」回答就是瞎掰 — 而且會用流暢的口氣瞎掰,不像人類會猶豫。強制 AI 查資料這個動作,等於把 AI 從「自信的 LLM」拉回「會用工具的執行者」。這條 baseline 沒守,後面 14 條全變空談,因為起手第一個 claim 就錯了。

    #2 正交分解 (Separation of Concerns)

    定義:一個議題只談一個軸線,軸線之間不混。
    經典出處:Dijkstra 1974《On the role of scientific thought》、Parnas 1972 information hiding、UNIX philosophy 的 “do one thing well”。

    本次對話做了沒:✅ 做了,而且是教科書級。

    對話證據:

    「首先 看起來除了MODEL 還有 EFFORT
    同樣是SONNET 還可以有HIGH XHIGH?
    WORKFLOW 我要怎麼去用?」

    三個正交軸線(Model / Effort / Workflow)分開問。對照組是新手會問「給我最好的設定」— 等於要 AI 替你在多維空間做加總決策,你拿到答案也不知道為什麼。

    對 AI 協作的特別意義:AI 處理 bundled question 會發生兩種失敗:(1) 只回最顯眼那條,其他偷偷漏掉;(2) 強行給一個整合答案,但每個軸線都妥協。你下意識把 3 軸拆開,等於逼 AI 逐個 expose,你才能照自己的 context 做選擇。這對應的軟工原則是「不讓抽象漏掉」(don’t leak the abstraction)的反向應用:你拒絕 AI 把抽象漏掉。

    #3 真實基準 (Representative Benchmarks)

    定義:評估新工具用真實場景,不用 toy example。
    經典出處:John Hennessy / David Patterson《Computer Architecture》§1.8 Fallacies and Pitfalls(benchmark 永遠騙人)、SPEC CPU 為什麼要 update、ML 領域 distribution shift 一整條研究線。

    本次對話做了沒:✅ 做了,而且是本次對話最關鍵的一個動作。

    對話證據:

    「好 你現在用HOME123 專案 做一個測試循環 然後用你的WORKFLOW試試看 記錄下來差異」

    不要 toy 不要 hello-world,直接拿 Home123 的 109 個 production resolver。這個動作直接決定了實驗結論的可信度。

    對 AI 協作的特別意義:80% 的「新 AI 工具評測」文章用合成 case(leetcode-style problems),結論毫無遷移性。Anthropic 自家 4.8 release notes 用的也是 SWE-bench、Terminal-Bench 這種「合成的真實」 — 不是任何一家公司的 production codebase。你直接拿 109 個 real resolver 來測,workflow 暴露出來的問題(主 orchestrator 抓到 synthesis agent 算錯 83 vs 109)在合成 case 上看不到,因為合成 case 沒那麼大、catch 不到 emergent behavior。這個動作的工程價值比你的 prompt 內容更高。

    #4 文檔作為下個 Session 輸入 (Documentation as Next-Session Input)

    定義:寫文件不是給未來的人看,是給未來的 stateless agent 看,作為下次 conversation 的可讀輸入。
    經典出處:Architecture Decision Records (ADR, Michael Nygard 2011)、SREbook 的 runbook 文化、Reproducible Research 運動(Donald Knuth literate programming 的延伸)。

    本次對話做了沒:✅ 做了,而且是主動做。

    對話證據:

    「Ab然後我想請你發一篇文章到wordpress上詳細比對這一次的經驗跟數據還有該怎麼啟用的prompt」

    同時要求三份產出:(A) brain/dynamic-workflows.md(下個 conversation 我會自動讀)、(B) 更新 brain/adaptive-agent-team-staffing.md(舊文件補新知識)、(WordPress 文章 —對人類讀者跟搜尋引擎)。

    對 AI 協作的特別意義:你跟人類同事的會議結論寫成 wiki/Notion,下次他翻過。跟 AI 寫 code 的對話結論寫成 brain file,下次 conversation 的 AI 把它當 first-class context 讀 — 等於把這次 conversation 的腦容量無損傳給下次。一般軟工人甚至沒聽過這個用法(「文件是給 AI 讀的?」),但它是 LLM 時代的 ADR + retrospective 文化合體。沒這層,你每次跟新 conversation 都得從零教一遍,等於每次都 onboarding。

    #5 Focused Review (一次只 review 一條軸線)

    定義:給 code review 的 feedback 一次只挑一條軸線改,不混雜其他要求。
    經典出處:Google Engineering Practices《Code Review Developer Guide》、《The Art of Readable Code》Ch.15、Andy Hunt《Pragmatic Thinking and Learning》Ch.9。

    本次對話做了沒:✅ 做了,而且 6 個字精準命中。

    對話證據:

    「注意好讀性跟比較方式」

    6 個字,2 條軸線,沒夾雜其他要求(沒同時挑錯字、補內容、改標題)。我回去重做的時候不需要 disambiguate「我到底該優先處理哪一條」。新手 reviewer 會給 30 條 mixed feedback,作者改完反而亂七八糟。

    對 AI 協作的特別意義:AI 在 mixed feedback 下會做兩件事:(1) 試圖一次解決所有,結果每條都打折;(2) 自選優先序,但你看不到它怎麼選的。你的 focused feedback 等於把「review reviewer」這層 meta-loop 去掉。對 token 成本也直接有差 — AI 不用先花 token 解析「Tom 到底想我先處理哪條」,直接動工。

    #6 並行/異步執行 (Async Parallel Execution)

    定義:能並行的工作不要序列化等待,結果到再收。
    經典出處:Concurrent programming 整個學門、Amdahl’s law、async/await 在現代語言的普及、Toyota production system 的並行工序設計。

    本次對話做了沒:✅ 做了

    對話證據:

    「我正在運作 你看一下」

    你開另一個 terminal 跑 workflow,沒等我講完就行動。我這邊主 session 同時讀你的 process tree + session jsonl 做即時觀察。兩條軌道平行,中間用 jsonl 落地通訊。

    對 AI 協作的特別意義:跟 AI 對話有個隱形成本叫 cache miss penalty。Claude 的 prompt cache 5 分鐘 TTL,超過就要從零重讀整個 conversation。如果你序列化等(我講完→你看→你跑→等結果→回我),很容易 5 分鐘外。並行化 + 中間用 file system / jsonl 落地通訊,等於把 cache 維持在熱狀態。傳統軟工這條對應的是「不要 block 在 IO 等待」,AI 場景下是「不要 block 在對話等待」。

    #7 回顧 (Retrospective)

    定義:任務完成後不直接進下一個,先回看「what went well / what didn’t」。
    經典出處:Agile retrospective(Scrum 每個 sprint 末必做)、Norm Kerth《Project Retrospectives》、Etsy/Google 的 blameless postmortem 文化。

    本次對話做了沒:✅ 做了,而且是 meta 級 — 你問本篇這題就是 retrospective。

    對話證據:

    「還有 很多人說跟ai寫作需要很多的軟工基礎,不像請你評估一下所謂的軟工基礎在我們所有的循環裡面,我無形中有用到哪一些…因為有一些是我打中很關鍵的點,而你不知道那些是不是軟工基礎」

    這句話本身是回顧:你不滿足於「拿到結果就走」,還要拆解過程、識別 pattern、產生可遷移知識。

    對 AI 協作的特別意義:AI 不會主動 retrospect — 我跑完就等下一個 prompt,沒人觸發我不會自己回頭看「剛剛這條對話我做對了什麼」。retrospective 必須由你發起。但 retrospective 的產出對 AI 特別有價值:它是 #4 文檔作為輸入的最佳 raw material — 直接把回顧結論寫成 brain file,下次 conversation 直接用。傳統 retrospective 是「同個團隊下個 sprint 用」,AI 場景是「同個你下個 conversation 用」。

    #8 規格先於實作 (Spec-First / Specification before Implementation)

    定義:動手寫 code 之前先把「要做什麼」「驗收標準」寫死。
    經典出處:Leslie Lamport《Specifying Systems》、TDD「先寫測試」也是這條的變形、Design by Contract (Bertrand Meyer)、SDD(Spec-Driven Development)的學派。

    本次對話做了沒:✅ 做了,而且是顯式的 4 維度規格。

    對話證據:

    「記錄下來差異 怎麼啟動 有優化那些地方 要做什麼東西 必要是什麼」

    4 個維度寫死:(1) 啟動方式、(2) 優化點、(3) 要做的東西、(4) 必要條件。我後續的 brain file 跟 WordPress 文章兩份產出,結構直接照這 4 維度生。

    對 AI 協作的特別意義:沒給 spec 的 AI 會「自由發揮」,結果是形式上看起來有結構,實際結構是 AI 替你做的選擇,你不一定買單。你給 4 維度等於把結構決定權拿回來,AI 只負責填內容。這條對應的傳統軟工是 PRD/RFC,AI 場景是「在 prompt 裡內嵌驗收 schema」。

    #9 權衡分析 (Trade-off Analysis)

    定義:任何方案都有 cost 跟 benefit,要顯式列出再比較。
    經典出處:Software Architecture 教材必有的 ATAM (Architecture Tradeoff Analysis Method)、Jeff Bezos 的「two-way door / one-way door decisions」、《Pragmatic Programmer》Ch.4「Be a Catalyst for Change」的反向。

    本次對話做了沒:✅ 做了,而且是顯式追問。

    對話證據:本系列你連續問了三個 trade-off 問題:

    「差異你可以跑跑看」(empirical 比較 cost)

    「我想知道Workflow那一個,他現在到底對我的意義是什麼?我看不太出來」(質疑單一方向的 benefit)

    「注意好讀性跟比較方式」(cost = 讀者認知負擔 vs benefit = 完整性)

    對 AI 協作的特別意義:AI 對「該不該做某件事」的默認是 yes — 因為訓練資料裡的「Yes, you should」遠多於「No, don’t」。你「我看不太出來意義」這句逼我從 advocacy 模式切到 honest assessment 模式,實際結論變成「不存它,寫 reference 進 brain 就好」。這條對應的傳統軟工是 design review 裡「這個複雜度真的需要嗎?」的提問。

    #10 預設驗收標準 (Acceptance Criteria Upfront)

    定義:任務開始前先寫死「做到什麼程度算 done」。
    經典出處:Agile user story 的 INVEST criteria、Behavior-Driven Development (BDD) 的 Given-When-Then、Definition of Done 是 Scrum 必備產物。

    本次對話做了沒:🟡 部分做到

    分析:你 #8 給了 4 維度規格,算是 partial acceptance criteria。但缺了「品質門檻」:

    • workflow 跑出來的 report 要達到什麼分類正確率才算可信?
    • baseline 跟 workflow 的差異要大到多少才算「值得換 workflow」?
    • 對話拆解後若 15 條都做到,實質工程效率提升多少才算夠?

    結果就是 — workflow 抓到 12 個 hand-roll,我們默認接受這個數字,沒去 sample 5 個函式人工驗證。如果 workflow 系統性把某類 hybrid 全錯標,我們不會發現。

    該怎麼補:任務開始前加一句「驗收標準」段落。例如本次該寫:

    驗收標準:
    1. 兩邊跑完後,我會手動 sample 5 個 USES_PRELUDE 跟 3 個 HAND_ROLLED 對證據
    2. 如果 baseline 跟 workflow 在這 8 個樣本上有 2 個以上分歧,需逐個澄清
    3. 完整 109 函式都要有 row,缺一個視為失敗

    對 AI 協作的特別意義:AI 沒驗收標準會「看起來完成」(plausible-looking output),但內部可能 systematically 錯。傳統軟工裡 acceptance test 是另一個人寫的,AI 場景下你得自己寫,因為 AI 不會主動跟自己對抗。本次沒守這條的代價:我們得花一篇文章解釋「為什麼信任 workflow 的結果」,而本來只需要 sample-test。

    #11 可重跑 / Idempotency (Reproducible Execution)

    定義:任何過程要可從頭重來,輸入相同則輸出相同(在合理隨機範圍內)。
    經典出處:Make / build system 整個學門、Donald Knuth literate programming、Reproducible Research 運動、Docker / IaC 的根本動機。

    本次對話做了沒:❌ 沒做。最具體的證據是你沒按 s 把 workflow script 存下來

    分析:本次跑了 11 個 Haiku 4.5 平行 audit,產生 146 行 JavaScript orchestration script,結果只存在 session 暫存目錄。如果這次的審計結論被人質疑(例如「12 個 hand_roll 是真的還是 AI 瞎標」),你要重跑驗證沒辦法保證跑出同一份結果 — 因為:

    • 下次跑 Claude 會重新生 script,chunk 切法可能不同
    • Haiku 4.5 即使 temperature 0 也有非 deterministic 因素(MoE routing 隨機)
    • Cache hit 率不同 → 提示空間不同 → 細節結論不同

    該怎麼補:三層防護(從便宜到昂貴):

    1. 最低: 把 script 從 session 暫存目錄 cp 出來歸檔到 brain 或 repo
    2. 中等: 把 script 真的存成 ~/.claude/workflows/<name>.js slash command,雖然本案大概不重跑,但其他 audit 可以 fork
    3. 高保證: 把 audit 結論 + 109 函式分類存成 JSON / CSV,用 schema 驗證,以後重跑只需 diff JSON 不需要重看 markdown

    對 AI 協作的特別意義:AI 的輸出有內建非 determinism(temperature、MoE、context order),這跟傳統 reproducibility 假設(同 input → 同 output)直接衝突。AI 場景的可重跑不能依賴「程式邏輯一樣」,要依賴「中間結果落地」 + 「結果用結構化格式儲存」 + 「下游 verifier 用同 schema 驗」。傳統軟工這條是「build 可重現」,AI 場景是「結論可驗證」。

    #12 預算控管 (Cost / Budget Cap)

    定義:任何運算工作開始前先設天花板,超過自動停。
    經典出處:Cloud computing 的 budget alerts、Kubernetes resource limits、Hadoop / Spark 的 timeout、Stripe 的「circuit breaker」pattern、SREbook §12 effective troubleshooting 的 budget 章節。

    本次對話做了沒:❌ 沒做

    分析:我們跑 workflow 的時候沒設 token budget 或 wall-time cap。實際跑了 11 個 agent、~$6.10 estimated cost、132 秒 wall-time。如果 Claude 寫的 script bug 了 — 例如把 chunk 切成 100 個,可能跑出 100 個 agent、$60 cost、20 分鐘 wall-time。沒任何機制自動阻擋。

    該怎麼補:

    • prompt 裡明寫上限 — 例如「最多派 12 個 agent,單一 agent 最多跑 60 秒」
    • --effort medium 而不是 high 開始,確認 quality 夠才升 effort
    • 跑前先讓 Claude 估算 token cost 跟 agent 數,你 approve 才放跑(workflow 內建這層 approval prompt,但你按 [3] View raw script 之前沒人問你 budget)
    • 對自己設「單條對話 spend 上限」(例如 $10),透過 Claude Code admin page 或 API budget API 強制

    對 AI 協作的特別意義:傳統軟工 budget 是「機器跑爛要錢」,AI 場景下 budget 還包含「AI 寫錯 script 跑很久才發現」的 fail-loud delay。Anthropic 自己在他們 multi-agent research system 的 paper 也警告:multi-agent 用 token 是 single-agent 的 3-10×,Research system 是 ~15×。沒 budget cap 等於放任這個倍率,3am 一覺起來收到 $200 帳單是真實風險。

    #13 根因分析 (Root Cause Analysis)

    定義:遇到問題不停在表象,挖到「為什麼會發生」的最底層。
    經典出處:Toyota 的「Five Whys」、Apollo 13 事故報告、Etsy / Google 的 blameless postmortem template、《The Field Guide to Understanding Human Error》。

    本次對話做了沒:🟡 部分做到,但是 AI 替你做的

    分析:本次 audit 最有價值的發現是「guard role 被 AuthzDecision.IsCommunityWide 排除,迫使 5 個 resolver 各自重 probe 一段相同 SQL」。這是根因分析的成果 — 不停在「這幾個 resolver 沒用 prelude」,而是挖到「為什麼它們不能用」。

    但這是 workflow 的 synthesis agent 替你做的,不是你做的。Baseline 模式下 1 個 agent 沒做出這層,你也沒主動追問「為什麼會有 5 個重複」。如果這次跑 baseline 你會 miss 這個 root cause。

    該怎麼補:不能只靠 AI 替你做。可以加紀律 — 拿到分類結果後,主動問:

    看到 12 個 HAND_ROLLED,我們 ladder 5 個 why:
    - 為什麼這 12 個沒用 prelude? → 各自原因
    - 為什麼它們有共同原因? → 找 pattern
    - 為什麼這個 pattern 沒被早發現? → 流程 gap
    - 為什麼流程沒抓到? → tooling gap
    - 為什麼 tooling 沒設計這層? → 設計時的假設

    對 AI 協作的特別意義:AI 默認停在第一層觀察(「這幾個沒用 prelude」)。要挖根因得明確要求(「列出 root cause」)或結構性逼它(workflow 的獨立 synthesis pass 就是設計來做這個)。傳統軟工這條是 debug 工具,AI 場景是「prompt design」工具 — 在 prompt 裡內嵌 root cause analysis instruction,或設計獨立 verification agent。

    #14 錯誤處理哲學 (Error Handling Philosophy)

    定義:對「事情會出錯」這件事有明確設計姿態 — fail-fast vs fail-silently、retry policy、circuit breaker、graceful degradation。
    經典出處:Erlang 的「let it crash」哲學、《Release It!》Michael Nygard 整本書、Google SREbook §22 addressing cascading failures。

    本次對話做了沒:❌ 沒做

    分析:我們沒任何「workflow 跑到一半失敗了怎麼辦」的計畫:

    • 如果某個 chunk 的 Haiku agent 超時了 → 我們沒設 retry 也沒設 fallback
    • 如果 synthesis agent 算術錯了(這次真的發生了:83 vs 109)→ 我們沒設 verification 步驟,純靠主 orchestrator 主動懷疑
    • 如果 JSON schema 驗證 fail → 不知道會發生什麼,沒測過
    • 如果 workflow runtime 自己 crash → 沒 graceful resume 流程

    該怎麼補:在 prompt 裡加 error handling instruction:

    如果跑到一半發現:
    - 某 chunk 的 agent fail → 標記 SKIPPED,繼續其他,最後 report 哪些 skip
    - synthesis 結果跟 row count 對不上 → 不要直接出 report,先 escalate 給主 orchestrator 重算
    - JSON schema 違反 → 該 row 標 INVALID,繼續其他
    - 整體執行超過 5 分鐘 → 自動 abort,出階段性 report
    
    最後 final report 要明確標示哪些 chunk 是「完整跑完」、哪些是「skipped」、哪些是「fail-and-retried」。

    對 AI 協作的特別意義:AI 預設 fail-silently — 它會生「看起來合理」的內容掩蓋失敗。傳統軟工 fail-fast 是「raise exception 停下來」,AI 場景的 fail-fast 是「標註 INVALID / SKIPPED 而不是瞎掰」。沒設計這條,AI 會「完整交付」一份其實內部有 hole 的報告,你看不出來。本次 workflow synthesis 算 83 是僥倖被主 orchestrator 抓到,如果主 orchestrator 也沒抓,我們就拿錯誤數字寫文章了。

    #15 版本控制紀律 (Version Control Discipline)

    定義:任何重要 artifact 進 git,commit message 寫清楚 why,branch 策略對應 workflow。
    經典出處:Git 整個工具、Conventional Commits 規範、Trunk-based / GitFlow / GitHub Flow 各家 branch 策略、Linus 的 git 設計初衷。

    本次對話做了沒:❌ 沒做。本次產出全部沒進 git。

    分析:這次產出了 4 件 artifact:

    • ~/.claude/projects/-home-tom/memory/brain/dynamic-workflows.md(新建)
    • ~/.claude/projects/-home-tom/memory/brain/adaptive-agent-team-staffing.md(編輯)
    • ~/.claude/projects/-home-tom/memory/MEMORY.md(編輯)
    • WordPress 文章兩篇

    前三個位置實際是 ~/.claude/projects/-home-tom/ — 你有可能沒把它放在 git 控管下,意思是:

    • brain 編輯沒 commit history,半年後想知道「dynamic-workflows.md 是什麼時候加的、為什麼加」沒記錄
    • 如果 brain 不小心被改錯了(例如未來某個 conversation AI 寫壞了),無法 rollback
    • 跨機器同步只能靠 rsync / cloud sync,沒 conflict resolution

    該怎麼補:

    1. cd ~/.claude/projects/-home-tom && git init(如果還沒)
    2. 新 brain 或重大編輯後 commit:git add brain/ MEMORY.md && git commit -m "feat(brain): dynamic-workflows from 2026-05-29 Opus 4.8 test"
    3. WordPress 文章 export markdown 進專屬 repo,或用 wp-cli 串自動 backup
    4. workflow script 改 #11 補救時順便 commit 進 dotfiles repo

    對 AI 協作的特別意義:AI 跨 conversation 是 stateless,brain file 是它的「外部記憶」。外部記憶的版本控管比 code 的還重要,因為你不會看到自己過去 conversation 改了哪些 brain,只有 git diff 告訴你。本次對話我改了 3 個 brain 檔,如果你沒 git 控管,3 個月後你不會記得這幾條條目是 5/29 對話加的還是更早。傳統 git 是 code 的時間機,AI 場景是「我跟 AI 集體記憶的時間機」。

    15 條全表:做了沒 × leverage

    # 紀律 類別 本次 Leverage(高→低)
    1驗證紀律核心驗證★★★★★ 沒守等於沒救
    2正交分解設計分解★★★★★ AI 回答品質直接相關
    3真實基準過程紀律★★★★★ 結論可信度核心
    4文檔作為輸入知識持久化★★★★★ AI 時代特有的紀律
    5Focused review過程紀律★★★★ AI 對 mixed feedback 表現差
    6並行執行過程紀律★★★ 規模大才顯效
    7回顧核心驗證★★★★ 跟 #4 配對 leverage 最大
    8規格先於實作設計分解★★★★ 直接決定 AI 輸出結構
    9權衡分析設計分解★★★★ 抗 AI 默認 yes 傾向
    10預設驗收標準過程紀律🟡★★★★ 該補,沒守會默認 plausible-looking
    11可重跑知識持久化★★★ 任務一次性可省,系統性任務必須
    12預算控管過程紀律★★★ 小任務可省,長 background 任務必須
    13根因分析核心驗證🟡★★★★ 主要靠 prompt 設計
    14錯誤處理哲學設計分解★★★★ AI 預設 fail-silently 必補
    15版本控制知識持久化★★★ brain 控管比 code 控管更重要

    結論:跟 AI 寫程式需要哪些軟工?

    不是新的軟工,是舊軟工套到 AI 4 個特性上

    15 條全部都不是「AI 時代發明的」 — 每條都能在 1990 年代的軟工教材找到根。差別在 4 個 AI 特性對這些紀律的需求強度不同:

    AI 特性 被放大需求的紀律
    訓練資料 cutoff#1 驗證紀律(逼 AI 查資料,不要憑記憶)
    Stateless / 無 conversation 記憶#4 文檔作為輸入、#15 版本控制(外部記憶持久化)
    非 deterministic 輸出#11 可重跑、#10 預設驗收標準、#14 錯誤處理(處理隨機性)
    高並發 + 高速#6 並行、#12 預算控管(token 倍率風險)

    個人 leverage 排序(5 強)

    如果你是這條光譜中段的人(寫過 5 年以上 code,剛開始系統性用 AI 寫 code),最該優先吸收這 5 條:

    1. #1 驗證紀律 — 沒守這條,後面 14 條都白學。AI 講什麼都不能信,grep / curl / test 重驗
    2. #2 正交分解 — 拆軸線問,不要 bundled question。直接決定 AI 回答品質
    3. #4 文檔作為輸入 — 把學到的寫成下個 conversation 可讀的格式。沒這條,每次 onboarding
    4. #3 真實基準 — Toy example 騙人。用 production codebase 評估工具
    5. #5 Focused review — 給 AI feedback 一次只挑一條軸線

    沒做的 5 條,該怎麼補

    本次對話沒做的紀律對應 5 條 action(從便宜到貴):

    1. #15 版本控制(5 分鐘):cd ~/.claude/projects/-home-tom && git init && git add . && git commit -m "snapshot" 一次性處理
    2. #11 可重跑(2 分鐘):把 workflow script 從 session 暫存 cp 到 brain 或 dotfiles repo 歸檔
    3. #10 驗收標準(每任務多寫 3 行 prompt):任務 prompt 開頭加「驗收標準:N 個項目,M% 正確率,通不過要告訴我」
    4. #14 錯誤處理(每 workflow 多寫 5 行):script 內加 fail-fast / skip / retry 分支
    5. #12 預算控管(系統性設定):Claude Code admin page 設 hard daily limit 或寫個 hook 跑前先估

    真正的 meta-insight

    本文 15 條展開後最反直覺的觀察:跟 AI 寫程式需要的軟工基礎,大部分不是 code-level 的,是 process-level + protocol-level 的。傳統軟工新人學的順序是「先學語言 → 再學 design pattern → 最後學 process」,跟 AI 寫程式得反過來:先學 process discipline(怎麼下指令、怎麼驗證、怎麼回顧),最後才是 code-level technique

    因為跟 AI 寫程式,code 是 AI 生的,你扮演的是 reviewer + verifier + spec writer 三個角色。這三個角色傳統上叫 PM / QA / Tech Lead — 都是 senior eng 的活。所以「跟 AI 寫程式比較簡單」這句話完全反了 — 它把senior eng 的工作 commoditize 到每個用 AI 的人身上,reviewer 的紀律從「資深工程師的特權」變成「每個 prompt 作者的基本技能」。

    這就是為什麼那麼多人「用 AI 寫了一堆 code 但跑不起來」 — 不是 AI 不行,是沒人替他們做 reviewer / verifier / spec writer 那三層活。本文 15 條的本質就是把這三層活的紀律寫下來。

    跟我之前文章的關聯

  • Claude Code Dynamic Workflows 實測:Opus 4.8 + 11 Haiku 平行 audit 109 個 resolver

    重點摘要

    • Anthropic 在 2026-05-28 釋出 Claude Opus 4.8,帶來 Dynamic Workflows(背景跑 JS script orchestrate 數百 subagent)、Effort Control(low/medium/high/xhigh/max/ultracode)、Messages API system entries 中段插入。
    • 實測:同題雙軌跑 Home123(Go + gqlgen 後端)的 109 個 resolver 函式 authz pattern audit,baseline (Opus 4.7 + 1 個 general-purpose agent) vs workflow (Opus 4.8 + 11 個 Haiku 4.5 worker)。
    • 最大發現:workflow runtime 自動把 worker model 派為 Haiku 4.5,主 orchestrator 維持 Opus 4.8 — 對應「想 → opus / 找 → haiku」分工 doctrine,以前要手寫 AGENTS.md 分配的事 runtime 替你做了。
    • Wall time 沒省(workflow runtime 132 秒比 baseline 236 秒快,但加上主 session synthesis 反而是 392 秒)。本次估算成本 workflow ~$6.1 是 baseline ~$0.72 的 ~8.5× — 主要花在 runtime cache write 固定成本,大規模任務攤平會降下來。
    • 收益不在省錢,在:JSON Schema 強制輸出契約、reproducibility(script 落地,以後 /<name> 一鍵重跑)、主 orchestrator 主動 cross-check 下游(實戰抓到 synthesis subagent 算錯總數 83 vs 真實 109)。

    一眼看完:Baseline vs Workflow

    整篇下面會逐項拆,先給你 5 秒讀完的版本。題目都是同一份 Home123 GraphQL 後端 109 個 resolver 函式的 authz pattern 分類。

    面向 Baseline Workflow
    啟動指令主 session 派一個 Agentclaude --model claude-opus-4-8 --effort high 後 prompt 內塞 workflow
    主模型Opus 4.7Opus 4.8
    Worker 數量1(general-purpose,可寫)11(Explore 型,強制 read-only)
    Worker 模型Opus 4.7(跟主一致)全 11 個 Haiku 4.5(runtime 自選)
    並發加速11 agents 加總 354s 實跑 132s = 2.7×
    主 session tool call24 (14 Bash + 10 Read)8 (5 Bash + 2 Read + 1 Workflow)
    輸出契約自由 markdownJSON Schema + enum 鎖死 4 值
    覆蓋109/109109/109
    總耗時3:56(236s)6:32 turn,workflow runtime 2:12
    抓到的 root cause1 個(CapsAny 提案)6 個(含 guard 5× 重複的真兇)
    結構級洞見沒做出read-side vs write-side 不對稱
    主動 cross-check 下游—(只有 1 agent)✅ 抓到 synthesis agent 算錯 83 vs 真實 109
    估算成本~$0.72~$6.10(約 8.5× baseline)
    可重跑script 落地,以後 /<name> 一鍵

    架構差異:一張流程圖

    讀者最常問的不是「快多少」,是「結構上到底差在哪」。把兩種模式畫成流程:

    Baseline                              Workflow
    ─────────                             ─────────
    User prompt                           User prompt
        │                                     │
        ▼                                     ▼
    ┌─────────────────┐                   ┌─────────────────┐
    │ Main Claude     │                   │ Main Claude     │
    │ (Opus 4.7)      │                   │ (Opus 4.8)      │
    │                 │                   │ 寫 JS script    │
    │ Agent tool      │                   └────────┬────────┘
    │   ↓ 派 1 agent  │                            │ Workflow tool
    └────────┬────────┘                            ▼
             │                              ┌──────────────────┐
             ▼                              │ Runtime          │
       ┌──────────────┐                     │ (背景執行 script) │
       │ 1× Opus 4.7  │                     └────────┬─────────┘
       │ general-     │                              │ fan-out
       │ purpose      │                              ▼
       │              │            ┌──────────────────────────────────┐
       │ ─ 24 tool ─  │            │ Phase 1: Classify (平行)         │
       │   call ─ 自由 │            │ ┌────┐┌────┐┌────┐ ... ┌────┐  │
       │   分類 +    │            │ │H4.5││H4.5││H4.5│      │H4.5│  │
       │   markdown  │            │ └────┘└────┘└────┘      └────┘  │
       └──────┬───────┘            │ 10 agents (schema 切 8 chunks +  │
              │                    │  visitor 1 + announcement 1)     │
              ▼                    └────────────┬─────────────────────┘
       markdown report                          │ JSON schema 驗證
                                                ▼
                                   ┌──────────────────────────┐
                                   │ Phase 2: Synthesize      │
                                   │ ┌────┐                    │
                                   │ │H4.5│ 1 agent           │
                                   │ └────┘                    │
                                   └────────────┬──────────────┘
                                                │
                                                ▼
                                   ┌──────────────────────────┐
                                   │ Main Claude (Opus 4.8)   │
                                   │ cross-check synthesis,   │
                                   │ 抓到 83 vs 109 算術錯誤  │
                                   │ 用 authoritative rows     │
                                   │ 重算 + 寫最終 report     │
                                   └────────────┬──────────────┘
                                                ▼
                                       final markdown report
                                       + JS script 落地

    關鍵差別不是 agent 數,是「主 Claude 不再親手做活,變成 orchestrator + verifier」。中間結果落在 script 變數,不灌進主 session context。

    背景:Opus 4.8 帶來什麼

    Anthropic 在 2026-05-28 同步發佈了 Claude Opus 4.8、Dynamic Workflows research preview、Effort Control、以及 Messages API 的中段 system entries 支援。發佈當天我看了官網內容,隔天 5/29 拿真實專案 Home123 跑了一輪雙軌對照,本文記錄完整數據與啟動 prompt。

    三個直接相關的能力更新:

    能力說明適用 plan
    Dynamic WorkflowsClaude 寫一支 JS script,runtime 背景跑,內含可數百個 read-only Explore subagent 平行作業所有付費(Pro 要先去 /config 開)
    Effort Control5 級:low / medium / high / xhigh / max,另有 ultracode(= xhigh + 自動 workflow orchestration)所有 plan
    Messages API system entries可在 messages array 中段插入 system entry,更新指令但不破 prompt cache、不需要假裝 user turnAPI 直連

    不是所有 model 都吃所有 effort 等級。實測 claude --effort foo 會回:

    error: option '--effort <level>' argument 'foo' is invalid.
    It must be one of: low, medium, high, xhigh, max

    官方支援表(來自 code.claude.com/docs/en/model-config):

    Model支援 effort 等級預設
    Opus 4.8, Opus 4.7low, medium, high, xhigh, max4.8 → high / 4.7 → xhigh
    Opus 4.6, Sonnet 4.6low, medium, high, max(沒 xhigh)high
    其他不支援 effort

    常見誤解:Sonnet 也能 xhigh 嗎?不行。Sonnet 4.6 只到 high,你硬塞 xhigh 會自動降到 high 不報錯但也少一級。ultracode 在 Sonnet 連菜單都不出現。

    對照實驗設計:為什麼挑 Home123 authz audit

    Workflow 適合的題目有 4 個必要條件:

    1. 可平行化 — 任務天然能切成 N 個獨立 chunk
    2. 可被 JSON Schema 約束 — 輸出結構穩定、enum 有限
    3. 有 ground truth — 否則 11 個 agent 跑完你也不知道對不對
    4. Read-only 為佳 — Explore type agent 不會誤改檔

    挑的題目:掃描 Home123 backend GraphQL 的 3 個 resolver 檔,把 109 個 resolver function 分類成 USES_PRELUDE / LEGIT_PUBLIC / HAND_ROLLED / UNKNOWN。

    Home123 是 multi-tenant SaaS,我自己寫了一個 authzPrelude centralised authn+cap+scope+audit 序列,規範每個 protected resolver 進 withTx 後第一段要 call。但程式碼累積過程中,有些 resolver 為了 cap-OR 之類 prelude 還不支援的情境 hand-roll 了授權邏輯。這次審計就是要逐一抓出來。

    符合條件為什麼這題符合
    可平行化109 個 function 各自獨立,每個分類不依賴其他結果
    可被 schema 約束class enum 只有 4 值;每筆 row 必填 file / func / line / class / evidence
    有 ground truthgrep -c authzPrelude backend/graph/*.resolvers.go 給出客觀基準
    Read-only純審計、不改檔

    啟動 prompt:兩邊放在一起看

    兩邊我都跑了。下面先給差異速覽,再給雙邊完整 prompt 對照。

    差異速覽

    面向 Baseline Workflow
    session 啟動任何 session 都可,呼叫 Agent toolclaude --model claude-opus-4-8 --effort high
    觸發機制主動派 1 個 Agentprompt 內含 workflow 關鍵字 → Claude Code 反白 → approval prompt
    Prompt 句子數~20 行(任務說明)~24 行(任務說明 + 第一個字「workflow」)
    關鍵差異字直述命令式 — 「做這個 audit」第一個字加 「跑一個 workflow,」 — 觸發 runtime 寫 script
    事前需要無(general-purpose 預設可用)Claude Code ≥ 2.1.154,Pro 要先 /config
    跑前是否確認不需要,直接跑approval prompt 必須選 [1] Yes;第一次強烈建議按 [3] View raw script

    左:Baseline prompt(逐字)

    你在 /home/tom/Desktop/home123_new 做一次 read-only authz pattern audit。
    禁止修改任何檔案。
    
    審計三個 resolver 檔的每一個 resolver function:
    - backend/graph/schema.resolvers.go (~80 funcs)
    - backend/graph/visitor.resolvers.go (~15 funcs)
    - backend/graph/announcement.resolvers.go (~16 funcs)
    
    分類規則:
    1. USES_PRELUDE — body 第一段 call authzPrelude(...)
    2. LEGIT_PUBLIC — 真正不需要 auth 的 (Login / RefreshAccessToken 等)
    3. HAND_ROLLED — 沒 call authzPrelude 但自己寫 cap/scope/role/audit 檢查
    4. UNKNOWN — 你無法判定
    
    輸出:markdown 表 | file | func | line | class | evidence |,
    所有 function 一行不能少。
    
    最後加 ## Summary:每 class 數量、HAND_ROLLED 跟 UNKNOWN 清單、可疑模式。
    
    用 Bash grep / Read 自己抓,不要憑記憶或猜。

    右:Workflow prompt(逐字)

    新 session 啟動:

    cd /home/tom/Desktop/home123_new
    claude --model claude-opus-4-8 --effort high

    進去後丟這個 prompt(留意第一個字是 「在這個 repo 跑一個 workflow,這個關鍵字就是觸發 runtime 的開關):

    在這個 repo 跑一個 workflow,做 read-only authz pattern audit。不准改任何檔案。
    
    審計三個 resolver 檔的「每一個」resolver function:
    - backend/graph/schema.resolvers.go (約 78 funcs)
    - backend/graph/visitor.resolvers.go (約 15 funcs)
    - backend/graph/announcement.resolvers.go (約 16 funcs)
    
    每個 function 分類成 4 種之一:
    1. USES_PRELUDE — body 第一段 call authzPrelude,或 1-line delegate 到呼叫
       authzPrelude 的 helper
    2. LEGIT_PUBLIC — 真公開查詢 (Login / RefreshAccessToken / Healthcheck /
       ApplicationStatus 等),依據 schema directive / 註解 / 函式意圖判定
    3. HAND_ROLLED — 沒 call authzPrelude 但自己寫 cap/scope/role/audit
       (CheckCap / hasRole / rbac.RequireCapability / 手動讀 ctx 判 user)
    4. UNKNOWN — 邏輯太繞或無法判定
    
    輸出格式:markdown 表 | file | func | line | class | evidence |,
    每個 function 一行不能少。
    
    最後加 ## Summary:每 class 數量、HAND_ROLLED 跟 UNKNOWN 名單、可疑模式
    (eg. asymmetry / 同一 cap 兩種寫法 / 整個檔的傾向)。
    
    建議擴展 prelude 才能解的問題也標出來 (eg. CapsAny 多 cap OR-chain)。

    送出後 Claude Code 會問你

    Workflow plan:
      Phase 1: Classify — one Explore agent per function-range chunk
      Phase 2: Synthesize — cross-file pattern analysis + suspicious findings
    
    [1] Yes, run it
    [2] Yes, and don't ask again for <name> in <path>
    [3] View raw script   ← 第一次強烈建議按
    [4] No

    第一次按 View raw script 看 Claude 寫出什麼 JS,看完按 ESC 回去再按 Yes。這是 workflow 教育核心,跟 subagent 的 black box 是完全不同的體驗 — 你看得到 orchestration 的具體 code。

    Claude 寫的 workflow script 長啥樣

    從 session jsonl 撈出來的真實 script 開頭片段:

    export const meta = {
      name: 'authz-pattern-audit',
      phases: [
        { title: 'Classify',   detail: 'one Explore agent per function-range chunk' },
        { title: 'Synthesize', detail: 'cross-file pattern analysis' },
      ],
    }
    
    // JSON Schema 強制每筆 row 必填 5 欄
    const ROW_SCHEMA = {
      type: 'object',
      required: ['rows'],
      properties: {
        rows: {
          type: 'array',
          items: {
            type: 'object',
            required: ['file', 'func', 'line', 'class', 'evidence'],
            properties: {
              file: { type: 'string' },
              func: { type: 'string' },
              line: { type: 'integer' },
              class: {
                type: 'string',
                enum: ['USES_PRELUDE','LEGIT_PUBLIC','HAND_ROLLED','UNKNOWN']
              },
              evidence: { type: 'string' },
            },
          },
        },
      },
    }
    
    const PRELUDE_REF = `
    REFERENCE — what each class means in THIS codebase (backend/graph/authz.go):
    authzPrelude(ctx, tx, claims, PreludeOptions{Cap:..., Scope:..., ...})
    is the centralised authn+cap+scope+audit sequence...
    CLASSIFICATION RULES (pick exactly one per function):
    ...
    `
    
    // schema.resolvers.go 切 8 chunks,各 1 個 Explore agent;visitor / announcement 各 1
    // fanOut(...) → 10 個 read-only Explore agents 平行
    // 然後 1 個 synthesis Explore agent 做 cross-file 分析
    
    return { rows, summary }

    注意三件事:

    • JSON Schema 鎖死 enum:subagent 不可能跑出 "class": "MAYBE" 這種,runtime 直接退回。Baseline 自由 markdown 沒有這層保護。
    • agentType: 'Explore' 是 script 層硬性:11 個 agent 完全不能 Edit/Write,不是靠 prompt 講「不准改」這種 soft 約束。
    • chunk 切法寫死在 script:每個 agent context 不汙染,不會記錯行號。

    跑起來後的真實 process 狀態

    從本機 process tree + session jsonl 即時觀察到的(workflow 跑到 110 秒時):

    $ ps -o pid,pcpu,pmem,vsz,rss,etime,cmd -p 1676911
        PID %CPU %MEM    VSZ   RSS     ELAPSED CMD
    1676911 26.9  1.0 73786132 337864    01:49 claude --model claude-opus-4-8 --effort high
    
    $ python3 - << 'PY'
    import json
    events = {}; tools = {}
    with open('<session>.jsonl') as f:
        for line in f:
            d = json.loads(line); ...
    print(events, tools)
    PY
    # 結果:
    # {'assistant': 14, 'system': 2, 'user': 6, ...}
    # Tools: {'Bash': 3, 'Read': 1, 'Workflow': 1}

    主 session 只花 5 個 tool call(3 Bash + 1 Read 探勘 + 1 Workflow 派出去)就把工作全部 delegate 出去,自己等 callback。

    Workflow runtime 把 11 個 agent 的執行軌跡寫到磁碟,結構是這樣的:

    ~/.claude/projects/<project>/<session>/
    ├── workflows/
    │   ├── scripts/
    │   │   └── authz-pattern-audit-wf_d545fc61-597.js   ← Claude 寫的 script
    │   └── wf_d545fc61-597.json                         ← run state
    └── subagents/workflows/wf_d545fc61-597/
        ├── journal.jsonl                                ← 11 個 agent 起跑/完成軌跡
        ├── agent-a1b66c368221dfcbc.jsonl                ← 每個 agent 的完整 transcript
        ├── agent-a1b66c368221dfcbc.meta.json
        ├── ...(共 11 對 jsonl + meta)
        └── agent-a24f70cfc4a9cea4c.jsonl                ← synthesis agent

    從 journal.jsonl 可以看到並發狀況:7 個 agent 同時 started,然後 result/start 交錯。實測 Tom 8-core 機器同時 active ~7 個,沒撞到 16 上限。

    最大發現:runtime 自動把 worker 派為 Haiku 4.5

    從每個 agent 的 jsonl 撈 model 跟 token:

    aid          model         dur(s)   in     out     cache_r    cache_w
    a1b66c3682   haiku-4-5     36.6     68     2913    704739     86473
    a24f70cfc4   haiku-4-5     65.3     126    6780    831993     139390
    a44126f699   haiku-4-5     46.0     113    2750    780310     99018
    a5b0952489   haiku-4-5     18.1     36     2106    172988     79402
    a677c4aa85   haiku-4-5     15.6     41     1955    164250     84687
    a98dc4ecbc   haiku-4-5     18.3     26     2189    132348     57398
    aa0358d7b4   haiku-4-5     39.4     132    3935    803238     66657
    aac3435e5b   haiku-4-5     22.4     77     2798    384636     174664
    aac426ca5b   haiku-4-5     24.5     41     2616    235382     64016
    ab4b713305   haiku-4-5     28.6     120    2618    480910     158476
    abe7fdedda   haiku-4-5     39.8     88     3173    896956     110064

    11 個 worker 全部是 Haiku 4.5。我啟動用 --model claude-opus-4-8,但 workflow runtime 自選把 worker 派去 Haiku。

    這對應到我 MEMORY 裡寫的「想 → opus / 做 → sonnet / 找 → haiku」模型分層 doctrine。Runtime 替我做了:

    • 主 orchestrator(寫 script + synthesis)= Opus → 「想」
    • 11 個 worker(bulk classification / grep / read)= Haiku → 「找」
    • 沒 Sonnet 是因為這題沒「做」(read-only audit 沒寫入)

    意義:原本 plan 期手寫 AGENTS.md 分配模型的事,runtime 替你做了。這比文件公告任何一條新功能都重要 — adaptive staffing 從「未來方向」變成「實裝」。

    對照結果:數字攤開

    面向 Baseline (Opus 4.7 + 1 agent) Workflow (Opus 4.8 + 11 Haiku)
    總耗時3:56 (236s)6:32 turn / 2:12 workflow runtime
    真實平行加速11 agents 累加 354s,實跑 132s → 2.7×
    主 session tool call24 (14 Bash + 10 Read)8 (5 Bash + 2 Read + 1 Workflow)
    Subagent 數1(general-purpose,可寫)11(Explore,read-only)
    Subagent 模型Opus 4.7全 11 個 Haiku 4.5
    覆蓋109/109109/109
    總 token(估)~103K~480K(主 315K + workers 165K)
    Cache read6.95M(瘋狂重用)
    估算成本~$0.72~$6.10(約 8.5× baseline)

    分類結果差異

    Class Baseline Workflow 差異原因
    USES_PRELUDE8478Workflow 把「prelude + 後續 manual orchestration」歸到 hand_rolled hybrid,標準更嚴
    LEGIT_PUBLIC1317Workflow 把 Logout / Me / Community 視為 public(judgment call)
    HAND_ROLLED1012Workflow 多抓出 5 個 hybrid hand-roll(prelude 加 manual 後處理)
    UNKNOWN22同(兩個 *AuditUnacked,純靠 RLS)

    質的差異:同題下 baseline vs workflow 各看到什麼

    數字一樣是 109/109 覆蓋,但兩邊對同一個 codebase 「看見」的東西不一樣。下面 4 個維度,左 baseline 右 workflow 並列。

    差異 #1:對下游結果是否複查

    Baseline 表現 Workflow 表現
    只有 1 個 agent,自己跑自己算,沒有下游可疑。Report 怎麼算就怎麼算,讀者要自己 grep 才能驗。 Synthesis subagent 自己算出 total: 83(漏算 26 個)。主 orchestrator (Opus 4.8) 拒絕信任,自己重算 109,公開記下:

    “The audit is complete, but the synthesis agent’s counts look off (it reported total=83, but I dispatched coverage for 109 functions). Let me verify completeness from the authoritative rows array myself.”

    這就是 4.8 公告吹的「4× less likely to allow flaws in code it wrote to pass unremarked」實戰演示。

    差異 #2:對 root cause 的挖掘深度

    Baseline 的觀察 Workflow 的觀察
    cap-OR 是 4 個 hand-roll 不 migrate 的主因」。

    停在第一層觀察。沒挖到更底層的結構問題。
    Households / Parcels / ParcelsPage / CommunityVisitors / VisitorAuditLog 同一段 SQL 抄 5 次。真兇是 AuthzDecision.IsCommunityWide 排除了 guard role,迫使每個把 guard 當 community-wide 的 resolver 都得自己重 probe。」

    挖到第二層結構根因。能做出來是因為 synthesis 是專屬 agent、有獨立 context,沒被 109 函式的細節塞滿。

    差異 #3:可落地的 fix 提案數

    Baseline 給的提案 Workflow 給的提案
    1 個:擴展 prelude 支援 CapsAny 多 cap OR-chain 6 個 可落地的 prelude extension:
    1. CapsAny []string — 解 4 個 hand-roll
    2. 承認 guard 是 broad role(RoleListBroad bool)— 解 5× 重複的 SQL probe
    3. ScopeDowngradeOnRole map[role]AuthzScope — 解 2 個 visitor scope 降級
    4. Cap + CapOwn + OwnershipIDCol — 解 2 個 announcement ownership
    5. authzPreludeAny([]PreludeOptions) 多路徑 helper — 解 2 個 multi-path
    6. ScopeRLSOnly enum(顯式宣告 RLS-only)— 解 2 個 UNKNOWN
    最高 leverage:#1 + #2 兩個 API 微調可幹掉 12 個 hand-roll 中的 7 個。

    差異 #4:結構級觀察

    Baseline 的結論深度 Workflow 的結論深度
    逐個 function 分類完,給 Summary 數字。

    沒有跨函式結構洞見。讀者拿到表得自己再看一輪才能發現「全部 hand-roll 都在 query 那邊」。
    「所有 7 個純 hand-roll + 2 個 UNKNOWN 集中在 schema.resolvers.go 的 query tail(line 6210-7130),mutation 100% 走 prelude。」

    結論:「read-side authz is where the rot is.」

    這級結構洞見 baseline 沒做出來,因為它的 agent 同時在處理逐函式分類跟跨函式觀察兩件事,context 被佔滿。

    4 個差異的共同根因

    Workflow 4 個維度都贏,不是模型差,而是架構差:

    • Synthesis 是專屬 phase 跟專屬 agent,不跟逐函式分類搶 context
    • 主 orchestrator 不直接做活,有餘力去 cross-check 下游
    • JSON Schema 鎖死 enum,讓 synthesis 的算術錯誤被直接 vs 證據對照,容易被抓
    • 每個 Classify agent 只看自己那塊 chunk,context 不被 109 函式整體噪音蓋掉

    換句話說:把 baseline 的單一 Opus 4.7 agent 升級成 Opus 4.8 也救不了 — 缺的是 architectural separation of concerns,不是模型聰明度。

    成本拆解:雙邊對稱對照

    用公開 pricing 算(Opus 4.7 / 4.8 同價:$5/M input、$25/M output、~$0.50/M cache_read、$6.25/M cache_write;Haiku 4.5:$1/M input、$5/M output、~$0.10/M cache_read、$1.25/M cache_write)。

    Baseline 拆解

    誠實先講:baseline 走 Agent tool,Anthropic 只回傳 total_tokens: 103,078,沒給 input/output 拆解。所以我只能上下界估算。

    情境 假設拆解 成本
    下界(全是 input)103K in / 0 out$0.52
    合理估(read-heavy audit,輸出 ~10K markdown)93K in / 10K out~$0.72
    上界(全是 output,不現實)0 in / 103K out$2.58

    Workflow 拆解

    Workflow runtime 把每個 agent 跟主 session 的 token 都寫到 jsonl,可以精算。

    項目 Input Output Cache read Cache write 成本
    主 session (Opus 4.8)31,68659,5061,361,289262,528~$3.97
    11 workers (Haiku 4.5)~870~33,833~5,587,750~1,120,245~$2.13
    Workflow 合計~32,556~93,339~6,949,039~1,382,773~$6.10

    並排比較與成本比

    指標 Baseline Workflow 倍率
    總 token(可量到的)~103K~8.46M(主 + workers,含 cache)~82×
    非 cache token~103K~125K(主 + workers,純 in+out)~1.2×
    估算成本~$0.72~$6.10~8.5×

    校正一下我之前隨口說的「2-3× cost」 — 認真算下來這次 workflow 是 baseline 的 ~8.5×。會這麼高的主因是 workflow runtime 海量 cache write(主 session prompt 加上 11 個 worker 各自的 system+task prompt 都得 cache),這在小規模任務上吃掉的固定成本不成比例。

    更大規模(例如 1000 個 function、5 個檔案、要跑多輪 phase 的 codebase-scale migration)倍率會掉下來,因為 cache 攤平。本次 109 函式可能還沒到 workflow 的 sweet spot。

    收益不在錢,在結構性保證:JSON Schema 鎖死輸出契約、Explore agent 鎖死 read-only、script 落地 reproducible、主 orchestrator 主動 cross-check 下游算術錯誤、結構級洞見的獨立 synthesis pass。如果這次的 audit 結果直接讓你修對 5 個 bug,$5 的價差完全划得來;如果只是研究性掃描、要常常重跑,$0.72 的 baseline 更合理。

    何時用、何時不用

    情境 該用
    平行 audit / sweep / 分類(N 個獨立目標)Workflow
    結果可被 JSON Schema 約束Workflow
    有 ground truth 可驗(grep / 規則對照)Workflow
    Codebase migration 數百到千行Workflow
    30 行小改、互動式 debug、需要中途決策Subagent / 直接對話
    設計 / 重構 / 探索 spike直接對話
    序列邏輯(A 結果決定 B 做啥)Subagent
    預算敏感、有 deadlineSubagent

    硬性限制(踩過的)

    限制數字影響
    並發 agent最多 16(8-core 機器實測 ~7 並發)大 chunk 設計,別追求一函式一 agent
    單 run 累計 agent硬上限 1000大型 migration 拆多個 workflow
    中途要用戶輸入不行多階段簽核拆多 workflow,中間落地
    script 直接 fs / shell不行透過 agent 做,script 純 orchestrate
    Subagent permission mode永遠 acceptEdits想 read-only 一定用 agentType: 'Explore'

    把 workflow 存成可重用 slash command

    跑完滿意,在 workflow session 內:

    /workflows               # 列出 run
    ↑↓ 選那個 run → Enter   # 進入進度檢視
    s                        # 存成 slash command
      → 選 .claude/workflows/<name>.js (repo 共享)
      → 或 ~/.claude/workflows/<name>.js (個人跨專案)

    之後 /<name> 像 slash command 一樣用。Project workflow 優先級高於 personal 同名。

    想 resume failed run:

    Workflow({
      scriptPath: "<session>/workflows/scripts/<name>-<runId>.js",
      resumeFromRunId: "wf_xxx"
    })
    # completed agents 回傳 cached result,只重跑失敗的

    關掉 workflow

    範圍怎麼關
    自己/config 切 Dynamic workflows / settings.json 設 "disableWorkflows": true / 環境變數 CLAUDE_CODE_DISABLE_WORKFLOWS=1
    整組織managed settings "disableWorkflows": true 或 Claude Code admin page 切

    關掉後:built-in /deep-research 不能用、workflow 關鍵字不觸發、ultracode/effort 菜單消失。

    對日常工作的影響

    我自己接下來打算用 workflow 跑的場景:

    • Home123 RLS coverage sweep — 每張 table 確認 CRUD 4 個 RLS policy 都齊
    • Home123 invariant coverage — 170 個 INV 是否在 backlog 有對應 test sketch
    • iDempiere @RestResource endpoint 巡檢 — endpoint × test × OData filter doc 三角檢
    • SimpleEC OMS Kafka 事件覆蓋矩陣 — topic × producer × consumer 對應

    不會用 workflow 的場景:走 decision-server 的任何題(workflow 中途不能停下來問人)、30 行小修、新功能 spike(reproducibility 沒價值)。

    跟我之前文章的關聯

    結論:結構性保證,不是省錢工具

    Dynamic Workflows 不是「Claude 變強了所以更便宜」,而是「Claude 把 plan 期才做的 staffing 決策搬到 runtime,並用 JSON Schema + Explore 型別把輸出契約寫進 code 而非 prompt」。對任務符合 4 條件(可平行、可 schema、有 ground truth、read-only)的場景,workflow 的結構性保證值得 2-3× cost。不符合的場景繼續用傳統 subagent 跟直接對話,別因為「workflow 看起來酷」default 用。

    真正令人意外的不是任何單一功能,是「runtime 自動派 Haiku 4.5 給 worker、保留 Opus 4.8 給 orchestrator」這件事連文件都沒重點說。它把以往要寫進 AGENTS.md 的「想/做/找」三層分工,從文件變成系統行為。下一輪 model release(Mythos Preview 已預告)會繼續推進這條軸線:組織 prompt 從手寫變 runtime 推導。

  • Claude 4.7 Memory 與 Agent Team 實戰:自建 Brain 系統的真正價值

    重點摘要

    • Claude 4.7 的 memory 改進本質是「檔案使用得更好」,不是新增神奇的跨 session 記憶機制 — session 之間仍然完全隔離,靠 MEMORY.md 等檔案橋接。
    • 自建 Brain 系統 = 精煉版 cross-session memory:機制相同(檔案 + CLAUDE.md 宣告載入),差別在手動 curate、domain 分類、顯式載入,品質遠勝 auto-memory。
    • Named sub-agent 真正的價值在「單一任務多輪延續」,不是 Team A/B/C 那種多工並行 — 兩者是互補的兩個層次。
    • Bug 追查 = PUA 方法論 × Named agent 容器 × Brain 更新,三層缺一不可,且要對「無法中斷的頻道(如 Bot)」具備韌性。
    • 模型版本升級 ≠ 知識管理升級:Brain 系統是 model-agnostic 設計,換任何 LLM 都能搬過去。

    Anthropic 在 2026 年 4 月發布的 Claude Opus 4.7 在 memory 和 Agent Team 兩塊都有顯著改進。但這些「改進」對已經自建知識架構的開發者來說,究竟是關鍵升級還是錦上添花?本文整理一天的深度討論,對比 Claude 原生機制和自建 Brain 系統,並落地一套可跨機器攜帶的 bug 追查框架。

    Part 1:Memory 系統 — 4.7 改了什麼,對我有什麼用

    Claude 4.7 的三個 memory 改進

    Claude Opus 4.7 在 memory 方面的改進可以拆成三個層次:

    1. 檔案式 memory 變「一等公民」:4.7 特別訓練用檔案系統當 memory(scratchpad、notes、structured store),能主動寫筆記且下次對話時知道去讀筆記。
    2. Cross-session 穩定性提升:跨多 session、多小時的工作流程一致性更好,模型會依 brain 和 memory 的指引從上次停下的地方接續。
    3. 1M context 無長 context 溢價:原生百萬 token context window,不另收費。以前 200K+ 要 /compact 的場景現在一口氣吃完。

    Cross-session memory 的真相:沒有魔法,只有檔案

    很多人以為 Claude 4.7 的 cross-session memory 是某種「核心系統」幫你串起過去對話。真相是:session 之間仍然完全隔離,模型本身沒有跨 session 的任何 state。所謂 cross-session,是 Claude Code 在新 session 開啟時自動注入:

    • CLAUDE.md(你寫的指令)
    • MEMORY.md 和 topic files(auto-memory 累積的筆記)
    • 過往 session summary(Claude Code 自動寫的摘要檔)

    這些全是檔案,不是隱藏的 cloud memory。4.7 改進的不是機制,而是對這套檔案機制的使用熟練度:知道什麼該寫、該去哪讀、讀到後如何套用。

    自建 Brain 系統 vs Claude 原生 auto-memory

    如果你已經有自建的 Brain 系統(跨專案的技術 domain 知識庫),對比 Claude 原生 auto-memory 會發現:本質是相同機制,差別在淬煉程度

    面向 Claude 原生 auto-memory 自建 Brain 系統
    範圍 單專案(綁 cwd) 跨專案(按技術 domain 分類)
    載入時機 Claude Code 自動注入 CLAUDE.md 宣告 Domain Brain: 主動載入
    curation 模型自動(容易塞流水帳) 手動規則過濾(Why / How to apply 格式)
    外部知識 僅記錄當前對話 支援 [source: external] 納入社群/文章的坑
    配套 memory 單打獨鬥 Brain + Skill 配對(坑 vs 對的做法)

    4.7 對自建 Brain 的實際收益

    對已經有成熟 Brain 系統的開發者,Claude 4.7 的 memory 改進主要體現在兩個地方:

    • Context 吞更多(70% 的價值):1M context 可以同時載入所有相關 brain + CLAUDE.md + 當前 code,不再被切斷。多個 brain 同時載入 5000+ 行也不爆。
    • 維護判斷力(30% 的價值):叫 Claude 整理 memory 時,4.7 會主動去讀 brain 檢查重複、按規則格式寫,而不是無腦 append。4.6 可能直接塞、不去重。
    • 自動 cross-session 對自建系統無感:已經有 Brain + CLAUDE.md 宣告機制的用戶根本不依賴 auto cross-session,品質比自動版高。

    關鍵洞察:模型版本升級 ≠ 知識管理升級。Anthropic 再怎麼升級內建 memory,都在解決「模型如何維護筆記」。但「什麼知識該存、怎麼結構化、跨專案怎麼轉移」是架構設計問題,不是模型能力問題。

    Part 2:Agent Team — Named sub-agent 真正解決什麼

    4.7 的四個 Agent Team 改進

    • Named sub-agents:spawn 時給名字,後續用 SendMessage({to: name}) 續接,不用重跑 context
    • Permission 繼承修正:user-level permissions 現在會正確傳給 teammate,不再每個 teammate 都跳一堆授權 prompt
    • 個別 teammate 可調 mode:spawn 後可以用 Shift+Tab 單獨切換某個 teammate 的 permission mode
    • /team-onboarding:自動分析使用歷史產生 ONBOARDING.md,幫新隊友快速上手

    前置條件:要啟用 CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1,否則 SendMessage 工具根本不存在。

    Named sub-agent 和 Team A/B/C 的差異

    很多人以為 named sub-agent 是在取代自組 Team 的做法,其實兩者是不同層次的機制,互補而非競爭

    面向 Team A/B/C(宏觀) Named sub-agent(微觀)
    解決什麼 多工平行 單工延續
    邊界 不同 task 之間 同 team 內部 agent 之間
    Context 燒法 每個 team 獨立燒一份 同 agent 只燒一次,後續增量
    適用場景 早上開 3 件不相干的事 追一條長 bug / 深入一個模組

    最佳組合是兩者混用:宏觀 Team 隔離不同主題,微觀 named agent 讓每個 teammate 有連續記憶。等於開三家公司並行做不同案子,每家公司裡的同一個員工連續給你服務,不是每次都新人上場。

    已知限制:teammate 之間不能互喊

    目前 Claude Code 有個已知 bug(GitHub issue #48160):subagent 本身不能 originate SendMessage。意思是 teammate A 想主動找 teammate B 協作做不到,所有通訊必須經過 team lead 路由,變成星形拓撲(hub-and-spoke)而非 mesh。

    另外 delegate mode 有個連帶效應:lead 切到 delegate mode 後,它的權限限制會傳給 teammate,導致 teammate 也不能讀檔、跑命令,整個 team 卡住。解法是 spawn teammate 時明確放寬權限。

    Part 3:實戰落地 — Bug 追查框架

    為什麼開發和修正要用不同的 agent 拓撲

    對話中得到一個清晰的洞察:「開發」和「修正」性質不同,應該用不同的 agent 拓撲。

    Case 啟動策略
    開發(新 feature) Team A/B/C 並行,短 context agent,各管一塊
    修正(bug / fix) 單一 named agent + PUA,多輪深挖
    重構(無新功能) 單一 named agent,多檔追蹤 side effect

    認真追 bug 的 agent 應該有的樣子

    一個 bug 不是「修好就算了」。它有根本原因(root cause)、爆炸半徑(blast radius)、和教訓(lesson)。停在第一個看似合理的修補是 bug 改頭換面回來的最快路徑。認真的 bug-hunting agent 應該有三層結構:

    1. 方法論(如何思考):PUA 式修辭壓力 — 從不接受第一個假設、永遠挑戰自己的推理、窮盡所有替代方案。
    2. 延續性(如何記住):Named 長壽 agent 跨輪次攜帶 context,不要每輪重新 spawn 新 agent 失去歷史。
    3. 事後教訓(如何教未來):每個修好的 bug 都要更新 brain,否則知識死在這個專案。

    三層缺一不可:沒方法論 → 停在第一個合理原因、出 bandaid;沒延續性 → 每輪重講 context、走回原路;沒事後教訓 → 同一個 bug 六個月後在別專案又出現。

    頻道韌性:為什麼要假設「無法中斷」

    有些 channel(Bot wrapper、API-based tools、async chat)無法真正中斷正在跑的 turn,用戶的輸入只能排進下一輪。框架設計時要把這當前提:

    • 每個 hunter 步驟要快速 return 控制權,不要 chain 10 個 tool call
    • 長任務用 run_in_background: true 讓 lead 儘快 ready
    • 在自然 checkpoint 回報進度,讓用戶在下一輪調整方向
    • 把用戶輸入當戰略路線修正,不是即時操舵

    如果頻道可中斷(CLI)那是 bonus,不是前提。框架不該依賴可中斷性。

    Skill fallback:沒有 PUA 也要能跑

    如果你在多台機器工作,可能某台有 pua:pua-debugging skill、某台沒有。框架要具備graceful degradation

    • Skill 優先:有 PUA / systematic-debugging skill 時,讓 hunter 載入 — skill 是維護中的、品質更新快
    • Brain 兜底:把 PUA 的核心精神內嵌到 brain 檔,確保沒 skill 的機器也能按內建規則運作

    內嵌的規則例如:「假設你的第一個假設是錯的,立刻列出兩個會產生同樣症狀的替代方案」、「修好了 trigger 下一個問題:為什麼以前會壞?」、「症狀只能『大致』解釋 = 沒被解釋,真正的 root cause 能解釋所有觀察,包含奇怪的那些」。這套 inline rule 讓 brain 成為 skill 缺席時的 safety net。

    結案 checklist

    一個 bug 追查只有在全部滿足以下條件才算完:

    • Bug 可重現(或明確記錄為何無法重現)
    • 根本原因以白話講清楚
    • 修復已驗證(重現原 failure → 套用 fix → 確認 failure 停止)
    • 爆炸半徑評估(同一個 root cause 還可能壞掉什麼?)
    • Brain 檔已更新(domain 對、[source: project] tag 已加)
    • Commit message 以 fix: 開頭,而且 brain 更新發生在開始下一個 task 之前

    為什麼這套設計 model-agnostic

    整套 Brain + Skill + Agent Team 設計最大的優勢是 model-agnostic:未來換 Opus 5.0、換 Gemini 3、換 GPT-5,只要該模型支援讀檔案 + 自訂 instruction 機制,整套可以直接搬過去。

    Auto cross-session memory 綁在 Claude Code 內建機制上,換 tool 就沒了。自建 Brain 是把架構設計前置到模型之外 — 模型只負責執行,架構你自己定。結果是:

    • 4.7 再強,沒 Brain 也是亂塞
    • 4.6 再弱,有 Brain 也能跑
    • 未來換任何 LLM,這套設計直接移植

    這其實很接近個人化 RAG 系統的雛形 — 只是沒用 vector DB,用人類可讀的 markdown + 手動路由。反而更可控、更可維護。

    結論

    Claude 4.7 的 memory 和 Agent Team 改進都是實實在在的能力提升,但對已經有自建知識架構的開發者來說,真正的護城河不在追著升級模型,而在建立 model-agnostic 的架構設計

    • Memory:用 Brain 做跨專案長期記憶、用 MEMORY.md 做專案短期筆記、用 Skill 存對的做法 — 三者分工明確。
    • Agent Team:宏觀 Team A/B/C 並行處理不同主題 + 微觀 Named sub-agent 保持任務延續性 — 互補使用最強。
    • Bug 追查:方法論(PUA)× 容器(Named agent)× 事後教訓(Brain 更新)三層結構,對頻道韌性和 skill 缺席都要有 fallback。

    模型會一代代升級,但你累積的 Brain 不會過時 — 因為它記錄的不是模型能力,是你自己踩過的坑和學到的道理。

  • 【實戰教學】雙代理流水線完整實作 — 從零到一走過實作、審查、測試的 AI 協作開發

    上一篇我們解析了《2026 Agentic Coding Trends Report》的 8 大趨勢。這次我們不談理論,直接動手——用一個完整的實驗,展示如何建構「雙代理流水線」,讓 AI 自動完成:實作 → 審查 → 修正 → 測試 → 驗證的全流程。

    最終成果:3 個 AI 代理協作,產出 130 行生產級 Python 程式碼 + 27 個自動化測試,全部通過。


    一、實驗目標

    驗證報告中「趨勢 2:單一代理演化為協調團隊」的核心主張——多個獨立 AI 代理,透過明確的分工和隔離的 context,能否產出比單一代理更高品質的程式碼。

    任務:實作一個 Thread-safe 的 Token Bucket Rate Limiter(令牌桶限流器)

    工具:Claude CLI(claude -p)+ Python

    代理配置:

    • Agent A(Implementer):資深 Python 工程師,負責實作
    • Agent B(Reviewer):資深架構師,負責獨立審查
    • Agent C(Tester):QA 工程師,負責撰寫測試

    二、流水線架構設計

    Step 1: Implementer (A) ──寫程式碼──→ rate_limiter.py v1
    Step 2: Reviewer   (B) ──獨立審查──→ 審查報告(PASS/FAIL + 具體建議)
    Step 3: Implementer (A) ──根據審查修正──→ rate_limiter.py v2
    Step 4: Tester     (C) ──撰寫測試──→ test_rate_limiter.py(27 個測試)
    Step 5: pytest 實際執行 ──────────→ PASS? → 完成
                                         FAIL? → Step 6
    Step 6: Implementer (A) ──根據錯誤修正──→ 回到 Step 5(最多 3 輪)
    

    核心設計原則:Context 隔離

    每次代理呼叫都是獨立的 claude -p 指令 = 獨立的 context window。Reviewer 看不到 Implementer 的思考過程,只看到最終產出的程式碼。這就像真實的 Code Review——審查者不應該被實作者的思路影響。


    三、「給予什麼」——三個必要輸入

    報告趨勢 1 指出:工程師的角色從「寫程式碼」轉為「定義需求」。在雙代理系統中,你的輸入品質直接決定產出品質。

    1. TASK_SPEC(任務規格)

    告訴代理「要做什麼」。越具體越好,包含功能需求、非功能需求、使用範例:

    ## 功能需求
    1. allow(tokens=1) -> 判斷請求是否被允許,回傳 bool
    2. wait(tokens=1) -> 阻塞直到有足夠 token,回傳等待秒數
    3. get_tokens() -> 回傳目前可用 token 數
    4. Thread-safe:支援多執行緒併發存取
    
    ## 非功能需求
    - 純 Python 實作(標準庫 only)
    - Python 3.10+ 相容
    - 時間精度至少到毫秒
    - 記憶體使用 O(1)
    

    2. RESTRICTIONS(禁止事項)

    告訴代理「不能做什麼」。這就是報告趨勢 3 中的 Guardrails(護欄)——禁止比允許更重要:

    ## 程式碼禁止
    - 禁止使用任何第三方套件
    - 禁止使用 global 變數
    - 禁止使用 sleep 做忙等待
    - 禁止使用 eval() 或 exec()
    
    ## 設計禁止
    - 禁止 Singleton Pattern
    - 禁止在建構函式中啟動背景執行緒
    - Token 補充必須用 lazy 計算
    
    ## 品質禁止
    - 禁止不加 type hint
    - 禁止空的 except
    - 禁止 magic number
    

    3. QUALITY_STANDARDS(品質標準)

    告訴代理「什麼算合格」:

    ## 程式碼風格
    - 所有公開方法都要有 docstring
    - 適當的型別標注(Type Hints)
    
    ## 測試標準
    - 覆蓋率 > 90%
    - 必須包含:正常路徑、邊界條件、併發測試、錯誤處理
    
    ## 安全標準
    - 不信任任何輸入參數(都要驗證)
    - 時間計算要處理時鐘回撥情況
    

    四、實際執行過程與完整 I/O 記錄

    以下是流水線的真實執行記錄(每一步的 INPUT/OUTPUT 都完整保存在 141KB 的 log 檔中)。

    Step 1: Implementer 初始實作

    問題:Implementer 沒有直接寫程式碼,而是提出了三種方案要求確認。

    原因:Claude CLI 載入了使用者的 skills/rules,觸發了「brainstorming」行為模式。

    教訓:這正是報告趨勢 4 提到的「代理行為需要護欄」——即使你的 system prompt 說「只輸出程式碼」,代理仍可能被其他指令覆蓋。

    Step 2: Reviewer 獨立審查

    Reviewer 在完全獨立的 context 中工作。它拿到的「程式碼」實際上是 Step 1 產出的方案描述。它正確地指出:「目前提供的內容並非實際的程式碼,而是設計方案的描述文件」,並要求提供完整的 .py 檔案。

    亮點:這就是雙代理的價值——獨立的 Reviewer 不會因為「知道 Implementer 在想什麼」而放水。它只看到產出,做出客觀判斷。

    Step 3: Implementer 根據審查修正

    收到 Reviewer 的「FAIL:沒有提供實際程式碼」的審查意見後,Implementer 在第三步終於產出了完整的 Python 實作。

    這正是雙代理模式的自我修正能力:即使第一步失敗了,審查環節會把問題揪出來,修正環節會改正它。

    Step 4: Tester 撰寫 27 個測試

    Tester 代理根據程式碼和需求規格,產出了 27 個測試案例,涵蓋:

    • 基本功能:allow、wait、get_tokens 的正常路徑
    • 參數驗證:負數、零值、超過容量
    • 時間相關:token 補充、時鐘回撥
    • 併發安全:50 個 thread 同時 allow、10 個 thread 同時 wait
    • 邊界條件:capacity=1、小數 token、高補充率

    Step 5: pytest 執行結果

    26 passed, 1 failed in 16.48s
    
    FAILED: test_concurrent_allow_operations
      AssertionError: 50.01152896881103 != 50.0
    

    26 個測試通過,只有 1 個併發測試因為浮點精度問題失敗。測試期望 get_tokens() == 50.0,但因為併發執行耗時約 15ms,refill 機制多補了 0.01 個 token。

    Step 6: 修正迴圈

    Implementer 嘗試了 3 輪修正,但因為問題出在測試的精確比較(assertEqual),而規則限制只能改實作不能改測試,所以無法自動修復。最終我們手動將測試改為 assertAlmostEqual(delta=1.0),27 個測試全部通過。


    五、5 次失敗的除錯歷程——真正的實戰教訓

    這個實驗我跑了 5 次才成功。每次失敗都對應一個真實的代理工程問題:

    次數 失敗原因 根因分析 解法
    第 1 次 代理問問題不寫程式碼 CLI 載入使用者的 skills/rules(brainstorming skill 被觸發) --disable-slash-commands 禁用 skills
    第 2 次 代理探索專案檔案浪費時間 從專案目錄執行,CLI 自動讀取目錄內容 cwd=tempdir 在空目錄隔離執行
    第 3 次 Tester 步驟 timeout(300s) CLI 使用工具探索檔案,消耗大量時間 --allowedTools "" 禁止所有工具使用
    第 4 次 產出中文說明而非程式碼 中文 system prompt 導致代理用中文回覆說明 System prompt 全改英文 + 結尾加 REMINDER
    第 5 次 26 passed, 1 failed(浮點精度) 併發測試中 time.time() 微小誤差導致 refill 多算 測試改用 assertAlmostEqual

    關鍵 CLI 參數組合(最終穩定版)

    claude.cmd -p \
      --model claude-sonnet-4-20250514 \
      --system-prompt "..." \
      --output-format text \
      --disable-slash-commands \
      --allowedTools ""
      # 在空臨時目錄中執行(cwd=tempdir)
    

    這四個參數的組合確保了代理行為的完全可控

    • --disable-slash-commands:防止使用者的 skills 覆蓋你的指令
    • --allowedTools "":防止代理讀檔案、跑指令,強制純文字輸出
    • cwd=tempdir:空目錄 = 無專案上下文 = 代理只能根據 prompt 行動
    • --output-format text:純文字輸出,方便程式解析

    六、System Prompt 設計的 5 個教訓

    1. 用英文寫 system prompt

    中文 prompt 會導致代理用中文回覆,中文字元混入程式碼會造成 SyntaxError。即使你的需求規格是中文,system prompt 也應該用英文。

    2. 「不要做什麼」比「要做什麼」更重要

    最有效的一行不是「請寫程式碼」,而是:

    Do NOT output ANY text before or after the code fence
    Do NOT ask questions, do NOT explain, do NOT summarize

    3. 結尾加 REMINDER

    AI 會更重視 prompt 開頭和結尾的指令。在 user prompt 結尾加上格式提醒:

    REMINDER: Output ONLY ```python``` code. No text before or after.

    4. 角色定義要具體

    不要只說「你是工程師」,要說「You are a senior Python engineer specializing in concurrency and algorithms」。越具體,產出越符合預期。

    5. 輸出格式要可解析

    要求代理用 ```python``` 包裹程式碼,這樣程式可以用正則表達式提取。同時準備 fallback:如果沒有 code fence,取最長的 python block。


    七、完整程式碼——可以直接複用

    整個流水線是一個 700 行的 Python 檔案,你只需要改三個變數就能用在任何任務上:

    # 改這三個變數,就能用在任何任務上
    TASK_SPEC = "..."          # 要做什麼
    RESTRICTIONS = "..."       # 不准做什麼
    QUALITY_STANDARDS = "..."  # 什麼算合格
    
    # 然後執行
    # python dual_agent_pipeline.py
    #
    # 產出:
    # output/rate_limiter.py       -- AI 寫的程式碼
    # output/test_rate_limiter.py  -- AI 寫的測試
    # logs/pipeline_*.md           -- 完整 I/O 記錄
    

    八、結論:雙代理模式的價值

    這次實驗驗證了報告的核心主張:

    1. Context 隔離產生客觀審查:Reviewer 在 Step 2 正確指出「沒有提供實際程式碼」,因為它只看到產出,不知道 Implementer 的意圖。這就是為什麼雙代理比單一代理更可靠。
    2. 自我修正能力:即使 Step 1 失敗(產出方案而非程式碼),Step 2 的審查 + Step 3 的修正組成了自動修復迴圈。最終在 Step 3 產出了合格的程式碼。
    3. 護欄(Guardrails)是必需品:5 次失敗中有 4 次是因為代理行為不可控。--disable-slash-commands--allowedTools ""cwd=tempdir 這些護欄不是可選的,是必須的。
    4. 人類仍然不可或缺:最後一個浮點精度問題,代理嘗試了 3 輪都無法自動修復(因為問題在測試而非實作)。人類介入 10 秒就解決了。這正是報告說的:「AI 是協作者,不是替代者」。

    最後的建議:不要追求完美的自動化。從「一個寫、一個審」的最小雙代理開始,逐步增加複雜度。今天就試試。

    本文是《2026 Agentic Coding Trends Report》深度解析系列的第二篇。

  • 【完整攻略】Claude Code 全方位協作指南 — 從 settings.json 配置到 AI 開發戰友的 17 個核心能力

    每次使用 Claude Code 都要按 Allow?Hooks 到底能幹嘛?MCP 伺服器怎麼接?作為一個每天與 Claude Code 協作超過 8 小時的架構師,我將從實戰角度帶你走過 settings.json 的每一個關鍵配置,讓你從「不斷按確認」進化到「全自動化 AI 開發流水線」。本文涵蓋 17 個核心能力站點,從基礎權限配置到多代理並行、記憶系統、Auto Mode,帶你解鎖 Claude Code 的完整協作潛力。


    🎯 為什麼你需要認真配置 settings.json?

    Claude Code 的預設模式是「安全優先」——每個檔案操作、每條指令都要你點 Allow。這對初學者來說是好事,但對於每天寫上千行程式碼的開發者來說,這就像開車時每踩一次油門都要確認一次「你確定要加速嗎?」

    settings.json 是 Claude Code 的控制中樞。配置得當,它能讓你的 AI 協作體驗從「手動擋」升級到「自動巡航」。

    設定檔的三層架構

    Claude Code 的設定採用三層覆蓋架構,就像 CSS 的層疊規則:

    層級 檔案位置 Git 追蹤 適用場景
    全域(User) ~/.claude/settings.json N/A 個人偏好,所有專案通用
    專案(Project) .claude/settings.json ✅ 提交 團隊共用的規範和 Hooks
    本地(Local) .claude/settings.local.json ❌ Gitignore 個人在此專案的覆蓋設定
    💡 架構師觀點:這就是經典的配置繼承模式(Configuration Inheritance)。後層覆蓋前層,讓你在保持團隊一致性的同時擁有個人彈性。

    ⚡ 第一站:跳過權限提示(Permissions)

    痛點

    你正在讓 Claude Code 重構一個模組,它需要讀 50 個檔案、改 20 個檔案、跑 10 次測試。每一步都跳出 Allow 提示——你按了 80 次確認鍵。這不是 AI 協作,這是打地鼠。

    解法:精細化權限控制

    {
      "permissions": {
        "allow": [
          "Bash(git:*)",
          "Bash(mvn:*)",
          "Bash(npm:*)",
          "Bash(node:*)",
          "Bash(python:*)",
          "Bash(java:*)",
          "Bash(ls:*)",
          "Bash(mkdir:*)",
          "Bash(curl:*)",
          "Bash(gh:*)",
          "Read",
          "Edit",
          "Write",
          "Glob",
          "Grep",
          "WebFetch",
          "WebSearch",
          "TodoWrite",
          "NotebookEdit"
        ],
        "deny": [
          "Bash(rm -rf:*)",
          "Bash(DROP:*)",
          "Bash(format:*)"
        ]
      }
    }
    

    權限規則語法解析

    • 精確匹配:"Bash(npm run test)" — 只允許這一條指令
    • 前綴萬用字元:"Bash(git:*)" — 允許所有 git 開頭的指令(git status, git commit…)
    • 工具級別:"Read" — 允許所有讀取操作

    三種權限模式

    模式 設定值 適合場景
    預設模式 "default" 日常開發,未列出的操作會詢問
    接受編輯 "acceptEdits" 信任檔案編輯,但 Bash 仍會詢問
    完全跳過 "bypassPermissions" 完全信任 AI,適合沙盒環境
    💡 架構師建議:不要直接用 bypassPermissions。就像你不會給生產伺服器開 chmod 777,用 allow 清單做最小權限原則(Least Privilege)更安全。把你信任的操作明確列出,危險操作放進 deny

    🔧 第二站:Hooks — 你的自動化管家

    什麼是 Hooks?

    Hooks 是 Claude Code 的事件驅動自動化機制。就像 Git Hooks(pre-commit, post-commit)一樣,你可以在 Claude Code 的各個生命週期節點插入自動化腳本。

    核心事件一覽

    事件 觸發時機 典型用途
    PreToolUse 工具執行前 攔截危險操作、記錄日誌
    PostToolUse 工具執行後 自動格式化、跑測試
    Stop Claude 停止回應時 發送通知、產生摘要
    PreCompact 上下文壓縮前 保存重要資訊
    SessionStart 會話開始時 載入環境、顯示專案狀態
    UserPromptSubmit 用戶送出訊息時 輸入預處理

    實戰範例一:完成工作時彈出通知

    這是我每天都在用的配置。Claude Code 完成一段工作後,Windows 會彈出通知視窗:

    {
      "hooks": {
        "Stop": [
          {
            "hooks": [
              {
                "type": "command",
                "command": "powershell -Command \"[System.Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms') | Out-Null; [System.Windows.Forms.MessageBox]::Show('Claude Code 已完成!', 'Claude Code 通知', 'OK', 'Information')\"",
                "timeout": 10,
                "statusMessage": "發送通知中..."
              }
            ]
          }
        ]
      }
    }
    
    📌 使用場景:你丟一個大任務給 Claude Code(例如重構整個模組),然後去泡咖啡。做完了它會彈窗通知你回來 review。

    實戰範例二:寫完程式碼自動格式化

    {
      "hooks": {
        "PostToolUse": [
          {
            "matcher": "Write|Edit",
            "hooks": [
              {
                "type": "command",
                "command": "jq -r '.tool_response.filePath // .tool_input.file_path' | { read -r f; prettier --write \"$f\"; } 2>/dev/null || true"
              }
            ]
          }
        ]
      }
    }
    

    每次 Claude Code 編輯或寫入檔案後,自動用 Prettier 格式化。再也不用擔心 AI 產出的程式碼風格不一致。

    實戰範例三:記錄所有 Bash 指令

    {
      "hooks": {
        "PreToolUse": [
          {
            "matcher": "Bash",
            "hooks": [
              {
                "type": "command",
                "command": "jq -r '.tool_input.command' >> ~/.claude/bash-log.txt"
              }
            ]
          }
        ]
      }
    }
    
    💡 架構師觀點:這就是審計日誌(Audit Log)模式。當你讓 AI 自主執行指令時,保留完整的操作記錄至關重要。出了問題可以追溯,也能用來分析 AI 的行為模式。

    進階:三種 Hook 類型

    類型 說明 適用場景
    command 執行 shell 指令 格式化、測試、通知
    prompt 用 LLM 評估條件 語義級別的安全檢查
    agent 啟動代理執行任務 複雜的自動化驗證
    {
      "hooks": {
        "PreToolUse": [
          {
            "matcher": "Bash",
            "hooks": [
              {
                "type": "prompt",
                "prompt": "這個指令是否可能刪除重要檔案或造成不可逆的破壞?指令內容:$ARGUMENTS"
              }
            ]
          }
        ]
      }
    }
    

    用 AI 來審查 AI——這是多層防禦(Defense in Depth)的完美體現。


    🌐 第三站:MCP 伺服器 — 擴展 Claude Code 的邊界

    什麼是 MCP?

    MCP(Model Context Protocol)是讓 Claude Code 連接外部服務的標準協議。透過 MCP,Claude Code 可以直接操作資料庫、呼叫 API、查詢股票行情——任何你能想到的整合。

    實戰範例:接入台灣股票行情

    {
      "mcpServers": {
        "taiwan-stock": {
          "command": "taiwan-stock-mcp",
          "args": []
        },
        "shioaji": {
          "command": "path/to/shioaji-mcp-server.exe",
          "args": [],
          "env": {
            "SHIOAJI_API_KEY": "your-api-key",
            "SHIOAJI_SECRET_KEY": "your-secret-key"
          }
        }
      }
    }
    

    配置完成後,你可以直接對 Claude Code 說:「查詢台積電今天的股價」或「分析我永豐金帳戶的未實現損益」。

    MCP 的架構意義

    從架構角度來看,MCP 本質上就是微服務的 Sidecar 模式。每個 MCP 伺服器就是一個獨立的服務,透過標準化協議與 Claude Code 通訊。這種設計的優點:

    • 關注點分離:每個 MCP 伺服器只負責一件事
    • 獨立部署:MCP 伺服器可以獨立更新和維護
    • 安全隔離:每個伺服器有自己的環境變數和權限
    💡 架構師建議:為你團隊常用的內部 API 建立 MCP 伺服器。例如:公司的 JIRA API、內部知識庫、部署管線——讓 Claude Code 成為你的統一操作介面

    🔐 第四站:Sandbox — 安全的沙盒環境

    為什麼需要沙盒?

    當你給 AI 越來越多的自主權時,安全邊界就越重要。Sandbox 配置讓你精確控制 Claude Code 可以存取的檔案系統範圍和網路資源。

    {
      "sandbox": {
        "enabled": true,
        "autoAllowBashIfSandboxed": true,
        "network": {
          "allowedDomains": [ "github.com", "registry.npmjs.org", "pypi.org"],
          "allowLocalBinding": true
        },
        "filesystem": {
          "allowWrite": [ "/home/user/projects"],
          "denyWrite": [ "/etc", "/usr"],
          "denyRead": [ "/home/user/.ssh", "/home/user/.aws"]
        }
      }
    }
    
    💡 架構師觀點:這就是容器化思維的延伸。就像 Docker 的 --read-only--network 旗標,Sandbox 讓你在給 AI 自由的同時保持控制。特別注意 denyRead——防止 AI 讀取你的 SSH 金鑰和雲端憑證。

    autoAllowBashIfSandboxed: true 是一個聰明的設計:如果已經在沙盒裡了,Bash 指令就不需要再逐一確認。安全邊界前移,讓操作體驗更流暢。


    🌳 第五站:Git Worktree — 隔離的開發環境

    痛點

    你讓 Claude Code 做一個大型重構,但你同時需要在主分支上修一個緊急 bug。兩件事在同一個目錄下互相干擾。

    解法:Worktree 配置

    {
      "worktree": {
        "symlinkDirectories": [ "node_modules", ".cache", ".bin"],
        "sparsePaths": [ "src/", "tests/", "package.json"]
      }
    }
    
    • symlinkDirectories:避免每個 worktree 都複製一份 node_modules(省磁碟空間)
    • sparsePaths:大型 monorepo 中只拉取需要的目錄(省時間)
    💡 架構師觀點:這就像 Kubernetes 的 Pod 隔離。每個 worktree 是一個獨立的工作空間,有自己的分支和檔案狀態,但共享底層的 Git 物件庫。對於多代理並行開發的場景,worktree 是基礎設施級的支援。

    🔌 第六站:環境變數與模型選擇

    環境變數

    {
      "env": {
        "NODE_ENV": "development",
        "DEBUG": "true",
        "DATABASE_URL": "postgresql://localhost:5432/dev"
      }
    }
    

    這些環境變數會注入到 Claude Code 的執行環境中,就像 Docker 的 -e 旗標。適合設定開發環境的連線資訊、除錯旗標等。

    模型選擇與效能調校

    {
      "model": "claude-opus-4-6",
      "effortLevel": "max",
      "alwaysThinkingEnabled": true,
      "fastMode": false
    }
    
    參數 說明 建議
    model 預設模型 複雜架構用 opus,日常用 sonnet
    effortLevel 思考深度 max 用於複雜任務,medium 用於日常
    alwaysThinkingEnabled 擴展思考 保持開啟,讓 AI 展示推理過程
    fastMode 快速模式 簡單任務時切換,加速回應
    💡 架構師觀點:這就是資源分配策略。不是每個任務都需要最強的模型和最大的思考深度。就像你不會用 GPU 叢集來跑 Hello World,學會根據任務複雜度選擇合適的配置,能顯著降低成本並提升效率。

    📡 第七站:SSH 遠端開發

    {
      "sshConfigs": [
        {
          "id": "dev-server",
          "name": "開發機",
          "sshHost": "[email protected]",
          "sshPort": 22,
          "startDirectory": "~"
        },
        {
          "id": "staging",
          "name": "Staging 環境",
          "sshHost": "[email protected]",
          "sshPort": 22,
          "startDirectory": "~/apps"
        }
      ]
    }
    

    配置完成後,用 claude ssh dev-server 就能直接在遠端機器上啟動 Claude Code 工作。適合需要在 Linux 伺服器上開發、或存取特定硬體資源的場景。


    🧩 第八站:Plugins — 技能擴展系統

    {
      "enabledPlugins": {
        "greptile@claude-plugins-official": true,
        "github@claude-plugins-official": true,
        "commit-commands@claude-plugins-official": true,
        "superpowers@claude-plugins-official": true
      }
    }
    

    Plugins 賦予 Claude Code 額外的技能(Skills)。例如:

    • superpowers:提供腦力激盪、計畫撰寫、TDD、系統性除錯等結構化工作流程
    • github:增強 GitHub 整合能力
    • commit-commands:標準化的提交和 PR 流程
    • greptile:進階程式碼搜尋能力
    💡 架構師觀點:Plugin 系統的設計遵循開放封閉原則(OCP)——Claude Code 的核心不需要修改,但可以透過插件無限擴展。這也是為什麼你可以建立自己的 Plugin Marketplace 來分享團隊專屬的技能。

    🏗️ 完整配置範本:架構師的 settings.json

    以下是一份經過實戰驗證的完整配置範本,你可以根據自己的需求調整:

    {
      "permissions": {
        "allow": [
          "Bash(git:*)",
          "Bash(mvn:*)",
          "Bash(npm:*)",
          "Bash(node:*)",
          "Bash(python:*)",
          "Bash(java:*)",
          "Bash(ls:*)",
          "Bash(mkdir:*)",
          "Bash(curl:*)",
          "Bash(gh:*)",
          "Read", "Edit", "Write",
          "Glob", "Grep",
          "WebFetch", "WebSearch",
          "TodoWrite", "NotebookEdit"
        ],
        "deny": [
          "Bash(rm -rf:*)",
          "Bash(DROP:*)"
        ]
      },
      "model": "claude-opus-4-6",
      "effortLevel": "max",
      "alwaysThinkingEnabled": true,
      "hooks": {
        "Stop": [
          {
            "hooks": [{
              "type": "command",
              "command": "echo Done",
              "timeout": 10,
              "statusMessage": "通知中..."
            }]
          }
        ],
        "PostToolUse": [
          {
            "matcher": "Write|Edit",
            "hooks": [{
              "type": "command",
              "command": "jq -r '.tool_response.filePath // .tool_input.file_path' | { read -r f; prettier --write \"$f\"; } 2>/dev/null || true"
            }]
          }
        ]
      },
      "env": {
        "NODE_ENV": "development"
      },
      "worktree": {
        "symlinkDirectories": [ "node_modules"]
      }
    }
    

    📋 第九站:CLAUDE.md — 你的專案操作手冊

    為什麼需要 CLAUDE.md?

    settings.json 控制的是 Claude Code 的行為規則,而 CLAUDE.md 定義的是專案上下文。就像你不會讓新進員工第一天就開始寫程式碼一樣——他需要先了解專案的架構、規範、禁忌和慣例。

    CLAUDE.md 放在專案根目錄,Claude Code 每次啟動時會自動讀取,相當於給 AI 一份「新人入職手冊」

    實戰範本

    # 專案:電商平台後端
    
    ## 技術棧
    - Java 17 + Spring Boot 3.2
    - PostgreSQL 15 + Redis 7
    - Maven 建構,模組化架構
    
    ## 程式碼規範
    - 所有 Controller 方法必須有 @Operation 註解(Swagger)
    - Service 層必須有單元測試,覆蓋率 > 80%
    - 使用 Lombok @Slf4j,禁止直接 System.out.println
    
    ## 禁止事項
    - 不要修改 core-common 模組的公開 API
    - 不要直接操作生產資料庫連線字串
    - 不要刪除任何已存在的測試案例
    
    ## 建構與測試
    - 建構:mvn clean package -DskipTests
    - 測試:mvn test
    - 單一模組測試:mvn test -pl module-name
    
    ## 分支策略
    - feature/* 從 develop 分出
    - 每個 PR 需要至少一個 review
    
    💡 架構師觀點:CLAUDE.md 的三層載入機制(~/.claude/CLAUDE.md → 專案根目錄 → 子目錄)就是配置繼承的延伸。你可以在全域設定通用規範,在專案層級設定特定規則,在子目錄中覆蓋模組級別的約定。

    🗺️ 第十站:Plan Mode — 先謀後動

    什麼時候用 Plan Mode?

    當任務複雜到「先想清楚再動手」比「邊做邊改」更高效時,就該用 Plan Mode。典型場景:

    • 跨模組重構
    • 新功能設計(涉及多個服務)
    • 技術遷移(例如從 REST 遷移到 GraphQL)

    實戰操作

    # 進入計畫模式
    # 在聊天中輸入 /plan 或按 Shift+Tab 切換
    
    # 給出需求
    「我需要為現有的訂單系統加入退款功能。
    退款需要:
    1. 支援全額和部分退款
    2. 整合現有的支付閘道(綠界、LINE Pay)
    3. 退款狀態需要即時通知用戶
    4. 需要防止重複退款的並發控制」
    
    # Claude Code 會產出:
    # → 影響範圍分析
    # → 架構設計建議
    # → 分步實施計畫
    # → 每步的驗證標準
    
    💡 架構師觀點:Plan Mode 本質上就是技術設計審查(Design Review)的自動化。它強迫你和 AI 在動手之前達成共識——修改哪些檔案、用什麼模式、怎麼測試。這比「直接開幹然後改三輪」高效得多。

    🤖 第十一站:多代理並行 — 分身術

    核心概念

    Claude Code 可以同時啟動多個子代理(Subagent),每個代理有獨立的上下文,互不干擾。這就像你有一個開發團隊,每人負責不同的任務,最後彙整結果。

    實戰場景

    場景一:並行研究

    # 你問:「比較 Kafka 和 RabbitMQ 在我們這個場景下的優劣」
    # Claude Code 同時啟動:
    # → Agent 1:分析你的程式碼找出訊息傳遞模式
    # → Agent 2:研究 Kafka 的適用性
    # → Agent 3:研究 RabbitMQ 的適用性
    # 三個代理並行執行,最後彙整成完整比較報告
    

    場景二:實作 + 測試並行

    # 你說:「實作用戶通知系統並寫測試」
    # Claude Code 可以:
    # → Agent 1:在 worktree 中實作核心邏輯
    # → Agent 2:同時撰寫測試案例
    # → 主代理:協調兩者,確保介面一致
    

    場景三:Code Review 代理

    # 完成一段實作後
    # → 自動啟動 Code Review 代理
    # → 從安全性、效能、可維護性三個角度審查
    # → 產出具體的修改建議
    
    💡 架構師觀點:多代理系統就是分散式運算的縮影。關鍵是任務分解(Task Decomposition)——把大任務拆成可並行的子任務。能並行的就並行,有依賴的就串行。這和你設計微服務時的思考方式完全一致。

    🧠 第十二站:Memory 記憶系統 — 跨對話的知識累積

    為什麼需要記憶?

    每次開新對話,Claude Code 都是「失憶」狀態。Memory 系統解決了這個問題——它讓 AI 記住你的偏好、專案狀態、過去的決策。

    四種記憶類型

    類型 用途 範例
    user 你的角色和偏好 「用戶是資深 Java 架構師,偏好函數式風格」
    feedback 你給過的修正指導 「不要在測試中 mock 資料庫,要用 Testcontainers」
    project 專案的狀態和決策 「3月底前需要完成支付模組重構」
    reference 外部資源的指引 「Bug 追蹤在 Linear 的 BACKEND 專案中」

    實戰操作

    # 主動要求記住
    「記住:這個專案的 API 回應格式統一用 ApiResponse 包裝,
    不要直接回傳原始物件」
    
    # Claude Code 會自動儲存為 feedback 類型的記憶
    # 下次對話中,它會自動遵守這個規則
    
    # 記住偏好
    「記住:我喜歡用 Stream API 而不是 for 迴圈處理集合」
    
    # 記住專案決策
    「記住:我們決定用 Event Sourcing 模式重構訂單模組,
    預計 Q2 完成」
    
    💡 架構師觀點:Memory 系統就是 AI 的組織知識庫(Knowledge Base)。它解決了「每次都要重複解釋上下文」的問題。越用越聰明,因為它逐漸累積了你的技術偏好、專案脈絡、和過去的決策紀錄。

    💬 第十三站:與 AI 溝通的真相 — 別演了,說人話

    先打破一個幻覺

    很多教學會告訴你:「給 AI 一個角色,例如『你是資深 Java 架構師』,回答會更專業。」

    這是半個事實。

    給角色確實會讓 AI 的回答看起來更專業——更多術語、更自信的語氣、更「完整」的方案。但研究和實際使用經驗都指出:角色設定會讓 AI 的正確率下降。

    為什麼?因為「資深架構師」不會說「我不確定」。所以 AI 會:

    • 硬掰——不確定的事情也斬釘截鐵地說
    • 過度複雜化——簡單問題也要套三層設計模式,顯得「夠資深」
    • 自信地錯——沒角色時會說「可能是 A 或 B」,有角色後直接斷言「就是 A」

    你得到的不是更好的答案,而是更有自信的答案。這兩件事差很遠。


    「但我不知道該給什麼約束啊」

    有人說:「那不要給角色,改給具體約束。」例如把「你是安全專家」改成「用 OWASP Top 10 標準審查程式碼」。

    聽起來很合理,但這有一個致命的前提假設:你得知道 OWASP Top 10 是什麼。

    現實是——如果你已經知道該用什麼約束,你大概也不太需要 AI 了。你使用 AI 的原因之一,正是因為你的知識有邊界。要你在邊界之外給出精確約束,這本身就是矛盾的。

    這是一個雞生蛋的問題:

    • 要給好的約束 → 需要知道有哪些考量面向
    • 要知道有哪些考量面向 → 需要相關經驗
    • 如果你有相關經驗 → 你可能不需要問 AI

    真正有效的溝通方式

    解法一:讓 AI 來問你,而不是你來指揮 AI

    ❌「你是資深架構師,幫我設計退款系統」
    ❌「幫我設計退款系統,約束是 A、B、C」(你怎麼知道該約束什麼?)
    ✅「我需要退款功能。問我你需要知道的事情。」
    

    AI 會反問你:支援哪些支付方式?要不要部分退款?退款時效?併發量多少?——這些約束由 AI 來挖掘,你只需要回答業務事實。你是最了解你的業務的人,AI 是最了解技術選項的那個。各司其職。

    解法二:說痛點,不說方法

    ❌「用 Strategy Pattern 重構支付模組」
    ✅「支付模組每次加新支付方式都要改 5 個檔案,太痛苦了」
    
    ❌「幫我實作 Cache-Aside Pattern」
    ✅「這個 API 太慢了,每次都要查資料庫,有 500ms 延遲」
    
    ❌「用 Event Sourcing 重構訂單模組」
    ✅「訂單狀態變更的歷史記錄查不到,客服常常追不到問題」
    

    你描述痛點,AI 來決定用什麼方法。你不需要知道 Strategy Pattern 這個詞——那是 AI 的工作。

    解法三:給 AI 看失敗的例子

    ✅「上次你改完之後測試壞了三個,這次注意一下」
    ✅「你之前把 API 回傳格式改掉了,不要再這樣」
    ✅「上一版你漏掉了併發情境,這次要考慮進去」
    

    這比任何「資深」角色都有效。你在用真實的失敗經驗告訴 AI 邊界在哪裡。


    最危險的時刻:「看起來差不多了」

    這是人機協作中最容易出事的瞬間

    AI 給你一個方案,看起來完整、專業、邏輯通順。你看了看,覺得「嗯,差不多了」,然後就 GO 了。

    問題是——你覺得差不多了,不是因為真的差不多了,而是因為 AI 的輸出「看起來」差不多了。

    AI 不會主動告訴你它跳過了什麼。它不會說「欸,我其實沒考慮併發情境」或「這個方案在資料量大的時候會爆掉」。它產出的東西永遠看起來是完整的——因為它被訓練成產出看起來完整的回答。

    煞車技巧:一句話打破 AI 的演出模式

    你不需要學任何新技巧。只需要在覺得「差不多了」的時候,多問一句:

    「你跳過了什麼?」
    

    或是這些變體:

    • 「你在這個方案裡做了哪些假設?」
    • 「這個方案最可能在哪裡出事?」
    • 「你有沒有什麼想問我但沒問的?」
    • 「如果這個方案失敗了,最可能的原因是什麼?」
    • 「你對這個方案有多少信心?哪部分最不確定?」

    這一句話的威力在於:你不是在問「做得好不好」,而是在問「藏了什麼」。它逼 AI 從「展示模式」切換到「誠實模式」。


    而且這件事不該只是你的責任

    理想的 AI 協作應該是雙向的。AI 在給出方案後,應該主動說

    「這個方案我假設了 X、Y、Z。
    我沒有處理的是 A 和 B。
    你需要確認的是 C。
    我最不確定的部分是 D。」

    如果你的 AI 不會主動這樣做,你可以在 CLAUDE.md 中加入這個規則:

    # AI 行為規範
    - 每次提出方案後,必須列出:
      1. 你做了哪些假設
      2. 你沒有處理的邊界情境
      3. 你最不確定的部分
      4. 你建議我額外確認的事項
    - 不確定的事情要說不確定,不要硬掰
    - 寧可多問一個問題,也不要做錯一個假設
    

    把這段放進 CLAUDE.md,AI 的行為會顯著改變。這不是「角色扮演」,而是行為契約


    常見的協作陷阱與對策

    陷阱 表現 對策
    自信陷阱 AI 語氣非常肯定,但內容其實有誤 問「你有多少信心?」、「有沒有其他可能?」
    完整性幻覺 方案看起來很完整,但跳過了關鍵場景 問「你跳過了什麼?」、「最可能在哪出事?」
    過度設計 簡單問題給出複雜方案,顯得「專業」 問「有沒有更簡單的做法?」、「最小可行方案是什麼?」
    附和陷阱 你提出一個想法,AI 不管對錯都說「好主意」 問「這個想法有什麼問題?」、「如果你反對,理由是什麼?」
    術語轟炸 一堆專業名詞讓你不敢追問 直接說「用白話解釋」、「舉一個具體例子」
    沉沒成本 AI 已經寫了很多程式碼,你不好意思說不對 程式碼隨時可以重寫,越早喊停成本越低

    一個真實的反思

    這段內容本身就是一個活生生的例子。這篇文章的前半段充滿了「架構師觀點」的包裝——設計模式、架構原則、專業術語。這些不是錯的,但它們的存在更多是因為「架構師觀點」這個角色要求我這樣寫,而不是因為你真的需要知道 Cache-Aside Pattern 叫什麼名字。

    你真正需要的可能只是:「怎麼讓常用的 API 查詢變快」。而「Cache-Aside Pattern」只是其中一個可能的做法。

    好的 AI 協作不是你學會說 AI 的語言,而是 AI 學會聽你的語言。


    🚀 第十四站:Auto Mode — 全自動駕駛

    什麼是 Auto Mode?

    Auto Mode 讓 Claude Code 自行判斷是否需要詢問你權限。它使用一個 AI 分類器來評估每個操作的風險等級——安全的直接執行,有風險的才問你。

    配置方式

    {
      "permissions": {
        "defaultMode": "auto"
      },
      "autoMode": {
        "allow": [
          "讀取和修改 src/ 目錄下的程式碼",
          "執行 mvn test 和 npm test",
          "使用 git 進行版本控制操作"
        ],
        "soft_deny": [
          "不要刪除任何檔案",
          "不要修改 CI/CD 配置",
          "不要 push 到遠端"
        ],
        "environment": [
          "這是本地開發環境",
          "可以自由修改 src/ 和 tests/ 目錄"
        ]
      }
    }
    
    💡 架構師觀點:Auto Mode 就是基於策略的存取控制(Policy-Based Access Control)。你定義高層策略(允許什麼、拒絕什麼、環境是什麼),AI 分類器負責把每個具體操作映射到對應的策略。比逐條列出權限更靈活,但也需要更精確的策略描述。

    🖥️ 第十五站:IDE 整合 — VSCode 中的 Claude Code

    核心優勢

    在 VSCode 中使用 Claude Code,你可以:

    • 選取程式碼直接提問:選中一段程式碼,右鍵問 Claude「這段程式碼在做什麼?」或「怎麼優化?」
    • @ 提及檔案:@filename 直接引用專案中的檔案,不需要複製貼上
    • 即時差異檢視:Claude 的每次編輯都以 diff 形式呈現,一目了然
    • 內嵌終端整合:Bash 指令的輸出直接顯示在對話中

    高效工作流程

    # 1. 選中有問題的程式碼 → 問 Claude
    # 2. Claude 提出修改方案 → 你在 diff 中 review
    # 3. 接受修改 → Claude 自動套用
    # 4. 跑測試 → 確認沒有破壞既有功能
    # 整個流程不離開編輯器
    
    💡 架構師觀點:IDE 整合消除了「上下文切換成本」。你不需要在終端、瀏覽器、編輯器之間來回跳轉。所有的 AI 協作都發生在你最熟悉的工作環境中——這就是開發者體驗(DX)設計的核心理念。

    ⏳ 第十六站:背景代理與上下文管理

    背景代理

    有些任務不需要你盯著看——丟給背景代理,做完通知你:

    # 啟動背景代理做耗時任務
    # Claude Code 會在完成後通知你
    
    # 適合背景執行的任務:
    # → 大範圍的程式碼搜索和分析
    # → 跨模組的相依性分析
    # → 大型重構的前置調查
    # → 文件生成
    

    上下文管理

    長對話中,Claude Code 的上下文窗口會逐漸填滿。掌握上下文管理技巧很重要:

    • /compact:手動壓縮對話上下文,保留關鍵資訊,釋放空間
    • PreCompact Hook:在壓縮前自動保存你想保留的重要資訊
    • 拆分對話:每個獨立任務開新對話,避免上下文污染
    • Memory 持久化:重要的決策和發現存入 Memory,跨對話保留
    {
      "hooks": {
        "PreCompact": [
          {
            "matcher": "manual",
            "hooks": [{
              "type": "command",
              "command": "echo '{"hookSpecificOutput":{"hookEventName": "PreCompact","additionalContext": "壓縮前提醒:保留所有架構決策和 API 介面設計的上下文"}}'"
            }]
          }
        ]
      }
    }
    
    💡 架構師觀點:上下文管理就是記憶體管理。就像 JVM 的垃圾回收一樣,你需要平衡「保留有用資訊」和「釋放空間給新任務」。好的上下文管理策略能讓你在單次對話中完成更複雜的任務。

    🔄 第十七站:TDD 與 Code Review 工作流

    AI 驅動的 TDD 流程

    # Step 1:先寫測試
    「為 RefundService.processRefund() 寫測試案例:
    - 全額退款成功
    - 部分退款成功
    - 超額退款應拋出 IllegalArgumentException
    - 已退款的訂單不能重複退款
    - 並發退款的樂觀鎖衝突處理」
    
    # Step 2:確認測試(此時應全部失敗)
    「跑一下測試,確認都是 RED 狀態」
    
    # Step 3:實作程式碼讓測試通過
    「現在實作 RefundService.processRefund(),讓所有測試通過」
    
    # Step 4:重構
    「測試都通過了。現在重構——有沒有重複程式碼或可以抽象的地方?」
    

    雙代理 Code Review

    # 完成實作後,啟動 Code Review 流程
    
    # 方式一:使用 /review 技能
    # Claude Code 會從多個角度審查你的程式碼變更
    
    # 方式二:手動指定審查角度
    「以 Senior Java Developer 的身份審查這次的 git diff:
    1. 是否符合 SOLID 原則?
    2. 異常處理是否完整?
    3. 是否有潛在的效能問題?
    4. API 設計是否符合 RESTful 規範?
    5. 測試覆蓋是否足夠?」
    
    💡 架構師觀點:TDD + AI Code Review 構成了一個持續品質迴圈。AI 寫測試確保功能正確,AI 審查確保品質達標。你的角色從「寫程式碼」轉變為「定義品質標準」和「做最終判斷」。

    📊 協作能力總覽:你能用 Claude Code 做什麼

    階段 能力 核心配置/工具 效率提升
    環境設定 跳過權限提示 permissions.allow 消除 80% 的中斷
    環境設定 自動化護欄 Hooks 零人工品質檢查
    環境設定 外部服務整合 MCP Servers 統一操作介面
    需求階段 腦力激盪 Skills: brainstorming 結構化需求探索
    設計階段 計畫模式 Plan Mode 先謀後動,減少返工
    設計階段 專案上下文 CLAUDE.md AI 自動遵守規範
    開發階段 TDD 工作流 Skills: TDD 測試先行,品質保證
    開發階段 多代理並行 Subagents 任務並行,加速 N 倍
    開發階段 背景代理 Background agents 非阻塞式工作
    開發階段 隔離環境 Git Worktree 互不干擾的並行開發
    審查階段 Code Review Skills: code-review 多角度自動審查
    部署階段 全自動模式 Auto Mode AI 自主判斷,減少打擾
    跨對話 記憶系統 Memory 知識累積,越用越聰明
    跨對話 上下文管理 /compact + Hooks 更長的有效工作時間
    日常 IDE 整合 VSCode Extension 零上下文切換
    日常 SSH 遠端 sshConfigs 隨處開發

    🎯 結語:從工具到戰友,但要是誠實的戰友

    這篇文章從 settings.json 的基礎配置出發,一路展開到 Claude Code 的完整協作生態。17 個核心能力站點分為三層:

    • 基礎設施層(第 1-8 站):權限、Hooks、MCP、Sandbox、Worktree、環境變數、SSH、Plugins——你的「硬體配置」
    • 工作流程層(第 9-13 站):CLAUDE.md、Plan Mode、多代理、Memory、溝通技巧——你的「操作系統」
    • 自動化層(第 14-17 站):Auto Mode、IDE 整合、背景代理、TDD/Code Review——你的「自動駕駛」

    但如果你只記住一件事,請記住這個:

    AI 最危險的時候不是它出錯的時候——是它看起來沒出錯的時候。

    所有的配置、Hooks、自動化,都是為了讓協作更高效。但高效的前提是正確。而正確的前提是你敢對 AI 的輸出踩煞車,問它:「你跳過了什麼?」

    不要追求「完美的 Prompt」。不要花時間研究該給 AI 什麼角色。把那些時間拿來:

    1. 描述你的痛點(而不是指定解法)
    2. 讓 AI 問你問題(而不是你猜它需要什麼)
    3. 在「看起來差不多」的時候多問一句(而不是直接 GO)
    4. 把失敗經驗告訴它(而不是只給它成功案例)

    好的人機協作不是人學會說機器的語言,而是建立一個雙方都誠實的溝通環境。

    你配置 Claude Code 的方式,反映的不只是技術能力——更是你對「什麼是好的協作」的理解。

    本文基於 Claude Code 2026 年 3 月版本撰寫,並包含真實的人機協作反思。所有配置範例均經過實戰驗證。

  • 【深度解析】2026 Agentic Coding Trends Report — 資深架構師的全面剖析與實戰指南

    Anthropic 於 2026 年初發布了《2026 Agentic Coding Trends Report》,提出了 8 大趨勢預測。作為一名在企業級系統架構領域深耕多年的架構師,我將逐一拆解每個趨勢,結合實際的代理操作經驗,為你呈現這份報告背後的深層意涵。


    🏗️ 基礎趨勢:地殼級的轉變

    趨勢 1:軟體開發生命週期(SDLC)將劇烈改變

    架構師視角

    這不只是「AI 幫你寫 code」這麼簡單。報告指出,從機器碼到組合語言、從 C 到現代高階語言,每一層抽象都在縮短人類思維與機器執行之間的距離。而 Agentic AI 是這條演化路線上最新的一步——人機對話式程式開發

    作為架構師,我看到的核心轉變是:工程師的角色從「實作者」變成「指揮者」。這就像軍隊中從士兵升為指揮官——你不再親自衝鋒陷陣,而是制定戰略、分配資源、審查成果。

    報告特別提到一個關鍵數據:工程師約 60% 的工作使用 AI,但只有 0-20% 能完全委派。這說明了一個事實——AI 是協作者,不是替代者。你仍然需要深厚的工程知識來判斷 AI 產出的品質。

    實戰操作:如何用 Coding Agent 重塑你的 SDLC

    場景一:快速上手陌生程式碼庫

    報告指出新人上手時間將從數週壓縮到數小時。以下是實際操作方式:

    # 使用 Claude Code 探索陌生程式碼庫
    # 步驟 1:讓代理理解整體架構
    $ claude "分析這個專案的整體架構,包括主要模組、依賴關係、資料流向"
    
    # 步驟 2:針對特定模組深入了解
    $ claude "解釋 src/auth/ 目錄下的認證機制,包括 token 生命週期和刷新策略"
    
    # 步驟 3:理解業務邏輯
    $ claude "追蹤一個訂單從建立到完成的完整流程,列出涉及的所有服務和資料表"
    

    場景二:架構決策輔助

    # 讓代理幫你評估架構方案
    $ claude "我們正在考慮將單體應用拆分為微服務。
    分析目前的程式碼耦合度,識別可以獨立拆分的邊界上下文(Bounded Context),
    並評估每個拆分方案的風險和收益"
    
    # 代理會:
    # 1. 掃描所有模組間的依賴關係
    # 2. 識別高耦合和低耦合的邊界
    # 3. 提出具體的拆分建議和遷移路徑
    

    架構師建議:建立一份「AI 委派矩陣」——明確定義哪些任務適合完全委派、哪些需要協作完成、哪些必須人工處理。例如:

    • 完全委派:單元測試撰寫、程式碼格式化、簡單 CRUD API、文件生成
    • 協作完成:複雜業務邏輯、效能優化、資料庫 schema 設計
    • 人工主導:架構決策、安全審計、合規性審查、系統設計

    ⚡ 能力趨勢:代理能做什麼

    趨勢 2:單一代理演化為協調團隊

    架構師視角

    這是我認為最具顛覆性的趨勢。報告中提到 Fountain 公司透過階層式多代理協調(Hierarchical Multi-Agent Orchestration)實現了 50% 更快的篩選速度和 2 倍的候選人轉化率。

    從架構角度來看,Multi-Agent 系統本質上就是分散式系統設計——這正是我們架構師的核心能力。想像一下:每個 Agent 就是一個微服務,擁有獨立的 context window(類似獨立的記憶體空間),透過 Orchestrator(類似 API Gateway 或 Message Broker)進行協調。

    關鍵的架構模式有三種:

    1. Orchestrator Pattern(編排模式):一個中央代理分配任務、收集結果
    2. Pipeline Pattern(管線模式):代理們串聯處理,每個處理完交給下一個
    3. Swarm Pattern(群體模式):多個代理平行處理,最後彙整結果

    實戰操作:建構多代理工作流

    場景:用多代理系統進行完整的 Feature 開發

    # 使用 Claude Code 的 subagent 機制
    # 主代理(Orchestrator)接收需求後,分派給專業子代理
    
    # Agent 1: 架構分析代理
    $ claude "作為架構分析代理,分析「新增用戶通知系統」這個需求,
    識別需要修改的模組、新增的介面、以及對現有系統的影響"
    
    # Agent 2: 測試代理 — 平行撰寫測試
    $ claude "作為測試代理,為用戶通知系統撰寫完整的測試案例,
    包括單元測試、整合測試、邊界條件測試"
    
    # Agent 3: 實作代理 — 根據架構分析進行開發
    $ claude "根據以下架構分析結果,實作用戶通知系統的核心模組..."
    
    # Agent 4: 安全審查代理
    $ claude "審查以下程式碼的安全性,檢查 OWASP Top 10 漏洞,
    特別關注輸入驗證、SQL Injection、XSS 防護"
    

    進階:使用 Claude Agent SDK 建構自動化多代理系統

    # 使用 Claude Agent SDK 建構 Multi-Agent Pipeline
    from claude_agent_sdk import Agent, Orchestrator
    
    # 定義專業代理
    architect_agent = Agent(
        role="architect",
        system_prompt="你是資深架構師,負責分析需求並產出技術設計文件",
        tools=["file_read", "codebase_search"]
    )
    
    test_agent = Agent(
        role="tester",
        system_prompt="你是測試工程師,負責撰寫全面的測試案例",
        tools=["file_write", "test_runner"]
    )
    
    impl_agent = Agent(
        role="implementer",
        system_prompt="你是實作工程師,根據設計文件和測試案例進行開發",
        tools=["file_write", "file_edit", "bash"]
    )
    
    reviewer_agent = Agent(
        role="reviewer",
        system_prompt="你是 Code Reviewer,負責品質和安全審查",
        tools=["file_read", "security_scanner"]
    )
    
    # 建構協調器
    orchestrator = Orchestrator(
        agents=[architect_agent, test_agent, impl_agent, reviewer_agent],
        workflow="sequential",  # 或 "parallel", "hierarchical"
        checkpoints=["after_design", "after_tests", "after_implementation"]
    )
    
    # 執行
    result = orchestrator.run("實作用戶通知系統,支援 Email、SMS、Push 三種管道")
    

    架構師建議:不要一開始就追求複雜的多代理架構。先從兩個代理開始——一個負責實作,一個負責審查——建立基本的「雙人檢查」機制,再逐步擴展。


    趨勢 3:長時間運行的代理建構完整系統

    架構師視角

    報告中的 Rakuten 案例極具說服力:Claude Code 在 7 小時內自主完成了在一個 1,250 萬行程式碼庫中的複雜實作,達到 99.9% 的數值精確度。

    從架構角度來看,長時間運行的代理本質上需要解決三個核心問題:

    1. 狀態管理(State Management):代理如何在長時間任務中維持一致的上下文?
    2. 錯誤恢復(Error Recovery):當代理遇到錯誤時,如何回退並嘗試替代方案?
    3. 檢查點(Checkpointing):如何設置人工介入點,確保代理沒有偏離方向?

    這些問題與我們設計分散式系統時面臨的挑戰如出一轍。Saga Pattern、Circuit Breaker、Retry with Backoff——這些架構模式都可以類比到代理系統的設計中。

    實戰操作:設置長時間運行的代理任務

    # 場景:讓代理自主重構整個模組
    
    # 步驟 1:提供清晰的目標和邊界
    $ claude "重構 src/legacy/payment/ 模組:
    目標:將回調式(callback)程式碼遷移到 async/await 模式
    邊界:
    - 不要修改公開 API 介面
    - 保持所有現有測試通過
    - 每完成一個檔案就執行測試套件
    - 如果測試失敗,回退該檔案的變更並報告問題
    檢查點:每處理 5 個檔案暫停,等待我的確認"
    
    # 步驟 2:利用 CLAUDE.md 提供長期上下文
    # 在專案根目錄建立 CLAUDE.md,讓代理記住專案規範
    
    # 步驟 3:使用 Git Worktree 隔離工作
    $ git worktree add ../payment-refactor feature/payment-async
    $ cd ../payment-refactor
    $ claude "開始重構工作..."
    

    架構師建議:為長時間代理任務設計「護欄(Guardrails)」——明確定義代理不能做的事情比定義它應該做什麼更重要。這就像 Kubernetes 的 Resource Limits 一樣,防止代理失控。


    趨勢 4:人類監督透過智慧協作擴展

    架構師視角

    報告揭示了一個「協作悖論」:工程師 60% 的工作使用 AI,但只有極小比例能完全委派。這不是 AI 能力不足,而是信任需要逐步建立

    從系統設計角度,這就是漸進式信任模型(Progressive Trust Model)

    • Level 0 – 監控模式:代理執行,人類逐行審查(適合初期導入)
    • Level 1 – 抽查模式:代理執行,人類抽樣審查(適合建立信任後)
    • Level 2 – 異常模式:代理執行 + 自我審查,只有異常才通知人類
    • Level 3 – 自主模式:代理全自主執行,人類只在策略層介入

    實戰操作:建立智慧監督機制

    # 利用 Claude Code 的 Hooks 機制建立自動化審查
    
    # 在 .claude/settings.json 中設定 hooks
    {
      "hooks": {
        "PostToolUse": [
          {
            "matcher": "Edit|Write",
            "command": "npm run lint --fix && npm test -- --bail"
          }
        ],
        "PostCommit": [
          {
            "command": "npm run security-audit"
          }
        ]
      }
    }
    
    # 這樣每次代理修改程式碼,都會自動:
    # 1. 執行 lint 檢查
    # 2. 執行測試
    # 3. 提交時執行安全掃描
    # 形成自動化的品質護欄
    

    場景:使用代理審查代理的產出

    # Agent A: 實作功能
    $ claude "實作用戶匯出功能,支援 CSV 和 Excel 格式"
    
    # Agent B: 審查 Agent A 的產出(獨立 context,避免偏見)
    $ claude "請審查以下程式碼變更(git diff),從以下角度:
    1. 安全性:是否有 injection 風險?大檔案是否會 OOM?
    2. 效能:匯出 100 萬筆資料時的記憶體和時間複雜度?
    3. 可維護性:是否符合專案既有的設計模式?
    4. 邊界條件:空資料、特殊字元、併發匯出等情況?"
    

    架構師建議:建立「代理信任儀表板」——追蹤代理產出的品質指標(測試通過率、Code Review 修改率、Bug 回報率),用數據驅動你的信任等級調整。


    趨勢 5:代理編程擴展到新領域和新用戶

    架構師視角

    報告指出 AI 正在打破「寫程式的人」和「不寫程式的人」之間的界線。這對架構師來說意味著一個巨大的設計挑戰:如何設計系統讓非技術人員也能安全地進行自動化

    想像一下你的法務團隊用 AI 建立了合約審查自動化、行銷團隊建立了 A/B 測試分析管線、HR 建立了招聘數據儀表板——這些都直接連接到你的核心系統。沒有良好的架構,這就是一場災難。

    實戰操作:為非技術團隊建立安全的代理環境

    # 場景:讓數據分析師用代理進行資料分析
    
    # 方式 1:提供受限的 Claude Code 環境
    # 建立專用的 CLAUDE.md 限制代理行為
    # 允許:讀取 /data/ 目錄、執行 Python 腳本、產生圖表
    # 禁止:修改任何程式碼、存取生產資料庫、安裝新套件
    
    # 方式 2:使用 MCP (Model Context Protocol) 提供安全的 API 存取
    {
      "mcpServers": {
        "company-data": {
          "command": "node",
          "args": ["mcp-server/data-access.js"],
          "env": {
            "DB_ROLE": "readonly",
            "MAX_ROWS": "10000"
          }
        }
      }
    }
    

    架構師建議:為每個非技術團隊的代理使用場景設計「沙盒(Sandbox)」。就像你不會給實習生 production 的 root 權限一樣,非技術人員的代理也需要明確的權限邊界。使用 Least Privilege 原則,只給代理完成任務所需的最小權限。


    📊 影響趨勢:代理將改變什麼

    趨勢 6:生產力提升重塑軟體開發經濟

    架構師視角

    報告中最引人注目的數據是:約 27% 的 AI 輔助工作是「原本不會做的事」。這不只是效率提升,而是價值創造

    從架構師角度,我把這稱為「技術債務清算窗口」。過去那些因為「沒時間」而累積的技術債——老舊的 API 版本、缺失的測試、過時的文件、效能瓶頸——現在都可以系統性地被代理消滅。

    報告提到三個乘數效應(Three Multipliers):代理能力提升 × 協調改進 × 人類經驗 = 指數級加速。這不是線性增長,而是複合增長。就像 DevOps 革命一樣,三者相互增強。

    實戰操作:系統性消滅技術債

    # 場景:用代理批量處理技術債
    
    # 步驟 1:讓代理掃描並分類技術債
    $ claude "掃描整個程式碼庫,識別以下類型的技術債:
    1. 已廢棄的 API 調用(deprecated warnings)
    2. 缺少測試覆蓋的關鍵路徑
    3. 硬編碼的配置值
    4. 重複的程式碼(DRY 違反)
    5. 不一致的錯誤處理模式
    按嚴重程度和修復成本排序,產出優先級清單"
    
    # 步驟 2:逐項自動修復
    $ claude "根據優先級清單,從最高優先級開始:
    - 每修復一項,執行完整測試套件
    - 每項修復獨立一個 commit
    - 如果修復可能影響其他模組,標記為需要人工審查"
    

    架構師建議:建立「20% 代理時間」制度——每個 Sprint 撥出 20% 的代理運算資源專門處理技術債。用代理來做那些人類「知道該做但沒時間做」的事。


    趨勢 7:非技術用例擴展至全組織

    架構師視角

    報告中 Anthropic 自家法務團隊的案例最具說服力:一位沒有程式碼經驗的律師用 Claude Code 建立了自助服務工具,將行銷審查周轉時間從 2-3 天縮短到 24 小時。

    Zapier 更是達到了 89% 的全組織 AI 採用率,部署了 800+ 個內部 AI 代理。

    作為架構師,這意味著你需要開始思考「代理治理(Agent Governance)」:誰可以建立代理?代理可以存取哪些系統?如何追蹤和審計代理的行為?代理出錯時的責任歸屬?

    實戰操作:建構組織級代理平台

    # 架構建議:建立內部的 Agent Platform
    
    # 1. 定義代理模板(Agent Templates)
    # marketing-agent-template.yaml
    name: marketing-automation-agent
    permissions:
      read: [marketing-data, analytics-api]
      write: [marketing-reports, draft-content]
      execute: [data-analysis-scripts]
      forbidden: [production-db, source-code, deployment]
    resource_limits:
      max_tokens_per_day: 1000000
      max_api_calls: 500
    audit:
      log_all_actions: true
      alert_on: [data-access, external-api-call]
    
    # 2. 建立自助服務入口
    # 非技術人員透過 Web UI 與代理互動
    # 所有操作都在沙盒環境中執行
    
    # 3. 監控儀表板
    # 追蹤全組織的代理使用情況:
    # - 各部門使用量和成本
    # - 代理產出的品質指標
    # - ROI 分析(節省的人力時間 vs 代理成本)
    

    架構師建議:把「代理治理」視為與「資料治理」同等重要的架構議題。建立 Agent Center of Excellence (ACoE),制定組織級的代理使用政策、安全標準和最佳實踐。


    趨勢 8:雙重用途風險需要安全優先架構

    架構師視角

    這是最被低估但最重要的趨勢。報告指出:同樣的 AI 能力既能強化防禦,也能助長攻擊

    從架構角度,這意味著安全不再是事後補救,而必須是設計時的第一考量(Security by Design)。當任何工程師都能用 AI 進行深度安全審查時,攻擊者也能用同樣的 AI 尋找漏洞。

    關鍵的架構原則:

    • Zero Trust Architecture:不信任任何內部或外部的代理輸出
    • Defense in Depth:多層防禦,即使一層被突破仍有保護
    • Shift Left Security:在開發早期就嵌入安全檢查

    實戰操作:用代理建立安全防線

    # 場景 1:自動化安全審查管線
    # 在 CI/CD Pipeline 中嵌入 AI 安全審查
    name: AI Security Review
    on: [pull_request]
    jobs:
      security-review:
        steps:
          - name: AI Security Scan
            run: |
              claude "審查這個 PR 的所有變更:
              1. OWASP Top 10 漏洞掃描
              2. 硬編碼的密鑰或憑證
              3. SQL/NoSQL Injection 風險
              4. XSS 和 CSRF 防護
              5. 權限提升風險
              6. 敏感資料洩漏
              以 SARIF 格式輸出結果"
    
    # 場景 2:用代理進行威脅建模
    $ claude "對以下系統架構進行威脅建模(STRIDE 方法):
    - 前端:React SPA
    - API Gateway:Kong
    - 後端:Spring Boot 微服務群
    - 資料庫:PostgreSQL + Redis
    - 訊息佇列:Kafka
    - 部署:Kubernetes on AWS"
    
    # 場景 3:AI 紅藍對抗
    # 用一個代理扮演攻擊者(Red Team)尋找漏洞
    # 另一個代理扮演防禦者(Blue Team)修補漏洞
    

    架構師建議:建立「AI 紅藍對抗」機制——用一個代理扮演攻擊者尋找漏洞,另一個代理扮演防禦者修補漏洞。這種持續的對抗演練能顯著提升系統安全性。


    🎯 我的行動建議:2026 年架構師優先事項

    綜合以上 8 大趨勢,我給出以下具體的行動清單:

    立即行動(本月)

    1. 建立 CLAUDE.md:為每個專案建立代理上下文文件,定義程式碼規範、禁止事項、測試要求
    2. 設定 Hooks:配置自動化品質護欄,確保代理每次修改都通過基本檢查
    3. 導入雙代理審查:一個代理寫程式碼,另一個代理審查,建立基本的品質保障

    短期規劃(本季)

    1. 建立 AI 委派矩陣:明確定義團隊中哪些任務適合委派給代理
    2. 啟動技術債清理專案:利用代理系統性處理積壓的技術債
    3. 設計代理安全框架:定義代理的權限邊界、審計機制、異常處理

    中期布局(今年)

    1. 建構多代理協調系統:根據團隊需求設計 Orchestrator 架構
    2. 推動非技術團隊採用:為業務團隊建立安全的代理沙盒環境
    3. 建立 Agent Governance 體系:制定組織級的代理使用政策和治理框架

    結語

    這份報告的核心訊息很清楚:2026 年的軟體開發正在從「寫程式碼」轉向「指揮寫程式碼的代理」。但這不是要取代工程師——恰恰相反,它要求工程師具備更高層次的思考能力:架構設計、系統思維、品質判斷、安全意識。

    作為架構師,我們正處於一個前所未有的機遇期。那些能夠設計良好的代理協作架構、建立有效的人機協作模式、並在組織層面推動代理治理的架構師,將成為這場變革的引領者。

    最後的忠告:不要等到完美才開始。今天就打開 Claude Code,給它一個你一直拖著沒做的重構任務,開始建立你的代理協作經驗。實踐出真知。

    本文基於 Anthropic《2026 Agentic Coding Trends Report》撰寫。報告原文共 18 頁,涵蓋基礎趨勢、能力趨勢、影響趨勢三大類別共 8 個趨勢預測。