ワンクリックで
relay-fleet
Drive already-planned relay leaves through fan-out, review, serial merge, crash recovery, and fleet status.
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
Drive already-planned relay leaves through fan-out, review, serial merge, crash recovery, and fleet status.
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
Dispatch implementation tasks via worktree isolation. Use when delegating work to an executor, running background dispatches, or parallelizing independent tasks.
Use when completed relay executor work needs independent review against frozen Done Criteria — internal pre-publication rounds or post-publication PR rounds.
Interactive setup for relay routes. Use when the user asks to set up relay, configure company/personal relay routing, enable OpenCode or Pi, resolve model names, add provider/model routes, check advisory-review routing, or run relay-config doctor/check.
Use when a GitHub issue, sprint item, task description, or natural-language handoff should be implemented through autonomous executor dispatch; stops at ready_to_merge — merge only on explicit request.
Merge a reviewed PR, clean up worktree/branch, and close GitHub issues. Use after relay-review returns LGTM.
Use when a relay run needs its review anchor, scored rubric, or dispatch prompt — always before relay-dispatch, whether AC are explicit, vague, or missing.
| name | relay-fleet |
| description | Drive already-planned relay leaves through fan-out, review, serial merge, crash recovery, and fleet status. |
| compatibility | Requires git, gh CLI, Node.js 18+, and sibling relay-dispatch/relay-merge skills. |
| argument-hint | --fleet-id <id> --leaves-file <path> |
| metadata | {"related-skills":"relay-ready, relay-plan, relay-dispatch, relay-review, relay-merge","keywords":"relay-fleet, fleet, fan-out, parallel dispatch, resume, status, 병렬, 재개, 상태"} |
RELAY_SKILL_ROOT defaults to skills.--leaves-file, child prompt/rubric/Done Criteria files, and fleet/child run manifests under ~/.relay/runs/.${RELAY_SKILL_ROOT:-skills}/relay-fleet/scripts/relay-fleet.js, ${RELAY_SKILL_ROOT:-skills}/relay-fleet/scripts/merge-queue.js, ${RELAY_SKILL_ROOT:-skills}/relay-dispatch/scripts/dispatch.js, ${RELAY_SKILL_ROOT:-skills}/relay-review/scripts/review-runner.js, ${RELAY_SKILL_ROOT:-skills}/relay-merge/scripts/finalize-run.js.relay-readyrelay-planrelay-dispatchrelay-reviewRun multi-leaf orchestration after relay-ready and relay-plan have already produced leaf artifacts. The default command is the full crash-only drive: fan-out -> review/publication/redispatch loop -> serial merge queue -> closed when every child is terminal.
Design rationale, rejected alternatives, non-goals, and the Phase 2/3 roadmap: references/design.md.
To run a dev-backlog sprint batch as one fleet wave, use the mapping recipe in references/sprint-to-leaves.md.
Use a JSON file containing a non-empty leaves[] array. Each leaf must include:
leaf_ref: stable fleet child key, usually the relay-ready leaf_idissue_number: GitHub issue number for fleet issue-lock admissionbranch: child dispatch branchprompt_file: prepared dispatch promptrubric_file: prepared relay-plan rubricdone_criteria_file: frozen Done Criteria snapshotrelay-fleet only fans out already-decomposed leaf contracts; it never splits a raw or ambiguous request itself — route that intake through relay-ready first and pass its leaf output here.
Optional per-leaf fields are passed through to dispatch.js: request_id, leaf_id, executor, model, model_hints, sandbox, network_access, timeout, reasoning, copy, test_command, and register. An optional depends_on array of leaf_ref strings records ordering intent: a reference to another leaf in the same leaves file fails closed at load time (dispatch that leaf in an earlier wave and drop the reference here); a reference to a leaf_ref outside this file is accepted silently and assumed already satisfied.
If a leaf's executor route is denied or its model is unresolved, pause that leaf and use relay-config to register the route or set the default before resuming the fleet.
node "${RELAY_SKILL_ROOT:-skills}/relay-fleet/scripts/relay-fleet.js" \
--repo . \
--fleet-id fleet-481 \
--leaves-file /tmp/fleet-481-leaves.json \
--parallel 4
Read-only aggregate status:
node "${RELAY_SKILL_ROOT:-skills}/relay-fleet/scripts/relay-fleet.js" \
--repo . \
--fleet-id fleet-481 \
--status
Deprecated primary entry points, to be sunset within one release: relay-fleet.js --resume is accepted as an alias for re-running the default drive; relay-fleet.js --review and merge-queue.js remain internal re-entry/debug paths but should not be the operator loop.
Dry-run validates the leaf file and invokes child dispatch.js --dry-run for each leaf without writing a fleet manifest:
node "${RELAY_SKILL_ROOT:-skills}/relay-fleet/scripts/relay-fleet.js" \
--repo . \
--fleet-id fleet-481 \
--leaves-file /tmp/fleet-481-leaves.json \
--dry-run \
--json
skills/relay-dispatch/scripts/dispatch.js as a subprocess once per undispatched leaf and always passes --fleet-id.--leaves-file, already-dispatched children are not re-dispatched; with no --leaves-file, persisted fleet leaves are reused when dispatch recovery needs them.skills/relay-review/scripts/review-runner.js for children in internal_review_pending or review_pending, publishes publish_pending children, and redispatches changes_requested children until each reaches ready_to_merge or escalated.skills/relay-merge/scripts/finalize-run.js for one ready_to_merge child at a time. When a child merge fails, it marks that child merge_blocked and continues with the next ready child.closed only when every child is terminal: merged, closed, or escalated. Escalated children close the fleet with a nonzero exit and operator-attention summary; merge_blocked keeps the fleet open in merging.dispatch.js --fleet-id performs the durable lock during the actual child run.fleet_id points back to this fleet, mark no-manifest interrupted children as dispatch_failed_pre_manifest, skip still-running child subprocesses, and continue recoverable work.--status is read-only and uses the relay-dispatch fleet summary derivation rules.There is intentionally no daemon. A fleet makes progress only while relay-fleet is actively running. Pause by killing the process. Resume by re-running the same primary command with the same --fleet-id and, when available, the same --leaves-file; the command reconciles child manifests, skips still-running children, and continues recoverable pre-manifest failures.
For long fleets, the operator may activate host /goal after fan-out to keep one session driving the daemonless loop. Use the copy-paste condition and idempotent operating loop in references/goal-persistence.md; the condition must name the transcript-visible --status --json check, not just an operator process.