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 实例,跨轮记忆只靠 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 设计