moflo 4.8.10 → 4.8.12

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 (182) hide show
  1. package/.claude/agents/browser/browser-agent.yaml +182 -0
  2. package/.claude/agents/core/coder.md +265 -265
  3. package/.claude/agents/core/planner.md +167 -167
  4. package/.claude/agents/core/researcher.md +189 -189
  5. package/.claude/agents/core/reviewer.md +325 -325
  6. package/.claude/agents/core/tester.md +318 -318
  7. package/.claude/agents/dual-mode/codex-coordinator.md +224 -224
  8. package/.claude/agents/dual-mode/codex-worker.md +211 -211
  9. package/.claude/agents/dual-mode/dual-orchestrator.md +291 -291
  10. package/.claude/agents/github/code-review-swarm.md +537 -537
  11. package/.claude/agents/github/github-modes.md +172 -172
  12. package/.claude/agents/github/issue-tracker.md +318 -318
  13. package/.claude/agents/github/multi-repo-swarm.md +552 -552
  14. package/.claude/agents/github/pr-manager.md +190 -190
  15. package/.claude/agents/github/project-board-sync.md +508 -508
  16. package/.claude/agents/github/release-manager.md +366 -366
  17. package/.claude/agents/github/release-swarm.md +582 -582
  18. package/.claude/agents/github/repo-architect.md +397 -397
  19. package/.claude/agents/github/swarm-issue.md +572 -572
  20. package/.claude/agents/github/swarm-pr.md +427 -427
  21. package/.claude/agents/github/sync-coordinator.md +451 -451
  22. package/.claude/agents/github/workflow-automation.md +634 -634
  23. package/.claude/agents/goal/code-goal-planner.md +445 -445
  24. package/.claude/agents/hive-mind/collective-intelligence-coordinator.md +129 -129
  25. package/.claude/agents/hive-mind/queen-coordinator.md +202 -202
  26. package/.claude/agents/hive-mind/scout-explorer.md +241 -241
  27. package/.claude/agents/hive-mind/swarm-memory-manager.md +192 -192
  28. package/.claude/agents/hive-mind/worker-specialist.md +216 -216
  29. package/.claude/agents/neural/safla-neural.md +73 -73
  30. package/.claude/agents/reasoning/goal-planner.md +72 -72
  31. package/.claude/agents/swarm/adaptive-coordinator.md +395 -395
  32. package/.claude/agents/swarm/hierarchical-coordinator.md +326 -326
  33. package/.claude/agents/swarm/mesh-coordinator.md +391 -391
  34. package/.claude/agents/templates/migration-plan.md +745 -745
  35. package/.claude/commands/agents/agent-spawning.md +28 -28
  36. package/.claude/commands/analysis/COMMAND_COMPLIANCE_REPORT.md +53 -53
  37. package/.claude/commands/analysis/bottleneck-detect.md +162 -162
  38. package/.claude/commands/analysis/performance-bottlenecks.md +58 -58
  39. package/.claude/commands/analysis/token-efficiency.md +44 -44
  40. package/.claude/commands/automation/auto-agent.md +122 -122
  41. package/.claude/commands/automation/self-healing.md +105 -105
  42. package/.claude/commands/automation/session-memory.md +89 -89
  43. package/.claude/commands/automation/smart-agents.md +72 -72
  44. package/.claude/commands/coordination/init.md +44 -44
  45. package/.claude/commands/coordination/orchestrate.md +43 -43
  46. package/.claude/commands/coordination/spawn.md +45 -45
  47. package/.claude/commands/coordination/swarm-init.md +85 -85
  48. package/.claude/commands/github/github-modes.md +146 -146
  49. package/.claude/commands/github/github-swarm.md +121 -121
  50. package/.claude/commands/github/issue-tracker.md +291 -291
  51. package/.claude/commands/github/pr-manager.md +169 -169
  52. package/.claude/commands/github/release-manager.md +337 -337
  53. package/.claude/commands/github/repo-architect.md +366 -366
  54. package/.claude/commands/github/sync-coordinator.md +300 -300
  55. package/.claude/commands/memory/neural.md +47 -47
  56. package/.claude/commands/monitoring/agents.md +44 -44
  57. package/.claude/commands/monitoring/status.md +46 -46
  58. package/.claude/commands/optimization/auto-topology.md +61 -61
  59. package/.claude/commands/optimization/parallel-execution.md +49 -49
  60. package/.claude/commands/sparc/analyzer.md +51 -51
  61. package/.claude/commands/sparc/architect.md +53 -53
  62. package/.claude/commands/sparc/ask.md +97 -97
  63. package/.claude/commands/sparc/batch-executor.md +54 -54
  64. package/.claude/commands/sparc/code.md +89 -89
  65. package/.claude/commands/sparc/coder.md +54 -54
  66. package/.claude/commands/sparc/debug.md +83 -83
  67. package/.claude/commands/sparc/debugger.md +54 -54
  68. package/.claude/commands/sparc/designer.md +53 -53
  69. package/.claude/commands/sparc/devops.md +109 -109
  70. package/.claude/commands/sparc/docs-writer.md +80 -80
  71. package/.claude/commands/sparc/documenter.md +54 -54
  72. package/.claude/commands/sparc/innovator.md +54 -54
  73. package/.claude/commands/sparc/integration.md +83 -83
  74. package/.claude/commands/sparc/mcp.md +117 -117
  75. package/.claude/commands/sparc/memory-manager.md +54 -54
  76. package/.claude/commands/sparc/optimizer.md +54 -54
  77. package/.claude/commands/sparc/orchestrator.md +131 -131
  78. package/.claude/commands/sparc/post-deployment-monitoring-mode.md +83 -83
  79. package/.claude/commands/sparc/refinement-optimization-mode.md +83 -83
  80. package/.claude/commands/sparc/researcher.md +54 -54
  81. package/.claude/commands/sparc/reviewer.md +54 -54
  82. package/.claude/commands/sparc/security-review.md +80 -80
  83. package/.claude/commands/sparc/sparc-modes.md +174 -174
  84. package/.claude/commands/sparc/sparc.md +111 -111
  85. package/.claude/commands/sparc/spec-pseudocode.md +80 -80
  86. package/.claude/commands/sparc/supabase-admin.md +348 -348
  87. package/.claude/commands/sparc/swarm-coordinator.md +54 -54
  88. package/.claude/commands/sparc/tdd.md +54 -54
  89. package/.claude/commands/sparc/tester.md +54 -54
  90. package/.claude/commands/sparc/tutorial.md +79 -79
  91. package/.claude/commands/sparc/workflow-manager.md +54 -54
  92. package/.claude/commands/sparc.md +166 -166
  93. package/.claude/commands/swarm/analysis.md +95 -95
  94. package/.claude/commands/swarm/development.md +96 -96
  95. package/.claude/commands/swarm/examples.md +168 -168
  96. package/.claude/commands/swarm/maintenance.md +102 -102
  97. package/.claude/commands/swarm/optimization.md +117 -117
  98. package/.claude/commands/swarm/research.md +136 -136
  99. package/.claude/commands/swarm/testing.md +131 -131
  100. package/.claude/commands/training/neural-patterns.md +73 -73
  101. package/.claude/commands/training/specialization.md +62 -62
  102. package/.claude/commands/workflows/development.md +77 -77
  103. package/.claude/commands/workflows/research.md +62 -62
  104. package/.claude/guidance/moflo-bootstrap.md +129 -0
  105. package/.claude/guidance/{agent-bootstrap.md → shipped/agent-bootstrap.md} +126 -126
  106. package/.claude/guidance/{guidance-memory-strategy.md → shipped/guidance-memory-strategy.md} +262 -262
  107. package/.claude/guidance/{memory-strategy.md → shipped/memory-strategy.md} +204 -204
  108. package/.claude/guidance/{moflo.md → shipped/moflo.md} +45 -31
  109. package/.claude/guidance/{task-swarm-integration.md → shipped/task-swarm-integration.md} +441 -348
  110. package/.claude/helpers/gate-hook.mjs +50 -0
  111. package/.claude/helpers/gate.cjs +138 -236
  112. package/.claude/helpers/hook-handler.cjs +64 -326
  113. package/.claude/helpers/post-commit +16 -0
  114. package/.claude/helpers/pre-commit +26 -0
  115. package/.claude/helpers/prompt-hook.mjs +72 -0
  116. package/.claude/scripts/build-embeddings.mjs +549 -0
  117. package/.claude/scripts/generate-code-map.mjs +697 -0
  118. package/.claude/scripts/hooks.mjs +656 -0
  119. package/.claude/scripts/index-guidance.mjs +893 -0
  120. package/.claude/scripts/index-tests.mjs +710 -0
  121. package/.claude/scripts/semantic-search.mjs +473 -0
  122. package/.claude/scripts/session-start-launcher.mjs +226 -0
  123. package/.claude/settings.json +351 -290
  124. package/.claude/settings.local.json +4 -3
  125. package/.claude/skills/browser/SKILL.md +204 -0
  126. package/.claude/skills/fl/SKILL.md +29 -23
  127. package/.claude/skills/flo/SKILL.md +29 -23
  128. package/.claude/skills/github-code-review/SKILL.md +4 -4
  129. package/.claude/skills/github-multi-repo/SKILL.md +8 -8
  130. package/.claude/skills/github-project-management/SKILL.md +6 -6
  131. package/.claude/skills/github-release-management/SKILL.md +12 -12
  132. package/.claude/skills/github-workflow-automation/SKILL.md +6 -6
  133. package/.claude/skills/hooks-automation/SKILL.md +1201 -1201
  134. package/.claude/skills/performance-analysis/SKILL.md +563 -563
  135. package/.claude/skills/sparc-methodology/SKILL.md +64 -64
  136. package/.claude/skills/swarm-advanced/SKILL.md +77 -77
  137. package/.claude/workflow-state.json +9 -0
  138. package/.claude-plugin/README.md +3 -3
  139. package/.claude-plugin/docs/PLUGIN_SUMMARY.md +3 -3
  140. package/.claude-plugin/docs/QUICKSTART.md +4 -4
  141. package/.claude-plugin/marketplace.json +3 -3
  142. package/.claude-plugin/plugin.json +3 -3
  143. package/.claude-plugin/scripts/install.sh +9 -9
  144. package/.claude-plugin/scripts/verify.sh +7 -7
  145. package/README.md +311 -116
  146. package/bin/gate-hook.mjs +50 -0
  147. package/bin/gate.cjs +138 -0
  148. package/bin/hook-handler.cjs +83 -0
  149. package/bin/hooks.mjs +72 -12
  150. package/bin/index-guidance.mjs +29 -35
  151. package/bin/index-tests.mjs +710 -0
  152. package/bin/lib/process-manager.mjs +243 -0
  153. package/bin/lib/registry-cleanup.cjs +41 -0
  154. package/bin/prompt-hook.mjs +72 -0
  155. package/bin/semantic-search.mjs +472 -440
  156. package/bin/session-start-launcher.mjs +81 -31
  157. package/bin/setup-project.mjs +65 -65
  158. package/package.json +4 -2
  159. package/src/@claude-flow/cli/README.md +1 -1
  160. package/src/@claude-flow/cli/bin/cli.js +175 -175
  161. package/src/@claude-flow/cli/dist/src/commands/doctor.js +1091 -736
  162. package/src/@claude-flow/cli/dist/src/commands/github.d.ts +12 -0
  163. package/src/@claude-flow/cli/dist/src/commands/github.js +505 -0
  164. package/src/@claude-flow/cli/dist/src/commands/hive-mind.js +90 -90
  165. package/src/@claude-flow/cli/dist/src/commands/index.d.ts +1 -0
  166. package/src/@claude-flow/cli/dist/src/commands/index.js +7 -0
  167. package/src/@claude-flow/cli/dist/src/config-adapter.js +1 -1
  168. package/src/@claude-flow/cli/dist/src/init/claudemd-generator.d.ts +29 -24
  169. package/src/@claude-flow/cli/dist/src/init/claudemd-generator.js +73 -494
  170. package/src/@claude-flow/cli/dist/src/init/executor.js +109 -5
  171. package/src/@claude-flow/cli/dist/src/init/helpers-generator.d.ts +14 -0
  172. package/src/@claude-flow/cli/dist/src/init/helpers-generator.js +156 -24
  173. package/src/@claude-flow/cli/dist/src/init/mcp-generator.js +20 -20
  174. package/src/@claude-flow/cli/dist/src/init/moflo-init.d.ts +30 -23
  175. package/src/@claude-flow/cli/dist/src/init/moflo-init.js +727 -670
  176. package/src/@claude-flow/cli/dist/src/init/settings-generator.js +23 -14
  177. package/src/@claude-flow/cli/dist/src/mcp-server.js +3 -3
  178. package/src/@claude-flow/cli/dist/src/plugins/manager.js +9 -8
  179. package/src/@claude-flow/cli/dist/src/services/worker-daemon.d.ts +1 -0
  180. package/src/@claude-flow/cli/dist/src/services/worker-daemon.js +3 -1
  181. package/src/@claude-flow/cli/dist/src/services/workflow-gate.js +10 -10
  182. package/src/@claude-flow/cli/package.json +106 -106
@@ -8,7 +8,7 @@
8
8
  */
9
9
 
10
10
  import { spawn } from 'child_process';
11
- import { existsSync, readFileSync, copyFileSync } from 'fs';
11
+ import { existsSync, readFileSync, copyFileSync, unlinkSync, readdirSync } from 'fs';
12
12
  import { resolve, dirname } from 'path';
13
13
  import { fileURLToPath } from 'url';
14
14
 
@@ -75,54 +75,87 @@ try {
75
75
  try { cachedVersion = readFileSync(versionStampPath, 'utf-8').trim(); } catch {}
76
76
 
77
77
  if (installedVersion !== cachedVersion) {
78
+ const binDir = resolve(projectRoot, 'node_modules/moflo/bin');
79
+ const manifestPath = resolve(projectRoot, '.claude-flow', 'installed-files.json');
80
+
81
+ // ── Manifest-based auto-update ──────────────────────────────────────
82
+ //
83
+ // IMPORTANT: Every file moflo installs into the destination project
84
+ // MUST be recorded in `currentManifest` via syncFile() or a manual
85
+ // push. On upgrade, files in the OLD manifest but NOT in the new one
86
+ // are deleted — this is how we clean up files from prior versions
87
+ // without accidentally deleting user-created or runtime files.
88
+ //
89
+ // When adding/removing files from the sync lists below:
90
+ // 1. Use syncFile() for copied files (it records automatically)
91
+ // 2. Push to currentManifest manually for generated files
92
+ // 3. That's it — cleanup is automatic on the next upgrade
93
+ // ────────────────────────────────────────────────────────────────────
94
+
95
+ // Load the previous manifest so we can diff after syncing
96
+ let previousManifest = [];
97
+ try { previousManifest = JSON.parse(readFileSync(manifestPath, 'utf-8')); } catch { /* ok */ }
98
+
99
+ // Track every file we install this round
100
+ const currentManifest = [];
101
+
102
+ /** Copy src → dest if src exists, record in manifest. */
103
+ function syncFile(src, dest, manifestKey) {
104
+ if (existsSync(src)) {
105
+ try { copyFileSync(src, dest); currentManifest.push(manifestKey); } catch { /* non-fatal */ }
106
+ }
107
+ }
108
+
78
109
  // Version changed — sync scripts from bin/
79
110
  if (autoUpdateConfig.scripts) {
80
- const binDir = resolve(projectRoot, 'node_modules/moflo/bin');
81
111
  const scriptsDir = resolve(projectRoot, '.claude/scripts');
82
112
  const scriptFiles = [
83
113
  'hooks.mjs', 'session-start-launcher.mjs', 'index-guidance.mjs',
84
114
  'build-embeddings.mjs', 'generate-code-map.mjs', 'semantic-search.mjs',
115
+ 'index-tests.mjs',
85
116
  ];
86
117
  for (const file of scriptFiles) {
87
- const src = resolve(binDir, file);
88
- const dest = resolve(scriptsDir, file);
89
- if (existsSync(src)) {
90
- try { copyFileSync(src, dest); } catch { /* non-fatal */ }
91
- }
118
+ syncFile(resolve(binDir, file), resolve(scriptsDir, file), `.claude/scripts/${file}`);
92
119
  }
93
120
  }
94
121
 
95
- // Sync helpers from source .claude/helpers/
122
+ // Sync helpers from bin/ and source .claude/helpers/
96
123
  if (autoUpdateConfig.helpers) {
97
- const sourceHelpersDir = resolve(projectRoot, 'node_modules/moflo/src/@claude-flow/cli/.claude/helpers');
98
124
  const helpersDir = resolve(projectRoot, '.claude/helpers');
99
- const helperFiles = [
100
- 'auto-memory-hook.mjs', 'statusline.cjs', 'pre-commit', 'post-commit',
125
+ if (!existsSync(helpersDir)) mkdirSync(helpersDir, { recursive: true });
126
+
127
+ // Gate and hook helpers — shipped as static files in bin/
128
+ const binHelperFiles = [
129
+ 'gate.cjs', 'gate-hook.mjs', 'prompt-hook.mjs', 'hook-handler.cjs',
101
130
  ];
102
- for (const file of helperFiles) {
103
- const src = resolve(sourceHelpersDir, file);
104
- const dest = resolve(helpersDir, file);
105
- if (existsSync(src)) {
106
- try { copyFileSync(src, dest); } catch { /* non-fatal */ }
107
- }
131
+ for (const file of binHelperFiles) {
132
+ syncFile(resolve(binDir, file), resolve(helpersDir, file), `.claude/helpers/${file}`);
108
133
  }
109
134
 
110
- // Also sync generated helpers via upgrade CLI (hook-handler.cjs, gate.cjs, etc.)
111
- // These are generated, not shipped, so we trigger an upgrade in the background
112
- const localCli = resolve(projectRoot, 'node_modules/moflo/src/@claude-flow/cli/bin/cli.js');
113
- if (existsSync(localCli)) {
114
- try {
115
- const proc = spawn('node', [localCli, 'init', '--upgrade', '--quiet'], {
116
- cwd: projectRoot, stdio: 'ignore', detached: true, windowsHide: true,
117
- });
118
- proc.unref();
119
- } catch { /* non-fatal */ }
135
+ // Other helpers from .claude/helpers/ and CLI .claude/helpers/
136
+ const helperSources = [
137
+ resolve(projectRoot, 'node_modules/moflo/.claude/helpers'),
138
+ resolve(projectRoot, 'node_modules/moflo/src/@claude-flow/cli/.claude/helpers'),
139
+ ];
140
+ const sourceHelperFiles = [
141
+ 'auto-memory-hook.mjs', 'statusline.cjs', 'intelligence.cjs', 'pre-commit', 'post-commit',
142
+ ];
143
+ for (const file of sourceHelperFiles) {
144
+ const dest = resolve(helpersDir, file);
145
+ for (const srcDir of helperSources) {
146
+ const src = resolve(srcDir, file);
147
+ if (existsSync(src)) {
148
+ try { copyFileSync(src, dest); currentManifest.push(`.claude/helpers/${file}`); } catch { /* non-fatal */ }
149
+ break; // first source wins
150
+ }
151
+ }
120
152
  }
121
153
  }
122
154
 
123
155
  // Sync guidance bootstrap file (moflo-bootstrap.md)
124
- // Ensures subagents can read guidance directly from disk
125
- const bootstrapSrc = resolve(projectRoot, 'node_modules/moflo/.claude/guidance/agent-bootstrap.md');
156
+ const shippedBootstrap = resolve(projectRoot, 'node_modules/moflo/.claude/guidance/shipped/agent-bootstrap.md');
157
+ const legacyBootstrap = resolve(projectRoot, 'node_modules/moflo/.claude/guidance/agent-bootstrap.md');
158
+ const bootstrapSrc = existsSync(shippedBootstrap) ? shippedBootstrap : legacyBootstrap;
126
159
  const guidanceDir = resolve(projectRoot, '.claude/guidance');
127
160
  const bootstrapDest = resolve(guidanceDir, 'moflo-bootstrap.md');
128
161
  if (existsSync(bootstrapSrc)) {
@@ -131,13 +164,28 @@ try {
131
164
  const header = '<!-- AUTO-GENERATED by moflo session-start. Do not edit — changes will be overwritten. -->\n<!-- Source: node_modules/moflo/.claude/guidance/agent-bootstrap.md -->\n\n';
132
165
  const content = readFileSync(bootstrapSrc, 'utf-8');
133
166
  writeFileSync(bootstrapDest, header + content);
167
+ currentManifest.push('.claude/guidance/moflo-bootstrap.md');
134
168
  } catch { /* non-fatal */ }
135
169
  }
136
170
 
137
- // Write version stamp
171
+ // ── Clean up files we installed previously but no longer ship ──
172
+ // Only remove files that are in the OLD manifest but NOT in the new one.
173
+ // This ensures we never delete user-created or runtime-generated files.
174
+ if (previousManifest.length > 0) {
175
+ const currentSet = new Set(currentManifest);
176
+ for (const rel of previousManifest) {
177
+ if (!currentSet.has(rel)) {
178
+ const abs = resolve(projectRoot, rel);
179
+ try { if (existsSync(abs)) unlinkSync(abs); } catch { /* non-fatal */ }
180
+ }
181
+ }
182
+ }
183
+
184
+ // Write updated manifest + version stamp
138
185
  try {
139
186
  const cfDir = resolve(projectRoot, '.claude-flow');
140
187
  if (!existsSync(cfDir)) mkdirSync(cfDir, { recursive: true });
188
+ writeFileSync(manifestPath, JSON.stringify(currentManifest, null, 2));
141
189
  writeFileSync(versionStampPath, installedVersion);
142
190
  } catch {}
143
191
  }
@@ -149,7 +197,9 @@ try {
149
197
  // ── 3b. Ensure guidance bootstrap file exists (even without version change) ──
150
198
  // Subagents need this file on disk for direct reads without memory search.
151
199
  try {
152
- const bootstrapSrc = resolve(projectRoot, 'node_modules/moflo/.claude/guidance/agent-bootstrap.md');
200
+ const shippedBs = resolve(projectRoot, 'node_modules/moflo/.claude/guidance/shipped/agent-bootstrap.md');
201
+ const legacyBs = resolve(projectRoot, 'node_modules/moflo/.claude/guidance/agent-bootstrap.md');
202
+ const bootstrapSrc = existsSync(shippedBs) ? shippedBs : legacyBs;
153
203
  const guidanceDir = resolve(projectRoot, '.claude/guidance');
154
204
  const bootstrapDest = resolve(guidanceDir, 'moflo-bootstrap.md');
155
205
  if (existsSync(bootstrapSrc) && !existsSync(bootstrapDest)) {
@@ -29,67 +29,57 @@ const args = process.argv.slice(2);
29
29
  const updateOnly = args.includes('--update');
30
30
  const checkOnly = args.includes('--check');
31
31
 
32
- // Markers for idempotent CLAUDE.md updates
33
- const MARKER_START = '<!-- MOFLO:SUBAGENT-PROTOCOL:START -->';
34
- const MARKER_END = '<!-- MOFLO:SUBAGENT-PROTOCOL:END -->';
35
-
32
+ // Markers for idempotent CLAUDE.md updates — keep in sync with claudemd-generator.ts
33
+ const MARKER_START = '<!-- MOFLO:INJECTED:START -->';
34
+ const MARKER_END = '<!-- MOFLO:INJECTED:END -->';
35
+ // Legacy markers to detect and replace
36
+ const LEGACY_STARTS = ['<!-- MOFLO:SUBAGENT-PROTOCOL:START -->', '<!-- MOFLO:START -->'];
37
+ const LEGACY_ENDS = ['<!-- MOFLO:SUBAGENT-PROTOCOL:END -->', '<!-- MOFLO:END -->'];
38
+
39
+ // Minimal injection — just enough for Claude to work with moflo.
40
+ // All detailed docs live in .claude/guidance/shipped/moflo.md.
36
41
  const CLAUDE_MD_SECTION = `${MARKER_START}
37
- ## FIRST ACTION ON EVERY PROMPT: Search Memory
42
+ ## MoFlo AI Agent Orchestration
38
43
 
39
- Your first tool call for every new user prompt MUST be a memory search. Do this BEFORE Glob, Grep, Read, or any file exploration. No exceptions.
44
+ This project uses [MoFlo](https://github.com/eric-cielo/moflo) for AI-assisted development workflows.
40
45
 
41
- WHY: Memory contains curated solutions, patterns, and architectural context from previous work. Without it, you will miss existing solutions, repeat mistakes that were already solved, and waste time re-discovering what is already known. Memory search is faster than file scanning.
46
+ ### FIRST ACTION ON EVERY PROMPT: Search Memory
42
47
 
43
- HOW: Use ToolSearch to load \`mcp__claude-flow__memory_search\`, then call it with a query describing your task. If MCP is unavailable, use:
44
- \`node bin/semantic-search.mjs "[task description]" --namespace guidance\`
48
+ Your first tool call for every new user prompt MUST be a memory search. Do this BEFORE Glob, Grep, Read, or any file exploration.
45
49
 
46
- ### Namespaces to search:
50
+ \`\`\`
51
+ mcp__moflo__memory_search — query: "<task description>", namespace: "guidance" or "patterns" or "code-map"
52
+ \`\`\`
47
53
 
48
- | Namespace | When to search | What it returns |
49
- |-----------|---------------|-----------------|
50
- | \`guidance\` | Always — understanding patterns, rules, conventions | Guidance docs, coding rules, domain context |
51
- | \`patterns\` | Always — prior solutions and implementation patterns | Learned patterns from previous task execution |
52
- | \`code-map\` | Finding where code lives (files, types, services) | Type-to-file mappings, directory contents, project overviews |
54
+ Search \`guidance\` and \`patterns\` namespaces on every prompt. Search \`code-map\` when navigating the codebase.
55
+ When the user asks you to remember something: \`mcp__moflo__memory_store\` with namespace \`knowledge\`.
53
56
 
54
- **Always search both \`guidance\` and \`patterns\` namespaces.** The \`patterns\` namespace contains solutions to problems already solved — skipping it means repeating past mistakes.
57
+ ### Workflow Gates (enforced automatically)
55
58
 
56
- For **codebase navigation** (finding where a type/service/component lives), also search the \`code-map\` namespace.
59
+ - **Memory-first**: Must search memory before Glob/Grep/Read
60
+ - **TaskCreate-first**: Must call TaskCreate before spawning Agent tool
57
61
 
58
- ## Memory System Access (MoFlo)
62
+ ### MCP Tools (preferred over CLI)
59
63
 
60
- ### Primary: MCP Tools (preferred)
61
- \`\`\`
62
- mcp__claude-flow__memory_search — query, namespace
63
- mcp__claude-flow__memory_store — key, value, namespace
64
- mcp__claude-flow__memory_retrieve key, namespace
65
- mcp__claude-flow__memory_list — namespace, limit
66
- \`\`\`
67
- Load via ToolSearch first: \`+claude-flow memory\`
64
+ | Tool | Purpose |
65
+ |------|---------|
66
+ | \`mcp__moflo__memory_search\` | Semantic search across indexed knowledge |
67
+ | \`mcp__moflo__memory_store\` | Store patterns and decisions |
68
+ | \`mcp__moflo__hooks_route\` | Route task to optimal agent type |
69
+ | \`mcp__moflo__hooks_pre-task\` | Record task start |
70
+ | \`mcp__moflo__hooks_post-task\` | Record task completion for learning |
71
+
72
+ ### CLI Fallback
68
73
 
69
- ### Fallback: CLI Scripts
70
74
  \`\`\`bash
71
75
  npx flo-search "[query]" --namespace guidance # Semantic search
72
- npx flo-embeddings # Rebuild embeddings
73
- npx flo-index # Re-index guidance docs
74
- npx flo-codemap --force # Regenerate code-map
76
+ npx flo doctor --fix # Health check
75
77
  \`\`\`
76
78
 
77
- ### Where Content Goes
78
-
79
- | Content Type | Destination | How to Write |
80
- |-------------|-------------|--------------|
81
- | Debugging lessons (bug found, root cause, fix) | Memory DB — \`patterns\` namespace | \`mcp__claude-flow__memory_store\` |
82
- | Architectural decisions (chose X over Y, why) | Memory DB — \`decisions\` namespace | \`mcp__claude-flow__memory_store\` |
83
- | Learned patterns (task succeeded/failed, what worked) | Memory DB — \`patterns\` namespace | \`mcp__claude-flow__memory_store\` |
84
- | Coding rules (always/never do X in code) | \`.claude/guidance/\` files | Edit directly |
85
- | Process/workflow rules (CI, PR, gates) | \`CLAUDE.md\` | Edit directly |
79
+ ### Full Reference
86
80
 
87
- ## Subagent Protocol (MoFlo)
88
-
89
- All subagents MUST read \`.claude/guidance/moflo-bootstrap.md\` before starting any work.
90
- It contains the memory-first protocol, discovery storage rules, and universal conventions.
91
-
92
- If \`.claude/guidance/agent-bootstrap.md\` also exists, read it next for project-specific rules.
81
+ For CLI commands, hooks, agents, swarm config, memory commands, and moflo.yaml options, see:
82
+ \`.claude/guidance/shipped/moflo.md\`
93
83
  ${MARKER_END}`;
94
84
 
95
85
  function log(msg) {
@@ -124,7 +114,10 @@ function findProjectRoot() {
124
114
  }
125
115
 
126
116
  function copyBootstrap(projectRoot) {
127
- const source = join(mofloRoot, '.claude', 'guidance', 'agent-bootstrap.md');
117
+ const shippedSource = join(mofloRoot, '.claude', 'guidance', 'shipped', 'agent-bootstrap.md');
118
+ const source = existsSync(shippedSource)
119
+ ? shippedSource
120
+ : join(mofloRoot, '.claude', 'guidance', 'agent-bootstrap.md');
128
121
  const targetDir = join(projectRoot, '.claude', 'guidance');
129
122
  const target = join(targetDir, 'moflo-bootstrap.md');
130
123
 
@@ -177,28 +170,35 @@ function updateClaudeMd(projectRoot) {
177
170
 
178
171
  const content = readFileSync(claudeMdPath, 'utf-8');
179
172
 
180
- // Check if markers already exist
181
- if (content.includes(MARKER_START)) {
182
- // Extract existing section and compare
183
- const startIdx = content.indexOf(MARKER_START);
184
- const endIdx = content.indexOf(MARKER_END);
173
+ // Check for current or legacy markers and replace
174
+ const allStarts = [MARKER_START, ...LEGACY_STARTS];
175
+ const allEnds = [MARKER_END, ...LEGACY_ENDS];
176
+
177
+ for (let i = 0; i < allStarts.length; i++) {
178
+ if (content.includes(allStarts[i])) {
179
+ const startIdx = content.indexOf(allStarts[i]);
180
+ const endIdx = content.indexOf(allEnds[i]);
181
+
182
+ if (endIdx > startIdx) {
183
+ // If current markers and content matches, we're up to date
184
+ if (i === 0) {
185
+ const existingSection = content.substring(startIdx, endIdx + allEnds[i].length);
186
+ if (existingSection === CLAUDE_MD_SECTION) {
187
+ log('✅ CLAUDE.md moflo section is current');
188
+ return true;
189
+ }
190
+ }
185
191
 
186
- if (endIdx > startIdx) {
187
- const existingSection = content.substring(startIdx, endIdx + MARKER_END.length);
188
- if (existingSection === CLAUDE_MD_SECTION) {
189
- log('✅ CLAUDE.md subagent section is current');
192
+ // Replace (current or legacy) with new section
193
+ if (!checkOnly) {
194
+ const updated = content.substring(0, startIdx) + CLAUDE_MD_SECTION + content.substring(endIdx + allEnds[i].length);
195
+ writeFileSync(claudeMdPath, updated, 'utf-8');
196
+ log(i === 0 ? '📝 Updated CLAUDE.md moflo section' : '📝 Replaced legacy CLAUDE.md section with minimal moflo injection');
197
+ } else {
198
+ log('⚠️ CLAUDE.md moflo section needs update');
199
+ }
190
200
  return true;
191
201
  }
192
-
193
- // Update existing section
194
- if (!checkOnly) {
195
- const updated = content.substring(0, startIdx) + CLAUDE_MD_SECTION + content.substring(endIdx + MARKER_END.length);
196
- writeFileSync(claudeMdPath, updated, 'utf-8');
197
- log('📝 Updated CLAUDE.md subagent protocol section');
198
- } else {
199
- log('⚠️ CLAUDE.md subagent section needs update');
200
- }
201
- return true;
202
202
  }
203
203
  }
204
204
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "moflo",
3
- "version": "4.8.10",
3
+ "version": "4.8.12",
4
4
  "description": "MoFlo — AI agent orchestration for Claude Code. Forked from ruflo/claude-flow with patches applied to source, plus feature-level orchestration.",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",
@@ -11,6 +11,7 @@
11
11
  "flo-search": "bin/semantic-search.mjs",
12
12
  "flo-embeddings": "bin/build-embeddings.mjs",
13
13
  "flo-index": "bin/index-guidance.mjs",
14
+ "flo-testmap": "bin/index-tests.mjs",
14
15
  "flo-learn": ".claude/helpers/learning-service.mjs",
15
16
  "moflo": "bin/cli.js",
16
17
  "claude-flow": "bin/cli.js"
@@ -40,6 +41,7 @@
40
41
  "src/@claude-flow/memory/package.json",
41
42
  ".claude-plugin/**",
42
43
  ".claude/**",
44
+ "!.claude/guidance/internal/**",
43
45
  "!.claude/**/*.db",
44
46
  "!.claude/**/*.map",
45
47
  "README.md",
@@ -83,7 +85,7 @@
83
85
  "@types/bcrypt": "^5.0.2",
84
86
  "@types/node": "^20.19.37",
85
87
  "eslint": "^8.0.0",
86
- "moflo": "^4.8.9",
88
+ "moflo": "^4.8.11",
87
89
  "tsx": "^4.21.0",
88
90
  "typescript": "^5.9.3",
89
91
  "vitest": "^4.0.0"
@@ -433,7 +433,7 @@ MoFlo uses a SQLite database (via sql.js/WASM — no native deps) to store three
433
433
 
434
434
  When `flo init` runs, it appends a workflow section to your CLAUDE.md that teaches Claude:
435
435
  - Always search memory before Glob/Grep/Read (enforced by gates)
436
- - Use `mcp__claude-flow__memory_search` for knowledge retrieval
436
+ - Use `mcp__moflo__memory_search` for knowledge retrieval
437
437
  - Use `/flo <issue>` (or `/fl`) for issue execution
438
438
  - Store learnings after task completion
439
439