maestro-flow 0.3.6 → 0.3.8

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 (106) hide show
  1. package/.claude/commands/learn-retro.md +303 -0
  2. package/.claude/commands/maestro-execute.md +3 -2
  3. package/.claude/commands/maestro-learn.md +74 -298
  4. package/.claude/commands/manage-learn.md +21 -15
  5. package/.claude/commands/manage-memory-capture.md +13 -15
  6. package/.claude/commands/manage-memory.md +1 -1
  7. package/.claude/commands/quality-retrospective.md +5 -5
  8. package/.claude/commands/spec-load.md +7 -2
  9. package/.claude/commands/wiki-digest.md +27 -2
  10. package/README.md +103 -220
  11. package/README.zh-CN.md +159 -181
  12. package/dashboard/dist/assets/{ArtifactsPage-A9yzYtpj.js → ArtifactsPage-BmPOu8sO.js} +1 -1
  13. package/dashboard/dist/assets/{ChatInput-PuCvZZ3y.js → ChatInput-CL8YDfOU.js} +1 -1
  14. package/dashboard/dist/assets/ChatPage-CT-ozBK2.js +8 -0
  15. package/dashboard/dist/assets/{CollabPage-I5k_mCbG.js → CollabPage-C0rWMden.js} +1 -1
  16. package/dashboard/dist/assets/{KanbanPage-PDDBv5-9.js → KanbanPage-C6WbAlwI.js} +1 -1
  17. package/dashboard/dist/assets/{MarkdownRenderer-CCXHaut3.js → MarkdownRenderer-BjZ43aSa.js} +1 -1
  18. package/dashboard/dist/assets/{McpPage-CiqXpCHg.js → McpPage-BPIXADQi.js} +1 -1
  19. package/dashboard/dist/assets/{RequirementBoardPage-CEOvppGn.js → RequirementBoardPage-B7yRL0s_.js} +1 -1
  20. package/dashboard/dist/assets/{RequirementPage-DpnbTEqY.js → RequirementPage-D8J_-b6O.js} +1 -1
  21. package/dashboard/dist/assets/{SpecsPage-CYqOfFkB.js → SpecsPage-6lO8v8_C.js} +1 -1
  22. package/dashboard/dist/assets/{SupervisorPage-B2sZwkq8.js → SupervisorPage-Ds5N378a.js} +1 -1
  23. package/dashboard/dist/assets/{TeamsPage-CkZdCAVZ.js → TeamsPage-DrkKr17T.js} +1 -1
  24. package/dashboard/dist/assets/{TreeBrowser-0VIMWclo.js → TreeBrowser-g_QUKemL.js} +1 -1
  25. package/dashboard/dist/assets/WorkflowPage-X8aNkDEr.js +6 -0
  26. package/dashboard/dist/assets/{arrow-left-6fktHyjN.js → arrow-left-CadP5YgU.js} +1 -1
  27. package/dashboard/dist/assets/{check-Cbxq2l1-.js → check-5xufDzS8.js} +1 -1
  28. package/dashboard/dist/assets/{chevron-right-Yts3bi8p.js → chevron-right-CYbpR4ev.js} +1 -1
  29. package/dashboard/dist/assets/{circle-4Ci4Xolf.js → circle-Bm-5Q-Yh.js} +1 -1
  30. package/dashboard/dist/assets/{circle-alert-B25g9BTL.js → circle-alert-BqcYuT7x.js} +1 -1
  31. package/dashboard/dist/assets/{circle-check-BA5_XqeV.js → circle-check-DEVzW_lm.js} +1 -1
  32. package/dashboard/dist/assets/{circle-check-big-DzO2BlL7.js → circle-check-big-yyzAFysU.js} +1 -1
  33. package/dashboard/dist/assets/{code-zxwuybO8.js → code-BBdC8Wmw.js} +1 -1
  34. package/dashboard/dist/assets/{columns-3-DV4oeCfU.js → columns-3-CQ9Trztr.js} +1 -1
  35. package/dashboard/dist/assets/{download-CXCyQw8M.js → download-DayuF-sn.js} +1 -1
  36. package/dashboard/dist/assets/{folder-Bvjj8Vn9.js → folder-CqXeSKeC.js} +1 -1
  37. package/dashboard/dist/assets/{git-branch-DL8p9kVC.js → git-branch-SqFf4Ru5.js} +1 -1
  38. package/dashboard/dist/assets/{index-BvScJmJM.js → index-Dru5HYy0.js} +1 -1
  39. package/dashboard/dist/assets/{index-11DuhKhc.js → index-nufWop4p.js} +18 -18
  40. package/dashboard/dist/assets/{list-Dj4i9N75.js → list-DBOD6IUt.js} +1 -1
  41. package/dashboard/dist/assets/{minus-DwlFabsT.js → minus-fQI1Syn2.js} +1 -1
  42. package/dashboard/dist/assets/{pen-line-D7UzECt6.js → pen-line-Bkbbngl5.js} +1 -1
  43. package/dashboard/dist/assets/{proxy-B9XRqHD9.js → proxy-teW12DdZ.js} +1 -1
  44. package/dashboard/dist/assets/{search-BQbBTIYl.js → search-Bq3ygFUW.js} +1 -1
  45. package/dashboard/dist/assets/{shallow-Clb1Lyd_.js → shallow-22ZN8sFt.js} +1 -1
  46. package/dashboard/dist/assets/{table-BqxCXid2.js → table-BEYtdWc4.js} +1 -1
  47. package/dashboard/dist/assets/{trash-2-6rN9B-EQ.js → trash-2-DMqGBgcF.js} +1 -1
  48. package/dashboard/dist/assets/{wrench-BScEJFqC.js → wrench-B84-zdLI.js} +1 -1
  49. package/dashboard/dist/assets/{zap-DxUhG-gk.js → zap-9DVkGVtt.js} +1 -1
  50. package/dashboard/dist/index.html +1 -1
  51. package/dashboard/dist-server/dashboard/src/server/agents/agent-sdk-adapter.d.ts +1 -1
  52. package/dashboard/dist-server/dashboard/src/server/agents/agent-sdk-adapter.js +5 -4
  53. package/dashboard/dist-server/dashboard/src/server/agents/agent-sdk-adapter.js.map +1 -1
  54. package/dashboard/dist-server/dashboard/src/server/agents/codex-cli-adapter.js +1 -1
  55. package/dashboard/dist-server/dashboard/src/server/agents/codex-cli-adapter.js.map +1 -1
  56. package/dashboard/dist-server/dashboard/src/server/agents/tools/issue-mcp-server.d.ts +1 -1
  57. package/dashboard/dist-server/dashboard/src/server/agents/tools/issue-mcp-server.js +3 -4
  58. package/dashboard/dist-server/dashboard/src/server/agents/tools/issue-mcp-server.js.map +1 -1
  59. package/dashboard/dist-server/dashboard/src/server/agents/tools/issue-mcp-server.test.js +4 -4
  60. package/dashboard/dist-server/dashboard/src/server/agents/tools/issue-mcp-server.test.js.map +1 -1
  61. package/dashboard/dist-server/dashboard/src/server/commander/commander-agent.js +4 -3
  62. package/dashboard/dist-server/dashboard/src/server/commander/commander-agent.js.map +1 -1
  63. package/dashboard/dist-server/dashboard/src/server/commander/commander-agent.test.js +20 -7
  64. package/dashboard/dist-server/dashboard/src/server/commander/commander-agent.test.js.map +1 -1
  65. package/dashboard/dist-server/dashboard/src/server/execution/wave-executor.d.ts +1 -1
  66. package/dashboard/dist-server/dashboard/src/server/execution/wave-executor.js +4 -4
  67. package/dashboard/dist-server/dashboard/src/server/execution/wave-executor.js.map +1 -1
  68. package/dashboard/dist-server/dashboard/src/server/index.js +2 -1
  69. package/dashboard/dist-server/dashboard/src/server/index.js.map +1 -1
  70. package/dashboard/dist-server/dashboard/src/server/routes/issues.js +14 -14
  71. package/dashboard/dist-server/dashboard/src/server/routes/issues.js.map +1 -1
  72. package/dashboard/dist-server/dashboard/src/server/routes/linear.js +7 -5
  73. package/dashboard/dist-server/dashboard/src/server/routes/linear.js.map +1 -1
  74. package/dashboard/dist-server/dashboard/src/server/state/state-manager.js +144 -23
  75. package/dashboard/dist-server/dashboard/src/server/state/state-manager.js.map +1 -1
  76. package/dashboard/dist-server/dashboard/src/server/utils/issue-store.d.ts +6 -0
  77. package/dashboard/dist-server/dashboard/src/server/utils/issue-store.js +24 -2
  78. package/dashboard/dist-server/dashboard/src/server/utils/issue-store.js.map +1 -1
  79. package/dashboard/dist-server/dashboard/src/server/ws/handlers/execution-handler.js +4 -7
  80. package/dashboard/dist-server/dashboard/src/server/ws/handlers/execution-handler.js.map +1 -1
  81. package/dashboard/dist-server/dashboard/src/shared/constants.js +2 -1
  82. package/dashboard/dist-server/dashboard/src/shared/constants.js.map +1 -1
  83. package/dashboard/dist-server/dashboard/src/shared/constants.test.js +5 -5
  84. package/dashboard/dist-server/dashboard/src/shared/constants.test.js.map +1 -1
  85. package/dashboard/dist-server/dashboard/src/shared/issue-types.test.js +4 -4
  86. package/dashboard/dist-server/dashboard/src/shared/issue-types.test.js.map +1 -1
  87. package/dashboard/dist-server/src/commands/delegate.js +7 -1
  88. package/dashboard/dist-server/src/commands/delegate.js.map +1 -1
  89. package/dist/src/commands/delegate.d.ts.map +1 -1
  90. package/dist/src/commands/delegate.js +7 -1
  91. package/dist/src/commands/delegate.js.map +1 -1
  92. package/package.json +1 -1
  93. package/workflows/delegate-usage.md +39 -41
  94. package/workflows/execute.md +154 -34
  95. package/workflows/init.md +1 -1
  96. package/workflows/maestro-coordinate.codex.md +1 -1
  97. package/workflows/maestro-coordinate.md +1 -1
  98. package/workflows/maestro.md +2 -2
  99. package/workflows/memory.md +2 -1
  100. package/workflows/plan.md +9 -2
  101. package/workflows/retrospective.md +2 -2
  102. package/workflows/roadmap.md +1 -1
  103. package/.claude/commands/learn-retro-decision.md +0 -198
  104. package/.claude/commands/learn-retro-git.md +0 -160
  105. package/dashboard/dist/assets/ChatPage-v19GURYH.js +0 -8
  106. package/dashboard/dist/assets/WorkflowPage-Csm23wUS.js +0 -6
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: maestro-learn
3
- description: Learning coordinator - analyze intent → route to optimal learn command chain execute via Skill()
3
+ description: Learning coordinator route intent to learn commands, execute single or multi-step chains
4
4
  argument-hint: "\"intent text\" [-y] [--dry-run] [--chain <name>]"
5
5
  allowed-tools:
6
6
  - Read
@@ -12,23 +12,18 @@ allowed-tools:
12
12
  - AskUserQuestion
13
13
  ---
14
14
  <purpose>
15
- Orchestrate all learn-* commands based on user intent. Routes natural language learning requests to the optimal learn command or multi-step chain.
15
+ Route learning requests to the optimal learn command or multi-step chain. Supports direct chain selection via `--chain` or intent-based routing via keyword matching.
16
16
 
17
- Two routing modes:
18
- 1. **Intent-based**: User describes a learning goal → classify → select command/chain → confirm → execute
19
- 2. **Direct**: User specifies a known chain name via `--chain`
20
-
21
- Produces session directory at `.workflow/learning/.maestro-learn/{session_id}/` with status.json tracking chain progress.
22
- Executes commands sequentially via Skill() with artifact propagation between steps.
17
+ Executes commands sequentially via Skill() with session tracking.
23
18
  </purpose>
24
19
 
25
20
  <context>
26
21
  $ARGUMENTS — user learning intent text, or flags.
27
22
 
28
23
  **Flags:**
29
- - `-y` / `--yes` — Auto mode: skip clarification, skip confirmation
24
+ - `-y` / `--yes` — Auto mode: skip confirmation
30
25
  - `--dry-run` — Show planned chain without executing
31
- - `--chain <name>` — Force a specific chain (bypass intent detection). Valid: `follow`, `investigate`, `decompose`, `second-opinion`, `retro-git`, `retro-decision`, `deep-understand`, `pattern-catalog`, `full-retro`
26
+ - `--chain <name>` — Force a specific chain (bypass intent detection)
32
27
 
33
28
  **Available learn commands:**
34
29
  | Command | Purpose |
@@ -37,8 +32,18 @@ $ARGUMENTS — user learning intent text, or flags.
37
32
  | `learn-investigate` | Hypothesis-driven question investigation |
38
33
  | `learn-decompose` | 4-dimension parallel pattern extraction |
39
34
  | `learn-second-opinion` | Multi-perspective review/challenge/consult |
40
- | `learn-retro-git` | Git activity retrospective with metrics |
41
- | `learn-retro-decision` | Decision trace and lifecycle evaluation |
35
+ | `learn-retro` | Unified retrospective (git metrics + decision evaluation) |
36
+
37
+ **Available chains:**
38
+ | Chain | Steps | Use when |
39
+ |-------|-------|----------|
40
+ | `follow` | learn-follow | Read/understand code or docs |
41
+ | `investigate` | learn-investigate | Answer a "how/why" question |
42
+ | `decompose` | learn-decompose | Catalog patterns in a module |
43
+ | `second-opinion` | learn-second-opinion | Get review/challenge on code |
44
+ | `retro` | learn-retro --lens all | Full retrospective (git + decisions) |
45
+ | `deep-understand` | follow → decompose → second-opinion | Thorough module analysis |
46
+ | `pattern-catalog` | decompose --save-spec --save-wiki → second-opinion --mode review | Full pattern extraction + review |
42
47
 
43
48
  **Storage:**
44
49
  - `.workflow/learning/.maestro-learn/{session_id}/status.json` — Session tracking
@@ -47,318 +52,89 @@ $ARGUMENTS — user learning intent text, or flags.
47
52
 
48
53
  <execution>
49
54
 
50
- ### Step 1: Parse Arguments & Detect Mode
51
-
52
- ```javascript
53
- const autoYes = /\b(-y|--yes)\b/.test($ARGUMENTS)
54
- const dryRun = /\b--dry-run\b/.test($ARGUMENTS)
55
- const forcedChain = $ARGUMENTS.match(/--chain\s+(\S+)/)?.[1] || null
56
- const intent = $ARGUMENTS
57
- .replace(/\b(-y|--yes|--dry-run)\b/g, '')
58
- .replace(/--chain\s+\S+/g, '')
59
- .trim()
60
- ```
61
-
62
- **Display banner:**
63
- ```
64
- ============================================================
65
- MAESTRO LEARN COORDINATOR
66
- ============================================================
67
- Mode: {intent-based | forced-chain}
68
- Auto: {yes | no}
69
- Input: {intent}
70
- ```
71
-
72
- ---
73
-
74
- ### Step 2: Analyze Intent
75
-
76
- **If `$FORCED_CHAIN` is set:**
77
- - Validate against known chains: `follow`, `investigate`, `decompose`, `second-opinion`, `retro-git`, `retro-decision`, `deep-understand`, `pattern-catalog`, `full-retro`
78
- - If valid: skip intent analysis, jump to **Step 4**
79
- - If invalid: **Error E005** — display valid chains
80
-
81
- **Extract structured intent:**
82
-
83
- ```json
84
- {
85
- "action": "<from enum>",
86
- "target": "<file path | module | topic | wiki-id | null>",
87
- "mode": "<review | challenge | consult | null>",
88
- "scope": "<path filter | null>",
89
- "flags": "<--depth, --days, --save-wiki, etc.>"
90
- }
91
- ```
92
-
93
- **Action enum:**
94
-
95
- | action | Triggered by (semantic) |
96
- |--------|------------------------|
97
- | `read` | Read code, follow along, walk through, understand file, 阅读, 跟读 |
98
- | `question` | Why does X, how does Y work, what happens if, investigate, 为什么, 怎么 |
99
- | `patterns` | Find patterns, decompose, catalog, extract conventions, 分解, 模式 |
100
- | `opinion` | Second opinion, review, challenge, critique, consult, 评审, 挑战 |
101
- | `retro-git` | Git activity, commit history, retro, work sessions, 提交回顾 |
102
- | `retro-decision` | Decision review, architecture decisions, decision quality, 决策回顾 |
103
- | `learn` | Generic learn, capture insight, remember — route to best fit |
104
-
105
- **Target resolution:**
106
- - Contains `/` or `\` or file extension → file path
107
- - Matches `<type>-<slug>` → wiki ID
108
- - Matches `--days`, `--author` → retro-git flags
109
- - Matches `--phase`, `--tag`, `--id` → retro-decision flags
110
- - Otherwise → topic string (passed as quoted argument)
111
-
112
- ---
113
-
114
- ### Step 3: Route via action → command
115
-
116
- ```javascript
117
- const routeMap = {
118
- 'read': 'follow',
119
- 'question': 'investigate',
120
- 'patterns': 'decompose',
121
- 'opinion': 'second-opinion',
122
- 'retro-git': 'retro-git',
123
- 'retro-decision': 'retro-decision',
124
- 'learn': null, // needs disambiguation
125
- };
126
-
127
- function routeLearnIntent(action, target, intent) {
128
- // Direct mapping
129
- if (routeMap[action]) return routeMap[action];
130
-
131
- // Disambiguate generic 'learn' based on target and context
132
- if (target && isFilePath(target)) return 'follow';
133
- if (target && isWikiId(target)) return 'follow';
134
- if (/retro|commit|git|session/i.test(intent)) return 'retro-git';
135
- if (/decision|architect/i.test(intent)) return 'retro-decision';
136
- if (/pattern|decompose|catalog/i.test(intent)) return 'decompose';
137
- if (/opinion|review|challenge/i.test(intent)) return 'second-opinion';
138
- if (/why|how|what if/i.test(intent)) return 'investigate';
139
-
140
- // Fallback: ask user
141
- return null;
142
- }
143
- ```
144
-
145
- **Compute clarity score:**
146
- - 3: `action` recognized + `target` present + specific flags
147
- - 2: `action` recognized + `target` present
148
- - 1: `action` recognized but no `target`
149
- - 0: Cannot determine action
150
-
151
- **If clarity < 2 and not autoYes:**
152
-
153
- ```
154
- AskUserQuestion:
155
- header: "What would you like to learn?"
156
- question: |
157
- I need a bit more detail. What are you trying to do?
158
- options:
159
- - "Read through code/docs" → follow
160
- - "Investigate a question" → investigate
161
- - "Find patterns in code" → decompose
162
- - "Get a second opinion" → second-opinion
163
- - "Review git activity" → retro-git
164
- - "Evaluate decisions" → retro-decision
165
- - "Let me rephrase" → re-parse
166
- ```
167
-
168
- Max 2 clarification rounds. If still unclear: **Error E002**.
55
+ ### Step 1: Parse & Route
169
56
 
170
- ---
57
+ Parse flags (`-y`, `--dry-run`, `--chain`). Extract intent text.
171
58
 
172
- ### Step 4: Select Chain & Confirm
59
+ **If `--chain` specified:** validate against known chains, jump to Step 2.
173
60
 
174
- #### 4a: Map resolved command chain
61
+ **Intent routing table** (match first token or keywords):
175
62
 
176
- ```javascript
177
- const chainMap = {
178
- // Single-step chains
179
- 'follow': [{ cmd: 'learn-follow', args: '{target} {flags}' }],
180
- 'investigate': [{ cmd: 'learn-investigate', args: '"{target}" {flags}' }],
181
- 'decompose': [{ cmd: 'learn-decompose', args: '{target} {flags}' }],
182
- 'second-opinion': [{ cmd: 'learn-second-opinion', args: '{target} {flags}' }],
183
- 'retro-git': [{ cmd: 'learn-retro-git', args: '{flags}' }],
184
- 'retro-decision': [{ cmd: 'learn-retro-decision', args: '{flags}' }],
63
+ | Keywords | Route |
64
+ |----------|-------|
65
+ | File path (contains `/` or `\`) | `follow` |
66
+ | Wiki ID (`type-slug` pattern) | `follow` |
67
+ | read, follow, walk through, understand, 阅读, 跟读 | `follow` |
68
+ | why, how, what if, investigate, 为什么, 怎么 | `investigate` |
69
+ | pattern, decompose, catalog, 分解, 模式 | `decompose` |
70
+ | opinion, review, challenge, consult, 评审, 挑战 | `second-opinion` |
71
+ | retro, git, commit, decision, 回顾 | `retro` |
72
+ | thorough, deep, 全面, 深入 | `deep-understand` |
185
73
 
186
- // Multi-step chains
187
- 'deep-understand': [
188
- { cmd: 'learn-follow', args: '{target} --depth deep' },
189
- { cmd: 'learn-decompose', args: '{target} --save-spec' },
190
- { cmd: 'learn-second-opinion', args: '{target} --mode challenge' }
191
- ],
192
- 'pattern-catalog': [
193
- { cmd: 'learn-decompose', args: '{target} --save-spec --save-wiki' },
194
- { cmd: 'learn-second-opinion', args: '{target} --mode review' }
195
- ],
196
- 'full-retro': [
197
- { cmd: 'learn-retro-git', args: '{flags}' },
198
- { cmd: 'learn-retro-decision', args: '{flags}' }
199
- ]
200
- };
74
+ **If no match:** present menu via AskUserQuestion:
201
75
  ```
202
-
203
- **Chain upgrade heuristic** single commands may upgrade to multi-step chains when context warrants it:
204
- - `follow` on a large module (>500 LOC) suggest `deep-understand`
205
- - `decompose` with `--save-spec --save-wiki`already a full catalog, no upgrade
206
- - User explicitly mentions "thorough" or "deep" or "全面" upgrade to multi-step
207
-
208
- #### 4b: Assemble arguments
209
-
210
- - Replace `{target}` with resolved target path/topic/wiki-id
211
- - Replace `{flags}` with extracted flags (--depth, --days, --mode, --scope, etc.)
212
- - Clean empty placeholders
213
-
214
- #### 4c: Confirm (skip if autoYes)
215
-
216
- **If `$DRY_RUN`:**
76
+ What would you like to do?
77
+ 1. Read through code/docs follow
78
+ 2. Investigate a questioninvestigate
79
+ 3. Find patterns in codedecompose
80
+ 4. Get a second opinionsecond-opinion
81
+ 5. Retrospective → retro
217
82
  ```
218
- ============================================================
219
- MAESTRO LEARN: {chain_name} (dry run)
220
- ============================================================
221
- Intent: {original_intent}
222
- Target: {resolved_target}
223
83
 
224
- Pipeline:
225
- 1. [{command}] args: {assembled_args}
226
- ...
84
+ Max 1 clarification round. If still unclear: error.
227
85
 
228
- (Use without --dry-run to execute)
229
- ============================================================
230
- ```
231
- Exit after display.
86
+ ### Step 2: Resolve Target & Build Args
232
87
 
233
- **If not autoYes:**
234
- ```
235
- AskUserQuestion:
236
- header: "Confirm: {chain_name}"
237
- question: |
238
- Execute this learning chain?
239
-
240
- Pipeline:
241
- 1. {command} — {description}
242
- ...
88
+ - File path → pass directly
89
+ - Wiki ID → pass directly
90
+ - Topic string → pass as quoted argument
91
+ - Extract any flags (--depth, --days, --lens, --mode, --scope, etc.)
243
92
 
244
- options:
245
- - "Execute" → proceed
246
- - "Cancel" → exit
93
+ **Chain → command mapping:**
247
94
  ```
248
-
249
- ---
250
-
251
- ### Step 5: Setup Tracking
252
-
253
- ```bash
254
- SESSION_ID="learn-$(date +%Y%m%d-%H%M%S)"
255
- SESSION_DIR=".workflow/learning/.maestro-learn/${SESSION_ID}"
256
- mkdir -p "${SESSION_DIR}"
95
+ follow → Skill("learn-follow", "{target} {flags}")
96
+ investigate → Skill("learn-investigate", "\"{target}\" {flags}")
97
+ decompose → Skill("learn-decompose", "{target} {flags}")
98
+ second-opinion → Skill("learn-second-opinion", "{target} {flags}")
99
+ retro → Skill("learn-retro", "{flags}")
100
+ deep-understand → [learn-follow --depth deep, learn-decompose --save-spec, learn-second-opinion --mode challenge]
101
+ pattern-catalog → [learn-decompose --save-spec --save-wiki, learn-second-opinion --mode review]
257
102
  ```
258
103
 
259
- Write `${SESSION_DIR}/status.json`:
260
- ```json
261
- {
262
- "session_id": "{SESSION_ID}",
263
- "created_at": "{ISO timestamp}",
264
- "intent": "{original_intent}",
265
- "chain": "{chain_name}",
266
- "steps": [
267
- { "index": 0, "cmd": "{command}", "args": "{args}", "status": "pending" }
268
- ],
269
- "current_step": 0,
270
- "auto_mode": false
271
- }
272
- ```
104
+ ### Step 3: Confirm & Execute
273
105
 
274
- ---
275
-
276
- ### Step 6: Execute Chain
277
-
278
- For each step in the chain (starting from `$STEP_INDEX` or 0):
279
-
280
- 1. Update `status.json`: set step status to `"running"`
281
- 2. Display step header:
282
- ```
283
- ── Step {N}/{total}: {command} ──────────────────────────
284
- ```
285
- 3. Execute: `Skill({ skill: "{command}", args: "{assembled_args}" })`
286
- 4. On success:
287
- - Update step status to `"completed"`
288
- - Record duration
289
- - Continue to next step
290
- 5. On failure:
291
- - Update step status to `"failed"`, record error
292
- - **If autoYes**: skip and continue (log warning)
293
- - **If interactive**:
294
- ```
295
- AskUserQuestion:
296
- header: "Step {N} failed"
297
- question: "{error summary}"
298
- options:
299
- - "Retry" → re-execute same step
300
- - "Skip" → continue to next step
301
- - "Abort" → exit chain
302
- ```
303
-
304
- ---
305
-
306
- ### Step 7: Session Summary
307
-
308
- After all steps complete (or chain aborted):
309
-
310
- ```
311
- === MAESTRO LEARN SESSION COMPLETE ===
312
- Session: {session_id}
313
- Chain: {chain_name} ({steps_completed}/{steps_total} steps)
314
- Mode: {auto | interactive}
315
-
316
- Steps:
317
- [{status_icon}] {N}. {command_name} — {duration}
318
-
319
- Artifacts:
320
- - {list of files written to .workflow/learning/}
321
-
322
- Next:
323
- {suggested_next_action based on chain type}
324
- ```
106
+ **If `--dry-run`:** display chain plan and exit.
325
107
 
326
- **Next-step routing by chain type:**
108
+ **If not `-y`:** show plan, ask for confirmation.
327
109
 
328
- | Chain | Suggested next |
329
- |-------|---------------|
330
- | `follow` | "Decompose patterns? → `/maestro-learn --chain decompose`" |
331
- | `investigate` | "Follow-along on discovered code? → `/maestro-learn follow <path>`" |
332
- | `decompose` | "Get second opinion? → `/maestro-learn --chain second-opinion`" |
333
- | `second-opinion` | "Create issue for findings? → `/manage-issue create`" |
334
- | `retro-git` | "Deep dive on hotspot? → `/maestro-learn follow <path>`" |
335
- | `retro-decision` | "Investigate stale decision? `/maestro-learn investigate <question>`" |
336
- | `deep-understand` | "Browse insights → `/manage-learn list`" |
337
- | `pattern-catalog` | "Load specs → `/spec-load`" |
338
- | `full-retro` | "Browse all insights → `/manage-learn list --tag retro`" |
110
+ **Execute:**
111
+ 1. Create session dir: `.workflow/learning/.maestro-learn/learn-{timestamp}/`
112
+ 2. Write `status.json` with chain steps
113
+ 3. Execute each step via `Skill()`:
114
+ - On success: mark completed, continue
115
+ - On failure (interactive): ask retry/skip/abort
116
+ - On failure (auto): skip and continue
117
+ 4. Display session summary with artifact list and next-step suggestion
339
118
 
340
119
  </execution>
341
120
 
342
121
  <error_codes>
343
122
  | Code | Severity | Description | Recovery |
344
123
  |------|----------|-------------|----------|
345
- | E001 | error | No intent provided and no learning context | Provide a learning goal or target |
346
- | E002 | error | Clarity too low after 2 clarification rounds | Show parsed intent, ask user to rephrase |
347
- | E003 | error | Chain step failed + user chose abort | Record partial progress in status.json |
348
- | E005 | error | Invalid chain name provided with --chain | Show valid chain names: follow, investigate, decompose, second-opinion, retro-git, retro-decision, deep-understand, pattern-catalog, full-retro |
349
- | W001 | warning | Intent ambiguous between two commands | Present options, let user choose |
124
+ | E001 | error | No intent provided | Provide a learning goal or use --chain |
125
+ | E002 | error | Cannot determine intent after clarification | Rephrase or use --chain directly |
126
+ | E003 | error | Chain step failed + user chose abort | Partial progress saved in status.json |
127
+ | E005 | error | Invalid --chain name | Show valid chains |
128
+ | W001 | warning | Intent ambiguous between commands | Present options |
350
129
  | W002 | warning | Chain step completed with warnings | Log and continue |
351
- | W003 | warning | `.workflow/learning/` not found | Auto-create and proceed |
352
130
  </error_codes>
353
131
 
354
132
  <success_criteria>
355
- - [ ] Intent classified with action, target, clarity_score
356
- - [ ] Command/chain selected and confirmed (or auto-confirmed with -y)
357
- - [ ] Session directory created at `.workflow/learning/.maestro-learn/{session_id}/`
358
- - [ ] status.json tracks per-step progress
359
- - [ ] All chain steps executed via Skill() with proper argument propagation
360
- - [ ] Target resolved (file path, wiki-id, topic) and passed to downstream commands
361
- - [ ] Error handling: retry/skip/abort per step (auto-skip in -y mode)
362
- - [ ] Session summary displayed on completion with next-step routing
133
+ - [ ] Intent routed to correct chain (or --chain validated)
134
+ - [ ] Target resolved and arguments assembled
135
+ - [ ] Session directory created with status.json
136
+ - [ ] All chain steps executed via Skill()
137
+ - [ ] Error handling: retry/skip/abort per step
138
+ - [ ] Session summary displayed with next-step routing
363
139
  - [ ] No files modified outside `.workflow/learning/`
364
140
  </success_criteria>
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: manage-learn
3
- description: Capture, search, and review atomic learning insights into .workflow/learning/lessons.jsonl
4
- argument-hint: "[<text>|list|search|show <id>] [--category ...] [--tag t1,t2] [--phase N] [--confidence ...]"
3
+ description: Capture, search, and review atomic learning insights and tips into .workflow/learning/lessons.jsonl
4
+ argument-hint: "[<text>|tip <text>|list|search|show <id>] [--category ...] [--tag t1,t2] [--phase N] [--confidence ...]"
5
5
  allowed-tools:
6
6
  - Read
7
7
  - Write
@@ -12,7 +12,11 @@ allowed-tools:
12
12
  - AskUserQuestion
13
13
  ---
14
14
  <purpose>
15
- Atomic insight capture for the workflow learning library. Lightweight gstack-style "eureka moment" log that complements `quality-retrospective`: where retrospective extracts insights from a completed phase in bulk, `manage-learn` captures one timeless insight at a time during active work. Insights are appended to `.workflow/learning/lessons.jsonl` with auto-detected phase linkage and a simple keyword-based category inference. Same store as retrospective output, so search and list see both manual captures and retrospective-distilled insights.
15
+ Unified atomic knowledge capture for the workflow learning library. Captures two types of knowledge:
16
+ - **Insights**: Timeless "eureka moment" entries (patterns, gotchas, techniques) — the default mode
17
+ - **Tips**: Quick contextual notes for cross-session recovery (formerly in `manage-memory-capture tip`)
18
+
19
+ Both types are stored in `.workflow/learning/lessons.jsonl` with auto-detected phase linkage and keyword-based category inference. Tips are distinguished by `source: "tip"` and implicitly tagged `tip`. Same store as retrospective output, so search and list see the entire knowledge corpus.
16
20
  </purpose>
17
21
 
18
22
  <required_reading>
@@ -23,30 +27,31 @@ Atomic insight capture for the workflow learning library. Lightweight gstack-sty
23
27
  Arguments: $ARGUMENTS
24
28
 
25
29
  **Modes (auto-detected from first token):**
26
- - `"<insight text>"` (or any non-keyword text) → capture mode
27
- - `list`list recent insights (default 20)
30
+ - `"<insight text>"` (or any non-keyword text) → insight capture mode
31
+ - `tip <text>` tip capture mode (quick contextual note, auto-tagged `tip`)
32
+ - `list` → list recent entries (default 20)
28
33
  - `search <query>` → text search across lessons.jsonl
29
- - `show <INS-id>` → full insight detail with phase context
30
- - empty → AskUserQuestion to prompt for insight text
34
+ - `show <INS-id>` → full detail with phase context
35
+ - empty → AskUserQuestion to prompt for text
31
36
 
32
- **Capture flags:**
33
- - `--category <name>` — pattern | antipattern | decision | tool | gotcha | technique. Default: inferred from text via keyword heuristics.
34
- - `--tag t1,t2` — comma-separated tags. Always implicitly adds `manual`.
37
+ **Capture flags (both insight and tip modes):**
38
+ - `--category <name>` — pattern | antipattern | decision | tool | gotcha | technique | tip. Default: inferred from text via keyword heuristics. Tip mode defaults to `tip`.
39
+ - `--tag t1,t2` — comma-separated tags. Insight mode implicitly adds `manual`, tip mode implicitly adds `tip`.
35
40
  - `--phase <N>` — override auto-detected current phase. Use `--phase 0` to force "no phase".
36
- - `--confidence <level>` — high | medium | low. Default: medium.
41
+ - `--confidence <level>` — high | medium | low. Default: medium (insight), low (tip).
37
42
 
38
43
  **List/search flags:**
39
44
  - `--tag t1,t2` — filter by tag
40
45
  - `--category <name>` — filter by category
41
46
  - `--phase <N>` — filter by phase
42
- - `--lens <name>` — filter by retrospective lens (technical | process | quality | decision)
47
+ - `--lens <name>` — filter by retrospective lens (technical | process | quality | decision | git). Note: `git` matches `source: "retro-git"` from learn-retro; others match `lens` field from quality-retrospective.
43
48
  - `--limit <N>` — list mode row limit (default 20)
44
49
 
45
50
  **Storage:**
46
51
  - `.workflow/learning/lessons.jsonl` — append-only JSONL row per insight (shared with `quality-retrospective` output)
47
52
  - `.workflow/learning/learning-index.json` — searchable index (mirrors `memory-index.json` schema)
48
53
 
49
- **Shared store rationale:** Manual captures (`source: "manual"`, `lens: null`) and retrospective-distilled insights (`source: "retrospective"`, `lens: <name>`) live side by side so search and list see the entire knowledge corpus. The `source` and `lens` fields disambiguate.
54
+ **Shared store rationale:** Manual captures (`source: "manual"`), tips (`source: "tip"`), retrospective-distilled insights (`source: "retrospective"`, `lens: <name>` from `quality-retrospective`), and learn-retro insights (`source: "retro-git"` or `source: "retro-decision"` from `learn-retro`) all live in the same store so search and list see the entire knowledge corpus. The `source` field disambiguates origin.
50
55
  </context>
51
56
 
52
57
  <execution>
@@ -55,16 +60,17 @@ Follow `~/.maestro/workflows/learn.md` Stages 1–5 in order. Key invariants:
55
60
  1. **No agent or CLI calls** — this is a pure file operation: parse → infer → append → confirm. Category inference is keyword-based, not LLM-based.
56
61
  2. **Auto-link phase** — read `.workflow/state.json` for `current_phase` and resolve the matching directory slug. `--phase 0` forces no link.
57
62
  3. **Match memory-index pattern** — `learning-index.json` schema mirrors `memory-index.json` from `workflows/memory.md` (entries[] with id, type, timestamp, file, summary, tags, plus learn-specific fields: lens, category, phase, phase_slug, confidence, routed_to, routed_id).
58
- 4. **Stable INS ids** — `INS-{8 lowercase hex}` from `hash(insight_text + timestamp)`.
63
+ 4. **Stable INS ids** — `INS-{8 lowercase hex}` from `hash(insight_text + category + phase)`. Deterministic: same content in same context always produces the same ID.
59
64
  5. **Append-only lessons.jsonl** — never rewrite existing rows; duplicate detection is the user's job at search time.
60
65
  6. **Bootstrap on demand** — create `.workflow/learning/`, `lessons.jsonl`, `learning-index.json` on first use; do not require them to exist upfront.
66
+ 7. **Tip mode** — when first token is `tip`, set `source: "tip"`, `category: "tip"`, `confidence: "low"`, and implicitly add `tip` tag. Everything else follows the same pipeline as insight capture. This replaces the former `manage-memory-capture tip` mode.
61
67
  </execution>
62
68
 
63
69
  <error_codes>
64
70
  | Code | Severity | Description | Stage |
65
71
  |------|----------|-------------|-------|
66
72
  | E001 | error | `.workflow/` not initialized — run `Skill({ skill: "maestro-init" })` first | parse_input |
67
- | E002 | error | Unknown `--category` value (allowed: pattern, antipattern, decision, tool, gotcha, technique) | parse_input |
73
+ | E002 | error | Unknown `--category` value (allowed: pattern, antipattern, decision, tool, gotcha, technique, tip) | parse_input |
68
74
  | E003 | error | `show` mode requires an INS-id argument | show |
69
75
  | E004 | error | Insight id not found in lessons.jsonl | show |
70
76
  | W001 | warning | Auto-phase detection found a current_phase but no matching directory; phase set to null | capture |
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: manage-memory-capture
3
- description: Capture session memory (compact or tips) into .workflow/memory/ with JSON index
4
- argument-hint: "[compact|tip] [description] [--tag tag1,tag2]"
3
+ description: Capture session memory (compact mode) into .workflow/memory/ with JSON index
4
+ argument-hint: "[compact] [description]"
5
5
  allowed-tools:
6
6
  - Read
7
7
  - Write
@@ -12,7 +12,9 @@ allowed-tools:
12
12
  - AskUserQuestion
13
13
  ---
14
14
  <purpose>
15
- Capture session working memory into `.workflow/memory/` for cross-session recovery. Supports two modes: compact (full session compression for recovery) and tip (quick note-taking with tags). Maintains a `memory-index.json` for search and retrieval. Invoked when saving session state before context loss or recording insights during work.
15
+ Capture session working memory into `.workflow/memory/` for cross-session recovery. Compact mode only: full session compression for recovery. Maintains a `memory-index.json` for search and retrieval. Invoked when saving session state before context loss.
16
+
17
+ **Note:** Quick tips/notes have been moved to `manage-learn tip <text>`. Use that command for atomic knowledge capture.
16
18
  </purpose>
17
19
 
18
20
  <required_reading>
@@ -22,13 +24,9 @@ Capture session working memory into `.workflow/memory/` for cross-session recove
22
24
  <context>
23
25
  Arguments: $ARGUMENTS
24
26
 
25
- **Modes:**
27
+ **Mode:**
26
28
  - `compact` — Full session memory compression (files, decisions, plan state, pending work)
27
- - `tip`Quick note with optional tags and context
28
- - No arguments — Auto-detect or ask user
29
-
30
- **Flags:**
31
- - `--tag tag1,tag2` — Categorization tags (tip mode)
29
+ - No arguments Defaults to compact mode
32
30
 
33
31
  **Storage:**
34
32
  - `.workflow/memory/` — Memory entries directory
@@ -43,19 +41,19 @@ Follow '~/.maestro/workflows/memory.md' Part B (Memory Capture) completely.
43
41
  | Code | Severity | Description | Stage |
44
42
  |------|----------|-------------|-------|
45
43
  | E001 | error | `.workflow/` not initialized — run Skill({ skill: "maestro-init" }) first | parse_input |
46
- | E002 | error | Empty note content in tip mode provide text to save | parse_input |
44
+ | E002 | error | Tip mode removed use `Skill({ skill: "manage-learn", args: "tip <text>" })` instead | parse_input |
47
45
  | W001 | warning | No active workflow session found — compact will capture conversation only | analyze_session |
48
46
  | W002 | warning | Plan detection found no explicit plan — using inferred plan | analyze_session |
49
47
  </error_codes>
50
48
 
51
49
  <success_criteria>
52
- - [ ] Mode correctly detected (compact or tip)
50
+ - [ ] Compact mode executed
53
51
  - [ ] Entry markdown file written to `.workflow/memory/`
54
52
  - [ ] `memory-index.json` updated with new entry metadata
55
- - [ ] Compact: all session fields populated (objective, files, decisions, plan)
56
- - [ ] Compact: execution plan preserved VERBATIM (not summarized)
57
- - [ ] Compact: all file paths are ABSOLUTE
58
- - [ ] Tip: content, tags, and context captured
53
+ - [ ] All session fields populated (objective, files, decisions, plan)
54
+ - [ ] Execution plan preserved VERBATIM (not summarized)
55
+ - [ ] All file paths are ABSOLUTE
59
56
  - [ ] Confirmation banner displayed with entry ID
60
57
  - [ ] Next step: Skill({ skill: "manage-status" }) to resume workflow, or Skill({ skill: "manage-memory", args: "view <entry_id>" }) to verify captured memory
58
+ - [ ] For tips: redirect user to `Skill({ skill: "manage-learn", args: "tip <text>" })`
61
59
  </success_criteria>
@@ -30,7 +30,7 @@ Arguments: $ARGUMENTS
30
30
 
31
31
  | Store | Path | Format | Index |
32
32
  |-------|------|--------|-------|
33
- | `workflow` | `.workflow/memory/` | `MEM-*.md`, `TIP-*.md` | `memory-index.json` |
33
+ | `workflow` | `.workflow/memory/` | `MEM-*.md`, `TIP-*.md` (legacy only — new tips go to `manage-learn tip`) | `memory-index.json` |
34
34
  | `system` | `~/.claude/projects/{project}/memory/` | `MEMORY.md` + topic `.md` files | None (flat files) |
35
35
 
36
36
  **System memory path detection:**
@@ -22,7 +22,7 @@ Post-execution multi-perspective retrospective (复盘) for completed phases. Co
22
22
 
23
23
  <deferred_reading>
24
24
  - @~/.maestro/workflows/issue.md (issues.jsonl schema for auto-creation)
25
- - @~/.maestro/workflows/memory.md (Part B for note routing via manage-memory-capture)
25
+ - @~/.maestro/workflows/learn.md (tip routing via manage-learn tip)
26
26
  - @~/.maestro/workflows/verify.md (verification.json schema for quality lens parsing)
27
27
  - @~/.maestro/workflows/review.md (review.json schema for quality lens parsing)
28
28
  </deferred_reading>
@@ -47,7 +47,7 @@ Arguments: $ARGUMENTS
47
47
  - `.workflow/phases/{NN}-{slug}/retrospective.json` — structured record
48
48
  - `.workflow/specs/SPEC-retro-*.md` — spec stubs (one per spec-routed insight)
49
49
  - `.workflow/issues/issues.jsonl` — appended issue rows (`source: "retrospective"`)
50
- - `.workflow/memory/TIP-*.md` — memory tips (via `manage-memory-capture` skill)
50
+ - `.workflow/learning/lessons.jsonl` — tips routed via `manage-learn tip` (formerly manage-memory-capture)
51
51
  - `.workflow/learning/lessons.jsonl` — append-only insight log
52
52
  - `.workflow/learning/learning-index.json` — searchable index
53
53
 
@@ -64,7 +64,7 @@ Follow `~/.maestro/workflows/retrospective.md` Stages 1–8 in order. Key invari
64
64
  1. **Read-only until Stage 6** — Stages 1–5 must not write anything except the in-memory retrospective record.
65
65
  2. **Parallel lens dispatch** — Stage 4 spawns one Agent per active lens in a single message (multiple Agent tool calls). All agents use `subagent_type: "general-purpose"` and `run_in_background: false`.
66
66
  3. **Match canonical issues schema** — Stage 6 issue routing must produce rows that pass `jq` parsing and match the schema in `workflows/issue.md` Step 4 exactly (status `"open"`, full `issue_history` entry, all required fields).
67
- 4. **Reuse `manage-memory-capture` for note routing** — do not duplicate the memory pipeline; invoke via `Skill()`.
67
+ 4. **Reuse `manage-learn tip` for note routing** — do not duplicate the learning pipeline; invoke via `Skill({ skill: "manage-learn", args: "tip ..." })`.
68
68
  5. **Backward-compat with phase-transition** — append a one-line summary per insight to `.workflow/specs/learnings.md` if and only if that file already exists. Never create it.
69
69
  6. **Stable insight IDs** — `INS-{8 hex}` from `hash(phase_num + lens + title)` so re-runs do not duplicate.
70
70
  7. **Archive before overwrite** — if existing `retrospective.{md,json}` are being replaced, move them to `{phase_dir}/.history/` with a timestamp suffix first.
@@ -80,7 +80,7 @@ Follow `~/.maestro/workflows/retrospective.md` Stages 1–8 in order. Key invari
80
80
  | E005 | error | Phase argument out of range / phase directory not found | scan_unreviewed |
81
81
  | W001 | warning | One or more lens agents failed — proceeding with partial coverage | multi_lens_analysis |
82
82
  | W002 | warning | Existing retrospective.json found and not `--all` — prompted user to overwrite | scan_unreviewed |
83
- | W003 | warning | `manage-memory-capture` did not return parseable TIP id; fell back to direct write | route_outputs |
83
+ | W003 | warning | `manage-learn tip` did not return parseable INS id; fell back to direct write | route_outputs |
84
84
  | W004 | warning | `--compare` target phase has no retrospective.json; delta omitted | load_artifacts |
85
85
  </error_codes>
86
86
 
@@ -94,7 +94,7 @@ Follow `~/.maestro/workflows/retrospective.md` Stages 1–8 in order. Key invari
94
94
  - [ ] If routing enabled (default): every recommendation either created an artifact or was explicitly skipped by user
95
95
  - [ ] Spec stubs (if any) written to `.workflow/specs/SPEC-retro-*.md` with proper frontmatter
96
96
  - [ ] Issue rows (if any) match canonical issues.jsonl schema (status "open", full issue_history, all required fields)
97
- - [ ] Note tips (if any) created via `Skill({ skill: "manage-memory-capture", args: "tip ..." })`
97
+ - [ ] Note tips (if any) created via `Skill({ skill: "manage-learn", args: "tip ..." })`
98
98
  - [ ] `lessons.jsonl` appended with one row per insight regardless of routing target
99
99
  - [ ] `learning-index.json` updated and parseable
100
100
  - [ ] No existing phase artifacts modified (verification.json, review.json, plan.json untouched)