Ralph Loop — 讓 Claude Code 自己跑到完為止
你有沒有遇過這種情境:跑測試,紅了三個,修好一個又冒出兩個,來回切 terminal 切到懷疑人生?
Ralph Loop 解決的就是這件事。它是 Claude Code 的自動迭代套件,概念很直接——讓 Claude 在同一個 session 裡反覆執行同一個 prompt,每一輪看到前一輪改過的檔案繼續修,直到條件滿足或者跑到你設定的上限為止。
Stop Hook 攔截機制
背後的原理不複雜。Ralph Loop 用的是 Claude Code 的 Stop Hook——Claude 每次想結束的時候,Hook 會攔截這個動作,檢查輸出裡有沒有出現你預設的完成標記 <promise>TAG</promise>。沒看到?同一個 prompt 再餵一次。看到了或者跑到最大次數?放行,結束。
等效的概念大概是這樣:
1 | while :; do |
但它不是真的 bash 迴圈。狀態會寫在 .claude/ralph-loop.local.md 裡面,用 YAML frontmatter 記錄目前跑到第幾輪、session ID、完成條件。
指令一覽
啟動迴圈:
1 | /ralph-loop "<你的 prompt>" --max-iterations 20 --completion-promise "DONE" |
取消:
1 | /cancel-ralph |
查看進度:
1 | head -10 .claude/ralph-loop.local.md |
兩個參數值得記住。--max-iterations 設定跑幾輪就強制停,建議永遠加上去——不然就是無限迴圈,API 額度燒到乾也不會停。--completion-promise 設定 Claude 輸出什麼文字代表「做完了」。
六種實戰場景
TDD 迴圈
跑測試 → 修 code → 再跑,直到全綠。這是 Ralph Loop 最對味的場景,因為 pass/fail 是客觀的,Claude 沒辦法作弊。
1 | /ralph-loop "執行 pnpm test,失敗就修實作,反覆到全部通過。\ |
逐步消化 Task List
讀取 .spec/tasks.md,找到下一個未完成的項目實作,做完打勾,直到清單清空。
1 | /ralph-loop "讀 .spec/tasks.md,實作下一個未完成任務,完成打勾。\ |
Lint 修到零錯誤
1 | /ralph-loop "執行 pnpm lint,修復所有報錯,重複直到零錯誤。\ |
Code Review 迭代
用 reviewer agent 掃一遍、修完再掃,直到沒有 CRITICAL 和 HIGH。
1 | /ralph-loop "用 code-reviewer agent 審查 src/ 變更,\ |
自動修 CI
CI 紅了就分析 log、修 code、push,直到全綠。
1 | /ralph-loop "檢查 gh run list 最新結果,\ |
漸進式重構
找到下一個用舊版 API 的檔案,改成新版,確認編譯,下一個。
1 | /ralph-loop "找到下一個使用舊版 API 的檔案,重構為新版 API,\ |
什麼時候不該用
Ralph Loop 的核心限制在一個字:客觀性。
有自動驗證的任務(測試結果、lint 輸出、CI status)非常適合。但需要主觀判斷的事情——「UI 調到好看」「文案寫到滿意」——Claude 可能會提前輸出 <promise> 來脫離迴圈。它不是故意騙你,是它真的覺得「差不多了」,而你可能不同意。
| 場景 | 適合? | 原因 |
|---|---|---|
| TDD / lint 零錯誤 | 非常適合 | 有明確的自動驗證 |
| 逐步實作 task list | 適合 | 有 checkbox 當進度指標 |
| 自動修 CI | 適合 | CI status 可驗證 |
| UI 調整到「好看」 | 不適合 | 主觀判斷,Claude 會提前逃跑 |
| 生產環境 debug | 不適合 | 需要人類即時決策 |
Prompt 撰寫要點
三個原則。第一,完成條件要寫清楚——在 prompt 裡明確告訴 Claude 什麼時候該輸出 <promise>TAG</promise>。第二,安全出口要設好——--max-iterations 永遠加,然後在 prompt 裡寫「如果卡住就記錄 blocker」。第三,分階段拆解——複雜任務拆成 Phase 1/2/3,最後一個 phase 才輸出 promise。
另外一個值得注意的:Ralph Loop 只影響啟動它的 session。同專案開了其他 Claude Code 視窗不會被攔截,可以安心繼續做別的事。
Ralph Loop 把「人盯著 terminal 等結果再手動重跑」的迴圈自動化掉了。TDD、lint、CI 這些本來就是機械式重複的流程,交給 Hook 處理剛好。下次跑測試跑到天荒地老的時候,不妨試試看。








