如果你最近在关注 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 实例,跨轮记忆只靠 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