Loop Engineering 描繪的畫面很美:你睡一覺,AI 在背景重修十幾輪,早上把通過測試的成品放在你桌上。
實際跑過的人都知道另一個版本。目標定得不夠準,或檢查有漏洞,它整夜在修同一個錯,改、跑、報錯、再改成另一種錯,每一輪都在燒 token。早上專案還是壞的,帳單先到了。
所以在讓迴圈自己跑之前,要先裝兩樣東西:硬性停止條件,保護錢包;執行邊界,保護專案。
防暴走熔斷機制
啟動自動修正。
檢查輪數、Token、時間上限。
偵測連續無進展。
停止並保留現場,等待人類介入。
三道硬性停止,寫進系統不寫進祈禱
最大輪數。啟動迴圈前先定上限:跑到第五輪還沒過,強制停止並通知人。Claude Code 在非互動模式(claude -p)有 --max-turns 旗標,到了就以錯誤結束。預設是沒有上限的,所以你不設它就不會停。
預算上限。同樣在非互動模式,--max-budget-usd 5.00 這類旗標會在 API 花費到達上限時停止,子代理的花費也算進去。這是最直接的錢包保險。網頁版或其他工具沒有這個旗標的話,退而求其次,在提示詞裡寫死「最多修三輪」,並且每輪要它回報是第幾輪。
連續無進展就熔斷。有時候第二輪它就已經卡死了,讓它跑滿五輪只是白燒。規則寫成:連續三輪的錯誤訊息完全相同,或評分連續三輪沒有提升,立即停止,保留現場,等人介入。這條可以寫在提示詞裡(它會盡量遵守),更可靠的做法是寫成 hook 或腳本在外面數。
停下來的時候有一個原則:保留現場,不要清理。你要看得到它卡在哪一輪、最後一次錯誤是什麼,才能判斷是目標的問題還是檢查的問題。
邊界:防止它「為了過關而作弊」
迴圈的目標是「測試通過」。當它改不動程式的時候,最省力的路是什麼?改測試。把驗收門檻調低、把那個一直失敗的測試案例刪掉、或把預期值改成它算出來的錯誤值。這不是它壞心,是你給它的目標就是「綠燈」,而這是通往綠燈最短的路。
所以邊界的第一條永遠是:不准修改、刪除任何測試檔案,不准改 linter 或驗收設定。寫在提示詞裡是第一層;更可靠的是在權限設定裡把測試資料夾設成唯讀,或用 hook 在它要寫入測試資料夾時直接擋下。寫在指令裡的是便條,設在權限裡的才是護欄。
第二條是活動範圍。交辦時說清楚:你可以改 src/components/ 底下的檔案,不能動資料庫 schema(資料表的結構定義)、不能改全域設定檔。這防的是另一種常見災難:為了修一個按鈕,它順手重構了半個專案。
第三條是不可逆的動作要人簽名:刪檔、對外發送、花錢、改正式資料。這一條在誰當總指揮那篇會展開成一張「誰有權喊停」的表。
動手做
迴圈寫在提示詞裡的話,把這段安全段落接在迴圈規則(把自己從迴圈換掉那篇的第二段提示詞)後面:
停止條件(任何一條成立就停下來,保留現場,回報卡在哪一輪、最後的錯誤是什麼,不要清理也不要繼續): 1. 已經修了 5 輪還沒通過。 2. 連續 3 輪的錯誤訊息完全相同,或評分連續 3 輪沒有提升。 3. 你發現要通過必須修改測試、驗收清單或門檻。 邊界(違反任何一條視為失敗,不是通過): 1. 不准修改或刪除任何測試檔案、驗收清單、linter 設定。 2. 只能修改:(列出允許的資料夾)。不能動:資料庫結構、全域設定、(其他)。 3. 刪除檔案、對外發送、任何會花錢的動作,先停下來問我。 每一輪結束回報:第幾輪/改了什麼/測試結果。
Claude Code 非互動模式跑自動任務時,加上限:claude -p --max-turns 20 --max-budget-usd 5.00 "你的任務"。到了任一上限它就停。數字依任務大小調,重點是一定要有,預設是沒有的。想把「不准改測試」變成真正的護欄,hook 擋金鑰那篇有做法。
裝對了的樣子:每個自動迴圈啟動前,你都答得出「最多幾輪、最多花多少、無進展多久停」;迴圈停下來的時候,你看得到它卡在哪一輪、最後一個錯誤是什麼;測試資料夾在迴圈跑完後的 diff(改動比對)裡是乾淨的;它曾經主動停下來說「要通過必須改測試,我停了」——這是邊界生效的證據。
回想上一次 AI「終於通過測試」的情況,打開那次的 diff,看它有沒有動到測試資料夾。很多人第一次看會發現有。
迴圈預設不會停,上限要你設,不設就是沒有。三道停止:最大輪數、預算上限、連續無進展熔斷,停下來保留現場。目標是「綠燈」時,最短路徑是改測試,所以第一條邊界永遠是不准改測試——而且寫在提示詞裡是第一層,設在權限裡才擋得住。
站內延伸
- AI 改測試作弊的完整防法 → 先紅燈再綠燈
- 把邊界變成物理防線 → hook 擋金鑰
- 邊界的權限設定版 → 找方法AI Agent 權限最小化
來源: Claude Code:CLI reference(--max-turns 預設無上限、--max-budget-usd 含子代理花費,皆為 print mode 旗標);便條與護欄的區分出自 Claude Code memory 文件。三道停止與三條邊界的寫法是我自己的整理。
它預設不會停,
不設就是沒有
什麼時候看這張:你讓它自己修到通過,隔天早上東西還是壞的,帳單先到。
- 停下來要保留現場,你才看得出卡在哪一輪
- 目標是綠燈時,最短的路就是去改測試
- 說清楚它能動哪裡,免得修一顆按鈕重構半個專案
第一個動作回去看上一次「終於通過測試」的改動,檢查它有沒有動到測試檔案。五分鐘,很多人第一次看會發現有。