快轉到主要內容

Ralph Wiggum 迴圈與 Stop Hook:讓 AI 24 小時自動寫程式

Ai Vibe Coding Claude Code
好豪
作者
好豪
Google 資料科學家,以部落格寫作記錄自己的知識焦慮,記下我看過的書、寫過的程式碼、以及數據分析工作的見聞。歡迎透過 此表單 點播新文章、或者給部落格任何回饋!
目錄
【 Claude Code 教學 】系列文
⑧ 本文

真正的軟體工程專家,絕對會反覆強調人工審查 AI 生成的程式碼有多重要,但一定有些檢查項目(像是單元測試)很繁瑣又花時間,讓你很想全部丟給 AI。夢幻情境會是:你上床睡覺以前給 AI 下了一個任務,隔天早上醒來後,6 個全新的程式庫已經完成、並通過所有測試!

讚吧 (ゝ∀・)b

這個夢幻情境已經成真了!Claude Code 創造者 Boris Cherny 親自分享了他的 AI 實際用法,透過 Ralph Wiggum Loop,就能達成這樣的體驗。

這篇文章將介紹 Claude Code 裡的 Ralph Wiggum Plugin 外掛是什麼、以及怎麼使用。

(本文會混用 Plugin、外掛、Loop、方法、技術等關鍵詞來稱呼 Ralph Wiggum,講的都是 同一個 Claude Code Plugin

Claude Code 元老就是這麼做
#

Boris Cherny 是 Claude Code 創辦者之一,他在 X.com 的分享 中,提到他本人的使用數據:

「在過去 30 天內,我完成了 259 個 Pull Requests、新增 40,000 行程式碼
每一行都是由 Claude Code + Opus 4.5 撰寫的。」

「Claude 能夠持續運作數分鐘、數小時,甚至數天(使用 Stop hooks)。
軟體工程正在改變,我們正進入程式設計歷史的嶄新時代。」

過去這陣子真的經歷了很大的轉變,在 2024 年底,Claude 還在為產生 bash 指令時的跳脫字元問題掙扎,只能運作幾秒或幾分鐘。而到了今天的 2026 年開頭,它已經能夠連續工作數天,完成整個專案的開發。

也正是「Claude 連續運作數天」這一句,引起我的興趣。

Boris 在 Threads 上 分享的 Claude Code 使用技巧,明確提到他使用的是 Ralph Wiggum 外掛 來執行要跑超久的任務。

(截圖:Boris 的 Threads 貼文

他更分享了實戰案例:在 Y Combinator 黑客松,Ralph Wiggum 外掛一夜之間產出了 6 個順利可用的程式庫;另個案例是一位聰明的工程師在學會 Ralph Wiggum 技術後,用來外包接案,以 297 美元的 API 成本完成了一個價值 50,000 美元的合約。

Ralph Wiggum Loop 的創始者是誰?不是 Claude Code!(點擊展開 ▼ )

Ralph Wiggum Loop 方法的創始者是 Geoffrey Huntley。他創立此方法是為了克服 AI Agent 常見的「偷懶」問題。即 AI 在處理複雜任務(如建構後端或除錯)時,往往寫了幾行程式碼或忽略了錯誤,就自信地宣稱任務已完成並過早退出對話。

Huntley 的工作哲學核心在於「迭代進步比完美更重要」 (Iteration > Perfection)。他認為在 AI 開發中,失敗經驗都是訓練數據(Failures are data),那些決定論式的錯誤(Deterministically bad,換言之,隨機的錯誤)其實是極具價值的資訊,能引導開發者像在幫樂器調音一樣不斷微調提示詞。他強調開發者必須具備強大的信念,相信「最終一致性」 (Eventual Consistency),即透過 AI 頑固且不間斷的自我修正循環,最終一定能達成正確的目標狀態。

Huntely 在建立 CURSED 語言的過程中提到:

「建造軟體需要極大的信念和對最終一致性的相信。Ralph 會考驗你。每次 Ralph 在建立 CURSED 時走錯方向,我都沒有責怪工具;相反地,我審視自己。每次 Ralph 做了壞事,我就調整 Ralph,就像幫吉他調音一樣。」

所以,Ralph Wiggum 究竟是什麼厲害的方法?我們從「為什麼」需要它的緣由開始談。


為什麼我們需要 Ralph Wiggum Loop?
#

問題:AI 代理會「偷懶」?
#

大多數的 AI 輔助開發,會像是雇用了一個會偷懶的實習生,你必須不斷地追蹤進度、指出錯誤,這反而是增加了管理成本。惱人的情況包括:

  1. 提早結束:例如 AI 在建立後端系統時,可能只寫了幾個檔案、忽略了資料庫架構,就自信地宣稱任務完成
  2. 成功的幻覺:為了節省 Token、或單純認為自己做完了,AI 會產生「已經成功」的幻覺,導致你必須花時間手動檢查、並提醒它修復遺漏的細節
  3. 缺乏自我修正:一旦對話結束,AI 就不會再主動檢查之前的錯誤,除非你再次介入

解決方案:逼 AI 堅持下去
#

Ralph Wiggum Loop 的核心概念是:不讓 AI 輕易退出,直到任務真正完成。

它透過 Claude Code 的 Stop Hook 機制來實現:

  1. 當 Claude 完成工作、並嘗試結束對話時,Stop Hook 會攔截這個退出動作
  2. 檢查輸出內容是否包含你事先定義的「完成承諾」(例如 DONEFIXED
  3. 如果沒找到,就把相同的提示詞重新餵回給 Claude
  4. Claude 會讀取之前的執行記錄、發現錯誤(例如測試失敗),然後在新的迴圈中嘗試改進程式碼
  5. 持續這個過程,直到真正完成工作(或者達到事先設定的最大迭代次數)

趣味命名:為什麼叫 Ralph Wiggum?
#

Ralph Wiggum 這個名稱來自《辛普森家庭》中的角色,他是一個天真、經常做傻事、卻又異常執著的小男孩。

Ralph Wiggum 角色
《辛普森家庭》的角色 Ralph Wiggum

Ralph 在劇中的有趣台詞之一是:

Me fail English? That's unpossible!
(我英文不及格?那不可能啦!)

這種「即使失敗也堅持下去」的精神,完美體現了這個 Ralph Wiggum 這個方法的核心理念。

就像 Ralph 這個角色雖然常出錯、甚至是糟糕到很明顯,卻能透過不斷的迭代與改進,最終達成目標。這正是 AI 開發需要的模式:在一個不確定的世界中,透過可預測的失敗模式來達成最終的成功


Ralph Wiggum Loop 到底是什麼?如何運作?
#

核心定義
#

Ralph Wiggum Loop(也稱為 Ralph Loop)是一種強制 AI 堅持下去(Force Persistence)的迭代開發方法論。Ralph 最原始的形式,單純是一個 Bash 迴圈

while :; do
  cat PROMPT.md | npx --yes @sourcegraph/amp 
done

而在 Claude Code 中,它優雅地被實作為一個 外掛(Plugin),利用 Stop Hook 機制在單一 session 內部建立自我參照的回饋迴圈。

用一個簡單的比喻來說,Ralph Loop 是不讓 AI 員工下班的血汗工廠,Ralph Loop 給 AI 員工一間「除非事情做完、否則門會鎖死」的辦公室。它可能要嘗試 10 次、20 次才會做對,但最後一定會拿著正確的成果(DONE)出來見你。這個機制確保 AI 不會偷懶提早下班,而是會持續工作直到任務真正完成。

沒做完不能走,真的血汗 (・_・;

運作原理
#

讓我們來認識 Ralph Loop 的完整運作流程,如同上方文章所述,它是一個不斷使用相同提示詞的 Bash 迴圈(Loop):

1. 初始化
#

/ralph-loop "建立 REST API 並通過所有測試" --completion-promise "DONE" --max-iterations 20

你只需執行一次指令,然後 Claude Code 會:

  • 接收任務描述
  • 開始第一次嘗試
  • 啟動 Stop Hook 監控

2. 迭代迴圈
#

graph TB; A[Claude 開始處理任務] --> B[撰寫程式碼、執行測試]; B --> C[嘗試結束對話]; C --> D{Stop Hook 攔截
檢查輸出是否有 DONE}; D -->|有| E[任務完成]; D -->|無| F[重新餵入相同提示詞]; F --> A; style E fill:#90EE90; style F fill:#FFE6D1;

3. 自我修正
#

這是 Ralph Loop 最神奇的地方:雖然提示詞不變,但環境狀態會改變。

  • 第 1 次迭代:Claude 寫了程式碼,但測試失敗
  • 第 2 次迭代:Claude 看到測試失敗的輸出,修改程式碼
  • 第 3 次迭代:Claude 看到新的錯誤訊息,繼續調整
  • 第 N 次迭代:所有測試通過,輸出 DONE,迴圈結束

每次迭代中,Claude 都能看到:

  • 已修改的檔案內容
  • Git 歷史記錄
  • 測試執行結果
  • 錯誤訊息

這讓它能夠基於實際的執行結果來改進程式碼,而不是憑空猜測。

你想嘛,要是每次環境跟 context 都不變、只是執行相同提示詞
不就只是燒錢浪費 token 在做同一件事嗎?

表格整理:Ralph Wiggum Loop 的特徵
#

典型 AI 輔助開發Ralph Wiggum Loop
一次性嘗試,成功與否都結束持續嘗試直到成功
需要人工追蹤進度自動追蹤並修正
錯誤需要人工餵回自動讀取錯誤並改進
適合簡單任務適合複雜長期任務
無法離線工作可以掛機執行

Ralph Wiggum Loop 快速開始指南
#

安裝與設定
#

步驟 1:安裝 Plugin

/plugin install ralph-loop@anthropics

官方外掛連結

也可以在 Claude Code 內直接用 \plugin 指令搜尋到這個外掛

步驟 2:啟動你的第一個 Ralph Loop

/ralph-loop "請寫一個 Python 計算機模組,包含加減乘除功能和完整測試" \
  --completion-promise "COMPLETE" \
  --max-iterations 15

關鍵參數說明
#

  • --completion-promise:定義一個代表「完工」的關鍵字(如 DONECOMPLETEFIXED),當 Claude 輸出此字串時,迴圈才會停止
  • --max-iterations:最大迭代次數限制,設個上限作為安全網,防止 AI 陷入無限迴圈並消耗過多 Token 成本。也就是在防止你的帳單大爆炸,因此強烈建議設定!

撰寫有效的 Prompt
#

✅ 好的 Prompt 範例
#

建立一個 REST API 用於待辦事項管理

需求:
- CRUD 端點(GET、POST、PUT、DELETE)
- 輸入驗證
- SQLite 資料庫
- pytest 測試(覆蓋率 > 80%)
- README 文件

完成標準:
- 所有測試通過
- Linter 無錯誤
- API 文件完整
- 輸出:<promise>COMPLETE</promise>

完成標準寫清楚是運用 Ralph Loop 最重要的關鍵,下方文章會再講更多。

❌ 不好的 Prompt 範例
#

建立一個待辦事項 API,讓它好用一點


何時該使用 Ralph Wiggum Loop?
#

最適合的使用場景
#

1. 測試驅動開發(TDD)
#

TDD 適合 Ralph Loop 執行,因為測試結果是明確的二元狀態(通過 vs. 失敗),AI 可以自動且清楚地判斷、並改進。TDD 是 Ralph Loop 最強大的使用場景。

/ralph-loop "實作使用者認證模組:
1. 撰寫測試以建立失敗標準
2. 實作功能讓測試通過
3. 重構程式碼
4. 重複,直到所有測試通過且覆蓋率 > 90%
完成時輸出 DONE" --max-iterations 30

2. 複雜 Bug 修復
#

適合當 Bug 的成因明確但修復路徑複雜時。

/ralph-loop "修復付款處理模組中的稅金計算錯誤:
- 重現 Bug
- 分析根本原因
- 實作修復
- 確保回歸測試全部通過
- 新增防止此類錯誤的測試
完成時輸出 FIXED" --max-iterations 20

3. 大規模重構
#

適合處理需要數小時才能完成的系統遷移。

/ralph-loop "將資料庫從 MySQL 遷移到 PostgreSQL:
- 更新所有 ORM 模型
- 修改查詢語法
- 更新測試
- 確保所有現有功能正常運作
完成時輸出 MIGRATED" --max-iterations 50

4. 自動化開發
#

當你需要「放手」讓 AI 在深夜或週末自動處理全新專案(Greenfield Project)時:

# 睡前執行
/ralph-loop "建立電子商務後端 API:
Phase 1: 使用者認證(JWT、測試)
Phase 2: 產品目錄(列表/搜尋、測試)
Phase 3: 購物車(新增/移除、測試)
所有階段完成後輸出 ECOMMERCE-COMPLETE" --max-iterations 100

如何判斷是否該使用?
#

使用以下檢查清單來決定:

成功標準是否可由機器判定?

  • 可以:編譯成功、Linter 無錯誤、測試 100% 通過
  • 不可以:「讓頁面變漂亮」、「最佳化使用者體驗」

任務是否能接受迭代花費的成本?

  • 如果你追求最終結果產出穩定、符合客觀標準,而非一次到位
  • 願意支付多輪 API 呼叫的費用以換取自動化結果
小心會燒錢啊 💸

你能否能精確定義 DONE 的狀態?

  • 可以:「所有測試通過且 coverage > 80%」
  • 不可以:「大致完成就好」

重要警告與限制
#

⚠️ 必須設定 --max-iterations
#

這是最重要的安全網。若不設定,AI 可能陷入無限迴圈,導致高昂的 API 費用。

簡單任務可以設定 10~20 次,大型專案可以大膽點設定 50~100 次。

⚠️ Prompt 中應說明「卡住了」該怎麼辦
#

Claude Code 也不是所有問題開了無限迴圈就一定能解決,為了防止 AI 在無法解決問題時陷入(無效的)無限循環,我們要設定 Stuck Handling Prompt,在提示詞中預先加入「逃生計畫」(Escape Hatch),確保在失敗時仍能提供有價值的回饋。

若嘗試 15 次後仍未完成:
- 記錄阻礙進度的問題
- 建議替代方案
- 輸出 BLOCKED 並說明原因

⚠️ --completion-promise 要精確
#

此參數會是精確字串比對,因此:

  • ✅ 確保 Prompt 指示 AI 輸出完全一致的關鍵字
  • ❌ 無法用於多種完成條件(如 SUCCESS vs. BLOCKED
  • ✅ 務必搭配 --max-iterations 作為主要安全機制

最不適合使用的場景
#

❌ 需要人類判斷、或者(主觀)審美標準
#

廣義地說,任何無法透過程式自動檢測驗證的任務都不適合 Ralph Loop。例如「漂亮」無法由程式自動驗證,AI 會隨意猜測並立即宣稱完成。

# 不良示範
/ralph-loop "讓首頁變漂亮" --completion-promise "DONE"

❌ 追求即時結果的單次操作
#

如果你需要馬上看到結果並進行互動,傳統的聊天模式更有效率。

❌ 生產環境(Production)不該用!
#

在生產環境中應使用目標明確的 debug 除錯,千萬不要放任 AI 在迴圈中隨意修改 PROD 裡的關鍵基礎設施。

❌ 需要外部審批或人工干預
#

如果流程中途需要你點頭同意,Ralph 的自動迴圈優勢就會消失。


結語
#

Ralph Wiggum Loop 體現了幾個關鍵原則:

  • 確定性失敗:在不確定的世界中可預測地失敗
  • 持續勝於完美:不追求一次到位,而是透過迭代達到最終一致性
  • 人機協作:允許人工介入調整,但不依賴持續監督

這個技術的成功關鍵在於給 AI 明確的成功標準、自動化的驗證機制(如測試),以及足夠的迭代空間。我覺得 Ralph Loop 跟 Machine Learning 的工作流很像,成功關鍵都是要定義好測試標準(Evaluation Metric)、然後讓程式在每次迭代中學習。

現在,相信你已經了解 Ralph Wiggum Loop 的完整概念。親自試試看吧:

  1. 安裝插件:/plugin install ralph-loop@anthropics
  2. 設定一個明確的任務與完成標準
  3. 設定合理的 --max-iterations 限制
  4. 啟動迴圈,然後放心地去喝杯咖啡 ☕

然後想想 Ralph 掛在嘴上的:I’m learnding!,期待你的 AI 代理也能在持續的迭代中,真正學會如何完成任務。


參考資料:


如果這篇文章有幫助到你,歡迎追蹤好豪的 Facebook 粉絲專頁InstagramThreads 帳號,我會持續分享我學習 Claude Code 與 AI 的心得;也可以點選下方按鈕,分享給同樣在追蹤 AI 趨勢的朋友們。

【 Claude Code 教學 】系列文
⑧ 本文