最近讓一個 AI coding agent 獨自跑開發任務,模型用 GPT-5.3-Codex,開發方式採 Spectra 的 SDD(Specification-Driven Development)流程。Spectra 的概念是把需求規格結構化,讓 AI agent 跨 session 也能保持上下文,理論上這樣 agent 不會因為 context 斷掉就忘記在幹嘛。
設定上讓 agent 自己寫 cron job 定期檢查有什麼 task 沒做完,然後自動繼續。理論很美好,但實際上完全不是這樣——agent 一直「說說」而已,根本沒有真的執行。
去問進度,它回報得頭頭是道,然後沒有然後了。一小時後再問,一樣的回覆,task 一個都沒被清掉。更煩的是它不是每次都這樣,有時候狀態好、執行得很順,有時候就一直鬼打牆,完全沒有規律可言。網路上看到別人說讓 AI 跑一整晚自動完成開發,不知道到底是怎麼辦到的。
這篇是我與另一個 AI 討論、調整 agent 設定之後的記錄。不保證有效,純個人備忘。
問題一:執行約束不夠硬
原本的進度迴圈每輪只讀 task 清單、算剩餘數量,然後回報 total=N, next=xxx。這種設計只能知道「還有多少」,不能保證真的有清 task。Agent 說「下一個要做 xxx」,但說完就停了,下一輪又說一次一樣的話。
更根本的問題是「有效進度」根本沒定義清楚。沒有交付約束的狀態下,查狀態、整理思路、回覆訊息、承諾下一步,這些行為 agent 都可以自己當成進度。
所以同時做了兩件事:一是把 loop 的規則改死,每輪必須至少完成 1 個最小未完成 task,固定走完這個流程才算一輪——找 task、實作、最小驗證、更新清單、commit、補 memory note。二是在主規則檔補幾條硬性限制:
- 只有 commit hash、build/test 結果、task 數量下降才算有效進度
- 沒有新證據,不要回報進度
- 30 分鐘內沒有新 commit 或 task 沒下降,視為失敗節奏
- 被要求「做到結束」時,進入靜默執行模式,不要一直插嘴
回報格式也鎖死成:
hash: abc1234build: ✅tasks_done: task 3.1files: module.ts, tasks.mdblocker: nonehash: none 且 tasks_done: none 就是本輪沒有交付,不算。另外為了防止這個改法慢慢退化回去,加了一個 watchdog job 定期抽查最近的 loop 樣本,只要又出現「回報了但沒產出」的模式就告警。
問題二:啟動雜訊掩蓋真正的錯誤
Agent 的啟動規則會讀幾個固定檔案,但那些檔案根本不存在,每次啟動就噴一堆 ENOENT。這本身不是功能壞掉,但雜訊多了之後,真正有意義的錯誤會被淹沒——agent 到底是因為規則設定有問題才不動,還是單純啟動就爆了,很難分辨。直接補上 stub 版本把這些 ENOENT 壓掉,讓真正的問題比較好浮出來。
結果
調整之後,agent 從「說好要做、回完就停」變成真的會清 task、回報裡會有 commit hash 和 build 結果。不保證這套在別的 agent 上有效,架構不同、問題根源也不同,這只是我這邊的狀況。
回報錯字、失效連結,或告訴我你想看的延伸主題。