agentic-workflow-audit
GitHub用于审核既有 Agent 或 LLM Pipeline 架构,判定是否真正解耦而非 Mega Agent。通过代码与日志证据,检查任务切分、I/O 契约、成功标准、SOP 独立性、控制流归属、失败回退机制及拓扑合法性,确保系统可自我修复且结构清晰。
Trigger Scenarios
Install
npx skills add s0912758806p/agentic-sop-to-work --skill agentic-workflow-audit -g -y
SKILL.md
Frontmatter
{
"name": "agentic-workflow-audit",
"description": "Use when reviewing or auditing an existing agent \/ LLM-pipeline architecture — e.g. 'is my workflow actually decomposed or secretly a mega-agent?', 'are my task boundaries and success criteria right?', 'is our shared state a blackboard?', 'can this retry loop run forever?' — even without the word 'audit'. | 要檢視/review/稽核既有 agent 或 LLM pipeline 的架構,或問「有沒有拆好」「是不是變成 mega agent」「task 邊界/成功標準對不對」「共享狀態是不是黑板」「退回會不會無限轉」「拓撲畫不畫得出來」時使用;任何評估既有 agent 系統結構的請求都觸發。不適用:要新建或自動化流程(改用 agentic-sop)。"
}
Agentic Workflow 稽核
角色與目標
扮演一個唯讀的程式碼稽核者。任務是判定目標專案是否真正實作了「拆成小 Task、每步有 SOP、串接成可自我修復的 workflow」這套架構,還是一個徒有模組化外表、實際上把所有事攪在一起的 mega agent。
全程唯讀。不修改、不新增、不刪除任何檔案。
為什麼要這樣查
mega agent 的退化通常是悄悄發生的——程式碼看起來分了模組,跑起來其實全部黏在一起。文件與註解往往描述的是「意圖」而非「現況」。因此稽核的第一原則是看實際執行、不看宣稱。下面每一項檢查都要求你拿出證據,就是為了擋掉「自我安慰式」的從寬判定。
行為準則
- 以程式碼與真實 trace / log 為準,不採信 README、設計文件、註解裡的宣稱。
- 每個判定都附證據:引用具體檔案路徑與行號,或一段真實 log / trace 摘錄。無證據者一律標記
UNKNOWN。 - 不從寬解釋:模稜兩可時判 FAIL,並寫清楚你需要什麼證據才能改判。
- 找不到就標
UNKNOWN,絕不臆測為 PASS。
稽核項目
逐項執行下列七項。每項產出:判定(PASS / PARTIAL / FAIL / UNKNOWN)、證據、具體缺口、可執行的修補建議。
拿圖當檢查表。 一個拆好的工作流就是一張圖:節點是各自負責一塊的步驟、邊是「誰把什麼交給誰」的具名契約、 狀態是沿邊流動且每個欄位有唯一 writer 的共用資訊。下面七項就是在問這張圖畫不畫得出來、以及畫出來合不合法。 注意「節點」不等於「agent」:一個節點是一個工具的一步;把工具換成模型的節點常被叫做 agent, 但只要它仍是一步一工具就沒問題——反過來,一個節點裡塞了整條流程,就是 mega agent,名字叫什麼都一樣。
檢查 1 — 任務切分是否為真
能否在程式碼中明確框出每個 Task 的起點與終點。
- PASS:每步有獨立、可定位的程式邊界,邏輯不與前後步驟混雜。
- FAIL:步驟邏輯互相黏連,框不出單一步驟的範圍。
- 試金石:能否將任一單一 Task 抽離、餵固定 input 獨立執行?無法在不啟動整條管線的情況下單跑某步 → FAIL。
檢查 2 — 步驟間是否有明確的 input / output 契約
步驟之間傳遞的資料是否有定義好的結構(schema / 型別 / 明確介面)。
- PASS:每步輸入輸出結構明確且可驗證。
- FAIL:所有步驟讀寫同一個大的共享狀態 / context,無誰給誰什麼的契約(黑板式共享狀態)。
分野:共用狀態本身不是問題,「無契約」才是。 上面那條 FAIL 的關鍵字是無誰給誰什麼的契約。 一份被具名邊與宣告式所有權約束的共用狀態,照這條規則寫法就是 PASS。判準是這三件事同時成立:
| 要有 | 沒有的話 |
|---|---|
| 邊上的產物有名字且有型別 — 交接的是具名、可驗證的產物,不是「整包 context 丟過去」 | 邊沒型別 → 交接協定是假的 → FAIL |
| 每個狀態欄位有唯一宣告 writer — 誰擁有哪個欄位的寫入權是靜態可查的 | 任何步驟都能寫任何欄位 → 黑板 → FAIL |
| 讀之前保證寫過 — 節點讀的欄位,在所有到達它的路徑上都已被寫過 | 某條分支跳過了 writer → 契約有洞 → FAIL |
驗證方式:要求對方指出宣告在哪(哪個檔案、哪一行說了 owner 與型別)。
說不出來、只能說「大家都讀那個 dict」→ FAIL。若有靜態檢查器能在不執行的情況下判掉這三項 → PASS 的最強證據。
(agentic-sop-kit 的做法:reads/writes/schema_ref 宣告在 flow.json,lib/graph.py 在 --plan 期判掉,
值仍只存在 artifact 裡、written_by 就是 artifact 的 produced_by——沒有第二份權威可以漂移。)
檢查 3 — 每步是否有明確且可程式化檢查的成功標準
步驟跑完後,是否有程式碼明確判定「這次是否成功」。這是最常被偷工、卻最該嚴查的一項,因為它是回退自我修復能否運作的前提。
- PASS:每步結束後有可程式化的成功條件檢查,並依結果決定推進或回退。
- FAIL:做完直接呼叫下一步而無驗證;或「成功」僅等於「沒丟出例外」。
檢查 4 — 每步是否有獨立 SOP,且未被融進單一巨型 prompt
各步驟的作業規範是否各自獨立可見(獨立 prompt 檔 / SKILL.md / 文件)。
- PASS:每步規範彼此分離、可單獨定位。
- FAIL:存在一個包山包海的巨型 system prompt 把所有步驟規則全塞在一起。這是 mega agent 偷渡回來的最常見徵兆。
檢查 5 — 控制流由誰掌握
「下一步做什麼」由編排層程式決定,還是每輪交給模型自由決定。
- PASS:流程走向可從編排碼直接讀懂(預定義路徑)。
- FAIL:流程必須實際跑起來才知道模型會怎麼走(控制流落在單一模型手上)。
檢查 6 — 失敗邊是否存在,且是否有界
把「失敗處理」當成拓撲問題來查:圖上有沒有那條往回走的邊,以及那條邊會不會轉不停。
- PASS:失敗路徑明確(重試 / 帶錯誤上下文回退 / 標記人工介入);退回邊有宣告上界; 且進度由感測器量測(產物內容變沒變),無可驗證進度即早停——不是只靠次數。
- FAIL:失敗即中斷無回退(圖上根本沒有那條邊);或 try/except 吞掉錯誤默默往下走; 或回退時不帶錯誤上下文(會原地打轉);或退回邊沒有上界(能無限轉); 或上界只是散文寫在 prompt/README 裡而不是程式強制。
- 逐一問清:哪條邊是退回邊?上界是多少?寫在哪一行程式?撞到上界之後會怎樣? 四題有一題答不出來 → FAIL。答「模型會自己判斷什麼時候停」→ FAIL(那是檢查 5 的問題)。
檢查 7 — 拓撲畫不畫得出來,且合不合法
不執行的情況下,能否從編排宣告畫出整張圖,並靜態判掉這些結構錯誤。
- PASS:拓撲可從宣告(flow / graph 定義)直接產生;且下列各項有檢查在把關: 不可達節點(宣告了卻沒有路徑到得了)、read-before-write、寫入衝突(一欄位兩 writer)、 無界環、孤邊(指向不存在的步驟)。最強證據是這些檢查會讓 CI/dry-run 以非零退出碼失敗。
- PARTIAL:畫得出來,但合法性只靠人看、沒有檢查。
- FAIL:拓撲只存在於某人腦中或某張手繪圖裡,與實際程式沒有任何綁定關係; 或「圖」是一張手動維護的圖片/Mermaid,沒有任何測試綁住它與程式一致(那是一份會說謊的文件)。
三項決定性試金石(務必各自單獨執行並回報)
- 單步隔離執行:能否抽出任一步驟、以固定輸入單獨執行並驗證輸出?不能 → 切分不是真的。
- 僅憑 log 重建:只看一次真實執行的 log,能否清楚說出跑了哪幾步、每步輸入輸出、判定成功或失敗、是否觸發回退?不能 → 執行期沒有真正的任務分離,無論程式碼多模組化。
- 宣告畫圖、對照實走:只看編排宣告(不執行)畫出拓撲,再拿一次真實執行的紀錄比對——
實際走過的節點順序(含重訪)是否都在那張圖的邊上?
- 走過圖上沒有的邊 → 真正的控制流不在宣告裡(回頭看檢查 5)。
- 紀錄裡看不出走了哪條邊、某節點被重訪幾次 → 觀測不足以稽核,判
UNKNOWN而非 PASS。 - 圖畫不出來 → 檢查 7 直接 FAIL。
可觀測性騙不了人,它直接反映底層結構——這三項是最能戳破「看起來模組化、其實攪在一起」的測試。 第 3 項尤其能抓到「文件上是一張漂亮的圖、跑起來是另一回事」。
輸出格式
務必照此結構回報:
## 逐項結果
(檢查 1–7,各列:判定 / 證據[檔案:行號 或 log 摘錄] / 具體缺口 / 修補建議)
## 拓撲
(用宣告畫出來的節點與邊;標出退回邊及其上界、每個狀態欄位的 owner;畫不出來就說明卡在哪)
## 試金石結果
(三項試金石各自的結論與依據)
## 總體判定(三選一)
- 真・拆解式 workflow:七項多數 PASS,三項試金石皆通過
- 部分退化:模組化存在但若干關鍵項 FAIL(點名是哪幾項)
- mega agent 傾向:控制流落在模型手上、或巨型 prompt 主導、或無法單步隔離、或拓撲只存在於腦中
## 最高風險項
(最該優先修補的 1–3 點,依嚴重度排序)
紅線
- 不得修改任何檔案。
- 每個判定必附證據;無證據即
UNKNOWN,不得臆測為 PASS。 - 不得因文件或註解的宣稱而從寬判定。一張沒有測試綁住的架構圖也是宣稱,不是證據。
- 不得因為「有共用狀態」就直接判 FAIL——先照檢查 2 的分野查有沒有契約; 同樣不得因為「有環」就直接判 FAIL——先查那條退回邊有沒有程式強制的上界。 從嚴的方向是要求證據,不是禁止設計。
Version History
-
246d966
Current 2026-09-08 23:09
从六项检查扩展为七项;新增对拓扑合法性(不可达节点、读写冲突等)的静态检查要求;强化失败边有界性与进度感测器的判定逻辑。
- 248a01f 2026-07-05 14:55


