mcpField
R
ralph

ralph

github.com/q00Agent 工作流6.3k91 次安装2 天前更新
代码仓库

关于 ralph

ralph 技能启动并协调由 Ouroboros MCP 管理的后台进化任务循环,围绕指定 lineage 反复执行 evolve_step。它适合需要持续运行,直至 QA 通过、收敛、终止动作、取消或达到代数上限的用户。

主要功能

  1. 01后台重复执行 evolve_step
  2. 02按 lineage 设置运行
  3. 03处理任务进度和结果
  4. 04取消任务并向活动会话发送信号

适用场景

  1. 01继续已有的 lineage
  2. 02从已验证的 Seed 启动循环
  3. 03按需实时查看任务进度
  4. 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。Ralph lineage_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 个选项。

评论

支持 Markdown