maestro-flow 0.3.15 → 0.3.17

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 (390) hide show
  1. package/.claude/agents/workflow-planner.md +24 -8
  2. package/.claude/commands/maestro-amend.md +300 -0
  3. package/.claude/commands/maestro-analyze.md +1 -49
  4. package/.claude/commands/maestro-execute.md +2 -56
  5. package/.claude/commands/maestro-fork.md +3 -50
  6. package/.claude/commands/maestro-merge.md +2 -26
  7. package/.claude/commands/maestro-milestone-audit.md +1 -5
  8. package/.claude/commands/maestro-milestone-complete.md +1 -7
  9. package/.claude/commands/maestro-plan.md +6 -127
  10. package/.claude/commands/maestro-roadmap.md +3 -101
  11. package/.claude/commands/maestro-spec-generate.md +1 -25
  12. package/.claude/commands/maestro-ui-design.md +14 -73
  13. package/.claude/commands/maestro-verify.md +1 -32
  14. package/.claude/commands/maestro.md +13 -30
  15. package/.claude/commands/manage-harvest.md +7 -44
  16. package/.claude/commands/manage-knowhow-capture.md +193 -0
  17. package/.claude/commands/{manage-memory.md → manage-knowhow.md} +77 -88
  18. package/.claude/commands/manage-learn.md +3 -28
  19. package/.claude/commands/manage-status.md +1 -20
  20. package/.claude/commands/manage-wiki.md +1 -1
  21. package/.claude/commands/quality-business-test.md +1 -1
  22. package/.claude/commands/quality-debug.md +3 -18
  23. package/.claude/commands/quality-integration-test.md +3 -23
  24. package/.claude/commands/quality-retrospective.md +1 -28
  25. package/.claude/commands/quality-review.md +3 -52
  26. package/.claude/commands/quality-test-gen.md +1 -10
  27. package/.claude/commands/quality-test.md +3 -25
  28. package/.claude/commands/spec-add.md +1 -21
  29. package/.claude/commands/spec-load.md +1 -16
  30. package/.claude/commands/wiki-connect.md +2 -112
  31. package/.claude/commands/wiki-digest.md +2 -141
  32. package/.codex/skills/learn-decompose/SKILL.md +2 -8
  33. package/.codex/skills/maestro/SKILL.md +60 -146
  34. package/.codex/skills/maestro-analyze/SKILL.md +52 -150
  35. package/.codex/skills/maestro-brainstorm/SKILL.md +36 -91
  36. package/.codex/skills/maestro-composer/SKILL.md +4 -76
  37. package/.codex/skills/maestro-execute/SKILL.md +46 -177
  38. package/.codex/skills/maestro-init/SKILL.md +7 -51
  39. package/.codex/skills/maestro-link-coordinate/SKILL.md +56 -229
  40. package/.codex/skills/maestro-milestone-audit/SKILL.md +7 -36
  41. package/.codex/skills/maestro-milestone-complete/SKILL.md +11 -93
  42. package/.codex/skills/maestro-overlay/SKILL.md +23 -92
  43. package/.codex/skills/maestro-plan/SKILL.md +70 -166
  44. package/.codex/skills/maestro-player/SKILL.md +24 -149
  45. package/.codex/skills/maestro-quick/SKILL.md +5 -48
  46. package/.codex/skills/maestro-roadmap/SKILL.md +21 -66
  47. package/.codex/skills/maestro-spec-generate/SKILL.md +20 -56
  48. package/.codex/skills/maestro-ui-design/SKILL.md +6 -53
  49. package/.codex/skills/maestro-verify/SKILL.md +39 -136
  50. package/.codex/skills/manage-codebase-rebuild/SKILL.md +25 -75
  51. package/.codex/skills/manage-codebase-refresh/SKILL.md +5 -32
  52. package/.codex/skills/manage-issue/SKILL.md +1 -6
  53. package/.codex/skills/manage-issue-discover/SKILL.md +33 -93
  54. package/.codex/skills/{manage-memory → manage-knowhow}/SKILL.md +95 -95
  55. package/.codex/skills/manage-knowhow-capture/SKILL.md +110 -0
  56. package/.codex/skills/manage-learn/SKILL.md +17 -71
  57. package/.codex/skills/manage-status/SKILL.md +4 -35
  58. package/.codex/skills/manage-wiki/SKILL.md +1 -1
  59. package/.codex/skills/quality-business-test/SKILL.md +2 -14
  60. package/.codex/skills/quality-debug/SKILL.md +41 -133
  61. package/.codex/skills/quality-integration-test/SKILL.md +36 -145
  62. package/.codex/skills/quality-refactor/SKILL.md +6 -59
  63. package/.codex/skills/quality-retrospective/SKILL.md +292 -531
  64. package/.codex/skills/quality-review/SKILL.md +30 -65
  65. package/.codex/skills/quality-sync/SKILL.md +2 -11
  66. package/.codex/skills/quality-test/SKILL.md +4 -45
  67. package/.codex/skills/quality-test-gen/SKILL.md +33 -121
  68. package/.codex/skills/spec-add/SKILL.md +2 -9
  69. package/.codex/skills/spec-load/SKILL.md +4 -14
  70. package/.codex/skills/spec-map/SKILL.md +4 -37
  71. package/.codex/skills/spec-remove/SKILL.md +3 -35
  72. package/.codex/skills/spec-setup/SKILL.md +2 -19
  73. package/.codex/skills/team-coordinate/SKILL.md +20 -132
  74. package/.codex/skills/team-coordinate/roles/coordinator/commands/monitor.md +61 -215
  75. package/.codex/skills/team-executor/SKILL.md +7 -66
  76. package/.codex/skills/team-executor/roles/executor/commands/monitor.md +60 -182
  77. package/.codex/skills/team-executor/specs/session-schema.md +22 -56
  78. package/.codex/skills/team-lifecycle-v4/SKILL.md +22 -143
  79. package/.codex/skills/team-lifecycle-v4/roles/coordinator/commands/monitor.md +31 -223
  80. package/.codex/skills/team-quality-assurance/SKILL.md +14 -88
  81. package/.codex/skills/team-quality-assurance/roles/coordinator/commands/monitor.md +46 -186
  82. package/.codex/skills/team-review/SKILL.md +12 -86
  83. package/.codex/skills/team-review/roles/coordinator/commands/monitor.md +49 -187
  84. package/.codex/skills/team-tech-debt/SKILL.md +11 -50
  85. package/.codex/skills/team-tech-debt/roles/coordinator/commands/monitor.md +50 -239
  86. package/.codex/skills/team-testing/SKILL.md +14 -99
  87. package/.codex/skills/team-testing/roles/coordinator/commands/monitor.md +52 -228
  88. package/.codex/skills/wiki-connect/SKILL.md +2 -5
  89. package/README.md +6 -0
  90. package/README.zh-CN.md +6 -0
  91. package/chains/_intent-map.json +7 -7
  92. package/chains/singles/{memory-capture.json → knowhow-capture.json} +5 -5
  93. package/chains/singles/{memory.json → knowhow.json} +6 -6
  94. package/dashboard/dist/assets/{ArtifactsPage-CUrrDGgN.js → ArtifactsPage-iJZtYsmR.js} +6 -6
  95. package/dashboard/dist/assets/ChatInput-DNnDLdQF.js +6 -0
  96. package/dashboard/dist/assets/ChatPage-BjBibfE4.js +22 -0
  97. package/dashboard/dist/assets/{CollabPage-DIUXeazv.js → CollabPage-8lUMUol_.js} +1 -1
  98. package/dashboard/dist/assets/{ExecutionPanel-VmYeADFj.js → ExecutionPanel-BKV3GZ7Q.js} +1 -1
  99. package/dashboard/dist/assets/{KanbanPage-DLq8v7hg.js → KanbanPage-diY3QmGd.js} +2 -2
  100. package/dashboard/dist/assets/{MarkdownRenderer-D7AehrnR.js → MarkdownRenderer-cYFfe1uX.js} +1 -1
  101. package/dashboard/dist/assets/McpPage-COjuIf7U.js +21 -0
  102. package/dashboard/dist/assets/MeetingRoomPage-wnvT7wlB.js +85 -0
  103. package/dashboard/dist/assets/{OutputPanel-B-Rjwgmv.js → OutputPanel-DDL90Idy.js} +1 -1
  104. package/dashboard/dist/assets/{ProblemsPanel-GEpF-oi4.js → ProblemsPanel-zFN9IIs0.js} +1 -1
  105. package/dashboard/dist/assets/{RequirementBoardPage-xs8uDM7I.js → RequirementBoardPage-DOPJoT0I.js} +2 -2
  106. package/dashboard/dist/assets/{RequirementPage-BKDSFwjA.js → RequirementPage-CEVquRgM.js} +1 -1
  107. package/dashboard/dist/assets/RoomsPage-D5USEWDh.js +1 -0
  108. package/dashboard/dist/assets/{SpecsPage-DLFb9ZH0.js → SpecsPage-BOwBin_o.js} +1 -1
  109. package/dashboard/dist/assets/{SupervisorPage-SOki_kgz.js → SupervisorPage-5iRyMU5T.js} +1 -1
  110. package/dashboard/dist/assets/TeamsPage-DlcEmr_Q.js +1 -0
  111. package/dashboard/dist/assets/{TreeBrowser-B9DHdULE.js → TreeBrowser-Y48Wz-QY.js} +1 -1
  112. package/dashboard/dist/assets/WorkflowPage-CmQaRVgL.js +6 -0
  113. package/dashboard/dist/assets/arrow-left-NCUOENvg.js +6 -0
  114. package/dashboard/dist/assets/{check-DJDk3A2a.js → check-o7nfGNHf.js} +1 -1
  115. package/dashboard/dist/assets/{chevron-right-C7bVDreZ.js → chevron-right-BXySK2fn.js} +1 -1
  116. package/dashboard/dist/assets/{circle-alert-Na1vf6qQ.js → circle-alert-DcSBokh4.js} +1 -1
  117. package/dashboard/dist/assets/{circle-check-CEGgy3NV.js → circle-check-Cd-jce4j.js} +1 -1
  118. package/dashboard/dist/assets/{circle-check-big-3JB8zRYj.js → circle-check-big-BN7Mdp4i.js} +1 -1
  119. package/dashboard/dist/assets/{circle-Qfgy4LB_.js → circle-cooAwnAR.js} +1 -1
  120. package/dashboard/dist/assets/{code-Ble63Idz.js → code-BQa9oL1n.js} +1 -1
  121. package/dashboard/dist/assets/{columns-3-BUcKlxve.js → columns-3-BzgxelGx.js} +1 -1
  122. package/dashboard/dist/assets/{download-CMqkfn8x.js → download-swRJnate.js} +1 -1
  123. package/dashboard/dist/assets/en-C_BD3UCD.js +1 -0
  124. package/dashboard/dist/assets/{folder-B9ewx9LL.js → folder-DbGbLNFN.js} +1 -1
  125. package/dashboard/dist/assets/index-BEUaOz_b.css +1 -0
  126. package/dashboard/dist/assets/{index-JTmGteaT.js → index-DIoMBMbv.js} +1 -1
  127. package/dashboard/dist/assets/index-DLBN_7fb.js +44 -0
  128. package/dashboard/dist/assets/index-uIqUCT8y.js +236 -0
  129. package/dashboard/dist/assets/{list-DI8Wn2aT.js → list-BTRAIvDq.js} +1 -1
  130. package/dashboard/dist/assets/loader-NHtB6Mdn.js +6 -0
  131. package/dashboard/dist/assets/{minus-Lp_BfctG.js → minus-BjMxRTET.js} +1 -1
  132. package/dashboard/dist/assets/{pen-line-Ch7sphzZ.js → pen-line-C4_O16H0.js} +1 -1
  133. package/dashboard/dist/assets/{pencil-_yRMHmGT.js → pencil-DTmKhyDY.js} +1 -1
  134. package/dashboard/dist/assets/{proxy-D72Y8a4Y.js → proxy-Dtx5p6IO.js} +1 -1
  135. package/dashboard/dist/assets/rows-2-GR1dZtRu.js +6 -0
  136. package/dashboard/dist/assets/{search-BS6fI6Bg.js → search-DVtgy2W7.js} +1 -1
  137. package/dashboard/dist/assets/{shallow-BXasQBvr.js → shallow-BOmvDNsv.js} +1 -1
  138. package/dashboard/dist/assets/{table-CeGlFjlP.js → table-DCzuJAFh.js} +1 -1
  139. package/dashboard/dist/assets/team-types-BPeOvVdA.js +6 -0
  140. package/dashboard/dist/assets/{terminal-BJic2yW-.js → terminal-CzogW4cl.js} +1 -1
  141. package/dashboard/dist/assets/{trash-2-Czz4X8Fb.js → trash-2-52LATVfW.js} +1 -1
  142. package/dashboard/dist/assets/users-DLFE2voE.js +6 -0
  143. package/dashboard/dist/assets/{zap-C3H0jVFA.js → zap-DhiYlgyZ.js} +1 -1
  144. package/dashboard/dist/assets/zh-CN-DvQKfow3.js +1 -0
  145. package/dashboard/dist/index.html +2 -2
  146. package/dashboard/dist-server/dashboard/src/server/agents/agent-manager.d.ts +2 -0
  147. package/dashboard/dist-server/dashboard/src/server/agents/agent-manager.js +19 -11
  148. package/dashboard/dist-server/dashboard/src/server/agents/agent-manager.js.map +1 -1
  149. package/dashboard/dist-server/dashboard/src/server/agents/agent-sdk-adapter.js +5 -0
  150. package/dashboard/dist-server/dashboard/src/server/agents/agent-sdk-adapter.js.map +1 -1
  151. package/dashboard/dist-server/dashboard/src/server/agents/claude-code-adapter.d.ts +1 -0
  152. package/dashboard/dist-server/dashboard/src/server/agents/claude-code-adapter.js +21 -4
  153. package/dashboard/dist-server/dashboard/src/server/agents/claude-code-adapter.js.map +1 -1
  154. package/dashboard/dist-server/dashboard/src/server/agents/env-cleanup.js +8 -0
  155. package/dashboard/dist-server/dashboard/src/server/agents/env-cleanup.js.map +1 -1
  156. package/dashboard/dist-server/dashboard/src/server/coordinator/chain-map.js +6 -6
  157. package/dashboard/dist-server/dashboard/src/server/coordinator/chain-map.js.map +1 -1
  158. package/dashboard/dist-server/dashboard/src/server/coordinator/chain-map.test.js +2 -2
  159. package/dashboard/dist-server/dashboard/src/server/coordinator/chain-map.test.js.map +1 -1
  160. package/dashboard/dist-server/dashboard/src/server/index.js +14 -3
  161. package/dashboard/dist-server/dashboard/src/server/index.js.map +1 -1
  162. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/mcp-config-builder.d.ts +24 -0
  163. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/mcp-config-builder.js +220 -0
  164. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/mcp-config-builder.js.map +1 -0
  165. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/mcp-config-builder.test.d.ts +1 -0
  166. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/mcp-config-builder.test.js +115 -0
  167. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/mcp-config-builder.test.js.map +1 -0
  168. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/meeting-room-mcp-server.d.ts +44 -0
  169. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/meeting-room-mcp-server.js +260 -0
  170. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/meeting-room-mcp-server.js.map +1 -0
  171. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/meeting-room-mcp-server.test.d.ts +1 -0
  172. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/meeting-room-mcp-server.test.js +194 -0
  173. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/meeting-room-mcp-server.test.js.map +1 -0
  174. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/stdio-bridge.d.ts +2 -0
  175. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/stdio-bridge.js +279 -0
  176. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/stdio-bridge.js.map +1 -0
  177. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/tcp-helpers.d.ts +14 -0
  178. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/tcp-helpers.js +131 -0
  179. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/tcp-helpers.js.map +1 -0
  180. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/tcp-helpers.test.d.ts +1 -0
  181. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/tcp-helpers.test.js +134 -0
  182. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/tcp-helpers.test.js.map +1 -0
  183. package/dashboard/dist-server/dashboard/src/server/rooms/meeting-room-session.d.ts +51 -0
  184. package/dashboard/dist-server/dashboard/src/server/rooms/meeting-room-session.js +185 -0
  185. package/dashboard/dist-server/dashboard/src/server/rooms/meeting-room-session.js.map +1 -0
  186. package/dashboard/dist-server/dashboard/src/server/rooms/room-agent-registry.d.ts +29 -0
  187. package/dashboard/dist-server/dashboard/src/server/rooms/room-agent-registry.js +125 -0
  188. package/dashboard/dist-server/dashboard/src/server/rooms/room-agent-registry.js.map +1 -0
  189. package/dashboard/dist-server/dashboard/src/server/rooms/room-mailbox.d.ts +18 -0
  190. package/dashboard/dist-server/dashboard/src/server/rooms/room-mailbox.js +63 -0
  191. package/dashboard/dist-server/dashboard/src/server/rooms/room-mailbox.js.map +1 -0
  192. package/dashboard/dist-server/dashboard/src/server/rooms/room-session-manager.d.ts +19 -0
  193. package/dashboard/dist-server/dashboard/src/server/rooms/room-session-manager.js +45 -0
  194. package/dashboard/dist-server/dashboard/src/server/rooms/room-session-manager.js.map +1 -0
  195. package/dashboard/dist-server/dashboard/src/server/rooms/room-task-board.d.ts +25 -0
  196. package/dashboard/dist-server/dashboard/src/server/rooms/room-task-board.js +115 -0
  197. package/dashboard/dist-server/dashboard/src/server/rooms/room-task-board.js.map +1 -0
  198. package/dashboard/dist-server/dashboard/src/server/rooms/room-types.d.ts +53 -0
  199. package/dashboard/dist-server/dashboard/src/server/rooms/room-types.js +5 -0
  200. package/dashboard/dist-server/dashboard/src/server/rooms/room-types.js.map +1 -0
  201. package/dashboard/dist-server/dashboard/src/server/routes/agents.js +6 -0
  202. package/dashboard/dist-server/dashboard/src/server/routes/agents.js.map +1 -1
  203. package/dashboard/dist-server/dashboard/src/server/routes/cli-history.js +20 -1
  204. package/dashboard/dist-server/dashboard/src/server/routes/cli-history.js.map +1 -1
  205. package/dashboard/dist-server/dashboard/src/server/routes/index.d.ts +2 -1
  206. package/dashboard/dist-server/dashboard/src/server/routes/index.js +8 -1
  207. package/dashboard/dist-server/dashboard/src/server/routes/index.js.map +1 -1
  208. package/dashboard/dist-server/dashboard/src/server/routes/install.js +1 -1
  209. package/dashboard/dist-server/dashboard/src/server/routes/install.js.map +1 -1
  210. package/dashboard/dist-server/dashboard/src/server/routes/mcp.js +2 -2
  211. package/dashboard/dist-server/dashboard/src/server/routes/mcp.js.map +1 -1
  212. package/dashboard/dist-server/dashboard/src/server/routes/room-mcp.d.ts +3 -0
  213. package/dashboard/dist-server/dashboard/src/server/routes/room-mcp.js +246 -0
  214. package/dashboard/dist-server/dashboard/src/server/routes/room-mcp.js.map +1 -0
  215. package/dashboard/dist-server/dashboard/src/server/routes/rooms.d.ts +3 -0
  216. package/dashboard/dist-server/dashboard/src/server/routes/rooms.js +38 -0
  217. package/dashboard/dist-server/dashboard/src/server/routes/rooms.js.map +1 -0
  218. package/dashboard/dist-server/dashboard/src/server/routes/wiki.integration.test.js +7 -7
  219. package/dashboard/dist-server/dashboard/src/server/routes/wiki.integration.test.js.map +1 -1
  220. package/dashboard/dist-server/dashboard/src/server/routes/wiki.js +1 -1
  221. package/dashboard/dist-server/dashboard/src/server/routes/wiki.js.map +1 -1
  222. package/dashboard/dist-server/dashboard/src/server/state/event-bus.d.ts +39 -1
  223. package/dashboard/dist-server/dashboard/src/server/state/event-bus.js +12 -0
  224. package/dashboard/dist-server/dashboard/src/server/state/event-bus.js.map +1 -1
  225. package/dashboard/dist-server/dashboard/src/server/wiki/stress.test.js +1 -1
  226. package/dashboard/dist-server/dashboard/src/server/wiki/stress.test.js.map +1 -1
  227. package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.js +25 -14
  228. package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.js.map +1 -1
  229. package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.test.js +6 -6
  230. package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.test.js.map +1 -1
  231. package/dashboard/dist-server/dashboard/src/server/wiki/wiki-types.d.ts +1 -1
  232. package/dashboard/dist-server/dashboard/src/server/wiki/writer-stress.test.js +17 -16
  233. package/dashboard/dist-server/dashboard/src/server/wiki/writer-stress.test.js.map +1 -1
  234. package/dashboard/dist-server/dashboard/src/server/wiki/writer.d.ts +1 -1
  235. package/dashboard/dist-server/dashboard/src/server/wiki/writer.js +18 -7
  236. package/dashboard/dist-server/dashboard/src/server/wiki/writer.js.map +1 -1
  237. package/dashboard/dist-server/dashboard/src/server/ws/handlers/agent-handler.d.ts +3 -1
  238. package/dashboard/dist-server/dashboard/src/server/ws/handlers/agent-handler.js +75 -1
  239. package/dashboard/dist-server/dashboard/src/server/ws/handlers/agent-handler.js.map +1 -1
  240. package/dashboard/dist-server/dashboard/src/server/ws/handlers/room-handler.d.ts +17 -0
  241. package/dashboard/dist-server/dashboard/src/server/ws/handlers/room-handler.js +192 -0
  242. package/dashboard/dist-server/dashboard/src/server/ws/handlers/room-handler.js.map +1 -0
  243. package/dashboard/dist-server/dashboard/src/server/ws/session-scoped-event-filter.d.ts +13 -0
  244. package/dashboard/dist-server/dashboard/src/server/ws/session-scoped-event-filter.js +37 -0
  245. package/dashboard/dist-server/dashboard/src/server/ws/session-scoped-event-filter.js.map +1 -0
  246. package/dashboard/dist-server/dashboard/src/server/ws/ws-manager.d.ts +7 -1
  247. package/dashboard/dist-server/dashboard/src/server/ws/ws-manager.js +39 -2
  248. package/dashboard/dist-server/dashboard/src/server/ws/ws-manager.js.map +1 -1
  249. package/dashboard/dist-server/dashboard/src/shared/constants.js +12 -0
  250. package/dashboard/dist-server/dashboard/src/shared/constants.js.map +1 -1
  251. package/dashboard/dist-server/dashboard/src/shared/room-leader-prompt.d.ts +1 -0
  252. package/dashboard/dist-server/dashboard/src/shared/room-leader-prompt.js +38 -0
  253. package/dashboard/dist-server/dashboard/src/shared/room-leader-prompt.js.map +1 -0
  254. package/dashboard/dist-server/dashboard/src/shared/team-types.d.ts +66 -0
  255. package/dashboard/dist-server/dashboard/src/shared/team-types.js.map +1 -1
  256. package/dashboard/dist-server/dashboard/src/shared/types.d.ts +24 -3
  257. package/dashboard/dist-server/dashboard/src/shared/ws-protocol.d.ts +76 -2
  258. package/dashboard/dist-server/dashboard/src/shared/ws-protocol.js.map +1 -1
  259. package/dashboard/dist-server/shared/agent-types.d.ts +2 -0
  260. package/dashboard/dist-server/src/commands/delegate.js +11 -8
  261. package/dashboard/dist-server/src/commands/delegate.js.map +1 -1
  262. package/dist/shared/agent-types.d.ts +2 -0
  263. package/dist/shared/agent-types.d.ts.map +1 -1
  264. package/dist/src/cli.js +2 -2
  265. package/dist/src/cli.js.map +1 -1
  266. package/dist/src/commands/delegate.d.ts.map +1 -1
  267. package/dist/src/commands/delegate.js +11 -8
  268. package/dist/src/commands/delegate.js.map +1 -1
  269. package/dist/src/commands/install-backend.d.ts +1 -1
  270. package/dist/src/commands/install-backend.d.ts.map +1 -1
  271. package/dist/src/commands/install-backend.js +1 -1
  272. package/dist/src/commands/install-backend.js.map +1 -1
  273. package/dist/src/commands/install-ui/ExecutionView.d.ts.map +1 -1
  274. package/dist/src/commands/install-ui/ExecutionView.js +4 -1
  275. package/dist/src/commands/install-ui/ExecutionView.js.map +1 -1
  276. package/dist/src/commands/install-ui/InstallExecution.d.ts.map +1 -1
  277. package/dist/src/commands/install-ui/InstallExecution.js +4 -1
  278. package/dist/src/commands/install-ui/InstallExecution.js.map +1 -1
  279. package/dist/src/commands/install.js +5 -5
  280. package/dist/src/commands/install.js.map +1 -1
  281. package/dist/src/commands/knowhow.d.ts +10 -0
  282. package/dist/src/commands/knowhow.d.ts.map +1 -0
  283. package/dist/src/commands/knowhow.js +217 -0
  284. package/dist/src/commands/knowhow.js.map +1 -0
  285. package/dist/src/commands/overlay-ui/OverlayList.d.ts +2 -0
  286. package/dist/src/commands/overlay-ui/OverlayList.d.ts.map +1 -1
  287. package/dist/src/commands/overlay-ui/OverlayList.js +6 -3
  288. package/dist/src/commands/overlay-ui/OverlayList.js.map +1 -1
  289. package/dist/src/commands/overlay-ui/index.d.ts.map +1 -1
  290. package/dist/src/commands/overlay-ui/index.js +70 -44
  291. package/dist/src/commands/overlay-ui/index.js.map +1 -1
  292. package/dist/src/commands/overlay.d.ts.map +1 -1
  293. package/dist/src/commands/overlay.js +4 -3
  294. package/dist/src/commands/overlay.js.map +1 -1
  295. package/dist/src/commands/update.d.ts.map +1 -1
  296. package/dist/src/commands/update.js +31 -21
  297. package/dist/src/commands/update.js.map +1 -1
  298. package/dist/src/core/manifest.d.ts +8 -1
  299. package/dist/src/core/manifest.d.ts.map +1 -1
  300. package/dist/src/core/manifest.js +3 -1
  301. package/dist/src/core/manifest.js.map +1 -1
  302. package/dist/src/core/overlay/applier.d.ts +1 -1
  303. package/dist/src/core/overlay/applier.d.ts.map +1 -1
  304. package/dist/src/core/overlay/applier.js +40 -13
  305. package/dist/src/core/overlay/applier.js.map +1 -1
  306. package/dist/src/core/overlay/loader.d.ts.map +1 -1
  307. package/dist/src/core/overlay/loader.js +6 -0
  308. package/dist/src/core/overlay/loader.js.map +1 -1
  309. package/dist/src/core/overlay/types.d.ts +5 -1
  310. package/dist/src/core/overlay/types.d.ts.map +1 -1
  311. package/dist/src/core/overlay/types.js +1 -1
  312. package/dist/src/core/overlay/types.js.map +1 -1
  313. package/dist/src/hooks/context-monitor.js +1 -1
  314. package/dist/src/hooks/context-monitor.js.map +1 -1
  315. package/dist/src/hooks/skill-context.js +1 -1
  316. package/dist/src/hooks/skill-context.js.map +1 -1
  317. package/dist/src/mcp/delegate-channel-relay.d.ts +4 -0
  318. package/dist/src/mcp/delegate-channel-relay.d.ts.map +1 -1
  319. package/dist/src/mcp/delegate-channel-relay.js +73 -4
  320. package/dist/src/mcp/delegate-channel-relay.js.map +1 -1
  321. package/dist/src/tools/index.js +2 -2
  322. package/dist/src/tools/index.js.map +1 -1
  323. package/dist/src/tools/store-knowhow.d.ts +21 -0
  324. package/dist/src/tools/store-knowhow.d.ts.map +1 -0
  325. package/dist/src/tools/store-knowhow.js +295 -0
  326. package/dist/src/tools/store-knowhow.js.map +1 -0
  327. package/package.json +1 -1
  328. package/shared/agent-types.ts +2 -0
  329. package/workflows/analyze.md +61 -185
  330. package/workflows/brainstorm.md +3 -23
  331. package/workflows/codebase-rebuild.md +79 -191
  332. package/workflows/codebase-refresh.md +26 -124
  333. package/workflows/debug.md +21 -141
  334. package/workflows/execute.md +183 -350
  335. package/workflows/fork.md +72 -230
  336. package/workflows/harvest.md +12 -79
  337. package/workflows/init.md +3 -17
  338. package/workflows/integration-test.md +21 -190
  339. package/workflows/issue-analyze.md +35 -153
  340. package/workflows/issue-discover.md +88 -263
  341. package/workflows/issue-execute.md +29 -208
  342. package/workflows/issue-plan.md +33 -154
  343. package/workflows/issue.md +44 -202
  344. package/workflows/knowhow.md +374 -0
  345. package/workflows/learn.md +30 -177
  346. package/workflows/maestro-coordinate.codex.md +77 -362
  347. package/workflows/maestro-link-coordinate.md +12 -61
  348. package/workflows/maestro.codex.md +124 -457
  349. package/workflows/maestro.md +562 -976
  350. package/workflows/map.md +16 -53
  351. package/workflows/merge.md +42 -197
  352. package/workflows/milestone-audit.md +5 -43
  353. package/workflows/milestone-complete.md +11 -60
  354. package/workflows/plan.md +188 -387
  355. package/workflows/quick.md +25 -174
  356. package/workflows/refactor.md +28 -221
  357. package/workflows/retrospective.md +104 -443
  358. package/workflows/review.md +87 -299
  359. package/workflows/roadmap.md +117 -97
  360. package/workflows/spec-generate.md +22 -118
  361. package/workflows/specs-add.md +5 -25
  362. package/workflows/specs-load.md +1 -5
  363. package/workflows/specs-remove.md +0 -11
  364. package/workflows/specs-setup.md +11 -47
  365. package/workflows/status.md +58 -200
  366. package/workflows/sync.md +28 -141
  367. package/workflows/test-gen.md +23 -100
  368. package/workflows/test.md +15 -125
  369. package/workflows/ui-design.md +139 -465
  370. package/workflows/ui-style.md +36 -228
  371. package/workflows/verify.md +52 -273
  372. package/workflows/wiki-connect.md +9 -46
  373. package/workflows/wiki-digest.md +7 -50
  374. package/workflows/wiki-manage.md +11 -108
  375. package/.claude/commands/maestro-coordinate.md +0 -63
  376. package/.claude/commands/manage-memory-capture.md +0 -59
  377. package/.codex/skills/maestro-coordinate/SKILL.md +0 -213
  378. package/.codex/skills/manage-memory-capture/SKILL.md +0 -93
  379. package/dashboard/dist/assets/ChatInput-pUOLJIKE.js +0 -49
  380. package/dashboard/dist/assets/ChatPage-B8Xqkt0v.js +0 -27
  381. package/dashboard/dist/assets/McpPage-BY0SjTgw.js +0 -21
  382. package/dashboard/dist/assets/TeamsPage-BO2kP70F.js +0 -11
  383. package/dashboard/dist/assets/WorkflowPage-C8hWbYim.js +0 -6
  384. package/dashboard/dist/assets/en-ZbRpfzuP.js +0 -1
  385. package/dashboard/dist/assets/index-C2Mcb4TJ.js +0 -231
  386. package/dashboard/dist/assets/index-DyBbPc18.css +0 -1
  387. package/dashboard/dist/assets/loader-B5F6PzFT.js +0 -11
  388. package/dashboard/dist/assets/zh-CN-CoXBFuny.js +0 -1
  389. package/workflows/maestro-coordinate.md +0 -582
  390. package/workflows/memory.md +0 -451
@@ -141,68 +141,31 @@ Each wave generates `wave-{N}.csv` with extra `prev_context` column.
141
141
  ### Session Initialization
142
142
 
143
143
  ```javascript
144
- const getUtc8ISOString = () => new Date(Date.now() + 8 * 60 * 60 * 1000).toISOString()
145
-
146
- // Parse flags
147
- const AUTO_YES = $ARGUMENTS.includes('--yes') || $ARGUMENTS.includes('-y')
148
- const continueMode = $ARGUMENTS.includes('--continue')
149
- const concurrencyMatch = $ARGUMENTS.match(/(?:--concurrency|-c)\s+(\d+)/)
150
- const maxConcurrency = concurrencyMatch ? parseInt(concurrencyMatch[1]) : 4
151
-
152
- // Parse plan-specific flags
153
- const autoMode = $ARGUMENTS.includes('--auto')
154
- const gapsMode = $ARGUMENTS.includes('--gaps')
155
- const dirMatch = $ARGUMENTS.match(/--dir\s+(\S+)/)
156
- const specMatch = $ARGUMENTS.match(/--spec\s+(SPEC-\S+)/)
157
- const collabMode = $ARGUMENTS.includes('--collab')
158
-
159
- // Clean phase text
160
- const phaseArg = $ARGUMENTS
161
- .replace(/--yes|-y|--continue|--concurrency\s+\d+|-c\s+\d+|--auto|--gaps|--parallel|--collab|--dir\s+\S+|--spec\s+\S+/g, '')
162
- .trim()
163
-
164
- // Auto-bootstrap state.json if missing
165
- if (!fileExists('.workflow/state.json')) {
166
- Bash('mkdir -p .workflow/scratch/')
167
- writeMinimalStateJson()
168
- }
169
-
170
- // Scope determination (per scratch-milestone-architecture)
171
- const state = JSON.parse(Read('.workflow/state.json'))
172
- let scope, phaseNum = null, phaseSlug, contextDir
173
-
174
- if (dirMatch) {
175
- contextDir = dirMatch[1]
176
- phaseSlug = contextDir.split('/').pop()
177
- // Inherit scope from parent artifact if registered
178
- const parentArtifact = state.artifacts.find(a => a.path === contextDir)
179
- scope = parentArtifact?.scope || 'standalone'
180
- } else if (phaseArg === '') {
181
- if (state.current_milestone && fileExists('.workflow/roadmap.md')) {
182
- scope = 'milestone'
183
- phaseSlug = slugify(state.milestones.find(m => m.id === state.current_milestone)?.name || state.current_milestone)
184
- // Find latest analyze artifact for this milestone
185
- contextDir = state.artifacts.filter(a => a.type === 'analyze' && a.milestone === state.current_milestone && a.status === 'completed').pop()?.path
186
- } else {
187
- ERROR('E001: No args and no roadmap')
188
- }
189
- } else if (/^\d+$/.test(phaseArg)) {
190
- scope = 'phase'
191
- phaseNum = parseInt(phaseArg)
192
- phaseSlug = resolvePhaseSlugFromRoadmap(phaseNum)
193
- contextDir = state.artifacts.filter(a => a.type === 'analyze' && a.milestone === state.current_milestone && a.phase === phaseNum && a.status === 'completed').pop()?.path
194
- } else {
195
- scope = state.current_milestone ? 'adhoc' : 'standalone'
196
- phaseSlug = phaseArg.toLowerCase().replace(/[^a-z0-9]+/g, '-').substring(0, 40)
197
- }
198
-
199
- const dateStr = getUtc8ISOString().substring(0, 10).replace(/-/g, '')
200
- const sessionId = `${dateStr}-plan-P${phaseArg}-${phaseSlug}`
201
- const sessionFolder = `.workflow/.csv-wave/${sessionId}`
202
- const scratchDir = `.workflow/scratch/${dateStr}-plan-P${phaseArg}-${phaseSlug}`
203
-
204
- Bash(`mkdir -p ${sessionFolder}`)
205
- Bash(`mkdir -p ${scratchDir}/.task/`)
144
+ // Parse from $ARGUMENTS:
145
+ // AUTO_YES <- --yes | -y
146
+ // continueMode <- --continue
147
+ // maxConcurrency <- --concurrency N | -c N (default: 4)
148
+ // autoMode <- --auto
149
+ // gapsMode <- --gaps
150
+ // dirMatch <- --dir <path>
151
+ // specMatch <- --spec SPEC-xxx
152
+ // collabMode <- --collab
153
+ // phaseArg <- remaining text after stripping all flags
154
+
155
+ // Auto-bootstrap .workflow/state.json if missing
156
+
157
+ // Scope determination from state.json (priority order):
158
+ // --dir given → scope from parent artifact or 'standalone'
159
+ // phaseArg empty → 'milestone' (requires current_milestone + roadmap.md) or ERROR E001
160
+ // phaseArg is digit → 'phase', resolve slug from roadmap, find latest completed analyze artifact
161
+ // phaseArg is text → 'adhoc' (if milestone active) or 'standalone', slugify phaseArg
162
+
163
+ // Session IDs (UTC+8):
164
+ // sessionId = {YYYYMMDD}-plan-P{phaseArg}-{phaseSlug}
165
+ // sessionFolder = .workflow/.csv-wave/{sessionId}
166
+ // scratchDir = .workflow/scratch/{sessionId}
167
+
168
+ // Create: sessionFolder, scratchDir/.task/
206
169
  ```
207
170
 
208
171
  ### Phase 1: Phase Resolution -> CSV
@@ -266,21 +229,22 @@ spawn_agents_on_csv({
266
229
  max_concurrency: maxConcurrency,
267
230
  max_runtime_seconds: 600,
268
231
  output_csv_path: `${sessionFolder}/wave-1-results.csv`,
269
- output_schema: {
270
- type: "object",
271
- properties: {
272
- id: { type: "string" },
273
- status: { type: "string", enum: ["completed", "failed"] },
274
- findings: { type: "string" },
275
- error: { type: "string" }
276
- },
277
- required: ["id", "status", "findings"]
232
+ output_schema: { // required: id, status, findings
233
+ id: "string", status: "completed|failed", findings: "string", error: "string"
278
234
  }
279
235
  })
280
236
  ```
281
237
 
282
- 6. Read `wave-1-results.csv`, merge into master `tasks.csv`
283
- 7. Delete `wave-1.csv`
238
+ 6. Merge `wave-1-results.csv` into master `tasks.csv`, delete `wave-1.csv`
239
+
240
+ #### Task Count Guard (before Wave 2)
241
+
242
+ Before generating the planning instruction, assess scope complexity and embed expected task count ceiling:
243
+ - Single feature / simple change → expect **1-2 tasks** max
244
+ - Medium feature (multiple files, one module) → expect **2-4 tasks** max
245
+ - Large feature (cross-module) → expect **4-8 tasks** max
246
+
247
+ Include this ceiling in `buildPlanningInstruction`. If the planning agent outputs more tasks than the threshold, re-prompt with explicit instruction to merge.
284
248
 
285
249
  #### Wave 2: Plan Generation (Sequential)
286
250
 
@@ -303,123 +267,63 @@ spawn_agents_on_csv({
303
267
  instruction: buildPlanningInstruction(sessionFolder, phaseDir, {
304
268
  contextMd, indexJson, specRef, docIndex, designRef, gapsContext
305
269
  }),
306
- max_concurrency: 1, // Sequential — single planning agent
270
+ max_concurrency: 1, // Single planning agent
307
271
  max_runtime_seconds: 900,
308
272
  output_csv_path: `${sessionFolder}/wave-2-results.csv`,
309
- output_schema: {
310
- type: "object",
311
- properties: {
312
- id: { type: "string" },
313
- status: { type: "string", enum: ["completed", "failed"] },
314
- findings: { type: "string" },
315
- error: { type: "string" }
316
- },
317
- required: ["id", "status", "findings"]
273
+ output_schema: { // required: id, status, findings
274
+ id: "string", status: "completed|failed", findings: "string", error: "string"
318
275
  }
319
276
  })
320
277
  ```
321
278
 
322
- 6. Merge results into master `tasks.csv`
323
- 7. Delete `wave-2.csv`
279
+ 6. Merge `wave-2-results.csv` into master `tasks.csv`, delete `wave-2.csv`
324
280
 
325
281
  **Planning agent responsibilities** (embedded in instruction):
326
- - Decompose phase goal into concrete tasks (TASK-001, TASK-002, ...)
327
- - Determine dependencies and group into execution waves
328
- - Apply Deep Work Rules:
329
- - Every task has `read_first[]` with file being modified + source of truth files
330
- - Every task has `convergence.criteria[]` with grep-verifiable conditions
331
- - Every `action` has concrete values (never "align X with Y")
332
- - Every `implementation` step has specific values
333
- - Write `plan.json` to `{PHASE_DIR}/plan.json`
334
- - Write `.task/TASK-{NNN}.json` files to `{PHASE_DIR}/.task/`
335
- - If `--gaps`: create fix tasks from gap context, link to issues
336
- - If `--collab`: pre-allocate ID ranges for parallel planners
282
+ - Group work into feature-level tasks. One feature = one task (even if it touches 3-5 files). Do NOT split a single feature into multiple file-level tasks.
283
+ - Apply Deep Work Rules: `read_first[]` includes modified file + source of truth; `convergence.criteria[]` are grep-verifiable; all actions/steps have concrete values
284
+ - Write `plan.json` to `{PHASE_DIR}/plan.json` and `.task/TASK-{NNN}.json` to `{PHASE_DIR}/.task/`
285
+ - `--gaps`: create fix tasks from gap context, link to issues; `--collab`: pre-allocate ID ranges
286
+
287
+ **Task Grouping Rules (MANDATORY)** pass to planning agent, re-prompt if violated:
288
+
289
+ 1. **Group by feature** — All changes for one feature = one task (even if 3-5 files). Never create separate tasks per file.
290
+ 2. **Group by context** — Related functional changes belong together. Don't split just because changes touch different files.
291
+ 3. **Minimize agent count** Group simple unrelated changes into a single "batch" task to reduce overhead. Each agent spawn costs significant tokens.
292
+ 4. **Substantial tasks only** — Each task should represent 15-60 minutes of real work. If a task takes <5 minutes, merge it into another.
293
+ 5. **True dependencies only** — `depends_on` only when Task B genuinely needs Task A's output (e.g., "Task A defines the interface that Task B implements"). Sequential execution wastes time.
294
+ 6. **Prefer parallel** — Most tasks should be independent (no depends_on). Default to parallel waves.
295
+ 7. **Complexity-based sizing**:
296
+ - **Low** (single file, single concern, zero cross-module): **1 task**
297
+ - **Medium** (multiple files OR integration point): **1-4 tasks**
298
+ - **High** (cross-module, architectural, new subsystem): **4-10 tasks**
299
+
300
+ **Anti-splitting rules** (re-prompt if violated):
301
+ - One feature = one task (even if 3-5 files); never split a feature into per-file tasks
302
+ - Group simple unrelated changes into a batch task to minimize agent spawns
303
+ - `depends_on` only for genuine output dependencies; most tasks should be parallel
304
+ - Each task must be substantial (15-60 min); sub-5-min changes must be merged
337
305
 
338
306
  ### Phase 3: Plan Checking + Confirmation
339
307
 
340
308
  **Objective**: Validate plan quality, revise if needed, present to user.
341
309
 
342
310
  1. **Plan checking** (inline, not a separate wave):
343
- - Read generated `plan.json` + all `.task/TASK-*.json`
344
- - Validate dimensions:
345
-
346
- | Check | Criteria |
347
- |-------|----------|
348
- | Requirements coverage | Every success_criterion maps to at least one task |
349
- | Feasibility | Referenced files exist or can be created |
350
- | Dependency correctness | No circular deps, deps exist, wave ordering valid |
351
- | Convergence criteria quality | Grep-verifiable, no subjective language |
352
- | read_first completeness | Every task has read_first[] with modified file |
353
- | Action concreteness | No vague "align X with Y" |
354
- | Wave structure | Parallel tasks have no conflicting file modifications |
311
+ Read `plan.json` + all `.task/TASK-*.json`. Validate: requirements coverage, file feasibility, dependency correctness (no cycles, valid wave order), grep-verifiable convergence criteria, read_first completeness, action concreteness, no parallel file conflicts, **task count within complexity threshold** (reject over-split plans), **no per-file splitting** (each task must be feature-level).
355
312
 
356
313
  2. **Revision loop** (max 3 rounds): If critical issues found, regenerate affected tasks.
357
314
 
358
315
  3. **Export results**:
359
316
  - Export `results.csv` from master `tasks.csv`
360
- - Generate `context.md`:
361
-
362
- ```markdown
363
- # Plan Report -- Phase {phase}
364
-
365
- ## Summary
366
- - Phase: {phase_name}
367
- - Tasks: {task_count} in {wave_count} waves
368
- - Complexity: {complexity}
369
- - Explorations: {exploration_count} angles explored
370
-
371
- ## Exploration Findings
372
-
373
- ### {angle}: {title}
374
- {findings}
317
+ - Generate `context.md`: summary (phase, task count, wave count, complexity, exploration count), exploration findings per angle, plan overview (approach, task IDs, waves), next steps
375
318
 
376
- ## Plan Overview
377
- - Approach: {plan.approach}
378
- - Task IDs: {task_ids}
379
- - Waves: {wave_structure}
380
-
381
- ## Next Steps
382
- {suggested actions}
383
- ```
384
-
385
- 4. **Update index.json**:
386
- ```json
387
- {
388
- "status": "planning",
389
- "plan": {
390
- "task_ids": ["TASK-001", "TASK-002"],
391
- "task_count": N,
392
- "complexity": "moderate",
393
- "waves": [[...], [...]]
394
- },
395
- "updated_at": "<ISO>"
396
- }
397
- ```
319
+ 4. **Update index.json**: set `status: "planning"`, `plan: { task_ids, task_count, complexity, waves }`, `updated_at`
398
320
 
399
321
  5. **Issue linking** (if --gaps):
400
- For each created TASK-{NNN}.json that has `issue_id`:
401
- - Update corresponding issue in `.workflow/issues/issues.jsonl`:
402
- - `task_refs`: append TASK-{NNN} to array
403
- - `task_plan_dir`: relative path to `.task/` directory
404
- - `status`: "planned"
405
- - `updated_at`: now()
406
- - Append history entry: `{ action: "planned", at: <ISO>, by: "maestro-plan", summary: "Linked to TASK-{NNN}" }`
407
- This ensures bidirectional issue <-> TASK traceability for dashboard display.
322
+ For each TASK with `issue_id`: update issue in `issues.jsonl` (`task_refs` += TASK-NNN, `task_plan_dir`, `status: "planned"`, `updated_at`) + append history entry. Ensures bidirectional issue-TASK traceability.
408
323
 
409
324
  6. **Display summary + options** (skip options if AUTO_YES):
410
- ```
411
- === PLAN READY ===
412
- Phase: {phase_name}
413
- Tasks: {task_count} tasks in {wave_count} waves
414
- Check: {checker_status}
415
-
416
- Plan: {scratch_dir}/plan.json
417
- Tasks: {scratch_dir}/.task/TASK-*.json
418
-
419
- Next steps:
420
- Skill({ skill: "maestro-execute", args: "{phase}" }) -- Execute the plan
421
- Skill({ skill: "maestro-plan", args: "{phase}" }) -- Re-plan with modifications
422
- ```
325
+ Show phase name, task/wave counts, checker status, output file paths.
326
+ Next steps: `maestro-execute "{phase}"` (execute) or `maestro-plan "{phase}"` (re-plan).
423
327
 
424
328
  ### Shared Discovery Board Protocol
425
329
 
@@ -130,75 +130,28 @@ If not found: "No templates. Create with $maestro-composer"
130
130
 
131
131
  **Trigger**: `-c [session-id]`
132
132
 
133
- 1. If session-id given: load `.workflow/.maestro-coordinate/<session-id>/state.json`
134
- 2. If no session-id: Glob `.workflow/.maestro-coordinate/MCP-*/state.json` sorted desc, find `status = "in_progress" | "paused"`
135
- 3. None found → error E005
136
- 4. Identify last completed wave, resume from next pending step
137
- 5. Jump to Phase 3 (Wave Execution)
133
+ Load session state by explicit ID or most recent `MCP-*/state.json` with `status = "in_progress" | "paused"`. Error E005 if none found. Resume from next pending step after last completed wave → jump to Phase 3.
138
134
 
139
135
  ---
140
136
 
141
137
  ### Phase 1: Load & Bind
142
138
 
143
- **Step 1.1**Resolve template path:
144
- 1. Absolute path use as-is
145
- 2. Slug look up in `~/.maestro/templates/workflows/index.json`
146
- 3. Partial match confirm with user
147
- 4. Not found show `--list`, AskUserQuestion
148
-
149
- **Step 1.2** — Parse `--context key=value` pairs into `bound_context`.
150
-
151
- **Step 1.3** — Load and validate template JSON.
152
-
153
- **Step 1.4** — Collect missing required variables via AskUserQuestion.
154
-
155
- **Step 1.5** — Bind `{variable_name}` in all `args_template` strings. Leave `{N-xxx.field}` and `{prev_*}` unresolved (runtime Phase 3).
156
-
157
- **Step 1.6** — If `--dry-run`: print wave plan and exit (see Phase 2 output).
139
+ 1. **Resolve template**: absolute path → as-is, slug → lookup in `~/.maestro/templates/workflows/index.json`, partial → confirm, not found → show `--list`
140
+ 2. **Parse** `--context key=value` pairs into `bound_context`
141
+ 3. **Load and validate** template JSON
142
+ 4. **Collect missing** required variables via AskUserQuestion
143
+ 5. **Bind** `{variable_name}` in all `args_template` strings. Leave `{N-xxx.field}` and `{prev_*}` unresolved (runtime Phase 3)
144
+ 6. If `--dry-run`: print wave plan and exit
158
145
 
159
146
  ---
160
147
 
161
148
  ### Phase 2: Init Session & Build Wave Plan
162
149
 
163
- **Step 2.1** Generate session ID: `MCP-<YYYYMMDD>-<HHmmss>`.
164
-
165
- **Step 2.2** Topological sort (Kahn's algorithm) on template nodes + edges.
166
-
167
- **Step 2.3** Classify barrier vs non-barrier per node:
168
-
169
- ```javascript
170
- const BARRIER_SKILLS = new Set([
171
- 'maestro-analyze', 'maestro-plan', 'maestro-brainstorm',
172
- 'maestro-spec-generate', 'maestro-execute'
173
- ]);
174
-
175
- function isBarrier(node) {
176
- if (node.type === 'checkpoint') return true;
177
- return BARRIER_SKILLS.has(node.executor);
178
- }
179
- ```
180
-
181
- **Step 2.4** — Group into waves:
182
-
183
- ```javascript
184
- function buildWaves(sortedNodes) {
185
- const waves = [];
186
- let currentWave = [];
187
- for (const node of sortedNodes) {
188
- if (isBarrier(node)) {
189
- if (currentWave.length > 0) waves.push(currentWave);
190
- waves.push([node]); // barrier = solo wave
191
- currentWave = [];
192
- } else {
193
- currentWave.push(node);
194
- }
195
- }
196
- if (currentWave.length > 0) waves.push(currentWave);
197
- return waves;
198
- }
199
- ```
200
-
201
- **Step 2.5** — Build steps array from waves. Write `state.json` to `.workflow/.maestro-coordinate/<session-id>/`.
150
+ 1. Generate session ID: `MCP-<YYYYMMDD>-<HHmmss>`
151
+ 2. Topological sort (Kahn's algorithm) on template nodes + edges
152
+ 3. Classify barrier vs non-barrier: barriers = checkpoint nodes + `maestro-analyze`, `maestro-plan`, `maestro-brainstorm`, `maestro-spec-generate`, `maestro-execute`
153
+ 4. Group into waves: barrier nodes → solo wave, non-barrier nodes → accumulate into parallel wave
154
+ 5. Build steps array from waves, write `state.json`
202
155
 
203
156
  **Step 2.6** — Display start banner:
204
157
  ```
@@ -223,69 +176,20 @@ function buildWaves(sortedNodes) {
223
176
 
224
177
  ### Phase 3: Wave Execution Loop
225
178
 
226
- ```javascript
227
- let waveNum = 0;
228
- while (state.steps.some(s => s.status === 'pending')) {
229
- waveNum++;
230
- const waveSteps = getNextWave(state.steps);
231
- ```
179
+ Loop while any step has `status === 'pending'`:
232
180
 
233
181
  **3a. Resolve runtime references** in each step's args:
234
-
235
- ```javascript
236
- function resolveArgs(args, steps, context) {
237
- return args
238
- .replace(/{(\w+)}/g, (_, key) => context[key] ?? '')
239
- .replace(/{N-(\d+)\.(\w+)}/g, (_, id, field) => {
240
- const step = steps.find(s => s.node_id === `N-${id}`);
241
- return step?.[field] ?? '';
242
- })
243
- .replace(/{prev_(\w+)}/g, (_, field) => {
244
- const prev = [...steps].reverse().find(s =>
245
- s.status === 'completed' && s.type !== 'checkpoint');
246
- return prev?.[field] ?? '';
247
- });
248
- }
249
- ```
182
+ - `{key}` → lookup from `context[key]`
183
+ - `{N-xxx.field}` → lookup from completed step with matching `node_id`
184
+ - `{prev_field}` lookup from most recently completed non-checkpoint step
250
185
 
251
186
  **3b. Handle checkpoint nodes** (no CSV spawn needed):
252
-
253
- ```javascript
254
- if (waveSteps[0].type === 'checkpoint') {
255
- const cp = waveSteps[0];
256
- // Save checkpoint snapshot
257
- Write(`${sessionDir}/checkpoints/${cp.node_id}.json`, JSON.stringify({
258
- session_id: state.id, checkpoint_id: cp.node_id,
259
- saved_at: new Date().toISOString(),
260
- steps_snapshot: state.steps, context: state.context
261
- }, null, 2));
262
-
263
- state.context.last_checkpoint = cp.node_id;
264
- cp.status = 'completed'; cp.wave_n = waveNum;
265
-
266
- // If auto_continue == false: pause for user
267
- if (!cp.auto_continue) {
268
- AskUserQuestion: Continue / Pause / Abort
269
- on Pause: state.status = 'paused', save, exit
270
- on Abort: state.status = 'aborted', skip remaining, exit
271
- }
272
-
273
- Write(stateFile, JSON.stringify(state, null, 2));
274
- continue;
275
- }
276
- ```
187
+ - Save checkpoint snapshot to `checkpoints/{node_id}.json` (session state + context)
188
+ - Update `context.last_checkpoint`, mark completed
189
+ - If `auto_continue === false`: prompt user (Continue / Pause / Abort)
277
190
 
278
191
  **3c. Build wave CSV** for skill nodes:
279
-
280
- ```javascript
281
- const csvContent = 'id,skill_call,topic\n' + waveSteps.map(step => {
282
- const resolvedArgs = resolveArgs(step.args, state.steps, state.context);
283
- const skillCall = `$${step.skill} ${resolvedArgs}`.trim();
284
- return `"${step.step_n}","${skillCall.replace(/"/g, '""')}","Template \"${state.template_name}\" step ${step.step_n}/${state.steps.length}"`;
285
- }).join('\n');
286
-
287
- Write(`${sessionDir}/wave-${waveNum}.csv`, csvContent);
288
- ```
192
+ Write `wave-{N}.csv` with columns `id,skill_call,topic`. Each row: resolved `$${step.skill} ${args}`.
289
193
 
290
194
  **3d. Spawn agents**:
291
195
 
@@ -298,43 +202,14 @@ spawn_agents_on_csv({
298
202
  max_runtime_seconds: 1800,
299
203
  output_csv_path: `${sessionDir}/wave-${waveNum}-results.csv`,
300
204
  output_schema: RESULT_SCHEMA
301
- });
302
- ```
303
-
304
- **3e. Read results, update state**:
305
-
306
- ```javascript
307
- const results = readCSV(`${sessionDir}/wave-${waveNum}-results.csv`);
308
- for (const row of results) {
309
- const step = state.steps.find(s => s.step_n === parseInt(row.id));
310
- step.status = row.status;
311
- step.findings = row.summary;
312
- step.artifacts = row.artifacts;
313
- step.wave_n = waveNum;
314
- }
205
+ })
315
206
  ```
316
207
 
317
- **3f. Barrier analysis** (if barrier wave):
208
+ **3e. Read results**: Map each result row back to its step — update status, findings, artifacts, wave_n.
318
209
 
319
- ```javascript
320
- if (isBarrier(waveSteps[0])) {
321
- analyzeBarrierArtifacts(waveSteps[0], results[0], state.context);
322
- }
323
- ```
324
-
325
- **3g. Persist + abort check**:
210
+ **3f. Barrier analysis**: If barrier wave, read artifacts and update context (see barrier node table in `<context>`).
326
211
 
327
- ```javascript
328
- state.waves.push({ wave_n: waveNum, steps: waveSteps.map(s => s.step_n) });
329
- Write(stateFile, JSON.stringify(state, null, 2));
330
-
331
- if (results.some(r => r.status === 'failed')) {
332
- state.status = 'aborted';
333
- state.steps.filter(s => s.status === 'pending').forEach(s => s.status = 'skipped');
334
- Write(stateFile, JSON.stringify(state, null, 2));
335
- break;
336
- }
337
- ```
212
+ **3g. Persist + abort check**: Append wave record to `state.waves[]`, persist `state.json`. If any result failed → set `state.status = 'aborted'`, mark remaining steps as skipped.
338
213
 
339
214
  ### Sub-Agent Instruction Template
340
215
 
@@ -49,30 +49,11 @@ Extract from arguments:
49
49
 
50
50
  ### Step 2: Load Project Context
51
51
 
52
- ```bash
53
- cat .workflow/state.json 2>/dev/null
54
- cat .workflow/project.md 2>/dev/null
55
- ```
56
-
57
- If `.workflow/` does not exist, create minimal scratch structure anyway (quick works without full init).
52
+ Read `.workflow/state.json` and `.workflow/project.md` if they exist. If `.workflow/` does not exist, create minimal scratch structure anyway (quick works without full init).
58
53
 
59
54
  ### Step 3: Create Scratch Directory
60
55
 
61
- Generate slug from task description (lowercase, hyphens, max 40 chars).
62
-
63
- ```bash
64
- mkdir -p .workflow/scratch/{slug}
65
- ```
66
-
67
- Write `config.json` with task metadata:
68
- ```json
69
- {
70
- "task": "<description>",
71
- "flags": { "discuss": false, "full": false },
72
- "created_at": "<ISO timestamp>",
73
- "status": "active"
74
- }
75
- ```
56
+ Generate slug from task description (lowercase, hyphens, max 40 chars). Create `.workflow/scratch/{slug}/`. Write `config.json` with: `task`, `flags` (discuss, full), `created_at` (ISO), `status` ("active").
76
57
 
77
58
  ### Step 4: Discussion Phase (if --discuss)
78
59
 
@@ -113,37 +94,13 @@ Update plan.json task statuses as completed.
113
94
 
114
95
  ### Step 8: Verification (if --full)
115
96
 
116
- **Only when `--full` is set.**
117
-
118
- Run convergence criteria checks:
119
- ```bash
120
- # For each task, verify convergence_criteria via grep/test commands
121
- ```
122
-
123
- If gaps found (W001): attempt single fix iteration, then report remaining gaps.
97
+ **Only when `--full` is set.** Run convergence criteria checks for each task via grep/test commands. If gaps found (W001): attempt single fix iteration, then report remaining gaps.
124
98
 
125
99
  ### Step 9: Commit and Report
126
100
 
127
- ```bash
128
- git add -A
129
- git commit -m "quick: {slug} - {short description}"
130
- ```
131
-
132
- Update `.workflow/state.json` scratch task entry (if state.json exists).
101
+ Commit all changes: `git add -A && git commit -m "quick: {slug} - {short description}"`. Update `.workflow/state.json` scratch task entry (if state.json exists).
133
102
 
134
- ```
135
- === QUICK TASK COMPLETE ===
136
- Task: {description}
137
- Scratch: .workflow/scratch/{slug}/
138
- Status: {completed|completed-with-gaps}
139
-
140
- Tasks: {completed}/{total}
141
- Files modified: {count}
142
-
143
- {if --full}
144
- Verification: {PASS|GAPS}
145
- {endif}
146
- ```
103
+ Display report: task description, scratch path, status (completed/completed-with-gaps), tasks completed/total, files modified count. If `--full`: include verification result (PASS/GAPS).
147
104
 
148
105
  </execution>
149
106