Ralph 是什麼:把 Claude Code 和 Amp 變成可循環執行的自主開發流程

基於 snarktank/ralph 的 README,快速看懂 Ralph 的核心思路:讓 Claude Code 或 Amp 以 fresh context 循環執行單個 PRD story,並透過 git、progress.txt 和 prd.json 維持連續推進。

如果你最近在關注 coding agent 的長流程執行,snarktank/ralph 是個很值得看一眼的小專案。它不是再做一個新的模型外殼,也不是再包一層聊天介面,而是把 Claude CodeAmp 組織成一個可以反覆運行的 autonomous loop,讓 AI 按 PRD 裡的 story 一項一項往前做,直到全部完成。

它的核心思路其實很直接:不要讓同一個 agent 在一個越來越長、越來越髒的上下文裡硬撐,而是每輪都重新啟動一個全新的 AI coding session。 這樣做的好處是,上下文不會一路膨脹,任務邊界也更清楚。

01 Ralph 是什麼

Ralph 的官方定位很明確:它是一個 autonomous AI agent loop,會反覆呼叫 AI coding tool,直到 PRD 裡的項目都做完。

目前倉庫支援兩種工具:

  • Amp CLI
  • Claude Code

每一輪迭代都會啟動一個 fresh instance。也就是說,它不依賴「同一個會話一直聊下去」,而是依賴這些外部狀態來保存記憶:

  • git 歷史
  • progress.txt
  • prd.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。命令大致是:

1
2
./scripts/ralph/ralph.sh [max_iterations]
./scripts/ralph/ralph.sh --tool claude [max_iterations]

預設是 10 輪。每一輪大致會做這些事:

  1. branchName 建立分支
  2. 選擇優先級最高、passes: false 的 story
  3. 只實作這一項
  4. 跑品質檢查,比如 typecheck 和 tests
  5. 檢查通過後提交程式碼
  6. 更新 prd.json
  7. 把經驗追加到 progress.txt
  8. 繼續下一輪

也就是說,Ralph 並不追求「一口氣把整件事做完」,而是把任務壓縮成很多個能在單個上下文視窗裡完成的小閉環。

03 Ralph 最有意思的地方

1. 每輪都是 fresh context

這是 Ralph 最核心的設計點。README 強調,每次迭代都是一個新的 AI instance,跨輪記憶只靠 git、progress.txtprd.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 CodeAmp 變成一個「批次執行器」:

  • 任務來源不是臨時聊天,而是 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 CodeAmp 每輪只做一個足夠小的 story,用 fresh context 保持專注,再靠 gitprd.jsonprogress.txt 維持跨輪連續性。

如果你已經開始把 coding agent 用到真實專案裡,並且正被「長任務怎麼穩定推進」這個問題困住,Ralph 這套方法很值得參考。

參考連結

记录并分享
使用 Hugo 建立
主題 StackJimmy 設計