用途
Relay 用于将 GitHub issue、sprint 条目、任务描述或自然语言交接内容,通过自主执行器派发来实现。它执行“计划 → 派发 → 评审”的完整循环,并区分两条交付路径:GitHub 交付在 ready_to_merge 处停止,除非用户明确要求合并;本地交付执行规范化恢复,并在终态 reviewed_result_ready 处停止。
主要能力
- 源分类与重新锚定:在获取、forge 查询、worktree、run 目录或执行器生效之前,先对仓库进行分类。Relay 要求 Git,且不会替你运行 git init。
- 预检:运行 route 阶段预检,执行只读源门禁,然后进行路由特定的在途检查(GitHub 上现有的重复 PR 防护,以及无远程的本地运行事实)。
- 计划:始终构建 rubric,遵循 relay-plan 流程:读取任务、恢复 Done Criteria、构建 rubric、输出交接产物。
- 派发:relay 负责生命周期编排,relay-dispatch 负责派发 CLI 语义。通过 --executor 和 --model 显式传入固定执行器或模型。
- 恢复与推进:使用 relay-recover 进行规范化恢复,使用 relay-advance 作为重复 wait/recover 轮询的默认传送器。
- 评审:强制步骤,不可跳过。在评审前验证,将每个声明的验证与保留的 worktree 进行核对。
- 批量模式:当多个独立任务就绪时,准备 relay-fleet 批次,但保留 /relay 的 ready_to_merge 停止点,直到用户明确授权落地。
使用方式
输入包括:环境变量(可选 RELAY_SKILL_ROOT 默认为 skills;角色覆盖使用 RELAY_ORCHESTRATOR/RELAY_REVIEWER);文件(任务/issue 文本、可选 sprint 文件、/tmp/dispatch-<N>.md、/tmp/rubric-<N>.yaml);同级脚本(run-preflight.js、dispatch.js、review-runner.js)。
角色默认值:编排者、执行器、评审者默认均为 Codex,除非在派发时通过环境变量或参数覆盖。绑定不可变;review --reviewer 必须等于该绑定,且不是覆盖。
步骤 1:源与重新锚定。先运行 route 预检:
PREFLIGHT=$(node "${RELAY_SKILL_ROOT:-skills}/relay/scripts/run-preflight.js" \
--stage route --repo . --issue-number "$ISSUE_NUMBER" --branch "$BRANCH" --json)
如果 source.route 为 local-reviewed-result,使用本地任务文本或用户描述,不运行 git fetch、gh issue view 或任何 PR 查询。如果 source.route 为 github,使用报告的 source.remote_name 进行现有的重新锚定获取,然后在需要 issue 文本时使用 gh issue view <N>。GitLab 和其他 forge 不受支持。
步骤 2:计划。始终构建 rubric,将派发提示和 rubric YAML 写入临时文件,如 /tmp/dispatch-<N>.md 和 /tmp/rubric-<N>.yaml。
步骤 3:派发。示例命令:
node "${RELAY_SKILL_ROOT:-skills}/relay-dispatch/scripts/dispatch.js" . \
-b issue-<N> --prompt-file /tmp/dispatch-<N>.md --rubric-file /tmp/rubric-<N>.yaml \
--done-criteria-file <done-criteria-path> --timeout 3600 --detach --json
# 要固定派发选择,追加:--executor <name> --model <provider/model>
--detach 返回 snake_case 启动回执,包含 status、run_id、run_dir、worktree、attempt_id、host_handle、dispatcher_pid 和 inspection。轮询只读检查:
node "${RELAY_SKILL_ROOT:-skills}/relay/scripts/relay-recover.js" inspect --repo . --run-id "$RUN_ID" --json
node "${RELAY_SKILL_ROOT:-skills}/relay/scripts/run-preflight.js" --stage review --repo . --run-id "$RUN_ID" --json
严格遵循 inspection.recommended_action:recover → 运行规范化 relay-recover recover;review → 进入步骤 4;redispatch → 使用不可变 run_id 调用 dispatch;wait → 继续轮询;operator_attention 或 none → 停止并解决阻塞。
步骤 4:评审(强制)。在调用 relay-review 之前,将每个声明的验证与保留的 worktree 进行核对并说明结果。仅在 inspection 建议 review 时调用:
node "${RELAY_SKILL_ROOT:-skills}/relay-review/scripts/review-runner.js" \
--repo . --run-id "$RUN_ID" --json
步骤 5:完成所选路由。对于 source.route=github,LGTM 必须推导出 merge/ready_to_merge;在此停止,直到用户明确授权 relay-merge。对于 source.route=local-reviewed-result,LGTM 必须推导出 recover/reviewed_result_ready;运行该精确恢复操作,并仅在 inspection 报告终态 Reviewed Result 后停止。
适用场景
- 将 GitHub issue 或 sprint 条目通过自主执行器派发实现。
- 需要计划、派发、评审循环的开发工作流。
- 支持 GitHub 路由和本地交付路由。
- 批量处理多个独立任务(relay-fleet)。
限制
- Relay 要求 Git,且不会替你运行 git init。
- GitLab 和其他 forge 不受支持;需配置 GitHub、移除所有远程以进行本地交付,或使用直接委托。
- GitHub 路由需要已认证的 GitHub 访问权限,以及所选执行器/评审者的常规环境 CLI 认证和网络可用性。
- 评审步骤为强制,不可跳过。
- 角色绑定不可变;review --reviewer 必须等于该绑定,且不是覆盖。
- 关于收费、价格、平台支持范围等具体信息,资料中暂未提供。