如果你最近在關注 coding agent 的長流程執行,snarktank/ralph 是個很值得看一眼的小專案。它不是再做一個新的模型外殼,也不是再包一層聊天介面,而是把 Claude Code 或 Amp 組織成一個可以反覆運行的 autonomous loop,讓 AI 按 PRD 裡的 story 一項一項往前做,直到全部完成。
它的核心思路其實很直接:不要讓同一個 agent 在一個越來越長、越來越髒的上下文裡硬撐,而是每輪都重新啟動一個全新的 AI coding session。 這樣做的好處是,上下文不會一路膨脹,任務邊界也更清楚。
01 Ralph 是什麼
Ralph 的官方定位很明確:它是一個 autonomous AI agent loop,會反覆呼叫 AI coding tool,直到 PRD 裡的項目都做完。
目前倉庫支援兩種工具:
Amp CLIClaude Code
每一輪迭代都會啟動一個 fresh instance。也就是說,它不依賴「同一個會話一直聊下去」,而是依賴這些外部狀態來保存記憶:
- git 歷史
progress.txtprd.json
這點非常關鍵。很多人讓 agent 跑長任務時,最大的痛點不是模型不會寫,而是會話越跑越重,最後開始漏掉上下文、忘記要求、反覆返工。Ralph 的設計,基本就是衝著這個問題去的。
02 它怎麼工作
Ralph 的工作流分成三步:
1. 先寫 PRD
README 建議先用配套的 prd skill 生成需求文件,把功能拆成比較細的 story。
2. 再把 PRD 轉成 prd.json
然後用 ralph skill,把 Markdown 版 PRD 轉成結構化的 prd.json。這個檔案裡會保存 user stories,以及每一項是不是已經通過。
3. 執行循環腳本
真正執行的是 ralph.sh。命令大致是:
|
|
預設是 10 輪。每一輪大致會做這些事:
- 從
branchName建立分支 - 選擇優先級最高、
passes: false的 story - 只實作這一項
- 跑品質檢查,比如 typecheck 和 tests
- 檢查通過後提交程式碼
- 更新
prd.json - 把經驗追加到
progress.txt - 繼續下一輪
也就是說,Ralph 並不追求「一口氣把整件事做完」,而是把任務壓縮成很多個能在單個上下文視窗裡完成的小閉環。
03 Ralph 最有意思的地方
1. 每輪都是 fresh context
這是 Ralph 最核心的設計點。README 強調,每次迭代都是一個新的 AI instance,跨輪記憶只靠 git、progress.txt 和 prd.json。
這和很多人平常直接在一個長對話裡讓 Claude Code 或其他工具連續工作很不一樣。後者在任務變大後,很容易被歷史訊息拖慢,還會逐漸失去焦點。Ralph 則是主動接受「單輪記不住全部」,然後把記憶放到外部檔案裡。
2. 強制把任務拆小
倉庫文件特別強調,單個 PRD item 必須小到能在一個 context window 裡完成。像「加一個篩選器」「改一個 server action」「補一欄資料庫欄位」這種粒度比較合適;而「重構整個 API」「做完整 dashboard」這種就太大了。
這個約束其實很現實。很多 autonomous agent 跑崩,不是 loop 本身有問題,而是任務切分太粗,讓模型一輪裡就背了過量目標。
3. 不只是程式碼,連經驗也要沉澱
除了 progress.txt,README 還特別強調要更新 AGENTS.md。原因也很實際:未來迭代和未來開發者都會讀這些說明,所以每輪發現的模式、坑點、約定,最好都落到專案文件裡。
換句話說,Ralph 不只是讓 agent 連續寫程式,也想讓它連續累積對程式碼庫的工作記憶。
04 它適合什麼場景
如果你的任務具備這些特徵,Ralph 會比較對路:
- 已經能拆成一組明確的 user stories
- 程式碼庫裡有比較可靠的回饋回路,比如測試、typecheck、CI
- 你希望 agent 持續推進,但不想把所有事壓在單個長對話裡
- 你接受它按迭代方式一點點完成,而不是一次性全做完
反過來說,如果你的需求還很模糊,或者任務本身高度依賴來回討論、頻繁改方向,那 Ralph 可能還不是第一選擇。它更適合「需求已經整理好,現在需要穩定推進執行」的階段。
05 它和一般 Claude Code 用法有什麼不同
如果平常直接用 Claude Code,常見模式是你開一個會話,讓它持續讀程式碼、改程式碼、跑命令。這個方式在中小任務上很好用,但在大任務上容易碰到兩個問題:
- 上下文越來越長
- 中間決策不容易結構化沉澱
Ralph 的做法更像把 Claude Code 或 Amp 變成一個「批次執行器」:
- 任務來源不是臨時聊天,而是
prd.json - 每輪只認一個 story
- 完成狀態寫回檔案
- 經驗寫進
progress.txt - 程式碼提交進 git
所以它更像是「給 coding agent 加了一層迭代控制器」,而不是換了一個新的 AI assistant。
06 一個值得注意的前提
Ralph 能不能跑順,關鍵不在 loop 本身,而在回饋回路夠不夠好。README 寫得很直接:如果沒有 typecheck、tests、CI 這些機制,錯誤會在後續迭代裡不斷累積。
對前端任務來說,倉庫甚至明確建議把「用瀏覽器驗證」寫進 acceptance criteria。因為如果沒有實際驗證,agent 很容易把「看起來寫完了」和「真的可用」混在一起。
這點很重要。Ralph 不是 magical automation,它更像是把你現有的工程紀律放大。如果你的專案本來就有清晰任務拆分和可靠檢查,它會更有價值;如果這些基礎還沒有,loop 只會把混亂重複很多次。
07 一句話總結
Ralph 最值得看的地方,不是它寫了多少新基礎設施,而是它把一個樸素但很有用的思路落成了現成流程:讓 Claude Code 或 Amp 每輪只做一個足夠小的 story,用 fresh context 保持專注,再靠 git、prd.json 和 progress.txt 維持跨輪連續性。
如果你已經開始把 coding agent 用到真實專案裡,並且正被「長任務怎麼穩定推進」這個問題困住,Ralph 這套方法很值得參考。
參考連結
- GitHub 倉庫:https://github.com/snarktank/ralph
- 互動式流程圖:https://snarktank.github.io