2025年底,来自澳大利亚的一个农民大叔 Geoffrey Huntley 在给他的山羊铲羊粪的间隙,写下了这样三行代码:
while :; do
cat PROMPT.md | claude
done
当时的他可能永远不会想到,短短一个月,这几行代码会掀起一股技术狂潮,直至颠覆今日的硅谷!

Ralph Wiggum 的命名由来:天真而顽强的坚持
Geoffrey 把这个技巧命名为 Ralph Wiggum,这个命令来自动画片《辛普森一家》拉尔夫·韦根(Ralph Wiggum)这个角色。在这部动画片中 Ralph Wiggum 是个“又笨又固执、永远乐观地撞南墙”的小孩——naive persistence(天真地坚持)。
它不聪明,但够笨、够持久,然而正是这种性格,使得它在AI这个不确定的世界里反而最可靠。
Geoffrey Huntley 本人在博客里(2025 年 7 月就发了原帖 https://ghuntley.com/ralph/)说:LLM 就像镜子,你的操作水平决定了它的输出;Ralph 就是用“确定性的笨办法”对抗“不确定的世界”。
三行代码的核心原理拆解
咱们回头来看这三行代码到底是什么意思?
- while :; do 第一行是一个 while 循环(其中冒号 : 是 bash 里一个特殊的内置命令,永远返回 true),所以这里表示无限循环
- cat PROMPT.md | claude → 第二行是把任务描述文件的内容喂给 claude AI。
这就是全部。没有复杂的 agent 框架、没有内存、没有状态机,就是“傻傻地一直重试”。
从民间技巧到官方插件的飞跃
一个月后,Claude Code 负责人 Boris Cherny 直接把这个思路做成官方插件 Ralph-Wiggum,支持 –max-iterations、–completion-promise 等参数,还加了 stop-hook(长时间运行中断后可恢复)。
Boris 本人用它 30 天提交 259 个 PR、4.97 万行代码,100% AI 生成。
Geoffrey 自己用 Ralph 几乎零干预地开发了一门叫 CURSED 的编程语言(含编译器、标准库、编辑器支持)。
有人接了 5 万美元合同,用 Ralph 只花 297 美元 token 就搞定。
今天我们就一起来看看 Claude Code 中这个神奇的 Ralph-Wiggum 插件,也叫:Ralph loop(拉尔夫循环)
为什么这么简单却“捅破天花板”?
首先你需要在 PROMPT.md 里写好完整需求(例如“用 Rust 写一个带 CRUD、测试、输入验证的 Todo REST API,当完成时输出 COMPLETE”)。
请注意,这里在完成时输出 COMPLETE 的作用非常关键,它是 Ralph Loop 实现“自主结束”的核心机制。
简单说:这是你和 Claude 之间的“退出代码”。后边启动 Ralph Loop 会有一个参数叫 –completion-promise 就是用于指定这个退出代码的 “DONE”
然后第一次运行:AI 可能写出有 bug 的代码,可能执行会失败。
于是第二次运行:因为是全新上下文,但文件已经存在,AI 会看到上一次的输出/错误/文件状态,然后继续改。
一直循环,直到完全任务 AI 自己输出之前约定的完成标记,或者达到运行时设定的运行次数。
核心机制揭秘:Stop Hook 的魔法
其实核心机制是:Stop Hook
当 Claude 认为“它已经完成了工作”(当然,实际上可能有错误),它就会正常结束响应(就像普通对话结束一样)。
这时就会触发 Stop Hook
这时 ralph loop 插件就会拦截“退出”行为,把你一开始给的同一个 prompt 原封不动地重新喂给 Claude
这次 Claude 看到的是上次它自己修改后的文件系统(它上一次写的代码、测试结果、错误日志、git 历史等)
所以 Claude 虽然拿到同一个 prompt,但上下文已经变了 → 它会继续改进(修复上轮的 bug、补功能、跑测试……)
然后循环往复,直到满足结束条件
怎么样,看起来是不是很简单?
实战演示:用 Ralph Loop 构建 Rust Todo REST API
好,现在我就以一下实际的例子来向你演示如何使用 Ralph Loop
如果你还没有安装 ralph loop 插件,请执行以下命令进行安装
/plugin install ralph-loop@claude-plugins-official
我这里已经安装好了,就跳过这一步
任务目标完整描述(PROMPT.md 内容)
我们来看一下我们的任务目标:用 Rust + Axum 实现一个简单的 Todo REST API
语言采用 Rust,必须实现的功能我们都一一写出了,并且我们要求它写几个基本集成测试,至少覆盖创建、读取、更新、删除
还要创建 README.md,要包含 cargo run 启动命令,以及几个 curl 示例
其他要求,数据库文件:todos.db,代码要整洁,出错时自己分析并修复等等
最重要的是这里的完成标准,当以上全部实现且测试通过时,输出 COMPLETE,这是结束标识
# 任务目标:用 Rust + Axum 实现一个简单的 Todo REST API(无认证)
语言:Rust(最新稳定版)
框架:Axum 0.7+,sqlx + sqlite(文件数据库 todos.db)
必须实现的功能(按顺序):
1. 初始化 Cargo 项目,创建 src/main.rs
2. 实现 Todo 结构体:id (u64 自增), title (String), completed (bool), description (Option<String>)
3. 使用 sqlx 创建 SQLite 表 todos (id INTEGER PRIMARY KEY, title TEXT NOT NULL, completed BOOLEAN DEFAULT false, description TEXT)
4. CRUD 端点(所有路径前缀 /api/todos):
- POST /api/todos { "title": "...", "description": "..." } → 创建,返回创建的 todo
- GET /api/todos → 返回所有 todo 列表
- GET /api/todos/:id → 返回单个 todo,或 404
- PUT /api/todos/:id { "title"?, "description"?, "completed"? } → 更新,返回更新后的 todo
- DELETE /api/todos/:id → 删除,返回 204 或 404
5. 写几个基本集成测试(用 reqwest 或 axum::test),至少覆盖创建、读取、更新、删除
6. 创建 README.md,包含:
- cargo run 启动命令
- 几个 curl 示例(创建、列出、更新等)
其他要求:
- 数据库文件:todos.db(项目根目录)
- 代码要整洁,遵循 Rust 惯例(cargo fmt + cargo clippy 可通过)
- 出错时自己分析并修复
- 不要引入未声明的额外 crate(常用:axum, sqlx, tokio, serde 等)
- 每次改动做一个小 commit,commit message 清晰
完成标准(当以上全部实现且测试通过时,在响应最后单独一行输出):
<promise>COMPLETE</promise>
现在开始工作。当前目录是项目根目录。
启动 Ralph Loop 的命令
现在,我们采用 ralph loop 来实现这份需求
首先我们用 yolo 模式启动 claude (claude –dangerously-skip-permissions)
为什么用 yolo 模式启动,因为以 ralph loop 执行时,它通常是会反复多次执行,因此执行时间可能较长,并且通常是无人执守的。
现在我们运行 ralph-loop 插件
我们输入这一行:
/ralph-loop:ralph-loop "$(cat PROMPT.md)" --max-iterations 25 --completion-promise "<promise>COMPLETE</promise>"
ralph-loop:ralph-loop 是我们要执行的执行,”$(cat PROMPT.md)” 是我们的需求
–max-iterations 25 是指定最大迭代次数,这里指定最多执行 25 次,这是以为了防止无限烧 token
–completion-promise 它是 Ralph Loop 的“真正完成信号”,用来告诉系统“这次任务真的做完了,别再循环了”。 它指定和我们需求中设计的输出标识
我们现在运行它。接下来 claude code 就会变成一个 Ralph Wiggum 角色,不撞南墙不回头,反复执行我们的任务,直达任务完成
运行结果:从零到完成的“睡一觉出代码”体验
经过漫长的等待
我们终于看到它提示完成,我们看一下
它说:所有需求已经完成
它总结了实现的功能,例如项目结构,数据库,CRUD 端点等等,这些都是我们需求中指定的要求
然后,它也进行了功能测试,总共 8 个功能测试通过,0 个失败
最后,它说 TODO REST API 所有功能已经实现,你可以使用 cargo run 运行这个项目了
最且还输出了:COMPLETE 来结束这次循环
在 readme.md 文件中,我们也可以看到它按要求写出了相关的规则,例如 cargo run 以及 curl 示例
怎么样,在 ralph loop 下,虽然 claude 进行了多次任务执行,但在我们看来它一次就实现了我们的需求,是不是超级爽?
Ralph Loop 的适用场景与总结
Ralph Loop(Ralph Wiggum Loop)本质上是一种“天真顽强迭代”的极简自主编码模式,特别适合那些可以明确定义“完成标准”、能通过自动化验证,或者是从零开始的探索性质的项目
或者用于快速验证你的头脑风暴项目,能让你“睡觉时出代码”。
最后,补充一下,Geoffrey Huntley 他确实自称在澳洲的农村养山羊,但同时他也是一个程序员,他也确实在农场环境下做前沿 AI 研究。


