👁️ 259
👍 72
📅 2026-06-13 收录
🔄 2026-06-13 更新

正文内容

Ralph Loop(事件驱动)

增强版 Ralph 模式,采用 事件驱动通知机制 —— Codex/Claude 在需要人工关注时主动调用 OpenClaw,而非轮询。

核心概念

清洁会话(Clean Sessions)

每次迭代均启动一个全新的代理会话,上下文完全干净。这是有意为之的设计:

  • 避免上下文窗口长度限制
  • 每次 codex exec 均为独立进程,不保留此前运行的任何记忆
  • 记忆通过文件持久化:IMPLEMENTATION_PLAN.mdAGENTS.md、Git 历史记录

基于文件的通知回退机制(File-Based Notification Fallback)

若 Codex 发送唤醒通知时 OpenClaw 遭遇限流:

  1. 该通知将被写入 .ralph/pending-notification.txt
  2. 尝试执行唤醒(可能失败)
  3. 当 OpenClaw 恢复后,自动检查是否存在待处理通知
  4. 工作永不丢失 —— 所有状态均保存在 Git 或文件中

文件结构

project/
├── PROMPT.md                      # 每次迭代加载(按 mode 区分)
├── AGENTS.md                      # 项目上下文、测试命令、经验总结
├── IMPLEMENTATION_PLAN.md         # 含状态的任务清单
├── specs/                         # 需求规格说明
│   ├── overview.md
│   └──.md
└── .ralph/
    ├── ralph.log                  # 执行日志
    ├── pending-notification.txt   # 当前待处理通知(如有)
    └── last-notification.txt      # 上一次通知(供参考)

通知格式

.ralph/pending-notification.txt 示例:

{
  "timestamp": "2026-02-07T02:30:00+01:00",
  "project": "/home/user/my-project",
  "message": "DONE: All tasks complete.",
  "iteration": 15,
  "max_iterations": 20,
  "cli": "codex",
  "status": "pending"
}

status 取值说明:

  • pending — 唤醒失败或尚未尝试
  • delivered — 唤醒成功

工作流程

1. 收集需求

如未提供,需主动询问以下信息:

  • 目标 / JTBD(Jobs To Be Done):期望达成何种结果?
  • CLI 工具codexclaudeopencodegoose
  • 模式(Mode)PLANNINGBUILDINGBOTH
  • 技术栈:编程语言、框架、数据库等
  • 验证命令(Test command):如何确认实现正确性
  • 最大迭代次数(Max iterations):默认为 20

2. 生成规格文档(Specs)

将目标拆解为若干 关注主题(topics of concern) → 输出至 specs/*.md

# specs/overview.md
## Goal


## Tech Stack
- Language: Python 3.11
- Framework: FastAPI
- Database: SQLite
- Frontend: HTMX + Tailwind

## Success Criteria
- [ ] Criterion 1
- [ ] Criterion 2

3. 生成 AGENTS.md

# AGENTS.md

## Project


## Commands
- **Install**: `pip install -e .`
- **Test**: `pytest`
- **Lint**: `ruff check .`
- **Run**: `python -m app`

## Backpressure
每次实现后需执行:
1. `ruff check . --fix`
2. `pytest`

## Human Decisions


## Learnings

4. 生成 PROMPT.md(按 Mode 定制)

PLANNING 模式

# Ralph PLANNING Loop

## Goal## Context
- 阅读:specs/*.md
- 阅读:当前代码库结构
- 更新:IMPLEMENTATION_PLAN.md

## Rules
1. 禁止编写实现代码
2. 禁止提交(commit)
3. 分析规格与当前状态之间的差距
4. 创建/更新 IMPLEMENTATION_PLAN.md,列出优先级明确的任务
5. 每项任务应足够小(≤ 1 小时工作量)
6. 若需求不明确,列出待澄清问题

## Notifications
当需要人工输入或规划完成时,调用:

openclaw gateway wake --text "PLANNING:" --mode now

支持前缀:
- `DECISION:` — 需人类对某项选择做决定
- `QUESTION:` — 需求不清晰,需进一步澄清
- `DONE:` — 规划已完成

## Completion
当计划完备且可进入构建阶段时,在 IMPLEMENTATION_PLAN.md 中添加:

STATUS: PLANNING_COMPLETE

随后通知:

openclaw gateway wake --text "DONE: Planning complete. X tasks identified." --mode now

BUILDING 模式

# Ralph BUILDING Loop

## Goal## Context
- 阅读:specs/*.md、IMPLEMENTATION_PLAN.md、AGENTS.md
- 实现:每次迭代仅完成一项任务
- 测试:执行 AGENTS.md 中定义的 backpressure 命令

## Rules
1. 从 IMPLEMENTATION_PLAN.md 中选取最高优先级的未完成任务
2. 修改前先调研相关代码
3. 实现该任务
4. 运行 backpressure 命令(lint、test)
5. 若测试通过:以清晰信息提交(commit),并标记任务为完成
6. 若测试失败:最多尝试修复 3 次;失败后立即通知
7. 在 AGENTS.md 中记录任何新的操作性经验
8. 在 IMPLEMENTATION_PLAN.md 中更新进度

## Notifications
按需调用 OpenClaw:

openclaw gateway wake --text ":" --mode now

前缀说明:
- `DECISION:` — 需人类输入(例如:“SQLite vs PostgreSQL?”)
- `ERROR:` — 经过 3 次尝试后测试仍失败
- `BLOCKED:` — 缺失依赖、凭据或规格不明确
- `PROGRESS:` — 达成重要里程碑(可选)
- `DONE:` — 所有任务均已完工

## Completion
当所有任务完成时:
1. 在 IMPLEMENTATION_PLAN.md 中添加:`STATUS: COMPLETE`
2. 发送通知:

openclaw gateway wake --text "DONE: All tasks complete. Summary:" --mode now

5. 运行循环

使用提供的 scripts/ralph.sh 脚本:

# 默认:20 次迭代,使用 Codex
./scripts/ralph.sh 20

# 使用 Claude Code
RALPH_CLI=claude ./scripts/ralph.sh 10

# 启用测试(通过 RALPH_TEST 指定命令)
RALPH_TEST="pytest" ./scripts/ralph.sh

CLI 工具特异性说明

Codex

  • 要求项目为 Git 仓库
  • 每次 codex exec 均为全新会话 —— 调用间无状态共享
  • --full-auto:在 workspace 中自动批准(沙箱环境内安全)
  • --yolo:禁用沙箱与审批(危险但快速)
  • 默认模型:gpt-5.2-codex

Claude Code

  • --dangerously-skip-permissions:自动批准(建议仅用于 sandbox)
  • 无需 Git 仓库
  • 每次调用均为全新会话

OpenCode

  • opencode run "$(cat PROMPT.md)"

Goose

  • goose run "$(cat PROMPT.md)"

快速上手

# 1. 创建项目目录
mkdir my-project && cd my-project && git init

# 2. 从 skill 复制模板
cp /path/to/ralph-loop/templates/* .
mv PROMPT-PLANNING.md PROMPT.md

# 3. 创建 specs 目录及概览文件
mkdir specs
cat > specs/overview.md 

示例:古董目录系统(Antique Catalogue)

# specs/overview.md
## Goal
构建一个 Web 应用,用于录入古董物品的元数据、图片和分类信息。

## Tech Stack
- Python 3.11 + FastAPI
- SQLite + SQLAlchemy
- HTMX + Tailwind CSS
- 图片本地文件存储

## Features
1. 物品 CRUD(名称、描述、年代、购入信息、尺寸)
2. 图片上传(每件物品支持多图)
3. 标签(Tags)与分类(Categories)
4. 搜索与筛选功能
5. 多种视图模式(网格、列表、详情)

代理将依次执行:

  1. (PLANNING 阶段)将需求拆解为 10–15 个可执行任务
  2. (BUILDING 阶段)每次迭代实现一个任务
  3. 每次成功实现后提交(commit)
  4. 完成或受阻时主动通知(wake)