Use this skill when /relay cannot safely bypass straight to planning.
When Intake Is Required
Run intake when any of these are true:
- the request is free-form or ambiguous
- the task may contain multiple steps or multiple leaves
- no stable Done Criteria anchor exists yet
- the issue/task text is too broad to review safely as-is
Bypass intake only for a single relay-ready task with a trustworthy review anchor already available.
Output Contract
Persist all of the following under ~/.relay/requests/<repo-slug>/<request-id>/:
- request artifact:
../<request-id>.md - raw request:
raw-request.md - relay-ready handoffs:
relay-ready/<leaf-id>.md - frozen Done Criteria snapshots:
done-criteria/<leaf-id>.md - append-only events:
events.jsonl
The request artifact frontmatter may also carry:
readiness.clarityreadiness.granularityreadiness.dependencyreadiness.verifiabilityreadiness.risknext_actionleaf_countpaths.handoff+paths.done_criteriafor single-leaf requestspaths.handoffs+paths.done_criteriafor multi-leaf requestsdecomposition.leaf_orderdecomposition.dependencies
Each normalized handoff must contain:
request_idleaf_idtitlegoalorderdepends_onin_scopeout_of_scopeassumptionsdone_criteria_pathescalation_conditions
Persistence Step
Write a JSON contract file with:
source.kindrequest_text- either
handofffor single-leaf orhandoffs[]for multi-leaf - per leaf:
leaf_id,title,goal,order - optional per leaf:
depends_on - per leaf:
in_scope,out_of_scope,assumptions - per leaf:
done_criteria_markdown,escalation_conditions
Persist it with:
${CLAUDE_SKILL_DIR}/scripts/persist-request.js --repo . --contract-file /tmp/relay-intake-contract.json --json
Optional contract fields:
readiness.clarity:high | medium | lowreadiness.granularity:single_task | multi_task | unclearreadiness.dependency:none | internal | externalreadiness.verifiability:high | medium | lowreadiness.risk:low | medium | high
Preflight shaping stays append-only in events.jsonl. Use the portable intake event types:
proposal_presentedquestion_askedquestion_answeredproposal_acceptedproposal_edited
Track the immediate follow-up as next_action on the request artifact. Do not create a second state machine for intake.
Downstream Handoff
After persistence succeeds:
- use
relay-ready/<leaf-id>.mdas the source-of-truth input forrelay-plan - dispatch with:
${CLAUDE_SKILL_DIR}/../relay-dispatch/scripts/dispatch.js . \
-b <branch> \
--prompt-file <dispatch-prompt-path> \
--rubric-file <rubric-path-from-relay-plan> \
--request-id <request-id> \
--leaf-id <leaf-id> \
--done-criteria-file <done-criteria-path>
- for multi-leaf requests, dispatch leaves in
decomposition.leaf_order, respectingdepends_on - let
relay-reviewread the frozen snapshot from the run manifest anchor
Do not create a second lifecycle. Intake stops once the relay-ready contract is persisted.