关于 ralph
ralph 技能启动并协调由 Ouroboros MCP 管理的后台进化任务循环,围绕指定 lineage 反复执行 evolve_step。它适合需要持续运行,直至 QA 通过、收敛、终止动作、取消或达到代数上限的用户。
主要功能
- 01后台重复执行 evolve_step
- 02按 lineage 设置运行
- 03处理任务进度和结果
- 04取消任务并向活动会话发送信号
适用场景
- 01继续已有的 lineage
- 02从已验证的 Seed 启动循环
- 03按需实时查看任务进度
- 04根据请求停止运行中的任务
MCP 相关
该技能依赖 Ouroboros MCP 工具来启动并管理 Ralph 循环、等待和检查任务、获取结果、取消任务以及向活动会话发送信号。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ q00/ ouroboros --skill ralph安装后在 Claude Code 中输入/ralph确认已加载。
详细介绍
/ouroboros:ralph
由 MCP 管理的 Ralph 循环,围绕后台 evolve_step 作业运行。“巨石永不停歇。”
用法
ooo ralph --lineage-id <lineage_id>
/ouroboros:ralph --lineage-id <lineage_id>
ouroboros_ralph 工具负责管理循环(不要重新实现):一个后台作业会反复运行 evolve_step 迭代,直到 QA 通过、收敛、进化操作进入终止状态、被取消,或达到 max_generations。路由器派发时只读取命名选项 --lineage-id,不会读取尾随文本。
说明
加载 MCP 工具(延迟加载架构防护)
Ouroboros 工具可能会延迟加载,某一轮加载的架构到下一轮可能已卸载。每次调用 ouroboros_* 前,请立即使用当前运行时的工具发现功能加载对应工具:"+ouroboros ralph job" 用于 ouroboros_ralph、ouroboros_job_wait、ouroboros_job_status、ouroboros_job_result 和 ouroboros_cancel_job;"+ouroboros session signal" 用于 ouroboros_session_signal_targets 和 ouroboros_session_signal;"+ouroboros conductor decision" 用于 ouroboros_record_conductor_decision。如果工具的架构尚未加载,调用会因 “Invalid tool parameters” 失败。如果工具已可调用,发现操作不会产生任何变化,预期返回空结果。如果这些工具确实不存在,请停止并告知用户,Ralph 需要 Ouroboros MCP 运行时。
1. 准备 lineage 输入
- 继续一个 lineage:用户提供现有的
lineage_id并希望继续时,复用该 ID;除非用户提供了更新后的 Seed,否则省略seed_content。 - 从 Seed YAML 开始新运行:将其作为
seed_content,并使用新的lineage_id,例如ralph-<short-slug>-<uuid>。不要将 Seed、访谈或会话 ID 复用为 lineage ID,以免基于同一个 Seed 的独立运行发生冲突。 - 纯自然语言请求:切勿将原始文本作为
seed_content或自行编写 Seed YAML。先运行ooo interview和ooo seed(或复用上下文中经过验证的 Seed),再使用新的lineage_id启动。没有输入时,工具会返回输入指引,而不会创建作业。
2. 启动 Ralph
调用 ouroboros_ralph,并提供 lineage_id、seed_content(新 lineage 的第 1 代)、execute(默认值为 true)、parallel(默认值为 true)、skip_qa(默认值为 false)、已知时的 project_dir,以及 max_generations(默认值为 10,也是硬性上限;只有在用户要求时才调低)。
3. 处理启动响应
-
作业已启动(存在
response.meta.job_id):保留response.meta.cursor,并报告:[Ralph] Started background loop: <job_id> Lineage: <lineage_id> Live view: <dashboard_url, or `ouroboros tui open`> A read-only observer will post meaningful progress, attention, and terminal events here. This conversation remains available for other safe work. -
观察者交接:如果缺少
response.meta.job_observer,则从最终的 `` 内容哨兵中恢复;除非它通过规范 v1 验证且其作业标识与可见的启动回执相符,否则应安全失败。仅将其用作身份锚点,绝不可据此重建工具或参数。当宿主支持独立子会话时,启动且仅启动一个只读观察者,并原样传递契约。观察者独占作业等待/结果调用和游标;主会话负责与用户对话、响应明确提出的状态查询,以及处理用户请求的取消。观察者处于活动状态时,主会话不得轮询同一作业。主会话可以细化需求、进行只读审查,或在无关的隔离工作树中工作;在 Ralph 的工作区写入之前,先检查活动工作者是否冲突。wait调用或父作业状态轮询不算启动子会话;只有返回有效子会话 ID/路径后,才能声称观察者已启动。契约中的host_lifecycle和运行时的orchestrate_subagents指南会说明具体的启动和等待机制。如果子会话发来消息时,运行时无法唤醒已经结束的父轮次(子会话消息只会排入父会话队列),则在观察者活动期间,使用宿主的子会话等待原语保持父轮次开启,每次等待不超过 60 秒。转发有意义的更新,并继续等待,直到作业进入终态。- 用户输入可能会中断等待;处理后继续等待,除非用户要求停止实时观察或更改请求。此时只结束转发循环,让持久化作业继续运行,并提供在下一轮或通过明确的状态查询追赶进度的选项。如果观察者子会话失败、被取消或在提供终态摘要前退出,也使用同一回退方案,而不是无限期等待。转发循环不得轮询 Ouroboros 作业,也不得接管游标。
- 如果启动失败,不得承诺实时转发:脱离会话的工作进程会在 stdio 轮次结束后继续运行,主会话则在下一次交互或明确的状态请求中,通过持久化事件追赶进度。
-
插件委派(
response.meta.status == "delegated_to_plugin",job_id为None):由子会话负责整个循环。没有作业 ID 时,绝不可调用作业工具;应将子会话结果视为终态,并概述其完成/错误状态和谱系 ID。
4. 监控(仅由轮询负责人执行)
观察者是默认负责人。仅当不存在独立子会话且用户明确要求实时监控时,才在主会话中运行此循环;否则在下一轮跟进。绝不要同时运行:
- 使用
ouroboros_job_wait(job_id, cursor, timeout_seconds=120, stream="linked", wait_for="attention_or_ac_change")进行长轮询; 每次等待/状态响应后,更新cursor = response.meta.cursor - 使用
ouroboros_job_status(job_id)快速检查状态 - 作业进入终止状态时,使用
ouroboros_job_result(job_id) - 用户要求停止/取消时,使用
ouroboros_cancel_job(job_id)
转达规则:每次变更用 1-2 行说明;立即指出 attention_required 以及被拒绝或不确定的交付;区分 Synapse 的 queued 状态与运行时已验证的 applied 状态;绝不要转发心跳、原始工具输出、命令或模型推理。报告运行配置、AC 数量及并行级别、最先排定的 AC,以及已验证完成的 AC;使用“当前正以……运行”这样的表述,因为后续代次可能切换模型或运行框架。当 lineage.generation.started 包含 ac_focus 时,根据 active_ac_descriptions 报告该代次正在返工的内容,以及保持冻结状态的 AC 数量(例如“第 7 代:正在返工 5 个 AC 中的 2 个;其余 3 个依据先前的 PASS 证据保持冻结”);如果该字段缺失或所有 AC 都处于活动状态,则说明整个 AC 图正在运行。绝不要引用验证命令或预期输出。
用户向正在运行的 AC 提出只读问题或补充意图时,调用 ouroboros_session_signal_targets,针对已观察到的执行选择相关 AC,不要询问内部 ID。对于问题和确认,使用 mode="inform",并在此模式下省略 fallback_mode。对于实现细化,使用 contract_effect="additive"、source="user"、mode="redirect",并显式指定 fallback_mode="after_turn";通过 ouroboros_session_signal 发送准确发现的防护条件。共享目标、AC、约束或非目标的变更需要经过批准的共享后继任务。
5. 终止时
轮询负责人获取作业结果,然后:
- 成功/收敛:总结最终代次、QA 结论,以及任何
worktree_path/worktree_branch。Ralphlineage_id不是执行session_id:只有当单独运行提供了真实执行会话 ID 时,才提供ooo evaluate <session_id>。 - 达到最大代数/失败:总结停止原因,并建议使用
ooo unstuck、ooo interview,或缩小范围后重试 Ralph。 - 已取消:确认取消,并保留作业 ID 以供后续检查。
活跃 Conductor 决策策略
对于 attention_required,最多使用一个短时只读验证器。如果宿主没有验证器原语,则展示证据,不要进行修改。否则,按 VERIFY → 根据 recommended_host_actions 决策 → 使用 ouroboros_record_conductor_decision 记录 selected → 仅执行菜单列出的已注册工具 → 恰好记录一个 completed、failed 或 declined 结果。Ralph 只能在首个且唯一一个有界后继代次(max_generations=1)中应用 conductor 指令,并且该指令必须是确定性的,且不得放宽要求。绝不要悄悄重试或降低已批准的共享契约要求。
这些是英文版规范性宿主指令。请用用户对话所用的语言自然地表达这些指令及所有转达内容。
RFC #1392 状态提示页脚
最终回复必须以且仅以一行 ◆ <current state> → next: <recommended action> 结尾。若可用,通过 ouroboros_session_status 获取实时会话状态;否则根据此技能的实际结果确定状态。绝不要使用线性的“第 N 步,共 M 步”页脚;如果下一步确实存在选择,则列出 2-3 个选项。