@chorus-aidlc/chorus-openclaw-plugin 0.4.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/README.md +208 -278
  2. package/dist/commands.d.ts +5 -0
  3. package/dist/commands.d.ts.map +1 -0
  4. package/dist/commands.js +147 -0
  5. package/dist/commands.js.map +1 -0
  6. package/dist/config.d.ts +38 -0
  7. package/dist/config.d.ts.map +1 -0
  8. package/dist/config.js +57 -0
  9. package/dist/config.js.map +1 -0
  10. package/dist/event-router.d.ts +55 -0
  11. package/dist/event-router.d.ts.map +1 -0
  12. package/dist/event-router.js +157 -0
  13. package/dist/event-router.js.map +1 -0
  14. package/dist/index.d.ts +3 -0
  15. package/dist/index.d.ts.map +1 -0
  16. package/dist/index.js +108 -0
  17. package/dist/index.js.map +1 -0
  18. package/dist/mcp-client.d.ts +37 -0
  19. package/dist/mcp-client.d.ts.map +1 -0
  20. package/dist/mcp-client.js +137 -0
  21. package/dist/mcp-client.js.map +1 -0
  22. package/dist/mcp-registration.d.ts +25 -0
  23. package/dist/mcp-registration.d.ts.map +1 -0
  24. package/dist/mcp-registration.js +93 -0
  25. package/dist/mcp-registration.js.map +1 -0
  26. package/dist/sse-listener.d.ts +37 -0
  27. package/dist/sse-listener.d.ts.map +1 -0
  28. package/dist/sse-listener.js +152 -0
  29. package/dist/sse-listener.js.map +1 -0
  30. package/dist/wake.d.ts +67 -0
  31. package/dist/wake.d.ts.map +1 -0
  32. package/dist/wake.js +234 -0
  33. package/dist/wake.js.map +1 -0
  34. package/openclaw.plugin.json +13 -12
  35. package/package.json +23 -5
  36. package/skills/brainstorm/SKILL.md +163 -0
  37. package/skills/chorus/SKILL.md +113 -96
  38. package/skills/develop/SKILL.md +195 -51
  39. package/skills/idea/SKILL.md +136 -149
  40. package/skills/openspec-aware/SKILL.md +425 -0
  41. package/skills/proposal/SKILL.md +155 -157
  42. package/skills/proposal-reviewer/SKILL.md +117 -0
  43. package/skills/quick-dev/SKILL.md +31 -7
  44. package/skills/review/SKILL.md +105 -33
  45. package/skills/task-reviewer/SKILL.md +113 -0
  46. package/skills/yolo/SKILL.md +498 -0
  47. package/src/commands.ts +138 -71
  48. package/src/config.ts +23 -10
  49. package/src/event-router.ts +46 -54
  50. package/src/index.ts +56 -83
  51. package/src/mcp-client.ts +17 -0
  52. package/src/mcp-registration.ts +142 -0
  53. package/src/openclaw-sdk.d.ts +95 -0
  54. package/src/wake.ts +310 -0
  55. package/src/tools/admin-tools.ts +0 -126
  56. package/src/tools/common-tools.ts +0 -575
  57. package/src/tools/dev-tools.ts +0 -105
  58. package/src/tools/pm-tools.ts +0 -411
@@ -0,0 +1,498 @@
1
+ ---
2
+ name: yolo
3
+ description: Full-auto AI-DLC pipeline — from prompt to done. Automates the entire Idea -> Proposal -> Execute -> Verify lifecycle.
4
+ license: AGPL-3.0
5
+ metadata:
6
+ author: chorus
7
+ version: "0.9.0"
8
+ category: project-management
9
+ mcp_server: chorus
10
+ ---
11
+
12
+ # Yolo Skill
13
+
14
+ Full-auto AI-DLC pipeline. User provides a prompt; agent drives the entire lifecycle: Idea -> Elaboration -> Proposal -> Review -> Execute -> Verify -> Done.
15
+
16
+ > **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.
17
+
18
+ > **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 is **sequential main-agent waves** — OpenClaw has no Agent Teams / `TeamCreate` primitive.
19
+
20
+ ---
21
+
22
+ ## Overview
23
+
24
+ `/yolo` automates the complete AI-DLC workflow. You provide a natural language description of what you want built, and the agent handles everything:
25
+
26
+ 1. **Planning** -- create project, idea, self-elaboration, proposal with docs & tasks
27
+ 2. **Proposal Review** -- proposal-reviewer adversarial loop
28
+ 3. **Execution** -- sequential, dependency-ordered task execution by the main agent
29
+ 4. **Verification** -- task-reviewer adversarial loop + admin verify
30
+ 5. **Report** -- completion summary
31
+
32
+ ```
33
+ /yolo <prompt>
34
+ |
35
+ v
36
+ Project + Idea + Elaboration (self-answered) + Proposal
37
+ |
38
+ v
39
+ Proposal Reviewer (inline, up to maxProposalReviewRounds)
40
+ |
41
+ v
42
+ Admin Approve --> Tasks materialize
43
+ |
44
+ v
45
+ Sequential wave execution (main agent: loop chorus_get_unblocked_tasks)
46
+ | (implement task + task-reviewer per task)
47
+ v
48
+ Admin Verify each task --> unblock next
49
+ |
50
+ v
51
+ Done. Report summary.
52
+ ```
53
+
54
+ **Escape hatch:** interrupt at any time. All created entities (project, idea, proposal, tasks) persist in Chorus. Resume manually via `/develop` or `/review`.
55
+
56
+ ---
57
+
58
+ ## Prerequisites
59
+
60
+ The API key needs write + admin on every resource it touches:
61
+
62
+ | Needs | Why |
63
+ |------|-----|
64
+ | `idea: [write]` | Create ideas, run elaboration |
65
+ | `proposal: [write, admin]` | Create proposals; approve them |
66
+ | `task: [write, admin]` | Create, execute, verify tasks |
67
+ | `project: [write]` | Create the project if none is given |
68
+
69
+ **Check at startup:**
70
+
71
+ ```
72
+ perms = chorus_checkin().agent.permissions
73
+ need = { idea: ["write"], proposal: ["write","admin"],
74
+ task: ["write","admin"], project: ["write"] }
75
+
76
+ for resource, actions in need:
77
+ missing = [a for a in actions if a not in (perms[resource] or [])]
78
+ if missing: ABORT "/yolo needs {resource}: {missing}. Use an Admin-preset API key."
79
+ ```
80
+
81
+ ---
82
+
83
+ ## Input
84
+
85
+ ```
86
+ /yolo <natural language prompt>
87
+ /yolo <prompt> --project <project-uuid>
88
+ ```
89
+
90
+ - `<prompt>` -- what you want built (becomes the Idea content)
91
+ - `--project <uuid>` -- optional; use an existing project instead of creating a new one
92
+
93
+ ---
94
+
95
+ ## Workflow
96
+
97
+ ### Phase 1: Planning
98
+
99
+ #### Step 1.1: Resolve Project
100
+
101
+ Parse the arguments for `--project <uuid>`.
102
+
103
+ **If `--project` is provided:**
104
+ ```
105
+ chorus_get_project({ projectUuid: "<uuid>" })
106
+ ```
107
+ Verify it exists and proceed.
108
+
109
+ **If not provided**, search for a suitable existing project first:
110
+ ```
111
+ # 1. Search for projects matching the prompt topic
112
+ chorus_search({ query: "<key terms from prompt>", entityTypes: ["project"] })
113
+
114
+ # 2. Or list recent projects to find a match
115
+ chorus_list_projects()
116
+ ```
117
+
118
+ 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:
119
+ ```
120
+ chorus_admin_create_project({
121
+ name: "<short title derived from prompt>",
122
+ description: "<1-2 sentence summary of the prompt>"
123
+ })
124
+ ```
125
+
126
+ #### Step 1.2: Create Idea
127
+
128
+ ```
129
+ chorus_pm_create_idea({
130
+ projectUuid: "<project-uuid>",
131
+ title: "<concise title derived from prompt>",
132
+ content: "<full user prompt as-is>"
133
+ })
134
+ ```
135
+
136
+ Then claim it:
137
+ ```
138
+ chorus_claim_idea({ ideaUuid: "<idea-uuid>" })
139
+ ```
140
+
141
+ #### Step 1.3: Self-Elaboration
142
+
143
+ 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.
144
+
145
+ 1. **Generate and submit questions:**
146
+ ```
147
+ chorus_pm_start_elaboration({
148
+ ideaUuid: "<idea-uuid>",
149
+ depth: "standard",
150
+ questions: [
151
+ {
152
+ id: "q1",
153
+ text: "<question about scope, architecture, etc.>",
154
+ category: "functional",
155
+ options: [
156
+ { id: "a", label: "<option A>" },
157
+ { id: "b", label: "<option B>" }
158
+ ]
159
+ }
160
+ // ... 5-8 questions covering functional, technical, scope aspects
161
+ ]
162
+ })
163
+ ```
164
+
165
+ 2. **Answer immediately** (agent selects best options based on the prompt — no user prompt):
166
+ ```
167
+ chorus_answer_elaboration({
168
+ ideaUuid: "<idea-uuid>",
169
+ roundUuid: "<round-uuid>",
170
+ answers: [
171
+ { questionId: "q1", selectedOptionId: "a", customText: "Rationale: ..." },
172
+ // ...
173
+ ]
174
+ })
175
+ ```
176
+
177
+ 3. **Validate** (no issues in self-mode):
178
+ ```
179
+ chorus_pm_validate_elaboration({
180
+ ideaUuid: "<idea-uuid>",
181
+ roundUuid: "<round-uuid>",
182
+ issues: []
183
+ })
184
+ ```
185
+
186
+ #### Step 1.4: Create Proposal
187
+
188
+ 1. **Detect OpenSpec mode (inline).** Load the `openspec-aware` skill and run its **§1 inline three-check detection** (`CHORUS_OPENSPEC_MODE != "off"`, an `openspec/` directory at the project root, and the `openspec` CLI on `PATH`).
189
+
190
+ > **OpenClaw note:** there is no Claude Code SessionStart hook to precompute `CHORUS_OPENSPEC_ACTIVE`. You must run the three checks yourself, inline, here. This is mandatory — yolo runs unattended, so silently picking the wrong mode is exactly the failure scenario the detection contract exists to prevent.
191
+
192
+ - All three checks pass → spec-driven branch (sub-step 2a below).
193
+ - Any check fails (or `CHORUS_OPENSPEC_MODE=off`) → free-form branch (sub-step 2b below).
194
+
195
+ 2. **Create the empty proposal container.** In OpenSpec mode, the `description` MUST contain the literal line `OpenSpec change slug: <slug>` (use the `$SLUG` you'll pick in 2a); in free-form mode, omit that line.
196
+
197
+ ```
198
+ chorus_pm_create_proposal({
199
+ projectUuid: "<project-uuid>",
200
+ title: "<feature name>",
201
+ description: "<summary>\n\nOpenSpec change slug: <slug>", // OpenSpec mode
202
+ // description: "<summary>", // free-form mode
203
+ inputType: "idea",
204
+ inputUuids: ["<idea-uuid>"]
205
+ })
206
+ ```
207
+
208
+ Then branch:
209
+
210
+ **2a. OpenSpec mode (all three checks pass).** Follow `openspec-aware` §3 end-to-end:
211
+ - Pick `$SLUG`, run `openspec new change "$SLUG"` (§3.1–§3.2).
212
+ - 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.
213
+ - Define `json_encode_file`, `chorus_check_response` helpers (§3.4, §6).
214
+ - Mirror each local file via `chorus-api.sh mcp-tool chorus_pm_add_document_draft "$PAYLOAD"` (§3.6) — one call per file, with the document type from `openspec-aware` §5.
215
+
216
+ > **⛔ 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.
217
+
218
+ Then continue to step 3 (task drafts).
219
+
220
+ **2b. Free-form mode (any check fails).** Add a tech design document draft directly via MCP, content authored inline:
221
+
222
+ ```
223
+ chorus_pm_add_document_draft({
224
+ proposalUuid: "<proposal-uuid>",
225
+ type: "tech_design",
226
+ title: "Tech Design: <feature>",
227
+ content: "<markdown tech design covering architecture, data model, API, module contracts>"
228
+ })
229
+ ```
230
+
231
+ 3. **Add task drafts incrementally** (use returned `draftUuid` for dependency chaining):
232
+ ```
233
+ # First task
234
+ result1 = chorus_pm_add_task_draft({
235
+ proposalUuid: "<proposal-uuid>",
236
+ title: "<module name>",
237
+ description: "<what to build, referencing tech design>",
238
+ priority: "high",
239
+ storyPoints: 3,
240
+ acceptanceCriteriaItems: [
241
+ { description: "<testable criterion>", required: true },
242
+ // ...
243
+ ]
244
+ })
245
+
246
+ # Second task, depends on first
247
+ chorus_pm_add_task_draft({
248
+ proposalUuid: "<proposal-uuid>",
249
+ title: "<dependent module>",
250
+ description: "...",
251
+ priority: "medium",
252
+ storyPoints: 2,
253
+ acceptanceCriteriaItems: [...],
254
+ dependsOnDraftUuids: ["<result1.draftUuid>"]
255
+ })
256
+ ```
257
+
258
+ 4. **Validate:**
259
+ ```
260
+ chorus_pm_validate_proposal({ proposalUuid: "<proposal-uuid>" })
261
+ ```
262
+ Fix any errors, then proceed.
263
+
264
+ 5. **Submit:**
265
+ ```
266
+ chorus_pm_submit_proposal({ proposalUuid: "<proposal-uuid>" })
267
+ ```
268
+ Immediately proceed to Phase 2 and run the proposal reviewer **inline** — OpenClaw has no PostToolUse hook to remind you.
269
+
270
+ ---
271
+
272
+ ### Phase 2: Proposal Review Loop
273
+
274
+ > **OpenClaw difference:** there is no PostToolUse hook injecting a "spawn the reviewer" reminder. Run the reviewer **inline**, right after `chorus_pm_submit_proposal`.
275
+
276
+ Obtain an independent VERDICT on the proposal:
277
+
278
+ - **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:
279
+ > `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.`
280
+ - **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.
281
+
282
+ Then:
283
+
284
+ 1. **Read the reviewer's VERDICT:**
285
+ ```
286
+ chorus_get_comments({ targetType: "proposal", targetUuid: "<proposal-uuid>" })
287
+ ```
288
+ Look for the most recent comment containing `VERDICT:`.
289
+
290
+ 2. **Act on the VERDICT:**
291
+
292
+ - **PASS** or **PASS WITH NOTES** --
293
+ ```
294
+ chorus_admin_approve_proposal({
295
+ proposalUuid: "<proposal-uuid>",
296
+ reviewNote: "PASS from reviewer. <brief summary of notes if any>"
297
+ })
298
+ ```
299
+ Tasks and documents materialize automatically. Proceed to Phase 3.
300
+
301
+ - **FAIL** --
302
+ Read the BLOCKERs from the reviewer comment. Then:
303
+ ```
304
+ chorus_pm_reject_proposal({
305
+ proposalUuid: "<proposal-uuid>",
306
+ reviewNote: "FAIL from reviewer. Fixing BLOCKERs: <list>"
307
+ })
308
+ ```
309
+ Revise the drafts (`chorus_pm_update_document_draft`, `chorus_pm_update_task_draft`) to address each BLOCKER, then resubmit:
310
+ ```
311
+ chorus_pm_submit_proposal({ proposalUuid: "<proposal-uuid>" })
312
+ ```
313
+ After resubmission, run the reviewer inline again for Round 2 (same as above).
314
+
315
+ 3. **Max rounds:** Loop up to `maxProposalReviewRounds` (from plugin config, default 3). If exhausted:
316
+ ```
317
+ STOP: "Proposal review failed after {maxRounds} rounds.
318
+ Remaining BLOCKERs: <list>. Human review needed.
319
+ Proposal UUID: <uuid>"
320
+ ```
321
+
322
+ 4. **No new VERDICT comment after a spawned reviewer returns?** It exhausted its turn budget. Respawn it ONCE with a concise-budget hint: *"Stay within turn budget. Skip deep source verification. Fetch proposal + comments + idea only, skim for obvious BLOCKERs, and post your VERDICT within the first 10 turns."* If still no VERDICT, fall back to reviewing manually and post the VERDICT yourself — the pipeline cannot loop forever on a silent reviewer.
323
+
324
+ ---
325
+
326
+ ### Phase 3: Task Execution (Sequential Waves)
327
+
328
+ After proposal approval, tasks exist in `open` status. Execute them in dependency-ordered waves.
329
+
330
+ > **OpenClaw difference:** OpenClaw has **no Agent Teams / `TeamCreate` primitive**. 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. Do NOT call `TeamCreate` — it does not exist on OpenClaw. (Under the Claude Code plugin, each wave can be dispatched in parallel via `TeamCreate`; that is a Claude-Code-only optimization that degrades to the sequential loop here.)
331
+
332
+ ```
333
+ wave = 1
334
+
335
+ loop:
336
+ # 1. Find ready tasks (all dependencies done/closed)
337
+ unblocked = chorus_get_unblocked_tasks({ projectUuid: "<project-uuid>" })
338
+
339
+ if no unblocked tasks and all tasks done/closed:
340
+ break # All complete
341
+
342
+ if no unblocked tasks and some tasks not done:
343
+ # Stuck -- tasks failed review and can't proceed
344
+ break with escalation report
345
+
346
+ # 2. Implement each unblocked task, in order, AS THE MAIN AGENT:
347
+ for each task in unblocked:
348
+ chorus_claim_task({ taskUuid: task.uuid })
349
+ chorus_update_task({ taskUuid: task.uuid, status: "in_progress" })
350
+
351
+ # ... read task + proposal + project documents for context,
352
+ # write code, run tests ...
353
+
354
+ chorus_report_work({ taskUuid: task.uuid, report: "...", status: "to_verify" })
355
+ chorus_report_criteria_self_check({ taskUuid: task.uuid, criteria: [...] })
356
+ chorus_submit_for_verify({ taskUuid: task.uuid, summary: "..." })
357
+
358
+ # 3. Proceed to Phase 4 (verification) for THIS task before moving to the next.
359
+
360
+ wave += 1
361
+ ```
362
+
363
+ > **Optional sub-agent dispatch:** if your OpenClaw host supports generic worker sub-agents (not Agent Teams), you may hand one task to a sub-agent at a time. Because there is no SubagentStart hook, the worker prompt **must** include the manual session instructions explicitly — see `/develop` "Optional: sub-agent dispatch". The main agent still owns review + verification. This does not change the sequential, wave-by-wave structure above.
364
+
365
+ ---
366
+
367
+ ### Phase 4: Verification
368
+
369
+ After each task is submitted (Phase 3 step 3), verify it before moving on:
370
+
371
+ ```
372
+ for the just-submitted task:
373
+ # 1. Check task status
374
+ task = chorus_get_task({ taskUuid: "<task-uuid>" })
375
+
376
+ if task.status != "to_verify":
377
+ # implementation may have failed; handle or skip
378
+ continue
379
+
380
+ # 2. Run the task-reviewer INLINE (no hook on OpenClaw):
381
+ # - Preferred: use the sessions_spawn tool to spawn a sub-agent whose task is
382
+ # "Run the /task-reviewer skill to verify taskUuid <uuid> (round <N>); post your
383
+ # VERDICT comment on the task when done." Wait for it (poll the subagents tool /
384
+ # sessions_yield — do NOT detach; you need the VERDICT). The sub-agent inherits the
385
+ # plugin skills, so /task-reviewer is available to it.
386
+ # - Fallback (sessions_spawn unavailable): review it yourself as a focused read-only
387
+ # pass following the /task-reviewer procedure (read task + proposal + docs + code,
388
+ # run read-only tests, classify findings BLOCKER/NOTE) and post the VERDICT via
389
+ # chorus_add_comment.
390
+
391
+ # 3. Read task-reviewer VERDICT
392
+ comments = chorus_get_comments({ targetType: "task", targetUuid: "<task-uuid>" })
393
+ # Find the most recent comment containing "VERDICT:"
394
+
395
+ # 4. Act on VERDICT — three possible outcomes:
396
+ if VERDICT is "PASS":
397
+ chorus_mark_acceptance_criteria({
398
+ taskUuid: "<task-uuid>",
399
+ criteria: [
400
+ { uuid: "<ac-uuid>", status: "passed", evidence: "<from reviewer>" },
401
+ // ...
402
+ ]
403
+ })
404
+ chorus_admin_verify_task({ taskUuid: "<task-uuid>" })
405
+ # Task is now "done" -- unblocks dependents for the next wave
406
+
407
+ if VERDICT is "PASS WITH NOTES":
408
+ chorus_mark_acceptance_criteria({ ... })
409
+ chorus_admin_verify_task({ taskUuid: "<task-uuid>" })
410
+
411
+ if VERDICT is "FAIL":
412
+ # BLOCKERs found. Do NOT verify. Reopen for rework.
413
+ chorus_admin_reopen_task({ taskUuid: "<task-uuid>" })
414
+ # Fix the BLOCKERs in a later pass (the task returns to in_progress/open)
415
+ ```
416
+
417
+ 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.
418
+
419
+ **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:
420
+
421
+ ```
422
+ ESCALATE: "Task '{title}' failed review after {maxRounds} rounds.
423
+ Last BLOCKERs: <list>. Manual intervention needed.
424
+ Task UUID: <uuid>"
425
+ ```
426
+
427
+ Continue with remaining tasks -- do not halt the entire pipeline for one stuck task.
428
+
429
+ **No new VERDICT comment after a spawned task-reviewer returns?** It exhausted its turn budget. Respawn it ONCE with a concise-budget hint: *"Stay within turn budget. Skip deep verification. Fetch task/proposal/comments, run only the core tests, and post your VERDICT within the first 12 turns."* If still no VERDICT, fall back to reviewing manually and post the VERDICT yourself — do not loop indefinitely.
430
+
431
+ ---
432
+
433
+ ### Phase 5: Report
434
+
435
+ After all waves complete, output a markdown summary:
436
+
437
+ ```markdown
438
+ ## /yolo Complete
439
+
440
+ **Project:** <project-name> (<project-uuid>)
441
+ **Proposal:** <proposal-title> (<proposal-uuid>)
442
+ **Idea:** <idea-title> (<idea-uuid>)
443
+
444
+ ### Tasks
445
+ | Task | Status | Review Rounds |
446
+ |------|--------|---------------|
447
+ | <title> | done | 1 |
448
+ | <title> | done | 2 |
449
+ | <title> | ESCALATED | 3 (max) |
450
+
451
+ ### Summary
452
+ - Total tasks: N
453
+ - Completed: X / N
454
+ - Escalated: Y (need human review)
455
+ - Waves executed: W
456
+ ```
457
+
458
+ ---
459
+
460
+ ### Phase 5b: Idea Completion Report (mandatory)
461
+
462
+ A successful `/yolo` run always finishes the Idea — call `chorus_create_report` once with `proposalUuid` set to the last verified proposal. The tool's description carries the section template; follow it. Surface the returned `documentUuid` in the Phase 5 summary. Skipping is a protocol violation.
463
+
464
+ > **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).
465
+
466
+ ---
467
+
468
+ ## Error Handling
469
+
470
+ | Scenario | Action |
471
+ |----------|--------|
472
+ | Missing permissions at startup | Abort with message listing the missing resource/action pairs (see Prerequisites). Recommend an Admin-preset API key. |
473
+ | Project creation fails | Report error, suggest user create project manually and retry with `--project` |
474
+ | Proposal reviewer FAIL after maxRounds | Stop pipeline, report persisting BLOCKERs, suggest manual review |
475
+ | Task reviewer FAIL after maxRounds | Flag task as escalation-needed, continue with other tasks |
476
+ | Task implementation fails / no submit | Log error, skip task, pick it up in next wave if possible |
477
+ | 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 |
478
+ | Interrupted | All entities persist in Chorus. User can resume via `/develop` or `/review` |
479
+
480
+ ---
481
+
482
+ ## Tips
483
+
484
+ - Keep the initial prompt detailed -- the more context you provide, the better the auto-generated proposal quality
485
+ - The proposal-reviewer is your quality gate -- if it keeps FAILing, the prompt may be too vague
486
+ - Watch the wave count -- if tasks keep getting reopened, consider stopping and reviewing the feedback manually
487
+ - All audit trail is preserved: elaboration Q&A, reviewer VERDICTs, work reports. Check Chorus UI for full history
488
+ - For small/simple tasks, consider `/quick-dev` instead -- it skips the Idea->Proposal overhead
489
+ - Sub-agents (if you dispatch any) share your API key; ensure it has the permissions listed in Prerequisites before starting
490
+
491
+ ---
492
+
493
+ ## Next
494
+
495
+ - To manually review proposals: `/review`
496
+ - To manually develop tasks: `/develop`
497
+ - To create quick standalone tasks: `/quick-dev`
498
+ - For platform overview: `/chorus`