snarktank/ralph

GitHub: snarktank/ralph

Ralph 是一个基于 AI 代理循环的自动化编码工具,将 PRD 逐步实现直至所有任务完成。

Stars: 16742 | Forks: 1654

# 拉尔夫 ![Ralph](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/fceb97df6d193126.webp) Ralph 是一个自主 AI 代理循环,它会重复运行 AI 编码工具([Amp](https://ampcode.com) 或 [Claude Code](https://docs.anthropic.com/en/docs/claude-code)),直到所有 PRD 项目完成。每次迭代都是一个具有全新上下文的独立实例。记忆通过 Git 历史、`progress.txt` 和 `prd.json` 持久化。 灵感来源于 [Geoffrey Huntley 的 Ralph 模式](https://ghuntley.com/ralph/)。 [阅读我关于如何使用 Ralph 的深入文章](https://x.com/ryancarson/status/2008548371712135632) ## 前置条件 - 已安装并认证以下 AI 编码工具之一: - [Amp CLI](https://ampcode.com)(默认) - [Claude Code](https://docs.anthropic.com/en/docs/claude-code)(`npm install -g @anthropic-ai/claude-code`) - 已安装 `jq`(macOS 上使用 `brew install jq`) - 项目的 Git 仓库 ## 设置 ### 选项 1:复制到你的项目 将 Ralph 文件复制到你的项目中: ``` # 从项目根目录 mkdir -p scripts/ralph cp /path/to/ralph/ralph.sh scripts/ralph/ # 复制所选 AI 工具的提示模板: cp /path/to/ralph/prompt.md scripts/ralph/prompt.md # For Amp # 或 cp /path/to/ralph/CLAUDE.md scripts/ralph/CLAUDE.md # For Claude Code chmod +x scripts/ralph/ralph.sh ``` ### 选项 2:全局安装技能(Amp) 将技能复制到你的 Amp 或 Claude 配置中,以便在所有项目中使用: 对于 AMP ``` cp -r skills/prd ~/.config/amp/skills/ cp -r skills/ralph ~/.config/amp/skills/ ``` 对于 Claude Code(手动) ``` cp -r skills/prd ~/.claude/skills/ cp -r skills/ralph ~/.claude/skills/ ``` ### 选项 3:作为 Claude Code 市场插件使用 将 Ralph 市场插件添加到 Claude Code: ``` /plugin marketplace add snarktank/ralph ``` 然后安装技能: ``` /plugin install ralph-skills@ralph-marketplace ``` 安装后可用的技能: - `/prd` - 生成产品需求文档 - `/ralph` - 将 PRD 转换为 prd.json 格式 当你在 Claude 中输入以下指令时,技能会自动调用: - “创建 PRD”、“为……编写 PRD”、“规划此功能” - “转换此 PRD”、“转为 Ralph 格式”、“创建 prd.json” ### 配置 Amp 自动交接(推荐) 添加到 `~/.config/amp/settings.json`: ``` { "amp.experimental.autoHandoff": { "context": 90 } } ``` 这会在上下文填满时自动交接,允许 Ralph 处理超出单个上下文窗口的大型需求。 ## 工作流程 ### 1. 创建 PRD 使用 PRD 技能生成详细的需求文档: ``` Load the prd skill and create a PRD for [your feature description] ``` 回答澄清问题。技能输出将保存到 `tasks/prd-[feature-name].md`。 ### 2. 将 PRD 转换为 Ralph 格式 使用 Ralph 技能将 Markdown 格式的 PRD 转换为 JSON: ``` Load the ralph skill and convert tasks/prd-[feature-name].md to prd.json ``` 这会生成 `prd.json`,其中用户故事已结构化为可自主执行的形式。 ### 3. 运行 Ralph ``` # 使用 Amp(默认) ./scripts/ralph/ralph.sh [max_iterations] # 使用 Claude Code ./scripts/ralph/ralph.sh --tool claude [max_iterations] ``` 默认迭代次数为 10 次。使用 `--tool amp` 或 `--tool claude` 选择你的 AI 编码工具。 Ralph 将执行以下操作: 1. 从 PRD 的 `branchName` 创建特性分支 2. 选取 `passes: false` 的最高优先级故事 3. 实现该单一故事 4. 运行质量检查(类型检查、测试) 5. 检查通过后提交 6. 更新 `prd.json` 将故事标记为 `passes: true` 7. 将学习记录追加到 `progress.txt` 8. 重复执行,直到所有故事通过或达到最大迭代次数 ## 关键文件 | 文件 | 用途 | |------|------| | `ralph.sh` | 启动新 AI 实例的 Bash 循环(支持 `--tool amp` 或 `--tool claude`) | | `prompt.md` | Amp 的提示模板 | | `CLAUDE.md` | Claude Code 的提示模板 | | `prd.json` | 带有 `passes` 状态的用户故事(任务列表) | | `prd.json.example` | 用于参考的 PRD 示例格式 | | `progress.txt` | 仅追加的学习记录,供后续迭代使用 | | `skills/prd/` | 生成 PRD 的技能(兼容 Amp 和 Claude Code) | | `skills/ralph/` | 将 PRD 转换为 JSON 的技能(兼容 Amp 和 Claude Code) | | `.claude-plugin/` | Claude Code 市场插件清单 | | `flowchart/` | Ralph 工作流程的交互式可视化 | ## 流程图 [![Ralph 流程图](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/abf9d46360193132.png)](https://snarktank.github.io/ralph/) **[查看交互式流程图](https://snarktank.github.io/ralph/)** - 点击查看带动画的每一步。 `flowchart/` 目录包含源代码。本地运行方式: ``` cd flowchart npm install npm run dev ``` ## 关键概念 ### 每次迭代 = 全新上下文 每次迭代都会启动一个**新的 AI 实例**(Amp 或 Claude Code),上下文是干净的。迭代之间的唯一记忆包括: - Git 历史(来自之前迭代的提交) - `progress.txt`(学习记录和上下文) - `prd.json`(已完成的故事) ### 小型任务 每个 PRD 项目应足够小,能够在一个上下文窗口内完成。如果任务过大,LLM 会在完成前耗尽上下文并产生低质量代码。 合适规模的故事示例: - 添加数据库列及其迁移 - 向现有页面添加 UI 组件 - 使用新逻辑更新服务器操作 - 向列表添加筛选下拉框 过大(需要拆分)的任务: - “构建整个仪表板” - “添加身份验证” - “重构 API” ### AGENTS.md 更新至关重要 每次迭代后,Ralph 会将相关学习记录更新到对应的 `AGENTS.md` 文件中。这很关键,因为 AI 编码工具会自动读取这些文件,使后续迭代以及未来的人类开发者都能受益于发现的模式、注意事项和约定。 添加到 AGENTS.md 的示例: - 发现的模式(“此代码库使用 X 实现 Y”) - 注意事项(“修改 W 时不要忘记更新 Z”) - 有用上下文(“设置面板位于组件 X 中”) ### 反馈循环 Ralph 仅在存在反馈循环时才能工作: - 类型检查捕获类型错误 - 测试验证行为 - CI 必须保持绿色(错误代码会在迭代中累积) ### 浏览器验证用于 UI 故事 前端故事必须在验收标准中包含“在浏览器中使用 dev-browser 技能验证”。Ralph 将使用 dev-browser 技能访问页面、与 UI 交互并确认更改是否生效。 ### 停止条件 当所有故事的 `passes: true` 时,Ralph 会输出 `COMPLETE` 并退出循环。 ## 调试 查看当前状态: ``` # 查看已完成的故事 cat prd.json | jq '.userStories[] | {id, title, passes}' # 查看以往迭代的学习成果 cat progress.txt # 检查 Git 历史 git log --oneline -10 ``` ## 自定义提示 复制 `prompt.md`(用于 Amp)或 `CLAUDE.md`(用于 Claude Code)到你的项目后,根据需要进行自定义: - 添加项目特定的质量检查命令 - 包含代码库约定 - 添加栈相关的常见注意事项 ## 归档 当开始新特性(不同的 `branchName`)时,Ralph 会自动归档之前的运行记录,归档路径为 `archive/YYYY-MM-DD-feature-name/`。 ## 参考 - [Geoffrey Huntley 的 Ralph 文章](https://ghuntley.com/ralph/) - [Amp 文档](https://ampcode.com/manual) - [Claude Code 文档](https://docs.anthropic.com/en/docs/claude-code)
标签:AI 代理, AI 编程, Amp CLI, Claude Code, CLI 工具, Git 记忆, MITM代理, PRD 生成, 上下文管理, 产品需求文档, 代码自动化, 应用安全, 开发效率, 循环执行, 技能插件, 提示词工程, 策略决策点, 网络可观测性, 网络安全研究, 脚本自动化, 自主代理, 自动化开发, 自动化攻击, 重复任务自动化, 项目初始化