maestro-flow 0.3.7 → 0.3.9

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 (254) hide show
  1. package/.claude/commands/learn-decompose.md +3 -3
  2. package/.claude/commands/learn-follow.md +5 -5
  3. package/.claude/commands/learn-investigate.md +3 -3
  4. package/.claude/commands/learn-retro.md +303 -0
  5. package/.claude/commands/learn-second-opinion.md +3 -3
  6. package/.claude/commands/maestro-analyze.md +123 -99
  7. package/.claude/commands/maestro-brainstorm.md +2 -2
  8. package/.claude/commands/maestro-execute.md +137 -96
  9. package/.claude/commands/maestro-fork.md +111 -0
  10. package/.claude/commands/maestro-init.md +6 -6
  11. package/.claude/commands/maestro-learn.md +74 -298
  12. package/.claude/commands/maestro-merge.md +77 -0
  13. package/.claude/commands/maestro-milestone-audit.md +72 -60
  14. package/.claude/commands/maestro-milestone-complete.md +67 -59
  15. package/.claude/commands/maestro-milestone-release.md +6 -6
  16. package/.claude/commands/maestro-plan.md +151 -130
  17. package/.claude/commands/maestro-quick.md +4 -4
  18. package/.claude/commands/maestro-roadmap.md +5 -5
  19. package/.claude/commands/maestro-spec-generate.md +5 -5
  20. package/.claude/commands/maestro-ui-design.md +3 -3
  21. package/.claude/commands/maestro-verify.md +106 -87
  22. package/.claude/commands/maestro.md +10 -4
  23. package/.claude/commands/manage-codebase-rebuild.md +4 -4
  24. package/.claude/commands/manage-codebase-refresh.md +1 -1
  25. package/.claude/commands/manage-harvest.md +5 -5
  26. package/.claude/commands/manage-issue-discover.md +1 -1
  27. package/.claude/commands/manage-issue-execute.md +6 -6
  28. package/.claude/commands/manage-issue.md +6 -6
  29. package/.claude/commands/manage-learn.md +23 -17
  30. package/.claude/commands/manage-memory-capture.md +15 -17
  31. package/.claude/commands/manage-memory.md +3 -3
  32. package/.claude/commands/manage-status.md +24 -24
  33. package/.claude/commands/quality-business-test.md +5 -5
  34. package/.claude/commands/quality-debug.md +4 -4
  35. package/.claude/commands/quality-integration-test.md +4 -4
  36. package/.claude/commands/quality-refactor.md +3 -3
  37. package/.claude/commands/quality-retrospective.md +7 -7
  38. package/.claude/commands/quality-review.md +4 -4
  39. package/.claude/commands/quality-sync.md +3 -3
  40. package/.claude/commands/quality-test-gen.md +4 -4
  41. package/.claude/commands/quality-test.md +9 -9
  42. package/.claude/commands/spec-add.md +2 -2
  43. package/.claude/commands/spec-load.md +8 -3
  44. package/.claude/commands/spec-setup.md +5 -5
  45. package/.claude/commands/wiki-connect.md +3 -3
  46. package/.claude/commands/wiki-digest.md +30 -5
  47. package/.codex/skills/maestro-analyze/SKILL.md +52 -14
  48. package/.codex/skills/maestro-execute/SKILL.md +27 -26
  49. package/.codex/skills/maestro-milestone-audit/SKILL.md +103 -209
  50. package/.codex/skills/maestro-milestone-complete/SKILL.md +149 -158
  51. package/.codex/skills/maestro-plan/SKILL.md +47 -17
  52. package/.codex/skills/maestro-roadmap/SKILL.md +3 -2
  53. package/.codex/skills/team-coordinate/roles/coordinator/commands/monitor.md +2 -2
  54. package/.codex/skills/team-executor/roles/executor/commands/monitor.md +1 -1
  55. package/.codex/skills/team-lifecycle-v4/roles/coordinator/commands/monitor.md +2 -2
  56. package/.codex/skills/team-lifecycle-v4/specs/knowledge-transfer.md +2 -2
  57. package/.codex/skills/team-quality-assurance/roles/coordinator/commands/monitor.md +1 -1
  58. package/.codex/skills/team-review/roles/coordinator/commands/monitor.md +1 -1
  59. package/.codex/skills/team-tech-debt/roles/coordinator/commands/monitor.md +1 -1
  60. package/.codex/skills/team-testing/roles/coordinator/commands/monitor.md +1 -1
  61. package/README.md +115 -227
  62. package/README.zh-CN.md +169 -187
  63. package/bin/maestro-mcp.js +1 -1
  64. package/chains/_intent-map.json +21 -9
  65. package/chains/_router.json +30 -77
  66. package/chains/brainstorm-driven.json +17 -6
  67. package/chains/full-lifecycle.json +22 -23
  68. package/chains/milestone-close.json +20 -7
  69. package/chains/milestone-fork-merge.json +50 -0
  70. package/chains/roadmap-driven.json +17 -6
  71. package/chains/spec-driven.json +17 -6
  72. package/dashboard/dist/assets/{ArtifactsPage-A9yzYtpj.js → ArtifactsPage-DZNCi6tn.js} +12 -7
  73. package/dashboard/dist/assets/ChatInput-Bvr-FeEq.js +49 -0
  74. package/dashboard/dist/assets/ChatPage-D9zTkJZo.js +22 -0
  75. package/dashboard/dist/assets/CollabPage-B4NAHXS2.js +1 -0
  76. package/dashboard/dist/assets/ExecutionPanel-CFt4LJyq.js +1 -0
  77. package/dashboard/dist/assets/KanbanPage-C8USth6H.js +21 -0
  78. package/dashboard/dist/assets/{MarkdownRenderer-CCXHaut3.js → MarkdownRenderer-X4af_WNb.js} +1 -1
  79. package/dashboard/dist/assets/McpPage-BKfCVIyU.js +21 -0
  80. package/dashboard/dist/assets/OutputPanel-BlBQFJSW.js +1 -0
  81. package/dashboard/dist/assets/ProblemsPanel-De3DLvoI.js +1 -0
  82. package/dashboard/dist/assets/{RequirementBoardPage-CEOvppGn.js → RequirementBoardPage-Bf1trzqs.js} +2 -2
  83. package/dashboard/dist/assets/{RequirementPage-DpnbTEqY.js → RequirementPage-Bllxe2XI.js} +10 -5
  84. package/dashboard/dist/assets/{SpecsPage-CYqOfFkB.js → SpecsPage-9lwxKT27.js} +2 -2
  85. package/dashboard/dist/assets/{SupervisorPage-B2sZwkq8.js → SupervisorPage-SusdfHFq.js} +1 -1
  86. package/dashboard/dist/assets/{TeamsPage-CkZdCAVZ.js → TeamsPage-DsuM6OwC.js} +2 -2
  87. package/dashboard/dist/assets/TreeBrowser-Q12qobZs.js +6 -0
  88. package/dashboard/dist/assets/WorkflowPage-D_Fzdy3_.js +6 -0
  89. package/dashboard/dist/assets/{arrow-left-6fktHyjN.js → arrow-left-Bqtb2hle.js} +1 -1
  90. package/dashboard/dist/assets/{check-Cbxq2l1-.js → check-u6fGOwQO.js} +1 -1
  91. package/dashboard/dist/assets/{chevron-right-Yts3bi8p.js → chevron-right-Csu22t58.js} +1 -1
  92. package/dashboard/dist/assets/{circle-4Ci4Xolf.js → circle-CMrkbRNg.js} +1 -1
  93. package/dashboard/dist/assets/{circle-alert-B25g9BTL.js → circle-alert-c3tH1P4z.js} +1 -1
  94. package/dashboard/dist/assets/{circle-check-big-DzO2BlL7.js → circle-check-big-TDSeWstm.js} +1 -1
  95. package/dashboard/dist/assets/{circle-check-BA5_XqeV.js → circle-check-gYxxSYuH.js} +1 -1
  96. package/dashboard/dist/assets/{code-zxwuybO8.js → code-CFN2uX9V.js} +1 -1
  97. package/dashboard/dist/assets/{columns-3-DV4oeCfU.js → columns-3-38xIDlzy.js} +1 -1
  98. package/dashboard/dist/assets/{download-CXCyQw8M.js → download-DC7KkKyP.js} +1 -1
  99. package/dashboard/dist/assets/{folder-Bvjj8Vn9.js → folder-CWq_lAnf.js} +1 -1
  100. package/dashboard/dist/assets/index-DWG-WrzT.js +231 -0
  101. package/dashboard/dist/assets/{index-BvScJmJM.js → index-Do71weNR.js} +1 -1
  102. package/dashboard/dist/assets/index-GUNJodSR.css +1 -0
  103. package/dashboard/dist/assets/{list-Dj4i9N75.js → list-CgIP_2A-.js} +1 -1
  104. package/dashboard/dist/assets/{minus-DwlFabsT.js → minus-DYoN5UGk.js} +1 -1
  105. package/dashboard/dist/assets/{pen-line-D7UzECt6.js → pen-line-Bh_WKYHm.js} +1 -1
  106. package/dashboard/dist/assets/{proxy-B9XRqHD9.js → proxy-BKxDAKTj.js} +1 -1
  107. package/dashboard/dist/assets/{search-BQbBTIYl.js → search-SieXnOgr.js} +1 -1
  108. package/dashboard/dist/assets/{shallow-Clb1Lyd_.js → shallow-Bme1JY57.js} +1 -1
  109. package/dashboard/dist/assets/{table-BqxCXid2.js → table-llyEtj-7.js} +1 -1
  110. package/dashboard/dist/assets/terminal-BB3Xfuv5.js +6 -0
  111. package/dashboard/dist/assets/{trash-2-6rN9B-EQ.js → trash-2-C8f4vFFM.js} +1 -1
  112. package/dashboard/dist/assets/{zap-DxUhG-gk.js → zap-4uwlzVm0.js} +1 -1
  113. package/dashboard/dist/index.html +2 -2
  114. package/dashboard/dist-server/dashboard/src/server/agents/agent-sdk-adapter.d.ts +1 -1
  115. package/dashboard/dist-server/dashboard/src/server/agents/agent-sdk-adapter.js +5 -4
  116. package/dashboard/dist-server/dashboard/src/server/agents/agent-sdk-adapter.js.map +1 -1
  117. package/dashboard/dist-server/dashboard/src/server/agents/claude-code-adapter.js +8 -4
  118. package/dashboard/dist-server/dashboard/src/server/agents/claude-code-adapter.js.map +1 -1
  119. package/dashboard/dist-server/dashboard/src/server/agents/entry-normalizer.d.ts +1 -0
  120. package/dashboard/dist-server/dashboard/src/server/agents/entry-normalizer.js +2 -1
  121. package/dashboard/dist-server/dashboard/src/server/agents/entry-normalizer.js.map +1 -1
  122. package/dashboard/dist-server/dashboard/src/server/agents/stream-json-adapter.js +20 -10
  123. package/dashboard/dist-server/dashboard/src/server/agents/stream-json-adapter.js.map +1 -1
  124. package/dashboard/dist-server/dashboard/src/server/agents/tools/issue-mcp-server.d.ts +1 -1
  125. package/dashboard/dist-server/dashboard/src/server/agents/tools/issue-mcp-server.js +3 -4
  126. package/dashboard/dist-server/dashboard/src/server/agents/tools/issue-mcp-server.js.map +1 -1
  127. package/dashboard/dist-server/dashboard/src/server/agents/tools/issue-mcp-server.test.js +4 -4
  128. package/dashboard/dist-server/dashboard/src/server/agents/tools/issue-mcp-server.test.js.map +1 -1
  129. package/dashboard/dist-server/dashboard/src/server/commander/commander-agent.js +4 -3
  130. package/dashboard/dist-server/dashboard/src/server/commander/commander-agent.js.map +1 -1
  131. package/dashboard/dist-server/dashboard/src/server/commander/commander-agent.test.js +20 -7
  132. package/dashboard/dist-server/dashboard/src/server/commander/commander-agent.test.js.map +1 -1
  133. package/dashboard/dist-server/dashboard/src/server/execution/wave-executor.d.ts +1 -1
  134. package/dashboard/dist-server/dashboard/src/server/execution/wave-executor.js +4 -4
  135. package/dashboard/dist-server/dashboard/src/server/execution/wave-executor.js.map +1 -1
  136. package/dashboard/dist-server/dashboard/src/server/index.js +2 -1
  137. package/dashboard/dist-server/dashboard/src/server/index.js.map +1 -1
  138. package/dashboard/dist-server/dashboard/src/server/routes/git.d.ts +2 -0
  139. package/dashboard/dist-server/dashboard/src/server/routes/git.js +79 -0
  140. package/dashboard/dist-server/dashboard/src/server/routes/git.js.map +1 -0
  141. package/dashboard/dist-server/dashboard/src/server/routes/index.js +3 -0
  142. package/dashboard/dist-server/dashboard/src/server/routes/index.js.map +1 -1
  143. package/dashboard/dist-server/dashboard/src/server/routes/issues.js +14 -14
  144. package/dashboard/dist-server/dashboard/src/server/routes/issues.js.map +1 -1
  145. package/dashboard/dist-server/dashboard/src/server/routes/linear.js +7 -5
  146. package/dashboard/dist-server/dashboard/src/server/routes/linear.js.map +1 -1
  147. package/dashboard/dist-server/dashboard/src/server/routes/workspace.js +43 -0
  148. package/dashboard/dist-server/dashboard/src/server/routes/workspace.js.map +1 -1
  149. package/dashboard/dist-server/dashboard/src/server/state/state-manager.js +186 -25
  150. package/dashboard/dist-server/dashboard/src/server/state/state-manager.js.map +1 -1
  151. package/dashboard/dist-server/dashboard/src/server/utils/issue-store.d.ts +6 -0
  152. package/dashboard/dist-server/dashboard/src/server/utils/issue-store.js +24 -2
  153. package/dashboard/dist-server/dashboard/src/server/utils/issue-store.js.map +1 -1
  154. package/dashboard/dist-server/dashboard/src/server/ws/handlers/execution-handler.js +4 -7
  155. package/dashboard/dist-server/dashboard/src/server/ws/handlers/execution-handler.js.map +1 -1
  156. package/dashboard/dist-server/dashboard/src/shared/constants.js +2 -1
  157. package/dashboard/dist-server/dashboard/src/shared/constants.js.map +1 -1
  158. package/dashboard/dist-server/dashboard/src/shared/constants.test.js +5 -5
  159. package/dashboard/dist-server/dashboard/src/shared/constants.test.js.map +1 -1
  160. package/dashboard/dist-server/dashboard/src/shared/issue-types.test.js +4 -4
  161. package/dashboard/dist-server/dashboard/src/shared/issue-types.test.js.map +1 -1
  162. package/dashboard/dist-server/src/commands/delegate.js +7 -1
  163. package/dashboard/dist-server/src/commands/delegate.js.map +1 -1
  164. package/dashboard/package.json +59 -59
  165. package/dist/src/cli.js +3 -1
  166. package/dist/src/cli.js.map +1 -1
  167. package/dist/src/commands/{team.d.ts → collab.d.ts} +2 -2
  168. package/dist/src/commands/collab.d.ts.map +1 -0
  169. package/dist/src/commands/{team.js → collab.js} +391 -24
  170. package/dist/src/commands/collab.js.map +1 -0
  171. package/dist/src/commands/delegate.d.ts.map +1 -1
  172. package/dist/src/commands/delegate.js +7 -1
  173. package/dist/src/commands/delegate.js.map +1 -1
  174. package/dist/src/commands/msg.d.ts.map +1 -1
  175. package/dist/src/commands/msg.js +4 -3
  176. package/dist/src/commands/msg.js.map +1 -1
  177. package/dist/src/hooks/team-monitor.d.ts.map +1 -1
  178. package/dist/src/hooks/team-monitor.js +16 -0
  179. package/dist/src/hooks/team-monitor.js.map +1 -1
  180. package/dist/src/tools/collab-adapter.d.ts +85 -0
  181. package/dist/src/tools/collab-adapter.d.ts.map +1 -0
  182. package/dist/src/tools/collab-adapter.js +320 -0
  183. package/dist/src/tools/collab-adapter.js.map +1 -0
  184. package/dist/src/tools/namespace-guard.d.ts +2 -0
  185. package/dist/src/tools/namespace-guard.d.ts.map +1 -1
  186. package/dist/src/tools/namespace-guard.js +12 -0
  187. package/dist/src/tools/namespace-guard.js.map +1 -1
  188. package/dist/src/tools/phase-gate-evaluator.d.ts +45 -0
  189. package/dist/src/tools/phase-gate-evaluator.d.ts.map +1 -0
  190. package/dist/src/tools/phase-gate-evaluator.js +42 -0
  191. package/dist/src/tools/phase-gate-evaluator.js.map +1 -0
  192. package/dist/src/tools/team-members.d.ts +18 -0
  193. package/dist/src/tools/team-members.d.ts.map +1 -1
  194. package/dist/src/tools/team-members.js +50 -0
  195. package/dist/src/tools/team-members.js.map +1 -1
  196. package/dist/src/tools/team-tasks.d.ts +120 -0
  197. package/dist/src/tools/team-tasks.d.ts.map +1 -0
  198. package/dist/src/tools/team-tasks.js +365 -0
  199. package/dist/src/tools/team-tasks.js.map +1 -0
  200. package/dist/src/tools/transition-recorder.d.ts +3 -0
  201. package/dist/src/tools/transition-recorder.d.ts.map +1 -1
  202. package/dist/src/tools/transition-recorder.js +52 -1
  203. package/dist/src/tools/transition-recorder.js.map +1 -1
  204. package/dist/src/utils/get-version.d.ts.map +1 -1
  205. package/dist/src/utils/get-version.js +15 -4
  206. package/dist/src/utils/get-version.js.map +1 -1
  207. package/package.json +1 -1
  208. package/templates/config.json +7 -0
  209. package/templates/worktree-scope.json +10 -0
  210. package/templates/worktrees.json +27 -0
  211. package/workflows/analyze.md +86 -36
  212. package/workflows/brainstorm.md +17 -37
  213. package/workflows/delegate-usage.md +39 -41
  214. package/workflows/execute.md +247 -61
  215. package/workflows/fork.md +309 -0
  216. package/workflows/init.md +11 -2
  217. package/workflows/issue.md +66 -7
  218. package/workflows/maestro-coordinate.codex.md +1 -1
  219. package/workflows/maestro-coordinate.md +24 -17
  220. package/workflows/maestro.md +54 -37
  221. package/workflows/memory.md +2 -1
  222. package/workflows/merge.md +285 -0
  223. package/workflows/milestone-audit.md +89 -70
  224. package/workflows/milestone-complete.md +89 -156
  225. package/workflows/plan.md +131 -19
  226. package/workflows/retrospective.md +5 -5
  227. package/workflows/roadmap.md +12 -4
  228. package/workflows/spec-generate.md +9 -0
  229. package/workflows/status.md +76 -27
  230. package/workflows/ui-design.md +14 -12
  231. package/workflows/verify.md +44 -8
  232. package/.claude/commands/learn-retro-decision.md +0 -198
  233. package/.claude/commands/learn-retro-git.md +0 -160
  234. package/.claude/commands/maestro-phase-add.md +0 -63
  235. package/.claude/commands/maestro-phase-transition.md +0 -75
  236. package/.codex/skills/maestro-phase-add/SKILL.md +0 -154
  237. package/.codex/skills/maestro-phase-transition/SKILL.md +0 -173
  238. package/chains/singles/phase-add.json +0 -31
  239. package/chains/singles/phase-transition.json +0 -23
  240. package/dashboard/dist/assets/ChatInput-PuCvZZ3y.js +0 -67
  241. package/dashboard/dist/assets/ChatPage-v19GURYH.js +0 -8
  242. package/dashboard/dist/assets/CollabPage-I5k_mCbG.js +0 -1
  243. package/dashboard/dist/assets/KanbanPage-PDDBv5-9.js +0 -16
  244. package/dashboard/dist/assets/McpPage-CiqXpCHg.js +0 -16
  245. package/dashboard/dist/assets/TreeBrowser-0VIMWclo.js +0 -11
  246. package/dashboard/dist/assets/WorkflowPage-Csm23wUS.js +0 -6
  247. package/dashboard/dist/assets/git-branch-DL8p9kVC.js +0 -6
  248. package/dashboard/dist/assets/index-11DuhKhc.js +0 -231
  249. package/dashboard/dist/assets/index-D2Mtyw7I.css +0 -1
  250. package/dashboard/dist/assets/wrench-BScEJFqC.js +0 -11
  251. package/dist/src/commands/team.d.ts.map +0 -1
  252. package/dist/src/commands/team.js.map +0 -1
  253. package/workflows/phase-add.md +0 -252
  254. package/workflows/phase-transition.md +0 -399
@@ -41,29 +41,60 @@ Quick mode (-q):
41
41
  ## Arguments
42
42
 
43
43
  ```
44
- $ARGUMENTS: "<phase|topic> [-y] [-c] [-q]"
44
+ $ARGUMENTS: "[phase|topic] [-y] [-c] [-q]"
45
45
 
46
- <phase> -- Phase number (phase mode, operates within phase directory)
47
- <topic> -- Topic text (scratch mode, creates scratch directory)
46
+ (no args) -- Milestone-wide analysis (requires init + roadmap)
47
+ <phase> -- Phase number (phase-scoped, requires init + roadmap)
48
+ <topic> -- Topic text (adhoc if milestone exists, standalone if not)
48
49
  -y / --yes -- Auto mode, skip interactive scoping, auto-deepen
49
50
  -c / --continue -- Resume from existing session
50
51
  -q / --quick -- Quick mode, skip exploration + scoring, go straight to decision extraction
51
52
  ```
52
53
 
53
- ## Dual-Mode Routing
54
-
55
- ```
56
- IF $ARGUMENTS matches /^\d+$/
57
- Phase mode
58
- Resolve phase dir from state.json + roadmap
59
- Set OUTPUT_DIR = .workflow/phases/{NN}-{slug}/
60
- Update index.json: status → "exploring"
61
-
62
- ELSE
63
- Scratch mode
64
- Slugify topic (lowercase, hyphens, max 40 chars)
65
- Set OUTPUT_DIR = .workflow/scratch/analyze-{slug}-{date}/
66
- Create directory + index.json from scratch-index template (type="analyze")
54
+ ## Scope Routing
55
+
56
+ ```
57
+ // Worktree scope check
58
+ IF file_exists(".workflow/worktree-scope.json"):
59
+ scope = read(".workflow/worktree-scope.json")
60
+ IF $ARGUMENTS matches /^\d+$/ AND parseInt($ARGUMENTS) NOT IN scope.owned_phases:
61
+ ERROR "Phase {$ARGUMENTS} not owned by this worktree. Owned: {scope.owned_phases}"
62
+ EXIT
63
+
64
+ // Auto-bootstrap state.json if missing
65
+ IF NOT file_exists(".workflow/state.json"):
66
+ mkdir -p .workflow/scratch/
67
+ Write minimal state.json: { project: null, status: "active", current_milestone: null,
68
+ current_task_id: null, milestones: [], artifacts: [], last_updated: now() }
69
+
70
+ // Scope determination
71
+ IF $ARGUMENTS is empty:
72
+ IF state.json.current_milestone is non-null AND roadmap.md exists:
73
+ → scope = "milestone"
74
+ → milestone_slug = slugify(current_milestone name)
75
+ → Set OUTPUT_DIR = .workflow/scratch/analyze-{milestone_slug}-{date}/
76
+ ELSE:
77
+ → ERROR E001 "No args and no roadmap — provide topic text or create roadmap first"
78
+
79
+ ELSE IF $ARGUMENTS matches /^\d+$/:
80
+ IF state.json.current_milestone is non-null AND roadmap.md exists:
81
+ → scope = "phase"
82
+ → phase_num = parsed number
83
+ → phase_slug = resolve from roadmap.md
84
+ → Set OUTPUT_DIR = .workflow/scratch/analyze-{phase_slug}-{date}/
85
+ ELSE:
86
+ → ERROR "Phase number requires init + roadmap"
87
+
88
+ ELSE (text argument):
89
+ → topic_slug = slugify(text, max 40 chars)
90
+ IF state.json.current_milestone is non-null:
91
+ → scope = "adhoc"
92
+ ELSE:
93
+ → scope = "standalone"
94
+ → Set OUTPUT_DIR = .workflow/scratch/analyze-{topic_slug}-{date}/
95
+
96
+ // Create output directory
97
+ mkdir -p {OUTPUT_DIR}
67
98
  ```
68
99
 
69
100
  ## Output Structure
@@ -89,31 +120,23 @@ Parse $ARGUMENTS to determine mode and flags:
89
120
  - `-c` present: locate existing session folder (discussion.md exists), resume from last round
90
121
  - `-y` present: set AUTO_MODE=true
91
122
  - `-q` present: set QUICK_MODE=true (skip Steps 2-7, jump to Step 8: Decision Extraction)
92
- - Number (e.g., "3") = phase mode: resolve `.workflow/phases/{NN}-*/`, verify phase exists in roadmap
93
- - Text (e.g., "microservices vs monolith") = scratch mode: slugify topic, prepare scratch directory path
94
- - Missing/empty = error E001
123
+ - Number (e.g., "3") = phase scope: resolve phase slug from roadmap, output to scratch/analyze-{phase-slug}-{date}/
124
+ - Text (e.g., "microservices vs monolith") = adhoc/standalone scope: output to scratch/analyze-{slug}-{date}/
125
+ - Missing/empty = milestone scope (if roadmap exists) or error E001
95
126
 
96
127
  **Session initialization:**
97
128
  - Session ID: `ANL-{slug}-{YYYY-MM-DD}`
98
- - Phase mode output: phase directory
99
- - Scratch mode output: `.workflow/scratch/analyze-{slug}-{date}/`
129
+ - Output: `OUTPUT_DIR` (always under `.workflow/scratch/`)
100
130
 
101
- **Load prior context** (phase mode):
131
+ **Load prior context** (milestone/phase scope):
102
132
  1. Read `.workflow/project.md` — project vision, constraints, Validated requirements (already shipped), Active requirements (current scope)
103
133
  2. Read `.workflow/roadmap.md` — phase structure and dependencies
104
- 3. Read index.json in phase dir goal, success_criteria
105
- 4. Read `.brainstorming/guidance-specification.md` in phase dir (if exists) detailed requirements, constraints, RFC 2119 decisions from brainstorm. Skip areas marked as MUST/MUST NOT (already locked).
106
- 5. Read `.brainstorming/feature-index.json` in phase dir (if exists) feature decomposition
107
- 6. Read `brainstorm.md` in phase dir (if exists, legacy fallback, skip if guidance-specification.md loaded)
108
- 7. Read `analysis.md` in phase dir (if exists, for continuation)
109
- 8. Read `conclusions.json` in phase dir (if exists, for continuation)
110
- 9. Read prior phases' `context.md` files — skip already-decided areas
111
- 10. Read existing `context.md` in this phase (if exists, for continuation)
112
- 11. Load project specs: `specs_content = maestro spec load --category planning`
113
- Ensures analysis decisions don't conflict with existing architecture constraints.
114
- 12. Read `.workflow/state.json` → `accumulated_context` (key_decisions, deferred items, blockers)
115
-
116
- **Load prior context** (scratch mode):
134
+ 3. Read `.workflow/state.json` `current_milestone`, `artifacts[]`, `accumulated_context` (key_decisions, deferred items, blockers)
135
+ 4. Find prior analyze artifacts from `state.json.artifacts[]` where type=analyze and same milestone load their `context.md` to skip already-decided areas
136
+ 5. Find brainstorm artifacts from `state.json.artifacts[]` where type=brainstorm and same milestone load `guidance-specification.md` if exists
137
+ 6. Load project specs: `specs_content = maestro spec load --category planning`
138
+
139
+ **Load prior context** (adhoc/standalone scope):
117
140
  1. Read `.workflow/project.md` (if exists) — project vision, Validated requirements, Active requirements, Key Decisions
118
141
  2. Read `.workflow/state.json` (if exists) → `accumulated_context` (key_decisions, deferred, blockers)
119
142
  3. Load project specs: `specs_content = maestro spec load --category planning`
@@ -571,6 +594,33 @@ IF deferred_items.length > 0:
571
594
  Print: "Created {deferred_items.length} deferred issues for tracking"
572
595
  ```
573
596
 
597
+ ### Step 8.8: Register Artifact
598
+
599
+ ```
600
+ // Register in state.json artifact registry
601
+ Read .workflow/state.json
602
+ next_id = max(artifacts.filter(a => a.type == "analyze").map(a => parseInt(a.id.replace("ANL-","")))) + 1
603
+ // If no analyze artifacts exist: next_id = 1
604
+
605
+ artifact = {
606
+ id: "ANL-{next_id padded to 3}",
607
+ type: "analyze",
608
+ milestone: state.json.current_milestone, // null if standalone
609
+ phase: phase_num, // null if milestone/adhoc/standalone
610
+ scope: scope, // "milestone"|"phase"|"adhoc"|"standalone"
611
+ path: OUTPUT_DIR relative to .workflow/, // e.g. "scratch/analyze-auth-2026-04-20"
612
+ status: "completed",
613
+ depends_on: null,
614
+ harvested: false,
615
+ created_at: session_start_time,
616
+ completed_at: now()
617
+ }
618
+
619
+ state.json.artifacts.push(artifact)
620
+ state.json.last_updated = now()
621
+ Write state.json (atomic: write tmp + rename)
622
+ ```
623
+
574
624
  ### Step 9: Report & Next Step
575
625
 
576
626
  Display summary:
@@ -47,8 +47,8 @@ Phase 3: Single Role Analysis → Detection → Context → Agent → Validation
47
47
  ## Input
48
48
 
49
49
  - `$ARGUMENTS`: topic text (auto mode) or role name (single role mode)
50
- - Phase mode: operates within `.workflow/phases/{NN}-{slug}/`
51
- - Scratch mode: creates `.workflow/scratch/brainstorm-{slug}-{date}/`
50
+ - All output goes to `.workflow/scratch/brainstorm-{slug}-{date}/`
51
+ - Registers artifact (type=brainstorm) in state.json on completion
52
52
 
53
53
  ### Parameters
54
54
 
@@ -80,32 +80,21 @@ Phase 3: Single Role Analysis → Detection → Context → Agent → Validation
80
80
 
81
81
  ### Directory Structure
82
82
 
83
- **Phase mode**:
84
- ```
85
- .workflow/phases/{NN}-{slug}/
86
- ├── brainstorm.md # Legacy simple output (if no session)
87
- ├── index.json # Updated timestamps
88
- └── .brainstorming/ # Full brainstorm session
89
- ├── guidance-specification.md # Phase 2 output
90
- ├── feature-index.json # Phase 4 output
91
- ├── synthesis-changelog.md # Phase 4 audit trail
92
- ├── feature-specs/ # Phase 4 feature specs
93
- │ ├── F-001-{slug}.md
94
- │ └── F-00N-{slug}.md
95
- ├── {role}/ # Phase 3 role analyses (immutable)
96
- │ ├── {role}-context.md
97
- │ ├── analysis.md
98
- │ ├── analysis-cross-cutting.md
99
- │ └── analysis-F-{id}-{slug}.md
100
- └── synthesis-specification.md # Non-feature mode fallback
101
- ```
102
-
103
- **Scratch mode**:
83
+ All brainstorm output goes to scratch:
104
84
  ```
105
85
  .workflow/scratch/brainstorm-{slug}-{date}/
106
- ├── index.json # scratch-index template
107
- └── .brainstorming/ # Same structure as phase mode
108
- └── ...
86
+ ├── guidance-specification.md # Phase 2 output
87
+ ├── feature-index.json # Phase 4 output
88
+ ├── synthesis-changelog.md # Phase 4 audit trail
89
+ ├── feature-specs/ # Phase 4 feature specs
90
+ │ ├── F-001-{slug}.md
91
+ │ └── F-00N-{slug}.md
92
+ ├── {role}/ # Phase 3 role analyses (immutable)
93
+ │ ├── {role}-context.md
94
+ │ ├── analysis.md
95
+ │ ├── analysis-cross-cutting.md
96
+ │ └── analysis-F-{id}-{slug}.md
97
+ └── synthesis-specification.md # Non-feature mode fallback
109
98
  ```
110
99
 
111
100
  ---
@@ -138,17 +127,8 @@ Parse $ARGUMENTS to determine execution mode:
138
127
 
139
128
  **Output Directory Resolution**:
140
129
  - Phase mode (number): `.workflow/phases/{NN}-{slug}/.brainstorming/`
141
- - Scratch mode (text): `.workflow/scratch/brainstorm-{slug}-{date}/.brainstorming/`
142
- - Existing session: use session's `.brainstorming/` directory
143
-
144
- **Archive previous brainstorming session** (Phase mode only, skip if `--session` or `--update`):
145
- ```
146
- PARENT_DIR = parent of output directory (e.g., .workflow/phases/{NN}-{slug}/)
147
- IF directory exists "${PARENT_DIR}/.brainstorming" AND NOT --session AND NOT --update:
148
- mkdir -p "${PARENT_DIR}/.history"
149
- TIMESTAMP = current timestamp formatted as "YYYY-MM-DDTHH-mm-ss"
150
- mv "${PARENT_DIR}/.brainstorming" "${PARENT_DIR}/.history/.brainstorming-${TIMESTAMP}"
151
- ```
130
+ - All output: `.workflow/scratch/brainstorm-{slug}-{date}/`
131
+ - Existing session: use existing session directory
152
132
 
153
133
  ---
154
134
 
@@ -1,7 +1,7 @@
1
1
  # Delegate Execution Specification
2
2
 
3
3
  <purpose>
4
- Unified reference for `maestro delegate` — async task delegation via detached worker processes, with broker-managed lifecycle, message injection, and MCP notifications. Superset of `maestro cli` with async execution, cancellation, and message chaining.
4
+ Unified reference for `maestro delegate` — synchronous task delegation with broker-managed lifecycle, message injection, and MCP notifications. Superset of `maestro cli` with cancellation and message chaining.
5
5
  </purpose>
6
6
 
7
7
  **References**: `~/.maestro/cli-tools.json` (tool config), `~/.maestro/templates/cli/` (protocol + prompt templates)
@@ -30,9 +30,7 @@ maestro delegate "<PROMPT>" [options]
30
30
  | `--id <id>` | Execution ID | Auto: `{prefix}-{HHmmss}-{rand4}` |
31
31
  | `--resume [id]` | Resume previous session (last if no id) | — |
32
32
  | `--includeDirs <dirs>` | Additional directories (comma-separated) | — |
33
- | `--session <id>` | MCP session ID for completion notifications | Auto-detected |
34
33
  | `--backend <type>` | Adapter backend: `direct` or `terminal` (tmux/wezterm) | `direct` |
35
- | `--async` | Run in background and return immediately | foreground |
36
34
 
37
35
  ### Mode Definition (Authoritative)
38
36
 
@@ -154,7 +152,7 @@ MODE: analysis
154
152
  CONTEXT: @src/auth/**/* @src/middleware/auth.ts | Memory: Using bcrypt + JWT
155
153
  EXPECTED: Severity matrix, file:line references, remediation snippets, priority ranking
156
154
  CONSTRAINTS: Focus on authentication | Ignore test files
157
- " --to gemini --mode analysis --rule analysis-assess-security-risks --cd "src/auth" --async
155
+ " --to gemini --mode analysis --rule analysis-assess-security-risks --cd "src/auth"
158
156
  ```
159
157
  </context>
160
158
 
@@ -164,6 +162,24 @@ CONSTRAINTS: Focus on authentication | Ignore test files
164
162
 
165
163
  <execution>
166
164
 
165
+ ### Calling Convention
166
+
167
+ `maestro delegate` runs synchronously — it blocks until the delegate completes. To avoid blocking the conversation, **always** use `run_in_background: true` on the Bash tool call, then stop output immediately and wait for the background completion callback.
168
+
169
+ ```
170
+ Bash({
171
+ command: "maestro delegate \"<PROMPT>\" --to gemini --mode analysis",
172
+ run_in_background: true
173
+ })
174
+ // STOP — do not output anything further
175
+ // Wait for Bash background completion callback to receive results
176
+ ```
177
+
178
+ **Rules:**
179
+ - **Never** use foreground Bash for delegate calls — it blocks the conversation for the entire execution duration
180
+ - After the `Bash(run_in_background: true)` call, **stop immediately** — no follow-up text, no polling, no `delegate status` checks
181
+ - When the background callback arrives, retrieve output with `maestro delegate output <id>`
182
+
167
183
  ### Execution ID
168
184
 
169
185
  ID prefix: gemini→`gem`, qwen→`qwn`, codex→`cdx`, claude→`cld`, opencode→`opc`
@@ -173,7 +189,7 @@ Format: `{prefix}-{HHmmss}-{rand4}` (e.g. `gem-143022-a7f2`)
173
189
  Output to stderr: `[MAESTRO_EXEC_ID=<id>]`
174
190
 
175
191
  ```bash
176
- maestro delegate "analyze code" --to gemini --async # auto-ID: gem-143022-a7f2
192
+ maestro delegate "analyze code" --to gemini # auto-ID: gem-143022-a7f2
177
193
  maestro delegate "fix bug" --to gemini --mode write --id my-task-1 # custom ID
178
194
  ```
179
195
 
@@ -246,14 +262,6 @@ queued → running → completed
246
262
  | `inject` | Routes to running worker stdin; non-interactive adapters auto cancel + relaunch | Supplementary context, course correction |
247
263
  | `after_complete` | Queues message; relaunches delegate with queued message on completion | Chained tasks, post-processing |
248
264
 
249
- ### Notification Channels
250
-
251
- Delegate completion notifies the caller through dual channels:
252
-
253
- 1. **MCP channel** (primary) — push notification with structured meta (exec_id, event_type, status)
254
- 2. **Hook fallback** — JSONL file read by `delegate-monitor` PostToolUse hook
255
-
256
- Throttling: `status_update` at 10s, `snapshot` at 15s.
257
265
  </execution>
258
266
 
259
267
  ---
@@ -275,11 +283,10 @@ Proactively invoke `maestro delegate` when these conditions are met — no user
275
283
  ### Principles
276
284
 
277
285
  - Default `--mode analysis` (safe, read-only)
278
- - Use `--async` for non-blocking execution; await MCP notification for result
286
+ - Always `Bash(run_in_background: true)` stop immediately, wait for callback
279
287
  - Tool fallback: `gemini` → `qwen` → `codex`
280
288
  - Rule suggestions are guidelines — choose the best fit
281
289
  - Use `inject` for supplementary context mid-execution; `after_complete` for chained multi-step tasks
282
- - Check `delegate status` for snapshot preview instead of polling output
283
290
  </execution>
284
291
 
285
292
  ---
@@ -288,20 +295,15 @@ Proactively invoke `maestro delegate` when these conditions are met — no user
288
295
 
289
296
  <execution>
290
297
 
291
- ### Launch → Monitor → Retrieve
292
-
293
- ```bash
294
- maestro delegate "analyze auth module" --to gemini --async
295
- # → [MAESTRO_EXEC_ID=gem-143022-a7f2]
298
+ ### Basic Usage
296
299
 
297
- maestro delegate status gem-143022-a7f2
298
- # → status: running, Preview: "Found 3 potential injection points..."
299
-
300
- # Await MCP channel notification...
301
- # → [DELEGATE DONE] gem-143022-a7f2 gemini/analysis completed
302
-
303
- maestro delegate output gem-143022-a7f2
304
- # → full analysis result
300
+ ```
301
+ Bash({
302
+ command: 'maestro delegate "analyze auth module" --to gemini',
303
+ run_in_background: true
304
+ })
305
+ // → STOP, wait for callback
306
+ // → on callback: maestro delegate output <id>
305
307
  ```
306
308
 
307
309
  ### Inject Supplementary Context
@@ -311,20 +313,16 @@ maestro delegate message gem-143022-a7f2 "Also check src/utils/sanitize.ts"
311
313
  # → accepted: true, delivery: inject
312
314
  ```
313
315
 
314
- ### Chain: Analyze → Auto-Fix
316
+ ### Chain: Analyze → Fix
315
317
 
316
- ```bash
317
- maestro delegate "find SQL injection vulnerabilities" --to gemini --async
318
- maestro delegate message gem-143022-a7f2 "Fix all critical vulnerabilities" --delivery after_complete
319
- # → queued, auto-relaunches after analysis completes
320
318
  ```
321
-
322
- ### Cancel Redirect
323
-
324
- ```bash
325
- maestro delegate cancel gem-143022-a7f2
326
- #cancellation requested
327
-
328
- maestro delegate "analyze only the payment module" --to gemini --async
319
+ Bash({
320
+ command: 'maestro delegate "find SQL injection vulnerabilities" --to gemini',
321
+ run_in_background: true
322
+ })
323
+ // STOP, wait for callback
324
+ //on callback: chain next step
325
+ maestro delegate message gem-143022-a7f2 "Fix all critical vulnerabilities" --delivery after_complete
326
+ // queued, relaunches after analysis completes
329
327
  ```
330
328
  </execution>