Teaching Doc · 教學文件

從零到懂 Agentflow

六堂課,一步步搞懂這套「讓 AI 開發變誠實」的系統。每堂配一個生活比喻和一個自我檢測 —— 你能自己講出來,才算真的懂。兩張圖(架構 + 流程)在對的地方等你對照。

0The Problem

為什麼需要 Agentflow?

AI 幫你寫程式時,會出錯,也可能唬爛 —— 明明有 bug,卻跟你說「做好了」。而且 session 一斷,脈絡就全丟。

Agentflow 要同時解決兩件事:(1) 讓工作可復原(斷了能接回);(2) 讓「做完」這件事不能靠模型自己說了算。

✎ 自我檢測

用一句話講:為什麼「AI 說做完了」這句話,不能直接相信?

先回答,再看參考答案

AI 的宣告可能與實際檔案或測試不符;要用可核查的證據驗收。

1The Creed

核心信條:說了不算,要有證據

整套系統就一句話:「一個宣稱,只有在指令輸出或檔案內容證實後,才成為事實。」

🎓 比喻 · 考卷

老師改考卷不聽你說「我都會」,他只看你交出來的那張卷子。Agentflow 的裁判也一樣 —— 不看模型講什麼,只看 git 事實和真實存在的檔案。

模型不能打字說「我審過了、我測過了」就過關。要有證據,證據要是真的能被指令驗出來的東西。

✎ 自我檢測

「裁判只吃 ______ + ______,不吃模型的散文。」填空。

先回答,再看參考答案

Git 事實與檔案/指令證據。機械規則能查形式與一致性,不能證明所有行為正確。

2The Round

一輪工作長什麼樣

從你打 godev 開始,到裁判放行,是一個「回合」:

首次使用:godev → agf init(建 notebook/ag.json/裝 hook)
已有專案:godev → 讀取既有設定與 notebook(不重跑 init)
      → resume-intake(有界快照)
      → 選路線做事(direct / advisors / full pipeline)
      → 寫 Reply 收尾
      → ⚖ Stop-hook 裁判 → exit 2 擋下(修正一次) / exit 0 不阻擋(不等於驗收完成)

三個保命設計:Fail-open(裁判自己壞掉就放行,不弄死你的 session)、Loop guard(一次修正不會變無限迴圈)、最多擋一次。

看圖 1Agentflow 架構圖 · 控制平面

完整生命週期資料流 + 五支柱 + ELI5 白話版 + 沙盒實測。看「The Round Lifecycle」那一節對照本課。

claude.ai/code/artifact/6558dff3…
✎ 自我檢測

裁判什麼時候跑?它只會回哪兩種結果?

先回答,再看參考答案

宿主在回合結束時執行 hook;exit 2 阻擋,exit 0 不阻擋。進行中、fail-open 或 loop guard 都可能不阻擋,不能據此宣稱任務完成。

3Two Judgments

兩個判斷,都由「同一個零 AI 裁判」做

一輪裡有兩個是非題,而且都在宿主端裁判做,不是外部 AI:

外部 AI 負責實質審查,給出 PASS 或 BLOCKING。確定性檢查核對報告格式、必要 verdict 與 commit;coordinator 再獨立驗證證據並決定接受。三者責任不同,機械檢查不能代替實質判斷。

看圖 2Agentflow 流程圖 · workflow

五條 lane 的流程。注意「審查判定」和「裁判閘門」都在同一列(Stop-hook 裁判 · 零 AI)—— 兩個判斷同源。

claude.ai/code/artifact/d46f3ba7…
✎ 自我檢測

外部 reviewer、確定性檢查與 coordinator,各自負責哪一種判斷?

先回答,再看參考答案

reviewer 做實質審查並給 verdict;檢查器核對格式與版本等契約;coordinator 獨立檢查證據並接受或拒絕。

4Review Pipeline

派審流水線:兩個小工人

🎨 比喻 · 畫圖交冰箱

小明畫完想貼冰箱,要先有人檢查。「安排的人」決定檢查多仔細;「跑腿的人」把影印本送去隔壁房間、關起門,給另一個老師看。

工人做什麼對應
安排的人看改了幾檔/幾行,自動選 narrow / targeted / fullcross-check-plan.js
跑腿的人clone 一份無 remote 影印本,在裡面 spawn 另一個 AI(codex/claude)審核external-runner.js

「別人」= 另一個 AI 模型,不是人。 為什麼要換一個?自己審自己會偏心。而且那個房間是影印本 —— 老師不能偷改你的真作品、減少誤操作原 repo 的機會。

child_process.spawn("codex", ["exec", "<審查指令>"], { cwd: 隔離clone })
//                    ↑ 另一個 AI       ↑ 要它做的事      ↑ 在影印本裡跑

回傳裡有一句很誠實的話:accepted: false —— 「程序跑完 ≠ 通過」。要不要接受,由 coordinator 判斷。

✎ 自我檢測

為什麼要在「影印本」裡審,而不是直接改你的真 repo?列兩個理由。

先回答,再看參考答案

獨立 clone 可減少誤改主工作區與一般 Git push 的風險;但移除 remote 不是 OS 或網路隔離,仍須限制寫入權限與資料存取。

5Keystone

拱心石:commit 核對(最容易卡的一課)

📝 比喻 · 蓋章的考卷

老師改完蓋「及格」章,你偷偷改了兩題答案 —— 這張還算及格嗎?不算!章蓋的是改之前那張。所以章上要寫「這是第幾版」。

裁判要求:報告的 Reviewed commit 必須位元組相等於本輪的 implementation commit。

出貨 = A · 報告認證 = A   →  PASS ✅
出貨 = B · 報告認證 = A   →  FAIL ❌  (審完又改一行 → 新 commit → 沒人審過)

跟 GitHub「push 新 commit 就作廢舊 approval」同一個道理。目的:保證「被審的」就是「出貨的」。

✎ 自我檢測

如果把這道 commit 核對拿掉,一個偷懶的 AI 可以鑽什麼漏洞?

先回答,再看參考答案

舊版審查可能被拿來為未審過的新實作背書。核對 final implementation commit 可拒絕這種不一致;不改實作的後续紀錄提交須依收尾規則判斷。

6When & Who

什麼時候觸發?我要自己設定嗎?

觸發時機:只有你「收尾一輪、而且真的改了程式(source/test/config/文件)」時,這條審查鏈才啟動。純聊天且沒有實作變更,或僅符合豁免條件的內部記錄更新,可能不需要最終審查。修改使用者文件仍屬審查範圍,小型純文件修改通常採 narrow。

要自己設定嗎?幾乎不用。

✎ 自我檢測

「深淺自動算,我只在想 ______ 它的時候才出手。」這輪你有觸發它嗎?為什麼?

先回答,再看參考答案

提高或明確豁免最終審查。是否需要審查看實際變更;使用者文件也算,skip-review 不會跳過其他必要關卡。

把原理用在驗收練習 →