Yolo Skill
Full-auto AI-DLC pipeline. User provides a prompt; agent drives the entire lifecycle: Idea -> Elaboration -> Proposal -> Review -> Execute -> Verify -> Done.
Tool namespace: Chorus tools are exposed by the connected MCP server under a chorus__ prefix on OpenClaw (e.g. chorus__chorus_pm_create_proposal). Bare names are used below for readability — prepend chorus__ when invoking. See /chorus for the full rule.
OpenClaw adaptations summarized (details inline below): (1) elaboration is self-answered as plain text — no AskUserQuestion, no user interaction; (2) reviewers run inline after each submit — spawn a sub-agent with the OpenClaw sessions_spawn tool and tell it to run the /proposal-reviewer or /task-reviewer skill, with a read-only self-review fallback when sessions_spawn is unavailable; (3) sessions are manual if you dispatch sub-agents (no SubagentStart hook); (4) task execution dispatches one sub-agent per unblocked task via sessions_spawn (whole wave in one message), falling back to sequential main-agent waves when sessions_spawn is unavailable or workers fail repeatedly — there is no team object to create first.
Overview
/yolo automates the complete AI-DLC workflow. You provide a natural language description of what you want built, and the agent handles everything:
- Planning -- create project, idea, self-elaboration, proposal with docs & tasks
- Proposal Review -- proposal-reviewer adversarial loop
- Execution -- dependency-ordered waves: one worker sub-agent per unblocked task, or sequential main-agent execution as fallback
- Verification -- task-reviewer adversarial loop + admin verify
- Report -- completion summary
/yolo <prompt>
|
v
Project + Idea + Elaboration (self-answered) + Proposal
|
v
Proposal Reviewer (inline, up to maxProposalReviewRounds)
|
v
Admin Approve --> Tasks materialize
|
v
Wave execution (loop chorus_get_unblocked_tasks; one sessions_spawn worker
per task, or sequential main-agent fallback)
| (implement task + task-reviewer per task)
v
Admin Verify each task --> unblock next
|
v
Done. Report summary.
Escape hatch: interrupt at any time. All created entities (project, idea, proposal, tasks) persist in Chorus. Resume manually via /develop or /review.
Prerequisites
The API key needs write + admin on every resource it touches:
| Needs |
Why |
idea: [write] |
Create ideas, run elaboration |
proposal: [write, admin] |
Create proposals; approve them |
task: [write, admin] |
Create, execute, verify tasks |
project: [write] |
Create the project if none is given |
Check at startup:
perms = chorus_checkin().agent.permissions
need = { idea: ["write"], proposal: ["write","admin"],
task: ["write","admin"], project: ["write"] }
for resource, actions in need:
missing = [a for a in actions if a not in (perms[resource] or [])]
if missing: ABORT "/yolo needs {resource}: {missing}. Use an Admin-preset API key."
Input
/yolo <natural language prompt>
/yolo <prompt> --project <project-uuid>
<prompt> -- what you want built (becomes the Idea content)
--project <uuid> -- optional; use an existing project instead of creating a new one
Workflow
Phase 1: Planning
Step 1.1: Resolve Project
Parse the arguments for --project <uuid>.
If --project is provided:
chorus_get_project({ projectUuid: "<uuid>" })
Verify it exists and proceed.
If not provided, search for a suitable existing project first:
# 1. Search for projects matching the prompt topic
chorus_search({ query: "<key terms from prompt>", entityTypes: ["project"] })
# 2. Or list recent projects to find a match
chorus_list_projects()
Review the results. If a project clearly matches the user's intent (same topic, active, relevant scope), use it. If no suitable project exists, create a new one:
chorus_admin_create_project({
name: "<short title derived from prompt>",
description: "<1-2 sentence summary of the prompt>"
})
Step 1.2: Create Idea
chorus_pm_create_idea({
projectUuid: "<project-uuid>",
title: "<concise title derived from prompt>",
content: "<full user prompt as-is>"
})
Then claim it:
chorus_claim_idea({ ideaUuid: "<idea-uuid>" })
Step 1.3: Self-Elaboration
In /yolo mode, the agent generates elaboration questions and answers them itself -- no user interaction at all. There is no AskUserQuestion primitive on OpenClaw, and yolo deliberately does not prompt the user; it self-answers to preserve an audit trail without interrupting the run.
Self-elaboration is still a loop. If answering your own questions surfaces a new question, contradiction, or gap, loop back to chorus_pm_start_elaboration for another self-answered round before resolving — don't force a resolve over unresolved ambiguity. There is no human gate in YOLO, so the loop exits on your judgment that nothing material is left open (round cap 10). Steps 1–2 are one round; repeat them as needed, then resolve once in Step 3.
Generate and submit questions:
chorus_pm_start_elaboration({
ideaUuid: "<idea-uuid>",
depth: "standard",
questions: [
{
id: "q1",
text: "<question about scope, architecture, etc.>",
category: "functional",
options: [
{ id: "a", label: "<option A>" },
{ id: "b", label: "<option B>" }
]
}
// ... 5-8 questions covering functional, technical_context, scope aspects
]
})
Answer immediately (agent selects best options based on the prompt — no user prompt):
chorus_answer_elaboration({
ideaUuid: "<idea-uuid>",
roundUuid: "<round-uuid>",
answers: [
{ questionId: "q1", selectedOptionId: "a", customText: "Rationale: ..." },
// ...
]
})
Resolve — in YOLO mode the agent resolves elaboration autonomously, with no human-confirmation gate (the human-confirmation requirement that applies to the interactive /idea flow is explicitly waived under /yolo automation):
chorus_pm_validate_elaboration({
ideaUuid: "<idea-uuid>"
})
chorus_pm_validate_elaboration requires idea:admin. /yolo already mandates an Admin-preset key in Prerequisites, so this is satisfied. To open another self-elaboration round instead of resolving, just call chorus_pm_start_elaboration again.
Step 1.4: Create Proposal
Resolve the spec mode (inline). OpenClaw has no SessionStart hook to precompute it — so you resolve the whole contract yourself, not just "is OpenSpec active". Load the openspec-aware skill and run its §1 resolution block (which sources the plugin's shipped bin/resolve-spec-mode.sh), which yields one of lite / openspec / off (the canonical resolver, byte-identical to the Claude Code copy; /chorus spec prints the same result from the TS mirror src/spec-mode.ts). Rule: an explicit CHORUS_SPEC_MODE wins; when unset, OpenSpec is the default whenever usable (CHORUS_OPENSPEC_MODE ≠ off, an openspec/ directory at the project root, and the openspec CLI on PATH), else spec-lite. Route: openspec (usable) → 2a; off → 2b; lite → 2c. If the resolution says the mode cannot be honored (explicit CHORUS_SPEC_MODE=openspec but OpenSpec unusable), halt and surface it — do NOT fall back or enter 2a with no OpenSpec.
OpenClaw note: this is mandatory — yolo runs unattended, so silently picking the wrong mode is exactly the failure scenario the resolution contract exists to prevent.
Create the empty proposal container. The description MUST carry the mode's locator line — OpenSpec: OpenSpec change slug: <slug>; spec-lite: Spec-lite: .chorus/specs/<slug>/<YYYY-MM-DD>-<change-slug>/; free-form: none. description is only settable at creation, so decide the slug/dated-path first.
chorus_pm_create_proposal({
projectUuid: "<project-uuid>",
title: "<feature name>",
description: "<summary>\n\nOpenSpec change slug: <slug>", // OpenSpec (2a)
// description: "<summary>\n\nSpec-lite: .chorus/specs/<slug>/<YYYY-MM-DD>-<change-slug>/", // spec-lite (2c)
// description: "<summary>", // free-form (2b)
inputType: "idea",
inputUuids: ["<idea-uuid>"]
})
Then branch:
2a. OpenSpec mode (resolved mode = openspec, usable). Follow openspec-aware §3 end-to-end:
- Pick
$SLUG, run openspec new change "$SLUG" (§3.1–§3.2).
- Author
proposal.md, design.md, and one specs/<capability>/spec.md per capability locally on disk (§3.3). ADDED Requirements only; per-spec fallback to free-form Markdown if MODIFIED/REMOVED is needed.
- Define the
chorus_check_response helper (§6); prefer chorus mcp call … --arg-file content=<file> for mirrors (§3.4/§3.6) — the bash-wrapper fallback's json_encode_file is only needed when chorus is not on PATH.
- Mirror each local file via
chorus mcp call chorus_pm_add_document_draft … --arg-file content=<file> (§3.6; fallback = chorus-api.sh mcp-tool chorus_pm_add_document_draft "$PAYLOAD") — one call per file, with the document type from openspec-aware §5.
⛔ Do not invoke chorus_pm_add_document_draft / chorus_pm_update_document_draft / chorus_pm_update_document from the MCP harness with a hand-typed content field in this branch. Re-typing the markdown body wastes 20k+ tokens per proposal and breaks byte-equality with the local files. See openspec-aware §2 Rule 1.
Then continue to step 3 (task drafts).
2b. Free-form mode (resolved mode = free-form). Only when step 1 resolved to free-form — i.e. explicit CHORUS_SPEC_MODE=off (unset never comes here: it resolves to OpenSpec when usable, else spec-lite/2c). Add a tech design document draft directly via MCP, content authored inline:
chorus_pm_add_document_draft({
proposalUuid: "<proposal-uuid>",
type: "tech_design",
title: "Tech Design: <feature>",
content: "<markdown tech design covering architecture, data model, API, module contracts>"
})
2c. spec-lite mode (resolved mode = lite). Load the spec-lite skill. Pick $SLUG (a capability). Ensure the durable .chorus/specs/<slug>/spec.md exists (local-only, no ids; use the spec-lite skill's inline durable-spec template) and update it in place. Create this change's dated folder .chorus/specs/<slug>/<YYYY-MM-DD>-<change-slug>/ with its synced Chorus-typed docs (shape = the spec-lite skill's inline dated-folder document template) — prd.md (primary), optional tech_design.md… The description carries the Spec-lite: .chorus/specs/<slug>/<YYYY-MM-DD>-<change-slug>/ locator (step 2). Mirror each dated-folder <type>.md to its persistent Document byte-exact — first time chorus mcp call chorus_pm_add_document_draft "{\"proposalUuid\":\"<uuid>\",\"type\":\"prd\",\"title\":\"PRD: <feature>\"}" --arg-file content=.chorus/specs/<slug>/<YYYY-MM-DD>-<change-slug>/prd.md, later edits via chorus_pm_update_document against the recorded documentUuid (chorus-api.sh mcp-tool … fallback when chorus not on PATH). spec.md is never mirrored. No openspec/changes/ scaffold; no tasks.md. Then continue to step 3.
Add task drafts incrementally (use returned draftUuid for dependency chaining). acceptanceCriteriaItems is required on every draft — at least one non-blank criterion, or the call is rejected:
# First task
result1 = chorus_pm_add_task_draft({
proposalUuid: "<proposal-uuid>",
title: "<module name>",
description: "<what to build, referencing tech design>",
priority: "high",
storyPoints: 3,
acceptanceCriteriaItems: [
{ description: "<testable criterion>", required: true },
// ...
]
})
# Second task, depends on first
chorus_pm_add_task_draft({
proposalUuid: "<proposal-uuid>",
title: "<dependent module>",
description: "...",
priority: "medium",
storyPoints: 2,
acceptanceCriteriaItems: [...],
dependsOnDraftUuids: ["<result1.draftUuid>"]
})
Validate:
chorus_pm_validate_proposal({ proposalUuid: "<proposal-uuid>" })
Fix any errors, then proceed.
Submit:
chorus_pm_submit_proposal({ proposalUuid: "<proposal-uuid>" })
Immediately proceed to Phase 2 and run the proposal reviewer inline — OpenClaw has no PostToolUse hook to remind you.
Reviewer contract (applies to every review gate below)
Every gate in Phases 2, 4 and 4.5 follows the same three steps. They are written once here; the phases below only name their entity and their stage-specific actions.
- Spawn and wait. Spawn the reviewer as a read-only sub-agent, then wait for it: spawn it with
sessions_spawn and wait by polling the subagents tool or via sessions_yield — do not detach. The verdict is the VERDICT: comment the reviewer posts, not the spawn result.
- Read THIS round's VERDICT. Call
chorus_get_comments on the entity and find the VERDICT: comment posted after your dispatch, not an older round's. Do not advance the gate before you have read it.
- No VERDICT for this round? Check what the reviewer did post:
- A reported round limit, or any other explicit refusal to review — a deliberate escalation to a human. STOP: do not respawn, do not self-review, do not post a VERDICT of your own.
- Nothing at all — respawn ONCE, telling it to stay within its turn budget and reserve its last turns for the VERDICT, then apply this same check again to what the retry posts. An explicit refusal from the retry still means STOP; only a second true silence lets you review the entity yourself as a read-only pass and POST the VERDICT, then proceed on what you posted rather than looping forever.
Absence is never a PASS, and a round limit reached by someone else is never yours to clear.
Phase 2: Proposal Review Loop
OpenClaw difference: there is no PostToolUse hook injecting a "spawn the reviewer" reminder. Run the reviewer inline, right after chorus_pm_submit_proposal.
Obtain an independent VERDICT on the proposal:
- Preferred — spawn a reviewer sub-agent. Use the OpenClaw
sessions_spawn tool to spawn a sub-agent whose task instructs it to invoke the /proposal-reviewer skill (bundled with this plugin) against the proposal, then wait for it (poll the subagents tool, or use sessions_yield — do not detach; you need the VERDICT before proceeding). The sub-agent inherits the plugin's skills, so /proposal-reviewer is available to it; that skill is read-only and ends with a VERDICT: comment on the proposal. Example task prompt:
Run the /proposal-reviewer skill to review proposalUuid <uuid>. This is review round <N>. Read the proposal, its documents, the idea, and the elaboration; classify findings as BLOCKER/NOTE; post your VERDICT comment on the proposal when done.
- Fallback — review it yourself. If
sessions_spawn is unavailable (e.g. spawning disabled by policy), do the review yourself as a focused, read-only pass following the /proposal-reviewer skill's procedure (read proposal + comments + idea + elaboration; check doc completeness, task granularity, AC↔requirement coverage, the DAG, and integration checkpoints; classify BLOCKER/NOTE) and record the result via chorus_add_comment ending with a VERDICT: line. Do not modify drafts during the review pass.
Then:
Read the reviewer's VERDICT:
chorus_get_comments({ targetType: "proposal", targetUuid: "<proposal-uuid>" })
Look for THIS round's VERDICT: comment — the one posted after your dispatch, not an older round's.
Act on the VERDICT:
PASS or PASS WITH NOTES --
chorus_admin_approve_proposal({
proposalUuid: "<proposal-uuid>",
reviewNote: "PASS from reviewer. <brief summary of notes if any>"
})
Tasks and documents materialize automatically. Proceed to Phase 3.
FAIL --
Read the BLOCKERs from the reviewer comment. Then:
chorus_pm_reject_proposal({
proposalUuid: "<proposal-uuid>",
reviewNote: "FAIL from reviewer. Fixing BLOCKERs: <list>"
})
Revise the drafts (chorus_pm_update_document_draft, chorus_pm_update_task_draft) to address each BLOCKER, then resubmit:
chorus_pm_submit_proposal({ proposalUuid: "<proposal-uuid>" })
After resubmission, run the reviewer inline again for Round 2 (same as above).
Max rounds: Loop up to maxProposalReviewRounds (from plugin config, default 3). If exhausted:
STOP: "Proposal review failed after {maxRounds} rounds.
Remaining BLOCKERs: <list>. Human review needed.
Proposal UUID: <uuid>"
No new VERDICT for this round? Apply step 3 of the Reviewer contract, reviewing the proposal yourself if the reviewer stays silent.
Phase 3: Task Execution (Waves)
After proposal approval, tasks exist in open status. Execute them in dependency-ordered waves.
OpenClaw difference: there is no team or group object to create — parallelism comes from dispatching one sub-agent per unblocked task with OpenClaw's own sessions_spawn tool, issuing the whole wave in a single message. If your host does not expose sessions_spawn, or spawned workers fail repeatedly, run waves sequentially as the main agent: loop chorus_get_unblocked_tasks, implement each ready task yourself, verify it, then loop again for the next wave. The sequential loop below is written for that fallback and is always safe; see /develop §"Optional: sub-agent dispatch" for the parallel form (workers need the manual session instructions, since there is no SubagentStart hook).
wave = 1
loop:
# 1. Find ready tasks (all dependencies done/closed)
unblocked = chorus_get_unblocked_tasks({ projectUuid: "<project-uuid>" })
if no unblocked tasks and all tasks done/closed:
break # All complete
if no unblocked tasks and some tasks not done:
# Stuck -- tasks failed review and can't proceed
break with escalation report
# 2. Implement each unblocked task, in order, AS THE MAIN AGENT:
for each task in unblocked:
chorus_claim_task({ taskUuid: task.uuid })
chorus_update_task({ taskUuid: task.uuid, status: "in_progress" })
# ... read task + proposal + project documents for context,
# write code, run tests ...
chorus_report_work({ taskUuid: task.uuid, report: "...", status: "to_verify" })
chorus_report_criteria_self_check({ taskUuid: task.uuid, criteria: [...] })
chorus_submit_for_verify({ taskUuid: task.uuid, summary: "..." })
# 3. Proceed to Phase 4 (verification) for THIS task before moving to the next.
wave += 1
Parallel form: to run a wave in parallel instead of serially, dispatch one worker sub-agent per unblocked task with sessions_spawn, issuing the whole wave in a single message, then wait for the wave before verifying. Because there is no SubagentStart hook, each worker prompt must include the manual session instructions explicitly — see /develop "Optional: sub-agent dispatch". The main agent still owns review + verification, and the wave-by-wave dependency structure above is unchanged.
Phase 4: Verification
After each task is submitted (Phase 3 step 3), verify it before moving on:
for the just-submitted task:
# 1. Check task status
task = chorus_get_task({ taskUuid: "<task-uuid>" })
if task.status != "to_verify":
# implementation may have failed; handle or skip
continue
# 2. Run the task-reviewer INLINE (no hook on OpenClaw):
# - Preferred: use the sessions_spawn tool to spawn a sub-agent whose task is
# "Run the /task-reviewer skill to verify taskUuid <uuid> (round <N>); post your
# VERDICT comment on the task when done." Wait for it (poll the subagents tool /
# sessions_yield — do NOT detach; you need the VERDICT). The sub-agent inherits the
# plugin skills, so /task-reviewer is available to it.
# - Fallback (sessions_spawn unavailable): review it yourself as a focused read-only
# pass following the /task-reviewer procedure (read task + proposal + docs + code,
# run read-only tests, classify findings BLOCKER/NOTE) and post the VERDICT via
# chorus_add_comment.
# 3. Read task-reviewer VERDICT
comments = chorus_get_comments({ targetType: "task", targetUuid: "<task-uuid>" })
# Find THIS round's "VERDICT:" comment — the one posted after your dispatch, not an older round's
# 4. Act on VERDICT — three possible outcomes:
if VERDICT is "PASS":
chorus_mark_acceptance_criteria({
taskUuid: "<task-uuid>",
criteria: [
{ uuid: "<ac-uuid>", status: "passed", evidence: "<from reviewer>" },
// ...
]
})
chorus_admin_verify_task({ taskUuid: "<task-uuid>" })
# Task is now "done" -- unblocks dependents for the next wave
if VERDICT is "PASS WITH NOTES":
chorus_mark_acceptance_criteria({ ... })
chorus_admin_verify_task({ taskUuid: "<task-uuid>" })
if VERDICT is "FAIL":
# BLOCKERs found. Do NOT verify. Reopen for rework.
chorus_admin_reopen_task({ taskUuid: "<task-uuid>" })
# Fix the BLOCKERs in a later pass (the task returns to in_progress/open)
After verifying the wave's tasks, return to Phase 3's loop to pick up newly unblocked tasks. Remember: only done (not to_verify) unblocks dependents.
Max rounds per task: Tracked by maxTaskReviewRounds from plugin config (default 3). If a task has been reopened maxRounds times, skip it and flag for human escalation:
ESCALATE: "Task '{title}' failed review after {maxRounds} rounds.
Last BLOCKERs: <list>. Manual intervention needed.
Task UUID: <uuid>"
Continue with remaining tasks -- do not halt the entire pipeline for one stuck task.
No new VERDICT for this round? Apply step 3 of the Reviewer contract, reviewing the task yourself if the reviewer stays silent.
Phase 4.5: Code-Review Gateway (mandatory pre-ship)
Once every task of the idea's proposal is verified (done) — Phase 3 finds no more unblocked tasks and none remain non-terminal — run the final ship-time code-review gateway before the Phase 5b completion report. It reviews the whole Idea's aggregate code change across all tasks (not a single task) and posts its verdict on the idea. Inline (no hook on OpenClaw), same mechanism as Phase 4:
- Preferred — spawn a reviewer sub-agent. Use
sessions_spawn to spawn a sub-agent whose task tells it to invoke the /code-reviewer skill against the idea, then wait for it (poll subagents / sessions_yield — do NOT detach). Example task prompt: Run the /code-reviewer skill to review the aggregate code for ideaUuid <uuid> (round <N>); post your VERDICT comment on the idea when done.
- Fallback — review it yourself. If
sessions_spawn is unavailable, perform the review as a focused read-only pass following the /code-reviewer procedure (read the idea, its approved proposals + documents + tasks; infer the aggregate diff from task reports + git log/diff; review cross-task integration, architecture, security, regression, feature-level coverage; run the project build/test) and post the VERDICT: comment on the idea yourself.
Act on the VERDICT:
- PASS / PASS WITH NOTES — the feature is cleared to ship. Proceed to Phase 5 / 5b.
- FAIL — do NOT ship. Read the BLOCKERs, then fix them via the quick-dev workflow (
/quick-dev): call chorus_create_tasks with proposalUuid set to the current approved proposal so the fix tasks attach to it — do not reopen the already-verified tasks or apply untracked fixes. Group related small BLOCKERs into one cohesive task by default; split only materially large or independently testable fixes. Drive every fix task through Phase 3 → Phase 4, including AC self-check, independent task review, and admin verification. Re-run the gateway only after every fix task is successfully done; a failed or cancelled fix task, stop the automatic loop and escalate. Loop bounded by maxCodeReviewRounds (default 3; 0 = unlimited).
ESCALATE: "Idea '{title}' failed code review after {maxCodeReviewRounds} rounds.
Last BLOCKERs: <list>. Manual intervention needed. Idea UUID: <uuid>"
No new VERDICT for this round? Apply step 3 of the Reviewer contract, reviewing the idea's aggregate change yourself if the reviewer stays silent.
The gateway is behavioral like the other two reviewers: its verdict is advisory and does not change the Idea's stored status; the orchestrator honors it. It runs before the completion report so the report is never written while a FAIL is outstanding.
Phase 5: Report
After all waves complete, output a markdown summary:
## /yolo Complete
**Project:** <project-name> (<project-uuid>)
**Proposal:** <proposal-title> (<proposal-uuid>)
**Idea:** <idea-title> (<idea-uuid>)
### Tasks
| Task | Status | Review Rounds |
|------|--------|---------------|
| <title> | done | 1 |
| <title> | done | 2 |
| <title> | ESCALATED | 3 (max) |
### Summary
- Total tasks: N
- Completed: X / N
- Escalated: Y (need human review)
- Waves executed: W
Phase 5b: Idea Completion Report (mandatory)
A successful /yolo run always finishes the Idea — call chorus_create_report once with proposalUuid set to the last verified proposal. The call requires title (a short report title) plus content; content's parameter description carries the three-section template (## Summary / ## Decisions / ## Follow-ups); follow it. Surface the returned documentUuid in the Phase 5 summary. Skipping is a protocol violation.
Order: write the completion report only after the Phase 4.5 code-review gateway returns PASS / PASS WITH NOTES — never while a code-review FAIL is outstanding.
OpenSpec archive: if you ran in OpenSpec mode (Step 1.4 branch 2a), the last verified task also triggers the archive flow. OpenClaw has no PostToolUse hook to remind you — after verifying the final task, run openspec-aware §3.9 yourself (openspec archive <slug> --yes, then mirror each emitted openspec/specs/<capability>/spec.md back via §3.8).
Error Handling
| Scenario |
Action |
| Missing permissions at startup |
Abort with message listing the missing resource/action pairs (see Prerequisites). Recommend an Admin-preset API key. |
| Project creation fails |
Report error, suggest user create project manually and retry with --project |
| Proposal reviewer FAIL after maxRounds |
Stop pipeline, report persisting BLOCKERs, suggest manual review |
| Task reviewer FAIL after maxRounds |
Flag task as escalation-needed, continue with other tasks |
| Task implementation fails / no submit |
Log error, skip task, pick it up in next wave if possible |
Reviewer sub-agent unavailable (sessions_spawn disabled) |
Run the review yourself as a focused read-only pass following the /proposal-reviewer or /task-reviewer skill, then post the VERDICT |
| Interrupted |
All entities persist in Chorus. User can resume via /develop or /review |
Tips
- Keep the initial prompt detailed -- the more context you provide, the better the auto-generated proposal quality
- The proposal-reviewer is your quality gate -- if it keeps FAILing, the prompt may be too vague
- Watch the wave count -- if tasks keep getting reopened, consider stopping and reviewing the feedback manually
- All audit trail is preserved: elaboration Q&A, reviewer VERDICTs, work reports. Check Chorus UI for full history
- For small/simple tasks, consider
/quick-dev instead -- it skips the Idea->Proposal overhead
- Sub-agents (if you dispatch any) share your API key; ensure it has the permissions listed in Prerequisites before starting
Next
- To manually review proposals:
/review
- To manually develop tasks:
/develop
- To create quick standalone tasks:
/quick-dev
- For platform overview:
/chorus
1---2name: yolo-43description: Full-auto AI-DLC pipeline — from prompt to done. Automates the entire Idea -> Proposal -> Execute -> Verify lifecycle.4license: AGPL-3.05---67# Yolo Skill89Full-auto AI-DLC pipeline. User provides a prompt; agent drives the entire lifecycle: Idea -> Elaboration -> Proposal -> Review -> Execute -> Verify -> Done.1011> **Tool namespace:** Chorus tools are exposed by the connected MCP server under a `chorus__` prefix on OpenClaw (e.g. `chorus__chorus_pm_create_proposal`). Bare names are used below for readability — prepend `chorus__` when invoking. See `/chorus` for the full rule.1213> **OpenClaw adaptations summarized (details inline below):** (1) elaboration is **self-answered as plain text** — no `AskUserQuestion`, no user interaction; (2) reviewers run **inline** after each submit — spawn a sub-agent with the OpenClaw `sessions_spawn` tool and tell it to run the `/proposal-reviewer` or `/task-reviewer` skill, with a read-only self-review fallback when `sessions_spawn` is unavailable; (3) sessions are **manual** if you dispatch sub-agents (no SubagentStart hook); (4) task execution dispatches **one sub-agent per unblocked task via `sessions_spawn`** (whole wave in one message), falling back to **sequential main-agent waves** when `sessions_spawn` is unavailable or workers fail repeatedly — there is no team object to create first.1415---1617## Overview1819`/yolo` automates the complete AI-DLC workflow. You provide a natural language description of what you want built, and the agent handles everything:20211. **Planning** -- create project, idea, self-elaboration, proposal with docs & tasks222. **Proposal Review** -- proposal-reviewer adversarial loop233. **Execution** -- dependency-ordered waves: one worker sub-agent per unblocked task, or sequential main-agent execution as fallback244. **Verification** -- task-reviewer adversarial loop + admin verify255. **Report** -- completion summary2627```28/yolo <prompt>29 |30 v31 Project + Idea + Elaboration (self-answered) + Proposal32 |33 v34 Proposal Reviewer (inline, up to maxProposalReviewRounds)35 |36 v37 Admin Approve --> Tasks materialize38 |39 v40 Wave execution (loop chorus_get_unblocked_tasks; one sessions_spawn worker41 per task, or sequential main-agent fallback)42 | (implement task + task-reviewer per task)43 v44 Admin Verify each task --> unblock next45 |46 v47 Done. Report summary.48```4950**Escape hatch:** interrupt at any time. All created entities (project, idea, proposal, tasks) persist in Chorus. Resume manually via `/develop` or `/review`.5152---5354## Prerequisites5556The API key needs write + admin on every resource it touches:5758| Needs | Why |59|------|-----|60| `idea: [write]` | Create ideas, run elaboration |61| `proposal: [write, admin]` | Create proposals; approve them |62| `task: [write, admin]` | Create, execute, verify tasks |63| `project: [write]` | Create the project if none is given |6465**Check at startup:**6667```68perms = chorus_checkin().agent.permissions69need = { idea: ["write"], proposal: ["write","admin"],70 task: ["write","admin"], project: ["write"] }7172for resource, actions in need:73 missing = [a for a in actions if a not in (perms[resource] or [])]74 if missing: ABORT "/yolo needs {resource}: {missing}. Use an Admin-preset API key."75```7677---7879## Input8081```82/yolo <natural language prompt>83/yolo <prompt> --project <project-uuid>84```8586- `<prompt>` -- what you want built (becomes the Idea content)87- `--project <uuid>` -- optional; use an existing project instead of creating a new one8889---9091## Workflow9293### Phase 1: Planning9495#### Step 1.1: Resolve Project9697Parse the arguments for `--project <uuid>`.9899**If `--project` is provided:**100```101chorus_get_project({ projectUuid: "<uuid>" })102```103Verify it exists and proceed.104105**If not provided**, search for a suitable existing project first:106```107# 1. Search for projects matching the prompt topic108chorus_search({ query: "<key terms from prompt>", entityTypes: ["project"] })109110# 2. Or list recent projects to find a match111chorus_list_projects()112```113114Review the results. If a project clearly matches the user's intent (same topic, active, relevant scope), use it. If no suitable project exists, create a new one:115```116chorus_admin_create_project({117 name: "<short title derived from prompt>",118 description: "<1-2 sentence summary of the prompt>"119})120```121122#### Step 1.2: Create Idea123124```125chorus_pm_create_idea({126 projectUuid: "<project-uuid>",127 title: "<concise title derived from prompt>",128 content: "<full user prompt as-is>"129})130```131132Then claim it:133```134chorus_claim_idea({ ideaUuid: "<idea-uuid>" })135```136137#### Step 1.3: Self-Elaboration138139In /yolo mode, the agent generates elaboration questions and answers them itself -- **no user interaction at all**. There is no `AskUserQuestion` primitive on OpenClaw, and yolo deliberately does not prompt the user; it self-answers to preserve an audit trail without interrupting the run.140141> **Self-elaboration is still a loop.** If answering your own questions surfaces a **new question, contradiction, or gap**, loop back to `chorus_pm_start_elaboration` for another self-answered round before resolving — don't force a resolve over unresolved ambiguity. There is no human gate in YOLO, so the loop exits on **your** judgment that nothing material is left open (round cap 10). Steps 1–2 are one round; repeat them as needed, then resolve once in Step 3.1421431. **Generate and submit questions:**144 ```145 chorus_pm_start_elaboration({146 ideaUuid: "<idea-uuid>",147 depth: "standard",148 questions: [149 {150 id: "q1",151 text: "<question about scope, architecture, etc.>",152 category: "functional",153 options: [154 { id: "a", label: "<option A>" },155 { id: "b", label: "<option B>" }156 ]157 }158 // ... 5-8 questions covering functional, technical_context, scope aspects159 ]160 })161 ```1621632. **Answer immediately** (agent selects best options based on the prompt — no user prompt):164 ```165 chorus_answer_elaboration({166 ideaUuid: "<idea-uuid>",167 roundUuid: "<round-uuid>",168 answers: [169 { questionId: "q1", selectedOptionId: "a", customText: "Rationale: ..." },170 // ...171 ]172 })173 ```1741753. **Resolve** — in YOLO mode the agent resolves elaboration **autonomously, with no human-confirmation gate** (the human-confirmation requirement that applies to the interactive `/idea` flow is explicitly waived under `/yolo` automation):176177 ```178 chorus_pm_validate_elaboration({179 ideaUuid: "<idea-uuid>"180 })181 ```182183 > `chorus_pm_validate_elaboration` requires `idea:admin`. `/yolo` already mandates an Admin-preset key in Prerequisites, so this is satisfied. To open another self-elaboration round instead of resolving, just call `chorus_pm_start_elaboration` again.184185#### Step 1.4: Create Proposal1861871. **Resolve the spec mode (inline).** OpenClaw has no SessionStart hook to precompute it — so you resolve the **whole** contract yourself, not just "is OpenSpec active". Load the `openspec-aware` skill and run its **§1 resolution block (which sources the plugin's shipped `bin/resolve-spec-mode.sh`)**, which yields one of `lite` / `openspec` / `off` (the canonical resolver, byte-identical to the Claude Code copy; `/chorus spec` prints the same result from the TS mirror `src/spec-mode.ts`). Rule: an explicit `CHORUS_SPEC_MODE` wins; when unset, **OpenSpec is the default whenever usable** (`CHORUS_OPENSPEC_MODE` ≠ `off`, an `openspec/` directory at the project root, and the `openspec` CLI on `PATH`), else **spec-lite**. Route: `openspec` (usable) → **2a**; `off` → **2b**; `lite` → **2c**. If the resolution says the mode **cannot be honored** (explicit `CHORUS_SPEC_MODE=openspec` but OpenSpec unusable), **halt** and surface it — do NOT fall back or enter 2a with no OpenSpec.188189 > **OpenClaw note:** this is mandatory — yolo runs unattended, so silently picking the wrong mode is exactly the failure scenario the resolution contract exists to prevent.1901912. **Create the empty proposal container.** The `description` MUST carry the mode's locator line — OpenSpec: `OpenSpec change slug: <slug>`; spec-lite: `Spec-lite: .chorus/specs/<slug>/<YYYY-MM-DD>-<change-slug>/`; free-form: none. `description` is only settable at creation, so decide the slug/dated-path first.192193 ```194 chorus_pm_create_proposal({195 projectUuid: "<project-uuid>",196 title: "<feature name>",197 description: "<summary>\n\nOpenSpec change slug: <slug>", // OpenSpec (2a)198 // description: "<summary>\n\nSpec-lite: .chorus/specs/<slug>/<YYYY-MM-DD>-<change-slug>/", // spec-lite (2c)199 // description: "<summary>", // free-form (2b)200 inputType: "idea",201 inputUuids: ["<idea-uuid>"]202 })203 ```204205 Then branch:206207 **2a. OpenSpec mode (resolved mode = openspec, usable).** Follow `openspec-aware` §3 end-to-end:208 - Pick `$SLUG`, run `openspec new change "$SLUG"` (§3.1–§3.2).209 - Author `proposal.md`, `design.md`, and one `specs/<capability>/spec.md` per capability locally on disk (§3.3). ADDED Requirements only; per-spec fallback to free-form Markdown if MODIFIED/REMOVED is needed.210 - Define the `chorus_check_response` helper (§6); prefer `chorus mcp call … --arg-file content=<file>` for mirrors (§3.4/§3.6) — the bash-wrapper fallback's `json_encode_file` is only needed when `chorus` is not on `PATH`.211 - Mirror each local file via `chorus mcp call chorus_pm_add_document_draft … --arg-file content=<file>` (§3.6; fallback = `chorus-api.sh mcp-tool chorus_pm_add_document_draft "$PAYLOAD"`) — one call per file, with the document type from `openspec-aware` §5.212213 > **⛔ Do not** invoke `chorus_pm_add_document_draft` / `chorus_pm_update_document_draft` / `chorus_pm_update_document` from the MCP harness with a hand-typed `content` field in this branch. Re-typing the markdown body wastes 20k+ tokens per proposal and breaks byte-equality with the local files. See `openspec-aware` §2 Rule 1.214215 Then continue to step 3 (task drafts).216217 **2b. Free-form mode (resolved mode = free-form).** Only when step 1 resolved to free-form — i.e. explicit `CHORUS_SPEC_MODE=off` (unset never comes here: it resolves to OpenSpec when usable, else spec-lite/2c). Add a tech design document draft directly via MCP, content authored inline:218219 ```220 chorus_pm_add_document_draft({221 proposalUuid: "<proposal-uuid>",222 type: "tech_design",223 title: "Tech Design: <feature>",224 content: "<markdown tech design covering architecture, data model, API, module contracts>"225 })226 ```227228 **2c. spec-lite mode (resolved mode = lite).** Load the `spec-lite` skill. Pick `$SLUG` (a **capability**). Ensure the durable `.chorus/specs/<slug>/spec.md` exists (local-only, no ids; use the `spec-lite` skill's inline durable-spec template) and update it in place. Create this change's **dated folder** `.chorus/specs/<slug>/<YYYY-MM-DD>-<change-slug>/` with its **synced** Chorus-typed docs (shape = the `spec-lite` skill's inline dated-folder document template) — `prd.md` (primary), optional `tech_design.md`… The `description` carries the `Spec-lite: .chorus/specs/<slug>/<YYYY-MM-DD>-<change-slug>/` locator (step 2). Mirror **each** dated-folder `<type>.md` to its persistent Document byte-exact — first time `chorus mcp call chorus_pm_add_document_draft "{\"proposalUuid\":\"<uuid>\",\"type\":\"prd\",\"title\":\"PRD: <feature>\"}" --arg-file content=.chorus/specs/<slug>/<YYYY-MM-DD>-<change-slug>/prd.md`, later edits via `chorus_pm_update_document` against the recorded `documentUuid` (`chorus-api.sh mcp-tool …` fallback when `chorus` not on `PATH`). **`spec.md` is never mirrored.** No `openspec/changes/` scaffold; no `tasks.md`. Then continue to step 3.2292303. **Add task drafts incrementally** (use returned `draftUuid` for dependency chaining). `acceptanceCriteriaItems` is **required** on every draft — at least one non-blank criterion, or the call is rejected:231 ```232 # First task233 result1 = chorus_pm_add_task_draft({234 proposalUuid: "<proposal-uuid>",235 title: "<module name>",236 description: "<what to build, referencing tech design>",237 priority: "high",238 storyPoints: 3,239 acceptanceCriteriaItems: [240 { description: "<testable criterion>", required: true },241 // ...242 ]243 })244245 # Second task, depends on first246 chorus_pm_add_task_draft({247 proposalUuid: "<proposal-uuid>",248 title: "<dependent module>",249 description: "...",250 priority: "medium",251 storyPoints: 2,252 acceptanceCriteriaItems: [...],253 dependsOnDraftUuids: ["<result1.draftUuid>"]254 })255 ```2562574. **Validate:**258 ```259 chorus_pm_validate_proposal({ proposalUuid: "<proposal-uuid>" })260 ```261 Fix any errors, then proceed.2622635. **Submit:**264 ```265 chorus_pm_submit_proposal({ proposalUuid: "<proposal-uuid>" })266 ```267 Immediately proceed to Phase 2 and run the proposal reviewer **inline** — OpenClaw has no PostToolUse hook to remind you.268269---270271### Reviewer contract (applies to every review gate below)272273Every gate in Phases 2, 4 and 4.5 follows the same three steps. They are written once here; the phases below only name their entity and their stage-specific actions.2742751. **Spawn and wait.** Spawn the reviewer as a read-only sub-agent, then wait for it: spawn it with `sessions_spawn` and wait by polling the `subagents` tool or via `sessions_yield` — do **not** detach. The verdict is the `VERDICT:` comment the reviewer posts, not the spawn result.2762. **Read THIS round's VERDICT.** Call `chorus_get_comments` on the entity and find the `VERDICT:` comment posted **after your dispatch**, not an older round's. Do not advance the gate before you have read it.2773. **No VERDICT for this round?** Check what the reviewer *did* post:278 - **A reported round limit, or any other explicit refusal to review** — a deliberate escalation to a human. STOP: do not respawn, do not self-review, do not post a VERDICT of your own.279 - **Nothing at all** — respawn ONCE, telling it to stay within its turn budget and reserve its last turns for the VERDICT, then apply this same check again to what the retry posts. An explicit refusal from the retry still means STOP; only a second true silence lets you review the entity yourself as a read-only pass and POST the VERDICT, then proceed on what you posted rather than looping forever.280281**Absence is never a PASS**, and a round limit reached by someone else is never yours to clear.282283---284285### Phase 2: Proposal Review Loop286287> **OpenClaw difference:** there is no PostToolUse hook injecting a "spawn the reviewer" reminder. Run the reviewer **inline**, right after `chorus_pm_submit_proposal`.288289Obtain an independent VERDICT on the proposal:290291- **Preferred — spawn a reviewer sub-agent.** Use the OpenClaw `sessions_spawn` tool to spawn a sub-agent whose `task` instructs it to **invoke the `/proposal-reviewer` skill** (bundled with this plugin) against the proposal, then wait for it (poll the `subagents` tool, or use `sessions_yield` — do **not** detach; you need the VERDICT before proceeding). The sub-agent inherits the plugin's skills, so `/proposal-reviewer` is available to it; that skill is read-only and ends with a `VERDICT:` comment on the proposal. Example task prompt:292 > `Run the /proposal-reviewer skill to review proposalUuid <uuid>. This is review round <N>. Read the proposal, its documents, the idea, and the elaboration; classify findings as BLOCKER/NOTE; post your VERDICT comment on the proposal when done.`293- **Fallback — review it yourself.** If `sessions_spawn` is unavailable (e.g. spawning disabled by policy), do the review yourself as a **focused, read-only pass** following the `/proposal-reviewer` skill's procedure (read proposal + comments + idea + elaboration; check doc completeness, task granularity, AC↔requirement coverage, the DAG, and integration checkpoints; classify BLOCKER/NOTE) and record the result via `chorus_add_comment` ending with a `VERDICT:` line. Do not modify drafts during the review pass.294295Then:2962971. **Read the reviewer's VERDICT:**298 ```299 chorus_get_comments({ targetType: "proposal", targetUuid: "<proposal-uuid>" })300 ```301 Look for THIS round's `VERDICT:` comment — the one posted after your dispatch, not an older round's.3023032. **Act on the VERDICT:**304305 - **PASS** or **PASS WITH NOTES** --306 ```307 chorus_admin_approve_proposal({308 proposalUuid: "<proposal-uuid>",309 reviewNote: "PASS from reviewer. <brief summary of notes if any>"310 })311 ```312 Tasks and documents materialize automatically. Proceed to Phase 3.313314 - **FAIL** --315 Read the BLOCKERs from the reviewer comment. Then:316 ```317 chorus_pm_reject_proposal({318 proposalUuid: "<proposal-uuid>",319 reviewNote: "FAIL from reviewer. Fixing BLOCKERs: <list>"320 })321 ```322 Revise the drafts (`chorus_pm_update_document_draft`, `chorus_pm_update_task_draft`) to address each BLOCKER, then resubmit:323 ```324 chorus_pm_submit_proposal({ proposalUuid: "<proposal-uuid>" })325 ```326 After resubmission, run the reviewer inline again for Round 2 (same as above).3273283. **Max rounds:** Loop up to `maxProposalReviewRounds` (from plugin config, default 3). If exhausted:329 ```330 STOP: "Proposal review failed after {maxRounds} rounds.331 Remaining BLOCKERs: <list>. Human review needed.332 Proposal UUID: <uuid>"333 ```3343354. **No new VERDICT for this round?** Apply step 3 of the **Reviewer contract**, reviewing the proposal yourself if the reviewer stays silent.336337---338339### Phase 3: Task Execution (Waves)340341After proposal approval, tasks exist in `open` status. Execute them in dependency-ordered waves.342343> **OpenClaw difference:** there is no team or group object to create — parallelism comes from dispatching **one sub-agent per unblocked task** with OpenClaw's own `sessions_spawn` tool, issuing the whole wave in a single message. If your host does not expose `sessions_spawn`, or spawned workers fail repeatedly, run waves **sequentially as the main agent**: loop `chorus_get_unblocked_tasks`, implement each ready task yourself, verify it, then loop again for the next wave. The sequential loop below is written for that fallback and is always safe; see `/develop` §"Optional: sub-agent dispatch" for the parallel form (workers need the manual session instructions, since there is no SubagentStart hook).344345```346wave = 1347348loop:349 # 1. Find ready tasks (all dependencies done/closed)350 unblocked = chorus_get_unblocked_tasks({ projectUuid: "<project-uuid>" })351352 if no unblocked tasks and all tasks done/closed:353 break # All complete354355 if no unblocked tasks and some tasks not done:356 # Stuck -- tasks failed review and can't proceed357 break with escalation report358359 # 2. Implement each unblocked task, in order, AS THE MAIN AGENT:360 for each task in unblocked:361 chorus_claim_task({ taskUuid: task.uuid })362 chorus_update_task({ taskUuid: task.uuid, status: "in_progress" })363364 # ... read task + proposal + project documents for context,365 # write code, run tests ...366367 chorus_report_work({ taskUuid: task.uuid, report: "...", status: "to_verify" })368 chorus_report_criteria_self_check({ taskUuid: task.uuid, criteria: [...] })369 chorus_submit_for_verify({ taskUuid: task.uuid, summary: "..." })370371 # 3. Proceed to Phase 4 (verification) for THIS task before moving to the next.372373 wave += 1374```375376> **Parallel form:** to run a wave in parallel instead of serially, dispatch one worker sub-agent per unblocked task with `sessions_spawn`, issuing the whole wave in a single message, then wait for the wave before verifying. Because there is no SubagentStart hook, each worker prompt **must** include the manual session instructions explicitly — see `/develop` "Optional: sub-agent dispatch". The main agent still owns review + verification, and the wave-by-wave dependency structure above is unchanged.377378---379380### Phase 4: Verification381382After each task is submitted (Phase 3 step 3), verify it before moving on:383384```385for the just-submitted task:386 # 1. Check task status387 task = chorus_get_task({ taskUuid: "<task-uuid>" })388389 if task.status != "to_verify":390 # implementation may have failed; handle or skip391 continue392393 # 2. Run the task-reviewer INLINE (no hook on OpenClaw):394 # - Preferred: use the sessions_spawn tool to spawn a sub-agent whose task is395 # "Run the /task-reviewer skill to verify taskUuid <uuid> (round <N>); post your396 # VERDICT comment on the task when done." Wait for it (poll the subagents tool /397 # sessions_yield — do NOT detach; you need the VERDICT). The sub-agent inherits the398 # plugin skills, so /task-reviewer is available to it.399 # - Fallback (sessions_spawn unavailable): review it yourself as a focused read-only400 # pass following the /task-reviewer procedure (read task + proposal + docs + code,401 # run read-only tests, classify findings BLOCKER/NOTE) and post the VERDICT via402 # chorus_add_comment.403404 # 3. Read task-reviewer VERDICT405 comments = chorus_get_comments({ targetType: "task", targetUuid: "<task-uuid>" })406 # Find THIS round's "VERDICT:" comment — the one posted after your dispatch, not an older round's407408 # 4. Act on VERDICT — three possible outcomes:409 if VERDICT is "PASS":410 chorus_mark_acceptance_criteria({411 taskUuid: "<task-uuid>",412 criteria: [413 { uuid: "<ac-uuid>", status: "passed", evidence: "<from reviewer>" },414 // ...415 ]416 })417 chorus_admin_verify_task({ taskUuid: "<task-uuid>" })418 # Task is now "done" -- unblocks dependents for the next wave419420 if VERDICT is "PASS WITH NOTES":421 chorus_mark_acceptance_criteria({ ... })422 chorus_admin_verify_task({ taskUuid: "<task-uuid>" })423424 if VERDICT is "FAIL":425 # BLOCKERs found. Do NOT verify. Reopen for rework.426 chorus_admin_reopen_task({ taskUuid: "<task-uuid>" })427 # Fix the BLOCKERs in a later pass (the task returns to in_progress/open)428```429430After verifying the wave's tasks, return to Phase 3's loop to pick up newly unblocked tasks. Remember: only `done` (not `to_verify`) unblocks dependents.431432**Max rounds per task:** Tracked by `maxTaskReviewRounds` from plugin config (default 3). If a task has been reopened `maxRounds` times, skip it and flag for human escalation:433434```435ESCALATE: "Task '{title}' failed review after {maxRounds} rounds.436 Last BLOCKERs: <list>. Manual intervention needed.437 Task UUID: <uuid>"438```439440Continue with remaining tasks -- do not halt the entire pipeline for one stuck task.441442**No new VERDICT for this round?** Apply step 3 of the **Reviewer contract**, reviewing the task yourself if the reviewer stays silent.443444---445446### Phase 4.5: Code-Review Gateway (mandatory pre-ship)447448Once **every** task of the idea's proposal is verified (`done`) — Phase 3 finds no more unblocked tasks and none remain non-terminal — run the final ship-time code-review gateway **before** the Phase 5b completion report. It reviews the **whole Idea's aggregate code change** across all tasks (not a single task) and posts its verdict on the **idea**. Inline (no hook on OpenClaw), same mechanism as Phase 4:449450- **Preferred — spawn a reviewer sub-agent.** Use `sessions_spawn` to spawn a sub-agent whose `task` tells it to **invoke the `/code-reviewer` skill** against the idea, then wait for it (poll `subagents` / `sessions_yield` — do NOT detach). Example task prompt: `Run the /code-reviewer skill to review the aggregate code for ideaUuid <uuid> (round <N>); post your VERDICT comment on the idea when done.`451- **Fallback — review it yourself.** If `sessions_spawn` is unavailable, perform the review as a focused read-only pass following the `/code-reviewer` procedure (read the idea, its approved proposals + documents + tasks; infer the aggregate diff from task reports + `git log/diff`; review cross-task integration, architecture, security, regression, feature-level coverage; run the project build/test) and post the `VERDICT:` comment on the idea yourself.452453Act on the VERDICT:454455- **PASS** / **PASS WITH NOTES** — the feature is cleared to ship. Proceed to Phase 5 / 5b.456- **FAIL** — do NOT ship. Read the BLOCKERs, then fix them via the **quick-dev** workflow (`/quick-dev`): call `chorus_create_tasks` with `proposalUuid` set to the **current approved proposal** so the fix tasks attach to it — do **not** reopen the already-verified tasks or apply untracked fixes. Group related small BLOCKERs into one cohesive task by default; split only materially large or independently testable fixes. Drive every fix task through Phase 3 → Phase 4, including AC self-check, independent task review, and admin verification. Re-run the gateway only after every fix task is successfully `done`; a failed or cancelled fix task, stop the automatic loop and escalate. Loop bounded by `maxCodeReviewRounds` (default 3; 0 = unlimited).457458```459ESCALATE: "Idea '{title}' failed code review after {maxCodeReviewRounds} rounds.460 Last BLOCKERs: <list>. Manual intervention needed. Idea UUID: <uuid>"461```462463**No new VERDICT for this round?** Apply step 3 of the **Reviewer contract**, reviewing the idea's aggregate change yourself if the reviewer stays silent.464465> The gateway is **behavioral** like the other two reviewers: its verdict is advisory and does not change the Idea's stored status; the orchestrator honors it. It runs **before** the completion report so the report is never written while a FAIL is outstanding.466467---468469### Phase 5: Report470471After all waves complete, output a markdown summary:472473```markdown474## /yolo Complete475476**Project:** <project-name> (<project-uuid>)477**Proposal:** <proposal-title> (<proposal-uuid>)478**Idea:** <idea-title> (<idea-uuid>)479480### Tasks481| Task | Status | Review Rounds |482|------|--------|---------------|483| <title> | done | 1 |484| <title> | done | 2 |485| <title> | ESCALATED | 3 (max) |486487### Summary488- Total tasks: N489- Completed: X / N490- Escalated: Y (need human review)491- Waves executed: W492```493494---495496### Phase 5b: Idea Completion Report (mandatory)497498A successful `/yolo` run always finishes the Idea — call `chorus_create_report` once with `proposalUuid` set to the last verified proposal. The call requires `title` (a short report title) plus `content`; `content`'s parameter description carries the three-section template (`## Summary` / `## Decisions` / `## Follow-ups`); follow it. Surface the returned `documentUuid` in the Phase 5 summary. Skipping is a protocol violation.499500> **Order:** write the completion report only **after** the Phase 4.5 code-review gateway returns PASS / PASS WITH NOTES — never while a code-review FAIL is outstanding.501502> **OpenSpec archive:** if you ran in OpenSpec mode (Step 1.4 branch 2a), the last verified task also triggers the archive flow. OpenClaw has no PostToolUse hook to remind you — after verifying the final task, run `openspec-aware` §3.9 yourself (`openspec archive <slug> --yes`, then mirror each emitted `openspec/specs/<capability>/spec.md` back via §3.8).503504---505506## Error Handling507508| Scenario | Action |509|----------|--------|510| Missing permissions at startup | Abort with message listing the missing resource/action pairs (see Prerequisites). Recommend an Admin-preset API key. |511| Project creation fails | Report error, suggest user create project manually and retry with `--project` |512| Proposal reviewer FAIL after maxRounds | Stop pipeline, report persisting BLOCKERs, suggest manual review |513| Task reviewer FAIL after maxRounds | Flag task as escalation-needed, continue with other tasks |514| Task implementation fails / no submit | Log error, skip task, pick it up in next wave if possible |515| Reviewer sub-agent unavailable (`sessions_spawn` disabled) | Run the review yourself as a focused read-only pass following the `/proposal-reviewer` or `/task-reviewer` skill, then post the VERDICT |516| Interrupted | All entities persist in Chorus. User can resume via `/develop` or `/review` |517518---519520## Tips521522- Keep the initial prompt detailed -- the more context you provide, the better the auto-generated proposal quality523- The proposal-reviewer is your quality gate -- if it keeps FAILing, the prompt may be too vague524- Watch the wave count -- if tasks keep getting reopened, consider stopping and reviewing the feedback manually525- All audit trail is preserved: elaboration Q&A, reviewer VERDICTs, work reports. Check Chorus UI for full history526- For small/simple tasks, consider `/quick-dev` instead -- it skips the Idea->Proposal overhead527- Sub-agents (if you dispatch any) share your API key; ensure it has the permissions listed in Prerequisites before starting528529---530531## Next532533- To manually review proposals: `/review`534- To manually develop tasks: `/develop`535- To create quick standalone tasks: `/quick-dev`536- For platform overview: `/chorus`