maestro-flow 0.3.46 → 0.3.48

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 (241) hide show
  1. package/.claude/agents/ui-design-agent.md +1 -0
  2. package/.claude/agents/workflow-executor.md +3 -0
  3. package/.claude/commands/learn-decompose.md +91 -146
  4. package/.claude/commands/learn-follow.md +102 -137
  5. package/.claude/commands/learn-investigate.md +102 -167
  6. package/.claude/commands/learn-retro.md +100 -243
  7. package/.claude/commands/learn-second-opinion.md +95 -135
  8. package/.claude/commands/maestro-amend.md +95 -232
  9. package/.claude/commands/maestro-analyze.md +1 -6
  10. package/.claude/commands/maestro-collab.md +104 -265
  11. package/.claude/commands/maestro-composer.md +113 -293
  12. package/.claude/commands/maestro-execute.md +10 -17
  13. package/.claude/commands/maestro-impeccable.md +89 -0
  14. package/.claude/commands/maestro-plan.md +1 -6
  15. package/.claude/commands/maestro-player.md +111 -340
  16. package/.claude/commands/maestro-quick.md +9 -0
  17. package/.claude/commands/maestro-ralph-execute.md +167 -210
  18. package/.claude/commands/maestro-ralph.md +245 -426
  19. package/.claude/commands/maestro-ui-codify.md +13 -0
  20. package/.claude/commands/maestro-ui-craft.md +364 -0
  21. package/.claude/commands/maestro-ui-design.md +12 -1
  22. package/.claude/commands/maestro-verify.md +12 -13
  23. package/.claude/commands/maestro.md +142 -72
  24. package/.claude/commands/manage-knowhow-capture.md +45 -170
  25. package/.claude/commands/quality-auto-test.md +9 -0
  26. package/.claude/commands/quality-debug.md +11 -25
  27. package/.claude/commands/quality-refactor.md +9 -0
  28. package/.claude/commands/quality-review.md +5 -14
  29. package/.claude/commands/spec-add.md +1 -1
  30. package/.claude/commands/spec-load.md +3 -2
  31. package/.claude/skills/maestro-impeccable/SKILL.md +169 -0
  32. package/.codex/skills/learn-decompose/SKILL.md +1 -1
  33. package/.codex/skills/learn-investigate/SKILL.md +2 -1
  34. package/.codex/skills/maestro/SKILL.md +420 -313
  35. package/.codex/skills/maestro-analyze/SKILL.md +126 -417
  36. package/.codex/skills/maestro-brainstorm/SKILL.md +129 -451
  37. package/.codex/skills/maestro-collab/SKILL.md +134 -547
  38. package/.codex/skills/maestro-execute/SKILL.md +3 -1
  39. package/.codex/skills/maestro-impeccable/SKILL.md +112 -0
  40. package/.codex/skills/maestro-plan/SKILL.md +88 -437
  41. package/.codex/skills/maestro-player/SKILL.md +191 -333
  42. package/.codex/skills/maestro-quick/SKILL.md +2 -0
  43. package/.codex/skills/maestro-ralph/SKILL.md +327 -710
  44. package/.codex/skills/maestro-roadmap/SKILL.md +201 -518
  45. package/.codex/skills/maestro-ui-codify/SKILL.md +1 -0
  46. package/.codex/skills/maestro-ui-craft/SKILL.md +341 -0
  47. package/.codex/skills/maestro-ui-design/SKILL.md +10 -0
  48. package/.codex/skills/maestro-verify/SKILL.md +116 -409
  49. package/.codex/skills/quality-auto-test/SKILL.md +145 -443
  50. package/.codex/skills/quality-refactor/SKILL.md +1 -1
  51. package/.codex/skills/quality-test/SKILL.md +229 -517
  52. package/.codex/skills/spec-add/SKILL.md +1 -1
  53. package/README.md +4 -1
  54. package/README.zh-CN.md +3 -1
  55. package/dashboard/dist-server/dashboard/src/server/agents/codex-cli-adapter.js +3 -0
  56. package/dashboard/dist-server/dashboard/src/server/agents/codex-cli-adapter.js.map +1 -1
  57. package/dashboard/dist-server/dashboard/src/server/routes/install.js +110 -1
  58. package/dashboard/dist-server/dashboard/src/server/routes/install.js.map +1 -1
  59. package/dashboard/dist-server/dashboard/src/server/routes/settings.js +56 -0
  60. package/dashboard/dist-server/dashboard/src/server/routes/settings.js.map +1 -1
  61. package/dashboard/dist-server/dashboard/src/server/routes/wiki.js +2 -0
  62. package/dashboard/dist-server/dashboard/src/server/routes/wiki.js.map +1 -1
  63. package/dashboard/dist-server/dashboard/src/server/wiki/spec-entry-parser.js +2 -2
  64. package/dashboard/dist-server/dashboard/src/server/wiki/spec-entry-parser.js.map +1 -1
  65. package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.js +2 -0
  66. package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.js.map +1 -1
  67. package/dashboard/dist-server/dashboard/src/server/wiki/wiki-types.d.ts +3 -1
  68. package/dashboard/dist-server/dashboard/src/shared/constants.d.ts +2 -0
  69. package/dashboard/dist-server/dashboard/src/shared/constants.js +2 -0
  70. package/dashboard/dist-server/dashboard/src/shared/constants.js.map +1 -1
  71. package/dist/src/agents/cli-agent-runner.d.ts.map +1 -1
  72. package/dist/src/agents/cli-agent-runner.js +1 -3
  73. package/dist/src/agents/cli-agent-runner.js.map +1 -1
  74. package/dist/src/agents/cli-history-store.d.ts +5 -0
  75. package/dist/src/agents/cli-history-store.d.ts.map +1 -1
  76. package/dist/src/agents/cli-history-store.js +65 -13
  77. package/dist/src/agents/cli-history-store.js.map +1 -1
  78. package/dist/src/cli.js +13 -0
  79. package/dist/src/cli.js.map +1 -1
  80. package/dist/src/commands/command-help.d.ts +3 -0
  81. package/dist/src/commands/command-help.d.ts.map +1 -0
  82. package/dist/src/commands/command-help.js +60 -0
  83. package/dist/src/commands/command-help.js.map +1 -0
  84. package/dist/src/commands/config.d.ts.map +1 -1
  85. package/dist/src/commands/config.js +17 -0
  86. package/dist/src/commands/config.js.map +1 -1
  87. package/dist/src/commands/delegate.d.ts.map +1 -1
  88. package/dist/src/commands/delegate.js +12 -2
  89. package/dist/src/commands/delegate.js.map +1 -1
  90. package/dist/src/commands/impeccable.d.ts +10 -0
  91. package/dist/src/commands/impeccable.d.ts.map +1 -0
  92. package/dist/src/commands/impeccable.js +181 -0
  93. package/dist/src/commands/impeccable.js.map +1 -0
  94. package/dist/src/commands/spec.js +1 -1
  95. package/dist/src/commands/spec.js.map +1 -1
  96. package/dist/src/commands/wiki.d.ts.map +1 -1
  97. package/dist/src/commands/wiki.js +5 -1
  98. package/dist/src/commands/wiki.js.map +1 -1
  99. package/dist/src/config/cli-tools-config.d.ts.map +1 -1
  100. package/dist/src/config/cli-tools-config.js +10 -7
  101. package/dist/src/config/cli-tools-config.js.map +1 -1
  102. package/dist/src/core/addon-registry.d.ts +31 -0
  103. package/dist/src/core/addon-registry.d.ts.map +1 -0
  104. package/dist/src/core/addon-registry.js +28 -0
  105. package/dist/src/core/addon-registry.js.map +1 -0
  106. package/dist/src/hooks/plugins/spec-injection-plugin.js +2 -0
  107. package/dist/src/hooks/plugins/spec-injection-plugin.js.map +1 -1
  108. package/dist/src/hooks/spec-injector.js +2 -2
  109. package/dist/src/hooks/spec-injector.js.map +1 -1
  110. package/dist/src/index.d.ts +2 -0
  111. package/dist/src/index.d.ts.map +1 -1
  112. package/dist/src/index.js +1 -0
  113. package/dist/src/index.js.map +1 -1
  114. package/dist/src/tools/impeccable/critique-storage.d.ts +28 -0
  115. package/dist/src/tools/impeccable/critique-storage.d.ts.map +1 -0
  116. package/dist/src/tools/impeccable/critique-storage.js +120 -0
  117. package/dist/src/tools/impeccable/critique-storage.js.map +1 -0
  118. package/dist/src/tools/impeccable/design-parser.d.ts +90 -0
  119. package/dist/src/tools/impeccable/design-parser.d.ts.map +1 -0
  120. package/dist/src/tools/impeccable/design-parser.js +696 -0
  121. package/dist/src/tools/impeccable/design-parser.js.map +1 -0
  122. package/dist/src/tools/impeccable/detect-csp.d.ts +6 -0
  123. package/dist/src/tools/impeccable/detect-csp.d.ts.map +1 -0
  124. package/dist/src/tools/impeccable/detect-csp.js +130 -0
  125. package/dist/src/tools/impeccable/detect-csp.js.map +1 -0
  126. package/dist/src/tools/impeccable/is-generated.d.ts +4 -0
  127. package/dist/src/tools/impeccable/is-generated.d.ts.map +1 -0
  128. package/dist/src/tools/impeccable/is-generated.js +56 -0
  129. package/dist/src/tools/impeccable/is-generated.js.map +1 -0
  130. package/dist/src/tools/impeccable/live/accept.d.ts +50 -0
  131. package/dist/src/tools/impeccable/live/accept.d.ts.map +1 -0
  132. package/dist/src/tools/impeccable/live/accept.js +556 -0
  133. package/dist/src/tools/impeccable/live/accept.js.map +1 -0
  134. package/dist/src/tools/impeccable/live/bootstrap.d.ts +2 -0
  135. package/dist/src/tools/impeccable/live/bootstrap.d.ts.map +1 -0
  136. package/dist/src/tools/impeccable/live/bootstrap.js +244 -0
  137. package/dist/src/tools/impeccable/live/bootstrap.js.map +1 -0
  138. package/dist/src/tools/impeccable/live/complete.d.ts +7 -0
  139. package/dist/src/tools/impeccable/live/complete.d.ts.map +1 -0
  140. package/dist/src/tools/impeccable/live/complete.js +67 -0
  141. package/dist/src/tools/impeccable/live/complete.js.map +1 -0
  142. package/dist/src/tools/impeccable/live/completion.d.ts +24 -0
  143. package/dist/src/tools/impeccable/live/completion.d.ts.map +1 -0
  144. package/dist/src/tools/impeccable/live/completion.js +26 -0
  145. package/dist/src/tools/impeccable/live/completion.js.map +1 -0
  146. package/dist/src/tools/impeccable/live/inject.d.ts +41 -0
  147. package/dist/src/tools/impeccable/live/inject.d.ts.map +1 -0
  148. package/dist/src/tools/impeccable/live/inject.js +394 -0
  149. package/dist/src/tools/impeccable/live/inject.js.map +1 -0
  150. package/dist/src/tools/impeccable/live/poll.d.ts +24 -0
  151. package/dist/src/tools/impeccable/live/poll.d.ts.map +1 -0
  152. package/dist/src/tools/impeccable/live/poll.js +180 -0
  153. package/dist/src/tools/impeccable/live/poll.js.map +1 -0
  154. package/dist/src/tools/impeccable/live/resume.d.ts +5 -0
  155. package/dist/src/tools/impeccable/live/resume.d.ts.map +1 -0
  156. package/dist/src/tools/impeccable/live/resume.js +30 -0
  157. package/dist/src/tools/impeccable/live/resume.js.map +1 -0
  158. package/dist/src/tools/impeccable/live/server.d.ts +6 -0
  159. package/dist/src/tools/impeccable/live/server.d.ts.map +1 -0
  160. package/dist/src/tools/impeccable/live/server.js +867 -0
  161. package/dist/src/tools/impeccable/live/server.js.map +1 -0
  162. package/dist/src/tools/impeccable/live/session-store.d.ts +72 -0
  163. package/dist/src/tools/impeccable/live/session-store.d.ts.map +1 -0
  164. package/dist/src/tools/impeccable/live/session-store.js +281 -0
  165. package/dist/src/tools/impeccable/live/session-store.js.map +1 -0
  166. package/dist/src/tools/impeccable/live/static/live-browser-session.js +123 -0
  167. package/dist/src/tools/impeccable/live/static/live-browser.js +4860 -0
  168. package/dist/src/tools/impeccable/live/static/modern-screenshot.umd.js +14 -0
  169. package/dist/src/tools/impeccable/live/status.d.ts +2 -0
  170. package/dist/src/tools/impeccable/live/status.d.ts.map +1 -0
  171. package/dist/src/tools/impeccable/live/status.js +52 -0
  172. package/dist/src/tools/impeccable/live/status.js.map +1 -0
  173. package/dist/src/tools/impeccable/live/wrap.d.ts +33 -0
  174. package/dist/src/tools/impeccable/live/wrap.d.ts.map +1 -0
  175. package/dist/src/tools/impeccable/live/wrap.js +572 -0
  176. package/dist/src/tools/impeccable/live/wrap.js.map +1 -0
  177. package/dist/src/tools/impeccable/load-context.d.ts +13 -0
  178. package/dist/src/tools/impeccable/load-context.d.ts.map +1 -0
  179. package/dist/src/tools/impeccable/load-context.js +79 -0
  180. package/dist/src/tools/impeccable/load-context.js.map +1 -0
  181. package/dist/src/tools/impeccable/paths.d.ts +34 -0
  182. package/dist/src/tools/impeccable/paths.d.ts.map +1 -0
  183. package/dist/src/tools/impeccable/paths.js +102 -0
  184. package/dist/src/tools/impeccable/paths.js.map +1 -0
  185. package/dist/src/tools/spec-entry-parser.d.ts +1 -1
  186. package/dist/src/tools/spec-entry-parser.d.ts.map +1 -1
  187. package/dist/src/tools/spec-entry-parser.js +1 -1
  188. package/dist/src/tools/spec-entry-parser.js.map +1 -1
  189. package/dist/src/tools/spec-init.d.ts.map +1 -1
  190. package/dist/src/tools/spec-init.js +26 -1
  191. package/dist/src/tools/spec-init.js.map +1 -1
  192. package/dist/src/tools/spec-loader.d.ts +1 -1
  193. package/dist/src/tools/spec-loader.d.ts.map +1 -1
  194. package/dist/src/tools/spec-loader.js +2 -0
  195. package/dist/src/tools/spec-loader.js.map +1 -1
  196. package/package.json +2 -2
  197. package/workflows/claude-instructions.md +17 -5
  198. package/workflows/cli-tools-usage.md +10 -3
  199. package/workflows/delegate-usage.md +3 -2
  200. package/workflows/impeccable/adapt.md +190 -0
  201. package/workflows/impeccable/animate.md +175 -0
  202. package/workflows/impeccable/audit.md +133 -0
  203. package/workflows/impeccable/bolder.md +113 -0
  204. package/workflows/impeccable/brand.md +118 -0
  205. package/workflows/impeccable/clarify.md +174 -0
  206. package/workflows/impeccable/codex.md +105 -0
  207. package/workflows/impeccable/cognitive-load.md +106 -0
  208. package/workflows/impeccable/color-and-contrast.md +105 -0
  209. package/workflows/impeccable/colorize.md +154 -0
  210. package/workflows/impeccable/craft.md +123 -0
  211. package/workflows/impeccable/critique.md +261 -0
  212. package/workflows/impeccable/delight.md +302 -0
  213. package/workflows/impeccable/distill.md +111 -0
  214. package/workflows/impeccable/document.md +439 -0
  215. package/workflows/impeccable/extract.md +69 -0
  216. package/workflows/impeccable/harden.md +347 -0
  217. package/workflows/impeccable/heuristics-scoring.md +234 -0
  218. package/workflows/impeccable/interaction-design.md +195 -0
  219. package/workflows/impeccable/layout.md +141 -0
  220. package/workflows/impeccable/live.md +622 -0
  221. package/workflows/impeccable/motion-design.md +109 -0
  222. package/workflows/impeccable/onboard.md +234 -0
  223. package/workflows/impeccable/optimize.md +258 -0
  224. package/workflows/impeccable/overdrive.md +130 -0
  225. package/workflows/impeccable/personas.md +179 -0
  226. package/workflows/impeccable/polish.md +242 -0
  227. package/workflows/impeccable/product.md +62 -0
  228. package/workflows/impeccable/quieter.md +99 -0
  229. package/workflows/impeccable/responsive-design.md +114 -0
  230. package/workflows/impeccable/shape.md +165 -0
  231. package/workflows/impeccable/spatial-design.md +100 -0
  232. package/workflows/impeccable/teach.md +168 -0
  233. package/workflows/impeccable/typeset.md +124 -0
  234. package/workflows/impeccable/typography.md +159 -0
  235. package/workflows/impeccable/ux-writing.md +107 -0
  236. package/workflows/impeccable.md +164 -0
  237. package/workflows/maestro.md +7 -3
  238. package/workflows/skill-authoring.md +265 -0
  239. package/workflows/specs-add.md +3 -2
  240. package/workflows/specs-load.md +2 -1
  241. package/workflows/specs-setup.md +21 -1
@@ -1,313 +1,420 @@
1
- ---
2
- name: maestro
3
- description: Auto-route intent to optimal command chain
4
- argument-hint: "\"intent text\" [-y] [-c|--continue] [--dry-run] [--super]"
5
- allowed-tools: spawn_agents_on_csv, Read, Write, Edit, Bash, Glob, Grep, AskUserQuestion
6
- ---
7
-
8
- <purpose>
9
- Wave-based pipeline coordinator. All skill execution happens exclusively in spawned sub-agents
10
- via `spawn_agents_on_csv` — the coordinator never executes skills directly.
11
-
12
- Coordinator loop: classify intent → resolve chain → build wave CSV → spawn → read results →
13
- (barrier: read artifacts, update context, assemble next skill_call args) next wave report.
14
-
15
- Each wave = 1 barrier task (solo) or N parallel non-barrier tasks.
16
- </purpose>
17
-
18
- <required_reading>
19
- @~/.maestro/workflows/maestro.codex.md — authoritative `detectTaskType`, `detectNextAction`, `chainMap` (35+ intent patterns, 40+ chain types). Read before executing any step.
20
- </required_reading>
21
-
22
- <deferred_reading>
23
- - [maestro-super.md](~/.maestro/workflows/maestro-super.md) — read when `--super` flag is active
24
- </deferred_reading>
25
-
26
- <context>
27
- $ARGUMENTSuser intent text, or special flags.
28
-
29
- **Flags:**
30
- - `-y, --yes` — Auto mode: skip all prompts; propagate `-y` to each skill
31
- - `--continue` — Resume latest paused session from last incomplete wave
32
- - `--dry-run` — Display planned chain without executing
33
- - `--super` — Super mode: deliver production-ready complete software system. Read `maestro-super.md` from deferred_reading, then follow it completely.
34
-
35
- **Session state**: `.workflow/.maestro/{session-id}/`
36
- **Core output**: `tasks.csv` (master) + `wave-{N}-results.csv` (per wave) + `context.md` (report)
37
- </context>
38
-
39
- <invariants>
40
- 1. **ALL skills via spawn_agents_on_csv**: Every skill invocation — barrier or non-barrierMUST go through `spawn_agents_on_csv`. Coordinator NEVER directly executes any skill. No exceptions.
41
- 2. **Coordinator = prompt assembler only**: Classify intent build CSV → spawn → read results assemble next CSV. It never runs skill logic itself.
42
- 3. **Barrier execution**: Barrier designation only means the coordinator **pauses after the wave** to read artifacts and assemble the next wave's prompt args. Coordinator role at barrier: **discover artifacts read update context assemble next skill_call args**. Nothing more.
43
- 4. **Barrier = solo wave**: A barrier skill always executes alone in its wave (wave size = 1).
44
- 5. **Non-barriers can parallel**: Consecutive non-barrier skills grouped into one wave (`max_workers = N`).
45
- 6. **Wave-by-wave**: Never start wave N+1 before wave N results are read and analyzed.
46
- 7. **Coordinator owns context**: Sub-agents never read prior results — coordinator assembles the full `skill_call` with resolved args.
47
- 8. **Simple instruction**: Sub-agent instruction is minimal — just "execute {skill_call}, report result".
48
- 9. **Abort on failure**: Failed step → mark remaining as skipped → report.
49
- 10. **Resume from wave**: `--continue` finds last completed wave, resumes from next pending step.
50
- </invariants>
51
-
52
- <chain_map>
53
- | Intent keywords | Chain | Steps (skills, in order) |
54
- |----------------|-------|--------------------------|
55
- | fix, bug, error, broken, crash | `quality-fix` | $maestro-analyze --gaps → $maestro-plan --gaps → $maestro-execute → $maestro-verify |
56
- | test, spec, coverage | `quality-test` | $quality-test |
57
- | refactor, cleanup, debt | `quality-refactor` | $quality-refactor |
58
- | feature, implement, add, build | `feature` | $maestro-plan → $maestro-execute → $maestro-verify |
59
- | review, check, audit | `quality-review` | $quality-review |
60
- | deploy, release, ship | `deploy` | $maestro-verify → $maestro-milestone-release |
61
- | brainstorm, explore, ideate | `brainstorm-driven` | $maestro-brainstorm → $maestro-plan → $maestro-execute → $maestro-verify |
62
- | plan, design, architect | `plan` | $maestro-plan |
63
- | debug, diagnose, troubleshoot | `debug` | $quality-debug |
64
- | continue, next, go | `state_continue` | (from project state) |
65
- | status, dashboard | `status` | $manage-status |
66
-
67
- Full chain map with 40+ chains: see `@~/.maestro/workflows/maestro.codex.md` §3c
68
- </chain_map>
69
-
70
- <barrier_skills>
71
- Skills that produce artifacts the coordinator must read before assembling the next wave.
72
- After a barrier skill completes **in its spawned sub-agent**, coordinator reads output and updates `state.context`.
73
-
74
- | Skill | Artifacts to Read | Context Updates |
75
- |-------|------------------|-----------------|
76
- | `maestro-analyze` | `.workflow/.csv-wave/*/context.md`, `state.json` | `gaps`, `phase`, `analysis_dir` |
77
- | `maestro-plan` | `{artifact_dir}/plan.json`, `{artifact_dir}/.task/TASK-*.json` | `plan_dir`, `task_count`, `wave_count` |
78
- | `maestro-brainstorm` | `.workflow/.csv-wave/*/.brainstorming/` | `brainstorm_dir`, `features` |
79
- | `maestro-roadmap` | `.workflow/.csv-wave/*/specs/` | `spec_session_id` |
80
- | `maestro-execute` | `.workflow/.csv-wave/*/results.csv` | `exec_status`, `completed_tasks`, `failed_tasks` |
81
-
82
- **Non-barrier skills** (groupable into multi-task waves): `maestro-verify`, `quality-review`, `quality-test`, `quality-debug`, `quality-refactor`, `quality-sync`, `manage-*`
83
-
84
- ### Barrier Analysis Logic
85
-
86
- After each barrier skill completes, read its artifacts and update `state.context`:
87
-
88
- | Barrier Skill | Read | Context Updates |
89
- |---------------|------|-----------------|
90
- | `maestro-analyze` | `{artifacts}/context.md` | `analysis_dir`, `gaps` (extracted), `phase` (if unset) |
91
- | `maestro-plan` | `{artifacts}/plan.json` | `plan_dir`, `task_count`, `wave_count` from plan JSON |
92
- | `maestro-brainstorm` | `{artifacts}/` | `brainstorm_dir` |
93
- | `maestro-roadmap` | `{artifacts}/` | `spec_session_id` (extracted) |
94
- | `maestro-execute` | `{artifacts}/results.csv` | `exec_completed`, `exec_failed` (counted by status) |
95
- </barrier_skills>
96
-
97
- <execution>
98
-
99
- ### Phase 1: Resolve Intent and Chain
100
-
101
- **`--continue`**: Glob `.workflow/.maestro/maestro-*/status.json` sorted desc; load most recent; resume from first pending wave.
102
-
103
- **Fresh mode**:
104
- 1. Read `.workflow/state.json` for project context (derive current phase from artifact registry, `workflow_name`)
105
- 2. Classify intent via keyword heuristics (see chain_map)
106
- 4. No match + not AUTO_YES → one clarifying question via `AskUserQuestion`
107
- 5. Resolve chain's skill list
108
- 6. Create session dir `.workflow/.maestro/maestro-{YYYYMMDD-HHMMSS}/` and write `status.json`:
109
-
110
- ```json
111
- {
112
- "session_id": "maestro-{YYYYMMDD-HHMMSS}",
113
- "source": "maestro",
114
- "created_at": "ISO",
115
- "updated_at": "ISO",
116
- "intent": "...",
117
- "task_type": "...",
118
- "chain_name": "...",
119
- "phase": null,
120
- "milestone": null,
121
- "auto_mode": false,
122
- "exec_mode": "auto",
123
- "cli_tool": "codex",
124
- "lifecycle_position": null,
125
- "target": null,
126
- "context": {
127
- "issue_id": null,
128
- "milestone_num": null,
129
- "spec_session_id": null,
130
- "scratch_dir": null,
131
- "plan_dir": null,
132
- "analysis_dir": null,
133
- "brainstorm_dir": null
134
- },
135
- "waves": [],
136
- "steps": [{ "index": 0, "skill": "...", "args": "", "type": "skill", "status": "pending", "started_at": null, "completed_at": null, "error": null, "wave_n": null }],
137
- "current_step": 0,
138
- "status": "running"
139
- }
140
- ```
141
-
142
- 7. **Initialize tracking** (goal constraint plan sub-items):
143
-
144
- ```
145
- // Goal = outer constraint — ensures entire chain completes
146
- functions.create_goal({
147
- objective: `Maestro ${chain_name}: ${steps.length} steps [${steps.map(s => s.skill).join(' → ')}]`
148
- })
149
-
150
- // Plan = inner tracking — sub-step progress
151
- functions.update_plan({
152
- plan: steps.map((step, i) => ({
153
- id: `step-${i}`,
154
- title: `[${i + 1}/${steps.length}] ${step.skill}${barrier(step) ? ' [BARRIER]' : ''}`,
155
- status: "open"
156
- }))
157
- })
158
- ```
159
-
160
- **`--dry-run`**: Display chain with `[BARRIER]` markers, stop.
161
-
162
- **User confirmation** (skip if AUTO_YES): Display plan, prompt `Proceed? (yes/no)`.
163
-
164
- **`--continue` plan rebuild**: When resuming, rebuild `update_plan` from status.json — completed steps → `"completed"`, current → `"in_progress"`, rest → `"open"`.
165
-
166
- ### Phase 2: Wave Execution Loop
167
-
168
- **While pending steps remain**, increment `waveNum` and repeat:
169
-
170
- 1. **Build wave**: Select next wave steps via `buildNextWave` (barrier = solo, non-barriers = grouped)
171
- 2. **Write CSV**: `{sessionDir}/wave-{N}.csv` with columns `id,skill_call,topic` — one row per step, skill_call assembled with resolved context
172
- 3. **Spawn**:
173
- ```
174
- spawn_agents_on_csv({
175
- csv_path: "{sessionDir}/wave-{N}.csv",
176
- id_column: "id", instruction: WAVE_INSTRUCTION,
177
- max_workers: <wave size>, max_runtime_seconds: 3600,
178
- output_csv_path: "{sessionDir}/wave-{N}-results.csv",
179
- output_schema: RESULT_SCHEMA
180
- })
181
- ```
182
- 4. **Read results**: Update each step's `status`, `wave_n` from results CSV
183
- 5. **Barrier check**: If wave was a barrier skill, run barrier analysis logic (read artifacts, update context)
184
- 6. **Dual-track persist**:
185
- - status.json: Append wave to `state.waves[]`, update step statuses, write `status.json`
186
- - update_plan: Sync plan items from status.json step statuses:
187
- ```
188
- functions.update_plan({
189
- plan: steps.map((step, i) => ({
190
- id: `step-${i}`,
191
- title: `[${i + 1}/${steps.length}] ${step.skill}`,
192
- status: step.status === 'completed' ? 'completed'
193
- : step.status === 'pending' && i === nextPendingIndex ? 'in_progress'
194
- : step.status
195
- }))
196
- })
197
- ```
198
- 7. **Abort on failure**: If any result `status === 'failed'` → mark remaining steps `skipped` in both status.json and update_plan, set `state.status = 'aborted'`, break
199
-
200
- ### Skill Call Assembly
201
-
202
- **Barrier skills**: `maestro-analyze`, `maestro-plan`, `maestro-brainstorm`, `maestro-roadmap`, `maestro-execute`
203
-
204
- **Auto-yes flag map** (appended when `status.auto_mode` is true):
205
-
206
- | Skill | Flag |
207
- |-------|------|
208
- | `maestro-init`, `maestro-analyze`, `maestro-brainstorm`, `maestro-ui-design`, `maestro-roadmap` | `-y` |
209
- | `maestro-plan`, `maestro-execute`, `maestro-milestone-complete` | `-y` |
210
- | `quality-auto-test`, `quality-retrospective` | `-y` |
211
- | `quality-test` | `-y --auto-fix` |
212
-
213
- **`buildSkillCall(step, ctx)`**: Replace placeholders `{phase}`, `{description}`, `{issue_id}`, `{plan_dir}`, `{analysis_dir}`, `{brainstorm_dir}`, `{spec_session_id}` in `step.args` with corresponding `ctx` values. Append auto-yes flag if applicable. Return `$<skill> <args>`.
214
-
215
- **`buildNextWave(steps)`**: Take first pending step. If it is a barrier skill, return it solo. Otherwise, collect consecutive non-barrier pending steps into one wave (stop at first barrier).
216
-
217
- ### Sub-Agent Instruction Template
218
-
219
- ```
220
- 你是 CSV job agent。
221
-
222
- 先原样执行这一段技能调用:
223
- {skill_call}
224
-
225
- 然后基于结果完成这一行任务说明:
226
- {topic}
227
-
228
- 限制:
229
- - 不要修改 .workflow/.maestro/ 下的 status 文件
230
- - skill 内部有自己的 session 管理,按 skill SKILL.md 执行即可
231
-
232
- 最后必须调用 `report_agent_job_result`,返回 JSON:
233
- {"status":"completed|failed","skill_call":"{skill_call}","summary":"一句话结果","artifacts":"产物路径或空字符串","error":"失败原因或空字符串"}
234
- ```
235
-
236
- ### Result Schema
237
-
238
- Object with all fields required: `status` ("completed"|"failed"), `skill_call` (string), `summary` (string), `artifacts` (path or ""), `error` (reason or "").
239
-
240
- ### Phase 3: Completion Report
241
-
242
- Finalize tracking:
243
- - status.json: `state.status = 'completed'`
244
- - update_plan: all steps → `"completed"` (skipped steps also marked completed)
245
- - **update_goal**: `functions.update_goal({ status: "complete" })` — release goal constraint
246
-
247
- **Note**: Abort path (Phase 2 step 7) does NOT call `update_goal` — goal stays running for `--continue` resume.
248
-
249
- ```
250
- === COORDINATE COMPLETE ===
251
- Session: <sessionId>
252
- Chain: <chain>
253
- Waves: <N> executed
254
- Steps: <completed>/<total>
255
-
256
- WAVE RESULTS:
257
- [W1] $maestro-analyze --gaps → ✓ found 3 gaps
258
- [W2] $maestro-plan --gaps → ✓ 12 tasks in 3 waves
259
- [W3] $maestro-execute → ✓ 12/12 tasks done
260
- [W4] $maestro-verify → ✓ all criteria met
261
-
262
- State: .workflow/.maestro/<sessionId>/status.json
263
- Resume: $maestro --continue
264
- ```
265
- </execution>
266
-
267
- <csv_schema>
268
- ### wave-{N}.csv (Per-Wave Input)
269
-
270
- ```csv
271
- id,skill_call,topic
272
- "1","$maestro-analyze --gaps \"fix auth\" -y","Chain \"quality-fix\" step 1/4"
273
- ```
274
-
275
- | Column | Description |
276
- |--------|-------------|
277
- | `id` | Step number from chain (string) |
278
- | `skill_call` | Full skill invocation assembled by coordinator with resolved context |
279
- | `topic` | Brief description for the agent |
280
-
281
- ### tasks.csv (Master State)
282
-
283
- ```csv
284
- id,skill,args,wave_n,status,findings,artifacts,error
285
- ```
286
-
287
- Accumulated across all waves. Updated after each wave completes.
288
- </csv_schema>
289
-
290
- <error_codes>
291
- | Code | Severity | Condition | Recovery |
292
- |------|----------|-----------|----------|
293
- | E001 | error | Intent unclassifiable after clarification | Default to `feature` chain |
294
- | E002 | error | Intent unresolvable after retry | List available chains, abort |
295
- | E003 | error | Wave timeout (max_runtime_seconds) | Mark step `failed`, abort chain |
296
- | E004 | error | Barrier artifact not found | Retry wave once, then abort |
297
- | E005 | error | `--continue`: no session found | List sessions, prompt |
298
- | W001 | warning | Barrier artifact partial | Continue with available context |
299
- </error_codes>
300
-
301
- <success_criteria>
302
- - [ ] Intent classified and chain resolved (keyword heuristics or `--chain`)
303
- - [ ] Session dir initialized with `status.json` before first wave
304
- - [ ] Every skill invocation goes through `spawn_agents_on_csv` — none executed in coordinator
305
- - [ ] Barrier skills execute solo in their wave; coordinator only reads artifacts afterward
306
- - [ ] Non-barrier skills grouped into parallel waves where possible
307
- - [ ] Each wave: CSV built → spawned → results read → state updated
308
- - [ ] Barrier artifacts read and context updated before assembling next wave's skill_call args
309
- - [ ] Failed step → remaining marked skipped → abort reported
310
- - [ ] Completion report with per-wave status written to `context.md`
311
- - [ ] `--dry-run` shows chain with [BARRIER] markers, no execution
312
- - [ ] `--continue` resumes from last incomplete wave
313
- </success_criteria>
1
+ ---
2
+ name: maestro
3
+ description: Auto-route intent to optimal command chain
4
+ argument-hint: "\"intent text\" [-y] [-c|--continue] [--dry-run] [--super]"
5
+ allowed-tools: spawn_agents_on_csv, Read, Write, Edit, Bash, Glob, Grep, AskUserQuestion
6
+ ---
7
+
8
+ <purpose>
9
+ Wave-based pipeline coordinator. Classify intent resolve chain wave-by-wave spawn → report.
10
+ All skill execution via `spawn_agents_on_csv` — coordinator never executes skills directly.
11
+
12
+ Entry points:
13
+ - **`$maestro "intent"`** Classifychainexecute
14
+ - **`$maestro --continue`** — Resume from last incomplete wave
15
+ - **`$maestro --dry-run "intent"`** Show chain, no execution
16
+ - **`$maestro --super "intent"`** — Production-ready mode (read maestro-super.md)
17
+ </purpose>
18
+
19
+ <deferred_reading>
20
+ - [maestro-super.md](~/.maestro/workflows/maestro-super.md) — read when `--super` flag is active
21
+ </deferred_reading>
22
+
23
+ <context>
24
+ $ARGUMENTS — user intent text, or special flags.
25
+
26
+ **Flags:**
27
+ - `-y, --yes` Auto mode: skip all prompts; propagate `-y` to each skill
28
+ - `--continue` — Resume latest paused session from last incomplete wave
29
+ - `--dry-run` — Display planned chain without executing
30
+ - `--super` — Read and follow `maestro-super.md` completely
31
+
32
+ **Session state**: `.workflow/.maestro/{session-id}/`
33
+ </context>
34
+
35
+ <invariants>
36
+ 1. **ALL skills via spawn_agents_on_csv** coordinator NEVER directly executes any skill logic
37
+ 2. **Coordinator = prompt assembler** — classify → build CSV → spawn → read results → assemble next
38
+ 3. **Barrier = solo wave** — barrier skills always execute alone (wave size = 1)
39
+ 4. **Non-barriers can parallel** — consecutive non-barrier skills grouped into one wave
40
+ 5. **Wave-by-wave**never start wave N+1 before wave N results are read
41
+ 6. **Coordinator owns context** sub-agents never read prior results; coordinator assembles full `skill_call`
42
+ 7. **Abort on failure** failed stepmark remaining skippedreport
43
+ </invariants>
44
+
45
+ <state_machine>
46
+
47
+ <states>
48
+ S_PARSE — 解析参数、检测 flags PERSIST:
49
+ S_CONTINUE — 加载已有 session,定位 resume 点 PERSIST: session (loaded)
50
+ S_CLASSIFY — 意图分类、解析 chain (A_CLASSIFY) PERSIST: —
51
+ S_CREATE — 创建 session + status.json PERSIST: session.status, session.steps[]
52
+ S_DRY_RUN — 显示 chain 后结束 PERSIST: —
53
+ S_CONFIRM — 用户确认(auto_mode 跳过) PERSIST:
54
+ S_WAVE_LOOP — 构建 wave → spawn → 读结果 → 循环 PERSIST: session.waves[], session.current_step, session.context
55
+ S_COMPLETE — 标记完成、释放目标 PERSIST: session.status = "completed"
56
+ S_ABORTED — 失败中止、标记剩余 skipped PERSIST: session.status = "aborted"
57
+ S_FALLBACK — 意图无法分类,请求输入 PERSIST:
58
+ </states>
59
+
60
+ <transitions>
61
+
62
+ S_PARSE:
63
+ S_CONTINUE WHEN: --continue flag
64
+ S_CLASSIFY WHEN: intent text present
65
+ S_FALLBACK WHEN: no intent AND no flags
66
+
67
+ S_CONTINUE:
68
+ → S_WAVE_LOOP WHEN: session found, has pending steps DO: A_RESUME_SESSION
69
+ → S_FALLBACK WHEN: no session found
70
+
71
+ S_CLASSIFY:
72
+ S_CREATE WHEN: chain resolved DO: A_CLASSIFY
73
+ → S_FALLBACK WHEN: no match AND auto_mode
74
+ S_CLASSIFY WHEN: no match AND not auto_mode DO: A_CLARIFY_INTENT
75
+ GUARD: max 1 clarification attempt → S_FALLBACK
76
+
77
+ S_CREATE:
78
+ S_DRY_RUN WHEN: --dry-run flag DO: A_CREATE_SESSION
79
+ S_CONFIRM WHEN: not auto_mode DO: A_CREATE_SESSION
80
+ S_WAVE_LOOP WHEN: auto_mode DO: A_CREATE_SESSION
81
+
82
+ S_DRY_RUN:
83
+ → END DO: display chain with [BARRIER] markers
84
+
85
+ S_CONFIRM:
86
+ S_WAVE_LOOP WHEN: user confirms
87
+ → S_ABORTED WHEN: user cancels
88
+
89
+ S_WAVE_LOOP:
90
+ S_WAVE_LOOP WHEN: pending steps remain DO: A_BUILD_AND_SPAWN_WAVE
91
+ S_COMPLETE WHEN: no pending steps
92
+ S_ABORTED WHEN: step failed
93
+ GUARD: wave order is sacred never skip ahead
94
+
95
+ S_COMPLETE:
96
+ → END DO: A_FINALIZE
97
+
98
+ S_ABORTED:
99
+ END DO: A_ABORT_REPORT
100
+
101
+ S_FALLBACK:
102
+ → S_CLASSIFY WHEN: user provides new intent DO: AskUserQuestion
103
+ END WHEN: user cancels
104
+
105
+ </transitions>
106
+
107
+ <actions>
108
+
109
+ ### A_CREATE_SESSION
110
+
111
+ 1. Read `.workflow/state.json` for project context (current phase, milestone, workflow_name)
112
+ 2. Resolve chain's skill list from Chain Map (see appendix)
113
+ 3. Create `.workflow/.maestro/maestro-{YYYYMMDD-HHMMSS}/status.json`:
114
+ ```json
115
+ { "session_id", "source": "maestro", "intent", "task_type", "chain_name",
116
+ "phase", "milestone", "auto_mode", "context": { "issue_id", "scratch_dir",
117
+ "plan_dir", "analysis_dir", "brainstorm_dir" },
118
+ "steps": [{ "index", "skill", "args", "status": "pending", "wave_n": null }],
119
+ "waves": [], "current_step": 0, "status": "running" }
120
+ ```
121
+ 4. Initialize tracking:
122
+ - `create_goal({ objective: "Maestro {chain}: {N} steps [{skill list}]" })`
123
+ - `update_plan({ plan: steps.map(step => { step, status: "pending" }) })`
124
+
125
+ ### A_RESUME_SESSION
126
+
127
+ 1. Glob `.workflow/.maestro/maestro-*/status.json` sorted desc, load most recent
128
+ 2. Find first pending step → set as resume point
129
+ 3. Rebuild `update_plan` from status.json (completed→"completed", current→"in_progress", rest→"open")
130
+
131
+ ### A_CLASSIFY
132
+
133
+ **Layer 1: Exact-match (fast path)**
134
+ - `--chain <name>` flag → validate against chainMap, use directly (E002 if not found)
135
+ - `continue`/`next`/`go`/`继续`/`下一步` → `state_continue`
136
+ - `status`/`状态`/`dashboard` `status`
137
+
138
+ If matched, skip to chain resolution.
139
+
140
+ **Layer 2: Structured intent extraction**
141
+
142
+ Extract tuple from intent using LLM semantic understanding:
143
+ ```json
144
+ {
145
+ "action": "<create|fix|analyze|plan|execute|verify|review|test|debug|refactor|explore|manage|transition|continue|sync|learn|retrospect>",
146
+ "object": "<feature|bug|issue|code|test|spec|phase|milestone|doc|performance|security|ui|memory|codebase|config>",
147
+ "scope": "<module/file/area or null>",
148
+ "issue_id": "<ISS-XXXXXXXX-NNN or null>",
149
+ "phase_ref": "<integer or null>",
150
+ "urgency": "<low|normal|high>"
151
+ }
152
+ ```
153
+
154
+ Disambiguation: "问题"/"issue"/"problem" as broken → `object: "bug"` (→ debug); as tracked item (with ISS-ID or management context) → `object: "issue"` (→ issue management). When ambiguous, prefer `"bug"`.
155
+
156
+ **Layer 3: action × object routing matrix**
157
+
158
+ If `issue_id` present → issue pipeline directly.
159
+
160
+ | action | object-specific overrides | default |
161
+ |--------|--------------------------|---------|
162
+ | fix | bug/code/perf/security→`debug`, issue→`issue` | `debug` |
163
+ | create | feature→`quick`, issue→`issue`, test→`test_gen`, spec→`spec_generate`, ui→`ui_design`, config→`init` | `quick` |
164
+ | analyze | bug/code→`analyze`, issue→`issue_analyze`, codebase→`spec_map` | `analyze` |
165
+ | explore | issue→`issue_discover`, feature/ui→`brainstorm`/`ui_design` | `brainstorm` |
166
+ | plan | issue→`issue_plan`, spec→`spec_generate` | `plan` |
167
+ | execute | issue→`issue_execute` | `execute` |
168
+ | manage | issue→`issue`, milestone→`milestone_audit`, phase→`phase_transition`, memory/doc/codebase→`memory`/`sync`/`codebase_refresh` | `status` |
169
+ | transition | phase→`phase_transition`, milestone→`milestone_complete` | `phase_transition` |
170
+ | verify, review, test, debug, refactor, continue, sync, learn, retrospect, release, amend, compose | — | self-named |
171
+
172
+ **Clarity scoring**: 3=action+object+scope, 2=action+object, 1=action only, 0=empty.
173
+ If `clarity < 2` and not `auto_mode` → transition to A_CLARIFY_INTENT.
174
+
175
+ **Layer 4: State-based routing** (when `taskType === 'state_continue'`)
176
+
177
+ Read `.workflow/state.json` and route by condition:
178
+
179
+ | Condition | Chain |
180
+ |-----------|-------|
181
+ | Not initialized | `init` |
182
+ | No phases, no roadmap, has accumulated_context | `next-milestone` |
183
+ | No phases | `brainstorm-driven` |
184
+ | pending + has context | `plan` |
185
+ | pending, no context | `analyze` |
186
+ | exploring/planning + has plan | `execute-verify` |
187
+ | exploring/planning, no plan | `plan` |
188
+ | executing, all tasks done | `verify` |
189
+ | executing, tasks remain | `execute` |
190
+ | verifying, passed + no review | `review` |
191
+ | verifying, passed + BLOCK | `review-fix` |
192
+ | verifying, passed + UAT pending | `test` |
193
+ | verifying, passed + UAT passed | `milestone-close` |
194
+ | verifying, passed + UAT failed | `debug` |
195
+ | verifying, not passed | `quality-loop-partial` |
196
+ | testing, UAT passed | `milestone-close` |
197
+ | testing, UAT not passed | `debug` |
198
+ | completed | `milestone-close` |
199
+ | blocked | `debug` |
200
+ | fallback | `status` |
201
+
202
+ **Chain resolution order:**
203
+ 1. `forceChain` → `chainMap[forceChain]` (E002 if not found)
204
+ 2. `state_continue` Layer 4 state routing → `{ chain, argsOverride? }`
205
+ 3. `taskToChain[taskType]` → alias lookup (see Chain Aliases below)
206
+ 4. `chainMap[taskType]` direct lookup
207
+
208
+ **Phase resolution**: structured extraction `phase_ref` → fallback regex (`phase N` or bare number) → `projectState.current_phase`.
209
+
210
+ ### A_CLARIFY_INTENT
211
+
212
+ 1. `AskUserQuestion` with available chain types
213
+ 2. Re-classify with user response
214
+
215
+ ### A_BUILD_AND_SPAWN_WAVE
216
+
217
+ 1. **buildNextWave**: first pending step; barrier → solo wave; non-barrier collect consecutive non-barriers
218
+ 2. **buildSkillCall** per step:
219
+ - Replace placeholders: `{phase}`, `{plan_dir}`, `{analysis_dir}`, `{brainstorm_dir}`, `{spec_session_id}`
220
+ - Append auto-yes flag if `auto_mode` (see Appendix: Auto-Yes Flag Map)
221
+ 3. Write `{sessionDir}/wave-{N}.csv` (columns: id, skill_call, topic)
222
+ 4. `spawn_agents_on_csv({ csv_path, id_column: "id", instruction: WAVE_INSTRUCTION, max_workers, max_runtime_seconds: 3600, output_csv_path, output_schema: RESULT_SCHEMA })`
223
+ 5. Read results → update step statuses in status.json
224
+ 6. **Barrier analysis** (if barrier skill): read artifacts, update `session.context`
225
+ | Barrier Skill | Read | Context Updates |
226
+ |---------------|------|-----------------|
227
+ | maestro-analyze | context.md, state.json | analysis_dir, gaps, phase |
228
+ | maestro-plan | plan.json, .task/TASK-*.json | plan_dir, task_count, wave_count |
229
+ | maestro-brainstorm | .brainstorming/ | brainstorm_dir, features |
230
+ | maestro-roadmap | specs/ | spec_session_id |
231
+ | maestro-execute | results.csv | exec_completed, exec_failed |
232
+ 7. Persist: write status.json + sync update_plan
233
+
234
+ ### A_FINALIZE
235
+
236
+ 1. Set `session.status = "completed"`, write status.json
237
+ 2. Sync update_plan: all steps → "completed"
238
+ 3. `update_goal({ status: "complete" })` release goal constraint
239
+ 4. Generate completion report (see Appendix: Report Format)
240
+
241
+ ### A_ABORT_REPORT
242
+
243
+ 1. Mark remaining steps as `skipped` in status.json
244
+ 2. Set `session.status = "aborted"`, write status.json
245
+ 3. Sync update_plan (skipped steps marked)
246
+ 4. Do NOT call update_goal — goal stays for `--continue` resume
247
+ 5. Display abort report with failure details
248
+
249
+ </actions>
250
+
251
+ </state_machine>
252
+
253
+ <appendix>
254
+
255
+ ### Chain Map (Full)
256
+
257
+ **Single-step chains:**
258
+
259
+ | Chain | Command + Args |
260
+ |-------|---------------|
261
+ | `status` | `manage-status` |
262
+ | `init` | `maestro-init` |
263
+ | `analyze` | `maestro-analyze {phase}` |
264
+ | `ui_design` | `maestro-ui-design {phase}` |
265
+ | `plan` | `maestro-plan {phase}` |
266
+ | `execute` | `maestro-execute {phase}` |
267
+ | `verify` | `maestro-verify {phase}` |
268
+ | `test_gen` | `quality-auto-test {phase}` |
269
+ | `auto_test` | `quality-auto-test {phase}` |
270
+ | `test` | `quality-test {phase}` |
271
+ | `debug` | `quality-debug "{description}"` |
272
+ | `integration_test` | `quality-auto-test {phase}` |
273
+ | `refactor` | `quality-refactor "{description}"` |
274
+ | `review` | `quality-review {phase}` |
275
+ | `retrospective` | `quality-retrospective {phase}` |
276
+ | `learn` | `maestro-learn "{description}"` |
277
+ | `sync` | `quality-sync` |
278
+ | `milestone_audit` | `maestro-milestone-audit` |
279
+ | `milestone_complete` | `maestro-milestone-complete` |
280
+ | `codebase_rebuild` | `manage-codebase-rebuild` |
281
+ | `codebase_refresh` | `manage-codebase-refresh` |
282
+ | `spec_setup` | `spec-setup` |
283
+ | `spec_add` | `spec-add "{description}"` |
284
+ | `spec_load` | `spec-load` |
285
+ | `spec_map` | `manage-codebase-rebuild` |
286
+ | `spec_remove` | `spec-remove "{description}"` |
287
+ | `knowhow_capture` | `manage-knowhow-capture "{description}"` |
288
+ | `knowhow` | `manage-knowhow "{description}"` |
289
+ | `issue` | `manage-issue "{description}"` |
290
+ | `issue_discover` | `manage-issue-discover "{description}"` |
291
+ | `issue_analyze` | `maestro-analyze --gaps "{description}"` |
292
+ | `issue_plan` | `maestro-plan --gaps` |
293
+ | `issue_execute` | `maestro-execute` |
294
+ | `quick` | `maestro-quick "{description}"` |
295
+ | `harvest` | `manage-harvest "{description}"` |
296
+ | `wiki` | `manage-wiki` |
297
+ | `wiki_connect` | `wiki-connect` |
298
+ | `wiki_digest` | `wiki-digest` |
299
+ | `business_test` | `quality-auto-test {phase}` |
300
+ | `amend` | `maestro-amend "{description}"` |
301
+ | `release` | `maestro-milestone-release` |
302
+ | `compose` | `maestro-composer "{description}"` |
303
+ | `play` | `maestro-player "{description}"` |
304
+ | `update` | `maestro-update` |
305
+ | `overlay` | `maestro-overlay "{description}"` |
306
+ | `link_coordinate` | `maestro-link-coordinate "{description}"` |
307
+
308
+ **Multi-step chains:**
309
+
310
+ | Chain | Steps (→ = sequential, [B] = barrier) |
311
+ |-------|---------------------------------------|
312
+ | `feature` | [B] maestro-plan [B] maestro-execute maestro-verify |
313
+ | `quality-fix` | [B] maestro-analyze --gaps → [B] maestro-plan --gaps → [B] maestro-execute → maestro-verify |
314
+ | `deploy` | maestro-verify → maestro-milestone-release |
315
+ | `spec-driven` | maestro-init → [B] maestro-roadmap --mode full → [B] maestro-plan → [B] maestro-execute → maestro-verify |
316
+ | `brainstorm-driven` | [B] maestro-brainstorm → [B] maestro-plan → [B] maestro-execute → maestro-verify |
317
+ | `ui-design-driven` | maestro-ui-design → [B] maestro-plan → [B] maestro-execute → maestro-verify |
318
+ | `roadmap-driven` | maestro-init → [B] maestro-roadmap → [B] maestro-plan → [B] maestro-execute → maestro-verify |
319
+ | `next-milestone` | [B] maestro-roadmap → [B] maestro-plan → [B] maestro-execute → maestro-verify |
320
+ | `full-lifecycle` | [B] maestro-plan → [B] maestro-execute → maestro-verify → quality-review → quality-test → maestro-milestone-audit → maestro-milestone-complete |
321
+ | `execute-verify` | [B] maestro-execute → maestro-verify |
322
+ | `analyze-plan-execute` | [B] maestro-analyze -q → [B] maestro-plan --dir {scratch_dir} → [B] maestro-execute --dir {scratch_dir} |
323
+ | `quality-loop` | maestro-verify → quality-review → quality-test → quality-debug --from-uat → [B] maestro-plan --gaps → [B] maestro-execute |
324
+ | `quality-loop-partial` | [B] maestro-plan --gaps → [B] maestro-execute → maestro-verify |
325
+ | `review-fix` | [B] maestro-plan --gaps → [B] maestro-execute → quality-review |
326
+ | `milestone-close` | maestro-milestone-audit → maestro-milestone-complete |
327
+ | `milestone-release` | maestro-milestone-audit → maestro-milestone-release |
328
+ | `phase_transition` | maestro-milestone-audit → maestro-milestone-complete |
329
+ | `issue-full` | [B] maestro-analyze --gaps → [B] maestro-plan --gaps → [B] maestro-execute → quality-review → manage-issue close |
330
+ | `issue-quick` | [B] maestro-plan --gaps → [B] maestro-execute → manage-issue close |
331
+
332
+ **Chain Aliases** (taskType → chain):
333
+
334
+ | taskType | Chain |
335
+ |----------|-------|
336
+ | `spec_generate` | `spec-driven` |
337
+ | `brainstorm` | `brainstorm-driven` |
338
+ | `issue_execute` | `issue-full` |
339
+
340
+ ### Auto-Yes Flag Map
341
+
342
+ | Skill | Flag |
343
+ |-------|------|
344
+ | maestro-init, maestro-analyze, maestro-brainstorm, maestro-ui-design, maestro-roadmap | `-y` |
345
+ | maestro-plan, maestro-execute, maestro-milestone-complete | `-y` |
346
+ | quality-auto-test, quality-retrospective | `-y` |
347
+ | quality-test | `-y --auto-fix` |
348
+
349
+ ### Barrier Skills
350
+
351
+ `maestro-analyze`, `maestro-plan`, `maestro-brainstorm`, `maestro-roadmap`, `maestro-execute`
352
+
353
+ Non-barrier (groupable): `maestro-verify`, `quality-review`, `quality-test`, `quality-debug`, `quality-refactor`, `quality-sync`, `manage-*`
354
+
355
+ ### Worker Contract
356
+
357
+ **Instruction template:**
358
+ ```
359
+ 你是 CSV job 子 agent。
360
+ 先原样执行这一段技能调用:{skill_call}
361
+ 然后基于结果完成这一行任务说明:{topic}
362
+ 限制:不要修改 .workflow/.maestro/ 下的 status 文件
363
+ 最后必须调用 `report_agent_job_result`,返回 JSON:
364
+ {"status":"completed|failed","skill_call":"{skill_call}","summary":"一句话结果","artifacts":"产物路径","error":"失败原因"}
365
+ ```
366
+
367
+ **Result schema:** `{ status, skill_call, summary, artifacts, error }` — all string, all required
368
+
369
+ ### CSV Schema
370
+
371
+ **wave-{N}.csv:**
372
+ ```csv
373
+ id,skill_call,topic
374
+ "1","$maestro-analyze --gaps \"fix auth\" -y","Chain \"quality-fix\" step 1/4"
375
+ ```
376
+
377
+ **Session status.json:** see A_CREATE_SESSION for full schema
378
+
379
+ ### Error Codes
380
+
381
+ | Code | Severity | Condition | Recovery |
382
+ |------|----------|-----------|----------|
383
+ | E001 | error | Intent unclassifiable after clarification | Default to `feature` chain |
384
+ | E002 | error | Intent unresolvable after retry | List chains, abort |
385
+ | E003 | error | Wave timeout | Mark step failed, abort chain |
386
+ | E004 | error | Barrier artifact not found | Retry wave once, then abort |
387
+ | E005 | error | --continue: no session found | List sessions, prompt |
388
+ | W001 | warning | Barrier artifact partial | Continue with available context |
389
+
390
+ ### Success Criteria
391
+
392
+ - [ ] Intent classified and chain resolved
393
+ - [ ] Session dir initialized with status.json before first wave
394
+ - [ ] Every skill goes through spawn_agents_on_csv
395
+ - [ ] Barrier skills solo wave; non-barriers grouped parallel
396
+ - [ ] Each wave: CSV → spawn → results → state updated
397
+ - [ ] Barrier artifacts read before assembling next wave args
398
+ - [ ] Failed step → remaining skipped → abort reported
399
+ - [ ] --dry-run shows chain with [BARRIER], no execution
400
+ - [ ] --continue resumes from last incomplete wave
401
+
402
+ ### Report Format
403
+
404
+ ```
405
+ === COORDINATE COMPLETE ===
406
+ Session: {sessionId}
407
+ Chain: {chain}
408
+ Waves: {N} executed
409
+ Steps: {completed}/{total}
410
+
411
+ WAVE RESULTS:
412
+ [W1] $maestro-analyze --gaps → ✓ found 3 gaps
413
+ [W2] $maestro-plan --gaps → ✓ 12 tasks in 3 waves
414
+ ...
415
+
416
+ State: .workflow/.maestro/{sessionId}/status.json
417
+ Resume: $maestro --continue
418
+ ```
419
+
420
+ </appendix>