maestro-flow 0.3.9 → 0.3.11

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 (281) hide show
  1. package/.claude/agents/workflow-collab-planner.md +1 -1
  2. package/.claude/agents/workflow-executor.md +1 -1
  3. package/.claude/agents/workflow-plan-checker.md +1 -1
  4. package/.claude/agents/workflow-planner.md +1 -1
  5. package/.claude/commands/learn-decompose.md +176 -176
  6. package/.claude/commands/learn-follow.md +167 -167
  7. package/.claude/commands/learn-retro.md +1 -1
  8. package/.claude/commands/maestro-analyze.md +46 -3
  9. package/.claude/commands/maestro-coordinate.md +1 -3
  10. package/.claude/commands/maestro-execute.md +14 -0
  11. package/.claude/commands/maestro-plan.md +16 -0
  12. package/.claude/commands/manage-harvest.md +131 -131
  13. package/.claude/commands/manage-issue-discover.md +2 -2
  14. package/.claude/commands/manage-issue.md +5 -5
  15. package/.claude/commands/spec-add.md +67 -56
  16. package/.claude/commands/spec-load.md +66 -64
  17. package/.claude/commands/spec-setup.md +5 -9
  18. package/.codex/skills/learn-decompose/SKILL.md +119 -0
  19. package/.codex/skills/learn-follow/SKILL.md +83 -0
  20. package/.codex/skills/learn-investigate/SKILL.md +83 -0
  21. package/.codex/skills/learn-retro/SKILL.md +83 -0
  22. package/.codex/skills/learn-second-opinion/SKILL.md +86 -0
  23. package/.codex/skills/maestro/SKILL.md +335 -0
  24. package/.codex/skills/maestro-analyze/SKILL.md +84 -75
  25. package/.codex/skills/maestro-brainstorm/SKILL.md +452 -463
  26. package/.codex/skills/maestro-chain/SKILL.md +233 -0
  27. package/.codex/skills/maestro-coordinate/SKILL.md +167 -278
  28. package/.codex/skills/maestro-execute/SKILL.md +435 -438
  29. package/.codex/skills/maestro-fork/SKILL.md +68 -0
  30. package/.codex/skills/maestro-init/SKILL.md +171 -167
  31. package/.codex/skills/maestro-learn/SKILL.md +80 -0
  32. package/.codex/skills/maestro-link-coordinate/SKILL.md +224 -220
  33. package/.codex/skills/maestro-merge/SKILL.md +62 -0
  34. package/.codex/skills/maestro-milestone-audit/SKILL.md +108 -103
  35. package/.codex/skills/maestro-milestone-complete/SKILL.md +155 -149
  36. package/.codex/skills/maestro-milestone-release/SKILL.md +70 -0
  37. package/.codex/skills/maestro-overlay/SKILL.md +188 -185
  38. package/.codex/skills/maestro-plan/SKILL.md +66 -69
  39. package/.codex/skills/maestro-quick/SKILL.md +26 -23
  40. package/.codex/skills/maestro-roadmap/SKILL.md +65 -73
  41. package/.codex/skills/maestro-spec-generate/SKILL.md +66 -74
  42. package/.codex/skills/maestro-ui-design/SKILL.md +34 -31
  43. package/.codex/skills/maestro-verify/SKILL.md +556 -566
  44. package/.codex/skills/manage-codebase-rebuild/SKILL.md +397 -405
  45. package/.codex/skills/manage-codebase-refresh/SKILL.md +93 -82
  46. package/.codex/skills/manage-harvest/SKILL.md +82 -0
  47. package/.codex/skills/manage-issue/SKILL.md +80 -65
  48. package/.codex/skills/manage-issue-discover/SKILL.md +491 -503
  49. package/.codex/skills/manage-learn/SKILL.md +190 -186
  50. package/.codex/skills/manage-memory/SKILL.md +95 -72
  51. package/.codex/skills/manage-memory-capture/SKILL.md +99 -86
  52. package/.codex/skills/manage-status/SKILL.md +102 -89
  53. package/.codex/skills/quality-business-test/SKILL.md +228 -223
  54. package/.codex/skills/quality-debug/SKILL.md +54 -66
  55. package/.codex/skills/quality-integration-test/SKILL.md +532 -544
  56. package/.codex/skills/quality-refactor/SKILL.md +197 -191
  57. package/.codex/skills/quality-retrospective/SKILL.md +512 -505
  58. package/.codex/skills/quality-review/SKILL.md +93 -105
  59. package/.codex/skills/quality-sync/SKILL.md +101 -89
  60. package/.codex/skills/quality-test/SKILL.md +202 -198
  61. package/.codex/skills/quality-test-gen/SKILL.md +93 -104
  62. package/.codex/skills/spec-add/SKILL.md +58 -39
  63. package/.codex/skills/spec-load/SKILL.md +45 -40
  64. package/.codex/skills/spec-map/SKILL.md +180 -182
  65. package/.codex/skills/spec-setup/SKILL.md +94 -76
  66. package/.codex/skills/team-coordinate/SKILL.md +346 -357
  67. package/.codex/skills/team-executor/SKILL.md +70 -112
  68. package/.codex/skills/team-lifecycle-v4/SKILL.md +311 -299
  69. package/.codex/skills/team-quality-assurance/SKILL.md +234 -227
  70. package/.codex/skills/team-review/SKILL.md +232 -225
  71. package/.codex/skills/team-tech-debt/SKILL.md +78 -100
  72. package/.codex/skills/team-testing/SKILL.md +242 -235
  73. package/.codex/skills/wiki-connect/SKILL.md +75 -0
  74. package/.codex/skills/wiki-digest/SKILL.md +87 -0
  75. package/README.md +14 -11
  76. package/README.zh-CN.md +14 -11
  77. package/chains/issue-lifecycle.json +13 -13
  78. package/chains/singles/issue-analyze.json +3 -3
  79. package/chains/singles/issue-execute.json +3 -3
  80. package/chains/singles/issue-plan.json +3 -3
  81. package/dashboard/dist-server/dashboard/src/server/commander/commander-agent.js +2 -2
  82. package/dashboard/dist-server/dashboard/src/server/commander/commander-agent.js.map +1 -1
  83. package/dashboard/dist-server/dashboard/src/server/coordinator/chain-map.js +3 -3
  84. package/dashboard/dist-server/dashboard/src/server/coordinator/chain-map.js.map +1 -1
  85. package/dashboard/dist-server/dashboard/src/server/routes/issues.js +34 -0
  86. package/dashboard/dist-server/dashboard/src/server/routes/issues.js.map +1 -1
  87. package/dashboard/dist-server/dashboard/src/server/routes/specs.d.ts +1 -1
  88. package/dashboard/dist-server/dashboard/src/server/routes/specs.js +75 -30
  89. package/dashboard/dist-server/dashboard/src/server/routes/specs.js.map +1 -1
  90. package/dashboard/dist-server/dashboard/src/server/state/event-bus.d.ts +5 -0
  91. package/dashboard/dist-server/dashboard/src/server/state/event-bus.js +5 -0
  92. package/dashboard/dist-server/dashboard/src/server/state/event-bus.js.map +1 -1
  93. package/dashboard/dist-server/dashboard/src/server/ws/handlers/execution-handler.js +2 -3
  94. package/dashboard/dist-server/dashboard/src/server/ws/handlers/execution-handler.js.map +1 -1
  95. package/dashboard/dist-server/dashboard/src/shared/constants.js +5 -0
  96. package/dashboard/dist-server/dashboard/src/shared/constants.js.map +1 -1
  97. package/dashboard/dist-server/dashboard/src/shared/issue-types.d.ts +5 -0
  98. package/dashboard/dist-server/dashboard/src/shared/issue-types.js.map +1 -1
  99. package/dashboard/dist-server/dashboard/src/shared/normalize-task.d.ts +2 -0
  100. package/dashboard/dist-server/dashboard/src/shared/normalize-task.js +75 -0
  101. package/dashboard/dist-server/dashboard/src/shared/normalize-task.js.map +1 -0
  102. package/dashboard/dist-server/dashboard/src/shared/team-types.d.ts +21 -0
  103. package/dashboard/dist-server/dashboard/src/shared/team-types.js.map +1 -1
  104. package/dashboard/dist-server/dashboard/src/shared/types.d.ts +3 -2
  105. package/dashboard/dist-server/dashboard/src/shared/ws-protocol.d.ts +1 -1
  106. package/dashboard/dist-server/dashboard/src/shared/ws-protocol.js.map +1 -1
  107. package/dashboard/dist-server/src/hooks/constants.d.ts +92 -12
  108. package/dashboard/dist-server/src/hooks/constants.js +151 -16
  109. package/dashboard/dist-server/src/hooks/constants.js.map +1 -1
  110. package/dashboard/dist-server/src/types/index.d.ts +5 -0
  111. package/dist/src/commands/collab.d.ts +1 -34
  112. package/dist/src/commands/collab.d.ts.map +1 -1
  113. package/dist/src/commands/collab.js +8 -76
  114. package/dist/src/commands/collab.js.map +1 -1
  115. package/dist/src/commands/hooks.d.ts +5 -1
  116. package/dist/src/commands/hooks.d.ts.map +1 -1
  117. package/dist/src/commands/hooks.js +115 -10
  118. package/dist/src/commands/hooks.js.map +1 -1
  119. package/dist/src/commands/install-ui/InstallConfirm.d.ts +3 -1
  120. package/dist/src/commands/install-ui/InstallConfirm.d.ts.map +1 -1
  121. package/dist/src/commands/install-ui/InstallConfirm.js +3 -1
  122. package/dist/src/commands/install-ui/InstallConfirm.js.map +1 -1
  123. package/dist/src/commands/install-ui/InstallExecution.d.ts.map +1 -1
  124. package/dist/src/commands/install-ui/InstallExecution.js +5 -1
  125. package/dist/src/commands/install-ui/InstallExecution.js.map +1 -1
  126. package/dist/src/commands/install-ui/InstallFlow.d.ts.map +1 -1
  127. package/dist/src/commands/install-ui/InstallFlow.js +7 -3
  128. package/dist/src/commands/install-ui/InstallFlow.js.map +1 -1
  129. package/dist/src/commands/install-ui/StatuslineConfig.d.ts +6 -1
  130. package/dist/src/commands/install-ui/StatuslineConfig.d.ts.map +1 -1
  131. package/dist/src/commands/install-ui/StatuslineConfig.js +27 -5
  132. package/dist/src/commands/install-ui/StatuslineConfig.js.map +1 -1
  133. package/dist/src/commands/spec.d.ts.map +1 -1
  134. package/dist/src/commands/spec.js +7 -2
  135. package/dist/src/commands/spec.js.map +1 -1
  136. package/dist/src/hooks/__tests__/statusline-visual-test.d.ts +7 -0
  137. package/dist/src/hooks/__tests__/statusline-visual-test.d.ts.map +1 -0
  138. package/dist/src/hooks/__tests__/statusline-visual-test.js +236 -0
  139. package/dist/src/hooks/__tests__/statusline-visual-test.js.map +1 -0
  140. package/dist/src/hooks/constants.d.ts +92 -12
  141. package/dist/src/hooks/constants.d.ts.map +1 -1
  142. package/dist/src/hooks/constants.js +151 -16
  143. package/dist/src/hooks/constants.js.map +1 -1
  144. package/dist/src/hooks/guards/index.d.ts +2 -0
  145. package/dist/src/hooks/guards/index.d.ts.map +1 -1
  146. package/dist/src/hooks/guards/index.js +2 -0
  147. package/dist/src/hooks/guards/index.js.map +1 -1
  148. package/dist/src/hooks/guards/preflight-guard.d.ts +29 -0
  149. package/dist/src/hooks/guards/preflight-guard.d.ts.map +1 -0
  150. package/dist/src/hooks/guards/preflight-guard.js +95 -0
  151. package/dist/src/hooks/guards/preflight-guard.js.map +1 -0
  152. package/dist/src/hooks/guards/spec-validator.d.ts +25 -0
  153. package/dist/src/hooks/guards/spec-validator.d.ts.map +1 -0
  154. package/dist/src/hooks/guards/spec-validator.js +66 -0
  155. package/dist/src/hooks/guards/spec-validator.js.map +1 -0
  156. package/dist/src/hooks/index.d.ts +1 -0
  157. package/dist/src/hooks/index.d.ts.map +1 -1
  158. package/dist/src/hooks/index.js +1 -0
  159. package/dist/src/hooks/index.js.map +1 -1
  160. package/dist/src/hooks/keyword-spec-injector.d.ts +21 -0
  161. package/dist/src/hooks/keyword-spec-injector.d.ts.map +1 -0
  162. package/dist/src/hooks/keyword-spec-injector.js +96 -0
  163. package/dist/src/hooks/keyword-spec-injector.js.map +1 -0
  164. package/dist/src/hooks/plugins/spec-injection-plugin.d.ts +2 -1
  165. package/dist/src/hooks/plugins/spec-injection-plugin.d.ts.map +1 -1
  166. package/dist/src/hooks/plugins/spec-injection-plugin.js +21 -12
  167. package/dist/src/hooks/plugins/spec-injection-plugin.js.map +1 -1
  168. package/dist/src/hooks/preflight-core.d.ts +37 -0
  169. package/dist/src/hooks/preflight-core.d.ts.map +1 -0
  170. package/dist/src/hooks/preflight-core.js +86 -0
  171. package/dist/src/hooks/preflight-core.js.map +1 -0
  172. package/dist/src/hooks/spec-bridge.d.ts +40 -0
  173. package/dist/src/hooks/spec-bridge.d.ts.map +1 -0
  174. package/dist/src/hooks/spec-bridge.js +97 -0
  175. package/dist/src/hooks/spec-bridge.js.map +1 -0
  176. package/dist/src/hooks/spec-injector.d.ts.map +1 -1
  177. package/dist/src/hooks/spec-injector.js +18 -12
  178. package/dist/src/hooks/spec-injector.js.map +1 -1
  179. package/dist/src/hooks/statusline.d.ts +8 -17
  180. package/dist/src/hooks/statusline.d.ts.map +1 -1
  181. package/dist/src/hooks/statusline.js +269 -112
  182. package/dist/src/hooks/statusline.js.map +1 -1
  183. package/dist/src/i18n/locales/en.d.ts.map +1 -1
  184. package/dist/src/i18n/locales/en.js +5 -0
  185. package/dist/src/i18n/locales/en.js.map +1 -1
  186. package/dist/src/i18n/locales/zh.d.ts.map +1 -1
  187. package/dist/src/i18n/locales/zh.js +5 -0
  188. package/dist/src/i18n/locales/zh.js.map +1 -1
  189. package/dist/src/i18n/types.d.ts +5 -0
  190. package/dist/src/i18n/types.d.ts.map +1 -1
  191. package/dist/src/team/phase-orchestrator.d.ts +52 -0
  192. package/dist/src/team/phase-orchestrator.d.ts.map +1 -0
  193. package/dist/src/team/phase-orchestrator.js +165 -0
  194. package/dist/src/team/phase-orchestrator.js.map +1 -0
  195. package/dist/src/team/phase-types.d.ts +51 -0
  196. package/dist/src/team/phase-types.d.ts.map +1 -0
  197. package/dist/src/team/phase-types.js +41 -0
  198. package/dist/src/team/phase-types.js.map +1 -0
  199. package/dist/src/tools/collab-adapter.d.ts +17 -0
  200. package/dist/src/tools/collab-adapter.d.ts.map +1 -1
  201. package/dist/src/tools/collab-adapter.js +138 -0
  202. package/dist/src/tools/collab-adapter.js.map +1 -1
  203. package/dist/src/tools/index.d.ts.map +1 -1
  204. package/dist/src/tools/index.js +6 -0
  205. package/dist/src/tools/index.js.map +1 -1
  206. package/dist/src/tools/merge-validator.d.ts +24 -0
  207. package/dist/src/tools/merge-validator.d.ts.map +1 -0
  208. package/dist/src/tools/merge-validator.js +220 -0
  209. package/dist/src/tools/merge-validator.js.map +1 -0
  210. package/dist/src/tools/spec-entry-parser.d.ts +56 -0
  211. package/dist/src/tools/spec-entry-parser.d.ts.map +1 -0
  212. package/dist/src/tools/spec-entry-parser.js +196 -0
  213. package/dist/src/tools/spec-entry-parser.js.map +1 -0
  214. package/dist/src/tools/spec-init.d.ts.map +1 -1
  215. package/dist/src/tools/spec-init.js +66 -92
  216. package/dist/src/tools/spec-init.js.map +1 -1
  217. package/dist/src/tools/spec-keyword-index.d.ts +30 -0
  218. package/dist/src/tools/spec-keyword-index.d.ts.map +1 -0
  219. package/dist/src/tools/spec-keyword-index.js +101 -0
  220. package/dist/src/tools/spec-keyword-index.js.map +1 -0
  221. package/dist/src/tools/spec-loader.d.ts +3 -3
  222. package/dist/src/tools/spec-loader.d.ts.map +1 -1
  223. package/dist/src/tools/spec-loader.js +49 -23
  224. package/dist/src/tools/spec-loader.js.map +1 -1
  225. package/dist/src/tools/team-agents.d.ts +27 -0
  226. package/dist/src/tools/team-agents.d.ts.map +1 -0
  227. package/dist/src/tools/team-agents.js +362 -0
  228. package/dist/src/tools/team-agents.js.map +1 -0
  229. package/dist/src/tools/team-mailbox.d.ts +40 -0
  230. package/dist/src/tools/team-mailbox.d.ts.map +1 -0
  231. package/dist/src/tools/team-mailbox.js +384 -0
  232. package/dist/src/tools/team-mailbox.js.map +1 -0
  233. package/dist/src/tools/team-msg.d.ts +17 -8
  234. package/dist/src/tools/team-msg.d.ts.map +1 -1
  235. package/dist/src/tools/team-msg.js +110 -13
  236. package/dist/src/tools/team-msg.js.map +1 -1
  237. package/dist/src/tools/team-tasks-mcp.d.ts +27 -0
  238. package/dist/src/tools/team-tasks-mcp.d.ts.map +1 -0
  239. package/dist/src/tools/team-tasks-mcp.js +408 -0
  240. package/dist/src/tools/team-tasks-mcp.js.map +1 -0
  241. package/dist/src/types/index.d.ts +5 -0
  242. package/dist/src/types/index.d.ts.map +1 -1
  243. package/package.json +2 -1
  244. package/templates/cli/prompts/workflow-skill-conflict-patterns.txt +3 -3
  245. package/templates/cli/prompts/workflow-skill-lessons-learned.txt +3 -3
  246. package/templates/search-tools.md +1 -1
  247. package/workflows/analyze.md +816 -816
  248. package/workflows/brainstorm.md +471 -471
  249. package/workflows/cli-tools-usage.md +44 -27
  250. package/workflows/codebase-rebuild.md +332 -332
  251. package/workflows/codebase-refresh.md +240 -240
  252. package/workflows/delegate-usage.md +3 -3
  253. package/workflows/execute.md +1 -1
  254. package/workflows/harvest.md +420 -420
  255. package/workflows/integration-test.md +343 -343
  256. package/workflows/issue-analyze.md +6 -2
  257. package/workflows/issue-discover.md +414 -414
  258. package/workflows/issue-execute.md +6 -3
  259. package/workflows/issue-plan.md +5 -2
  260. package/workflows/maestro-coordinate.codex.md +281 -470
  261. package/workflows/maestro-coordinate.md +14 -14
  262. package/workflows/maestro-link-coordinate.md +2 -2
  263. package/workflows/maestro.codex.md +710 -0
  264. package/workflows/maestro.md +10 -11
  265. package/workflows/map.md +111 -111
  266. package/workflows/milestone-complete.md +176 -176
  267. package/workflows/plan.md +1 -1
  268. package/workflows/quick.md +497 -497
  269. package/workflows/refactor.md +300 -300
  270. package/workflows/retrospective.md +1 -1
  271. package/workflows/roadmap.md +335 -335
  272. package/workflows/spec-generate.md +640 -640
  273. package/workflows/specs-add.md +46 -81
  274. package/workflows/specs-load.md +15 -17
  275. package/workflows/specs-setup.md +40 -161
  276. package/.claude/commands/manage-issue-analyze.md +0 -62
  277. package/.claude/commands/manage-issue-execute.md +0 -73
  278. package/.claude/commands/manage-issue-plan.md +0 -62
  279. package/.codex/skills/manage-issue-analyze/SKILL.md +0 -207
  280. package/.codex/skills/manage-issue-execute/SKILL.md +0 -200
  281. package/.codex/skills/manage-issue-plan/SKILL.md +0 -186
@@ -1,186 +1,190 @@
1
- ---
2
- name: manage-learn
3
- description: Capture atomic learning insights into .workflow/learning/lessons.jsonl. Lightweight CRUD over the shared learning store — supports capture, list, search, and show modes. No LLM or CLI calls; all operations are pure file reads and writes.
4
- argument-hint: "[\"<insight text>\"|list|search <query>|show <INS-id>] [--category pattern|antipattern|decision|tool|gotcha|technique] [--tag t1,t2] [--phase N] [--confidence high|medium|low]"
5
- allowed-tools: Read, Write, Edit, Bash, Glob, Grep
6
- ---
7
-
8
- # Manage Learn
9
-
10
- ## Usage
11
-
12
- ```bash
13
- $manage-learn "Always read state.json before planning to detect current phase"
14
- $manage-learn "list --limit 10 --category antipattern"
15
- $manage-learn "search context propagation"
16
- $manage-learn "show INS-a3f7b2c1"
17
- $manage-learn "\"Zod v4 breaks z.object().strict() API\" --category gotcha --tag zod,typescript"
18
- ```
19
-
20
- **Flags** (capture mode):
21
- - `--category <name>` `pattern|antipattern|decision|tool|gotcha|technique`. Default: inferred from text keywords.
22
- - `--tag t1,t2` — Comma-separated tags. Always adds `manual` implicitly.
23
- - `--phase <N>` — Override auto-detected current phase. `--phase 0` forces no phase link.
24
- - `--confidence high|medium|low` Default: medium.
25
-
26
- **Flags** (list/search mode):
27
- - `--tag t1,t2` — Filter by tag
28
- - `--category <name>` Filter by category
29
- - `--phase <N>` — Filter by phase
30
- - `--lens <name>` — Filter by retrospective lens (technical|process|quality|decision)
31
- - `--limit <N>` — Row limit (default 20)
32
-
33
- **Storage**:
34
- - `.workflow/learning/lessons.jsonl`append-only JSONL (shared with `quality-retrospective`)
35
- - `.workflow/learning/learning-index.json` — searchable index
36
-
37
- ---
38
-
39
- ## Overview
40
-
41
- Pure file-operation CRUD skill for the workflow learning library. No agent spawning, no CLI calls, no LLM inference just parse-infer-append-confirm. Complements `quality-retrospective`: where retrospective extracts insights in bulk from completed phases, `manage-learn` captures one timeless insight at a time during active work. Both write to the same `lessons.jsonl` store, disambiguated by `source` and `lens` fields.
42
-
43
- ```
44
- Parse Mode → Bootstrap Store → Execute Mode → Confirm
45
- (capture / (on first use) (Bash/Read/ (INS-id
46
- list / Bash+Write) Write/Grep) + hints)
47
- search /
48
- show)
49
- ```
50
-
51
- ---
52
-
53
- ## Implementation
54
-
55
- ### Step 1: Parse Mode and Validate Arguments
56
-
57
- Parse the first non-flag token from `$ARGUMENTS`:
58
-
59
- | First token | Mode |
60
- |-------------|------|
61
- | `list` | list |
62
- | `search` followed by query | search |
63
- | `show` followed by INS-id | show |
64
- | Empty | Prompt with `functions.request_user_input` |
65
- | Any other text (quoted or not) | capture |
66
-
67
- Validate `--category` if provided (allowed: pattern, antipattern, decision, tool, gotcha, technique). E002 if unknown.
68
-
69
- ### Step 2: Bootstrap Learning Store (on first use)
70
-
71
- Check if `.workflow/learning/lessons.jsonl` exists. If not:
72
- ```javascript
73
- // Create directory and empty files use Bash + Write (apply_patch cannot create empty files reliably)
74
- Bash('mkdir -p .workflow/learning && touch .workflow/learning/lessons.jsonl')
75
- Write('.workflow/learning/learning-index.json', '{"version":1,"entries":[]}\n')
76
- ```
77
-
78
- Verify `.workflow/` exists (E001 if not).
79
-
80
- ### Step 3: Execute Mode
81
-
82
- #### Capture Mode
83
-
84
- 1. **Infer category** from insight text (keyword heuristics, no LLM):
85
-
86
- | Keywords present in text | Inferred category |
87
- |--------------------------|-------------------|
88
- | always, should, prefer, best practice | pattern |
89
- | never, avoid, don't, pitfall, breaks | antipattern |
90
- | decided, chose, tradeoff, because, reason | decision |
91
- | tool, library, framework, package, cli | tool |
92
- | gotcha, surprising, unexpected, watch out | gotcha |
93
- | technique, approach, method, pattern for | technique |
94
-
95
- 2. **Auto-link phase**: Read `.workflow/state.json` for `current_phase`. Resolve matching directory slug from `.workflow/phases/`. `--phase 0` forces null.
96
-
97
- 3. **Generate stable INS-id**: `INS-{8 lowercase hex}` from `hash(insightText + timestamp)`.
98
-
99
- 4. **Build lessons.jsonl row**:
100
- ```json
101
- {
102
- "id": "INS-a3f7b2c1",
103
- "title": "<first 80 chars of insight>",
104
- "summary": "<full insight text>",
105
- "source": "manual",
106
- "lens": null,
107
- "category": "<inferred or explicit>",
108
- "tags": ["manual", "<user tags...>"],
109
- "phase": <N or null>,
110
- "phase_slug": "<slug or null>",
111
- "confidence": "<high|medium|low>",
112
- "routed_to": null,
113
- "routed_id": null,
114
- "created_at": "<ISO>"
115
- }
116
- ```
117
-
118
- 5. **Append to lessons.jsonl**:
119
- ```javascript
120
- // Append single JSON line — Bash echo avoids rewriting the whole file
121
- Bash(`echo '${JSON.stringify(insightRow)}' >> .workflow/learning/lessons.jsonl`)
122
- ```
123
-
124
- 6. **Update learning-index.json**: Read, push entry, write back:
125
- ```javascript
126
- const index = JSON.parse(Read('.workflow/learning/learning-index.json'))
127
- index.entries.push({ id: insightRow.id, title: insightRow.title, category: insightRow.category, tags: insightRow.tags, phase: insightRow.phase, created_at: insightRow.created_at })
128
- Write('.workflow/learning/learning-index.json', JSON.stringify(index, null, 2) + '\n')
129
- ```
130
-
131
- #### List Mode
132
-
133
- Read `learning-index.json` entries array. Apply filters (`--tag`, `--category`, `--phase`, `--lens`). Sort newest-first. Display up to `--limit` rows (default 20):
134
-
135
- ```
136
- ID Category Phase Tags Title
137
- INS-a3f7b2c1 gotcha 3 manual,zod Zod v4 breaks z.object().strict() API
138
- INS-b1c2d3e4 pattern 2 manual Always read state.json before planning
139
- ```
140
-
141
- #### Search Mode
142
-
143
- Grep across `lessons.jsonl` for the query string. Rank by field match weight: title (3) > tags (2) > summary (1). Display top matches with ID, category, phase, title.
144
-
145
- #### Show Mode
146
-
147
- Validate INS-id format `INS-[0-9a-f]{8}`. Find row in `lessons.jsonl` where `id` matches. Display full record with all fields. If `routed_to` is set, display the linked artifact path.
148
-
149
- ### Step 4: Display Confirmation
150
-
151
- Capture mode:
152
- ```
153
- === INSIGHT CAPTURED ===
154
- ID: INS-a3f7b2c1
155
- Category: gotcha
156
- Phase: 3 (phase-03-api-layer)
157
- Confidence: medium
158
- Tags: manual, zod, typescript
159
-
160
- Next: $manage-learn "list" or $manage-learn "search zod"
161
- ```
162
-
163
- ---
164
-
165
- ## Error Handling
166
-
167
- | Code | Severity | Description | Stage |
168
- |------|----------|-------------|-------|
169
- | E001 | error | `.workflow/` not initialized — run `$maestro-init` first | parse_input |
170
- | E002 | error | Unknown `--category` value | parse_input |
171
- | E003 | error | `show` mode requires INS-id argument | show |
172
- | E004 | error | INS-id not found in lessons.jsonl | show |
173
- | W001 | warning | Auto-phase detection: current_phase found but no matching directory; phase set to null | capture |
174
- | W002 | warning | `learning-index.json` row count differs from `lessons.jsonl`; offer to rebuild index | list/search |
175
-
176
- ---
177
-
178
- ## Core Rules
179
-
180
- 1. **No LLM or CLI calls**: This skill is pure file I/O — parse, infer, append, confirm. No `exec_command`, no `spawn_agent`.
181
- 2. **Bootstrap on demand**: Create `.workflow/learning/` structure on first use; do not require it to exist.
182
- 3. **Append-only lessons.jsonl**: Never rewrite or delete existing rows.
183
- 4. **Stable INS-ids**: `INS-{8hex}` from `hash(insightText + timestamp)` same text at different times gets different ids.
184
- 5. **Source field**: Always `"manual"` for captures from this skill; `"retrospective"` is reserved for `quality-retrospective`.
185
- 6. **Phase auto-link**: Read `state.json` automatically; `--phase 0` is the only way to force null.
186
- 7. **Keyword inference is approximate**: When in doubt, default to `pattern` category rather than prompting user.
1
+ ---
2
+ name: manage-learn
3
+ description: Capture atomic learning insights into .workflow/learning/lessons.jsonl. Lightweight CRUD over the shared learning store — supports capture, list, search, and show modes. No LLM or CLI calls; all operations are pure file reads and writes.
4
+ argument-hint: "[\"<insight text>\"|list|search <query>|show <INS-id>] [--category pattern|antipattern|decision|tool|gotcha|technique] [--tag t1,t2] [--phase N] [--confidence high|medium|low]"
5
+ allowed-tools: Read, Write, Edit, Bash, Glob, Grep
6
+ ---
7
+
8
+ <purpose>
9
+ Pure file-operation CRUD skill for the workflow learning library. No agent spawning, no CLI calls, no LLM inference — just parse-infer-append-confirm. Complements `quality-retrospective`: where retrospective extracts insights in bulk from completed phases, `manage-learn` captures one timeless insight at a time during active work. Both write to the same `lessons.jsonl` store, disambiguated by `source` and `lens` fields.
10
+
11
+ ```
12
+ Parse Mode → Bootstrap Store → Execute Mode → Confirm
13
+ (capture / (on first use) (Bash/Read/ (INS-id
14
+ list / Bash+Write) Write/Grep) + hints)
15
+ search /
16
+ show)
17
+ ```
18
+ </purpose>
19
+
20
+ <context>
21
+ $ARGUMENTSmode token followed by options.
22
+
23
+ ```bash
24
+ $manage-learn "Always read state.json before planning to detect current phase"
25
+ $manage-learn "list --limit 10 --category antipattern"
26
+ $manage-learn "search context propagation"
27
+ $manage-learn "show INS-a3f7b2c1"
28
+ $manage-learn "\"Zod v4 breaks z.object().strict() API\" --category gotcha --tag zod,typescript"
29
+ ```
30
+
31
+ **Flags** (capture mode):
32
+ - `--category <name>` — `pattern|antipattern|decision|tool|gotcha|technique`. Default: inferred from text keywords.
33
+ - `--tag t1,t2` — Comma-separated tags. Always adds `manual` implicitly.
34
+ - `--phase <N>` Override auto-detected current phase. `--phase 0` forces no phase link.
35
+ - `--confidence high|medium|low` — Default: medium.
36
+
37
+ **Flags** (list/search mode):
38
+ - `--tag t1,t2` — Filter by tag
39
+ - `--category <name>` — Filter by category
40
+ - `--phase <N>` — Filter by phase
41
+ - `--lens <name>`Filter by retrospective lens (technical|process|quality|decision)
42
+ - `--limit <N>` — Row limit (default 20)
43
+
44
+ **Storage**:
45
+ - `.workflow/learning/lessons.jsonl` — append-only JSONL (shared with `quality-retrospective`)
46
+ - `.workflow/learning/learning-index.json` — searchable index
47
+ </context>
48
+
49
+ <invariants>
50
+ 1. **No LLM or CLI calls**: This skill is pure file I/O — parse, infer, append, confirm. No `exec_command`, no `spawn_agent`.
51
+ 2. **Bootstrap on demand**: Create `.workflow/learning/` structure on first use; do not require it to exist.
52
+ 3. **Append-only lessons.jsonl**: Never rewrite or delete existing rows.
53
+ 4. **Stable INS-ids**: `INS-{8hex}` from `hash(insightText + timestamp)` — same text at different times gets different ids.
54
+ 5. **Source field**: Always `"manual"` for captures from this skill; `"retrospective"` is reserved for `quality-retrospective`.
55
+ 6. **Phase auto-link**: Read `state.json` automatically; `--phase 0` is the only way to force null.
56
+ 7. **Keyword inference is approximate**: When in doubt, default to `pattern` category rather than prompting user.
57
+ </invariants>
58
+
59
+ <execution>
60
+
61
+ ### Step 1: Parse Mode and Validate Arguments
62
+
63
+ Parse the first non-flag token from `$ARGUMENTS`:
64
+
65
+ | First token | Mode |
66
+ |-------------|------|
67
+ | `list` | list |
68
+ | `search` followed by query | search |
69
+ | `show` followed by INS-id | show |
70
+ | Empty | Prompt with `functions.request_user_input` |
71
+ | Any other text (quoted or not) | capture |
72
+
73
+ Validate `--category` if provided (allowed: pattern, antipattern, decision, tool, gotcha, technique). E002 if unknown.
74
+
75
+ ### Step 2: Bootstrap Learning Store (on first use)
76
+
77
+ Check if `.workflow/learning/lessons.jsonl` exists. If not:
78
+ ```javascript
79
+ // Create directory and empty files — use Bash + Write (apply_patch cannot create empty files reliably)
80
+ Bash('mkdir -p .workflow/learning && touch .workflow/learning/lessons.jsonl')
81
+ Write('.workflow/learning/learning-index.json', '{"version":1,"entries":[]}\n')
82
+ ```
83
+
84
+ Verify `.workflow/` exists (E001 if not).
85
+
86
+ ### Step 3: Execute Mode
87
+
88
+ #### Capture Mode
89
+
90
+ 1. **Infer category** from insight text (keyword heuristics, no LLM):
91
+
92
+ | Keywords present in text | Inferred category |
93
+ |--------------------------|-------------------|
94
+ | always, should, prefer, best practice | pattern |
95
+ | never, avoid, don't, pitfall, breaks | antipattern |
96
+ | decided, chose, tradeoff, because, reason | decision |
97
+ | tool, library, framework, package, cli | tool |
98
+ | gotcha, surprising, unexpected, watch out | gotcha |
99
+ | technique, approach, method, pattern for | technique |
100
+
101
+ 2. **Auto-link phase**: Read `.workflow/state.json` for `current_phase`. Resolve matching directory slug from `.workflow/phases/`. `--phase 0` forces null.
102
+
103
+ 3. **Generate stable INS-id**: `INS-{8 lowercase hex}` from `hash(insightText + timestamp)`.
104
+
105
+ 4. **Build lessons.jsonl row**:
106
+ ```json
107
+ {
108
+ "id": "INS-a3f7b2c1",
109
+ "title": "<first 80 chars of insight>",
110
+ "summary": "<full insight text>",
111
+ "source": "manual",
112
+ "lens": null,
113
+ "category": "<inferred or explicit>",
114
+ "tags": ["manual", "<user tags...>"],
115
+ "phase": "<N or null>",
116
+ "phase_slug": "<slug or null>",
117
+ "confidence": "<high|medium|low>",
118
+ "routed_to": null,
119
+ "routed_id": null,
120
+ "created_at": "<ISO>"
121
+ }
122
+ ```
123
+
124
+ 5. **Append to lessons.jsonl**:
125
+ ```javascript
126
+ // Append single JSON line — Bash echo avoids rewriting the whole file
127
+ Bash(`echo '${JSON.stringify(insightRow)}' >> .workflow/learning/lessons.jsonl`)
128
+ ```
129
+
130
+ 6. **Update learning-index.json**: Read, push entry, write back:
131
+ ```javascript
132
+ const index = JSON.parse(Read('.workflow/learning/learning-index.json'))
133
+ index.entries.push({ id: insightRow.id, title: insightRow.title, category: insightRow.category, tags: insightRow.tags, phase: insightRow.phase, created_at: insightRow.created_at })
134
+ Write('.workflow/learning/learning-index.json', JSON.stringify(index, null, 2) + '\n')
135
+ ```
136
+
137
+ #### List Mode
138
+
139
+ Read `learning-index.json` entries array. Apply filters (`--tag`, `--category`, `--phase`, `--lens`). Sort newest-first. Display up to `--limit` rows (default 20):
140
+
141
+ ```
142
+ ID Category Phase Tags Title
143
+ INS-a3f7b2c1 gotcha 3 manual,zod Zod v4 breaks z.object().strict() API
144
+ INS-b1c2d3e4 pattern 2 manual Always read state.json before planning
145
+ ```
146
+
147
+ #### Search Mode
148
+
149
+ Grep across `lessons.jsonl` for the query string. Rank by field match weight: title (3) > tags (2) > summary (1). Display top matches with ID, category, phase, title.
150
+
151
+ #### Show Mode
152
+
153
+ Validate INS-id format `INS-[0-9a-f]{8}`. Find row in `lessons.jsonl` where `id` matches. Display full record with all fields. If `routed_to` is set, display the linked artifact path.
154
+
155
+ ### Step 4: Display Confirmation
156
+
157
+ Capture mode:
158
+ ```
159
+ === INSIGHT CAPTURED ===
160
+ ID: INS-a3f7b2c1
161
+ Category: gotcha
162
+ Phase: 3 (phase-03-api-layer)
163
+ Confidence: medium
164
+ Tags: manual, zod, typescript
165
+
166
+ Next: $manage-learn "list" or $manage-learn "search zod"
167
+ ```
168
+ </execution>
169
+
170
+ <error_codes>
171
+ | Code | Severity | Description | Stage |
172
+ |------|----------|-------------|-------|
173
+ | E001 | error | `.workflow/` not initialized run `$maestro-init` first | parse_input |
174
+ | E002 | error | Unknown `--category` value | parse_input |
175
+ | E003 | error | `show` mode requires INS-id argument | show |
176
+ | E004 | error | INS-id not found in lessons.jsonl | show |
177
+ | W001 | warning | Auto-phase detection: current_phase found but no matching directory; phase set to null | capture |
178
+ | W002 | warning | `learning-index.json` row count differs from `lessons.jsonl`; offer to rebuild index | list/search |
179
+ </error_codes>
180
+
181
+ <success_criteria>
182
+ - [ ] Mode parsed correctly (capture, list, search, show)
183
+ - [ ] Learning store bootstrapped on first use
184
+ - [ ] Capture: category inferred from keywords, phase auto-linked, INS-id generated
185
+ - [ ] Capture: row appended to lessons.jsonl (append-only), index updated
186
+ - [ ] List: filters applied, newest-first, respects --limit
187
+ - [ ] Search: grep with weighted ranking across title/tags/summary
188
+ - [ ] Show: full record displayed for valid INS-id
189
+ - [ ] No LLM or CLI calls — pure file I/O only
190
+ </success_criteria>
@@ -1,72 +1,95 @@
1
- ---
2
- name: manage-memory
3
- description: Manage memory entries across workflow and system stores (list, search, view, edit, delete, prune)
4
- argument-hint: "[list|search|view|edit|delete|prune] [query|id|file] [--store workflow|system|all] [--tag tag] [--type compact|tip]"
5
- allowed-tools: Read, Write, Edit, Bash, Glob, Grep, AskUserQuestion
6
- ---
7
-
8
- # Memory Management
9
-
10
- ## Usage
11
-
12
- ```bash
13
- $manage-memory
14
- $manage-memory "list --store workflow"
15
- $manage-memory "search authentication"
16
- $manage-memory "view MEM-20260318-001"
17
- $manage-memory "edit MEMORY.md"
18
- $manage-memory "delete TIP-20260318-001 --confirm"
19
- $manage-memory "prune --before 2026-01-01 --type tip --dry-run"
20
- ```
21
-
22
- ---
23
-
24
- ## Implementation
25
-
26
- ### Step 1: Resolve Store Paths
27
-
28
- - **Workflow store**: `.workflow/memory/` (entries: `MEM-*.md`, `TIP-*.md`, index: `memory-index.json`)
29
- - **System store**: `~/.claude/projects/{project}/memory/` (files: `MEMORY.md` + topic `.md` files)
30
-
31
- Derive system path from project root (replace path separators with `--`, prefix drive letter).
32
-
33
- ### Step 2: Parse Subcommand
34
-
35
- Default to `list` if no arguments. Parse first token as subcommand.
36
-
37
- ### Step 3: Execute Subcommand
38
-
39
- **list**: Show entries from both stores (or filtered by `--store`, `--tag`, `--type`).
40
- - Workflow: read `memory-index.json`, display ID, type, date, tags, title
41
- - System: list `.md` files in system memory directory
42
-
43
- **search `<query>`**: Full-text grep across both stores. Rank by match count.
44
-
45
- **view `<id|file>`**: Auto-detect store from format (`MEM-*/TIP-*` = workflow, else system). Display full content.
46
-
47
- **edit `<file>`**: Edit a system memory file. Read current content, apply changes. Warn if MEMORY.md exceeds 200 lines (W003).
48
-
49
- **delete `<id|file>`**: Require confirmation (or `--confirm` flag). MEMORY.md cannot be deleted (E004). Remove entry file and update `memory-index.json`.
50
-
51
- **prune**: Requires at least one filter (`--tag`, `--type`, `--before`, `--after`). Workflow store only. `--dry-run` previews without deleting.
52
-
53
- ### Step 4: Integrity Check
54
-
55
- After write operations, verify:
56
- - No orphaned files without index entries (W001)
57
- - No dangling index references to missing files (W001)
58
- - System MEMORY.md references valid topic files (W002)
59
-
60
- ---
61
-
62
- ## Error Handling
63
-
64
- | Code | Severity | Description |
65
- |------|----------|-------------|
66
- | E001 | error | No memory stores found -- run `Skill({ skill: "memory-capture" })` or create MEMORY.md |
67
- | E002 | error | Entry ID or filename not found |
68
- | E003 | error | Prune requires at least one filter flag |
69
- | E004 | error | Cannot delete MEMORY.md -- use `edit` subcommand instead |
70
- | W001 | warning | Index has orphaned files or dangling references |
71
- | W002 | warning | MEMORY.md references non-existent topic file |
72
- | W003 | warning | MEMORY.md exceeds 200 lines -- content truncated at load |
1
+ ---
2
+ name: manage-memory
3
+ description: Manage memory entries across workflow and system stores (list, search, view, edit, delete, prune)
4
+ argument-hint: "[list|search|view|edit|delete|prune] [query|id|file] [--store workflow|system|all] [--tag tag] [--type compact|tip]"
5
+ allowed-tools: Read, Write, Edit, Bash, Glob, Grep, AskUserQuestion
6
+ ---
7
+
8
+ <purpose>
9
+ Manage memory entries across workflow and system stores. Provides list, search, view, edit, delete, and prune operations over `.workflow/memory/` (workflow store) and `~/.claude/projects/{project}/memory/` (system store).
10
+ </purpose>
11
+
12
+ <context>
13
+ $ARGUMENTS — subcommand followed by options. Defaults to `list` if no arguments.
14
+
15
+ ```bash
16
+ $manage-memory
17
+ $manage-memory "list --store workflow"
18
+ $manage-memory "search authentication"
19
+ $manage-memory "view MEM-20260318-001"
20
+ $manage-memory "edit MEMORY.md"
21
+ $manage-memory "delete TIP-20260318-001 --confirm"
22
+ $manage-memory "prune --before 2026-01-01 --type tip --dry-run"
23
+ ```
24
+
25
+ **Subcommands**: `list`, `search`, `view`, `edit`, `delete`, `prune`.
26
+
27
+ **Flags**:
28
+ - `--store workflow|system|all` Target store (default: all)
29
+ - `--tag <tag>` Filter by tag
30
+ - `--type compact|tip` — Filter by entry type
31
+ - `--confirm` Skip delete confirmation prompt
32
+ - `--before <date>` / `--after <date>` — Date filters for prune
33
+ - `--dry-run` Preview prune without deleting
34
+ </context>
35
+
36
+ <execution>
37
+
38
+ ### Step 1: Resolve Store Paths
39
+
40
+ - **Workflow store**: `.workflow/memory/` (entries: `MEM-*.md`, `TIP-*.md`, index: `memory-index.json`)
41
+ - **System store**: `~/.claude/projects/{project}/memory/` (files: `MEMORY.md` + topic `.md` files)
42
+
43
+ Derive system path from project root (replace path separators with `--`, prefix drive letter).
44
+
45
+ ### Step 2: Parse Subcommand
46
+
47
+ Default to `list` if no arguments. Parse first token as subcommand.
48
+
49
+ ### Step 3: Execute Subcommand
50
+
51
+ **list**: Show entries from both stores (or filtered by `--store`, `--tag`, `--type`).
52
+ - Workflow: read `memory-index.json`, display ID, type, date, tags, title
53
+ - System: list `.md` files in system memory directory
54
+
55
+ **search `<query>`**: Full-text grep across both stores. Rank by match count.
56
+
57
+ **view `<id|file>`**: Auto-detect store from format (`MEM-*/TIP-*` = workflow, else system). Display full content.
58
+
59
+ **edit `<file>`**: Edit a system memory file. Read current content, apply changes. Warn if MEMORY.md exceeds 200 lines (W003).
60
+
61
+ **delete `<id|file>`**: Require confirmation (or `--confirm` flag). MEMORY.md cannot be deleted (E004). Remove entry file and update `memory-index.json`.
62
+
63
+ **prune**: Requires at least one filter (`--tag`, `--type`, `--before`, `--after`). Workflow store only. `--dry-run` previews without deleting.
64
+
65
+ ### Step 4: Integrity Check
66
+
67
+ After write operations, verify:
68
+ - No orphaned files without index entries (W001)
69
+ - No dangling index references to missing files (W001)
70
+ - System MEMORY.md references valid topic files (W002)
71
+ </execution>
72
+
73
+ <error_codes>
74
+ | Code | Severity | Description |
75
+ |------|----------|-------------|
76
+ | E001 | error | No memory stores found -- run `Skill({ skill: "memory-capture" })` or create MEMORY.md |
77
+ | E002 | error | Entry ID or filename not found |
78
+ | E003 | error | Prune requires at least one filter flag |
79
+ | E004 | error | Cannot delete MEMORY.md -- use `edit` subcommand instead |
80
+ | W001 | warning | Index has orphaned files or dangling references |
81
+ | W002 | warning | MEMORY.md references non-existent topic file |
82
+ | W003 | warning | MEMORY.md exceeds 200 lines -- content truncated at load |
83
+ </error_codes>
84
+
85
+ <success_criteria>
86
+ - [ ] Store paths resolved correctly for both workflow and system stores
87
+ - [ ] Subcommand parsed and validated (defaults to list)
88
+ - [ ] list: displays entries from selected stores with filtering
89
+ - [ ] search: full-text grep across stores, ranked by match count
90
+ - [ ] view: auto-detects store, displays full content
91
+ - [ ] edit: reads and applies changes to system memory files
92
+ - [ ] delete: requires confirmation, prevents MEMORY.md deletion
93
+ - [ ] prune: requires filter, supports --dry-run, workflow store only
94
+ - [ ] Integrity check after write operations (orphans, dangling refs)
95
+ </success_criteria>