moflo 4.9.20 → 4.9.22

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 (240) hide show
  1. package/.claude/agents/analysis/analyze-code-quality.md +0 -121
  2. package/.claude/agents/analysis/code-analyzer.md +5 -26
  3. package/.claude/agents/architecture/system-design/arch-system-design.md +0 -119
  4. package/.claude/agents/base-template-generator.md +0 -1
  5. package/.claude/agents/core/coder.md +0 -22
  6. package/.claude/agents/core/planner.md +0 -16
  7. package/.claude/agents/core/researcher.md +0 -16
  8. package/.claude/agents/core/reviewer.md +0 -17
  9. package/.claude/agents/core/tester.md +0 -19
  10. package/.claude/agents/custom/test-long-runner.md +0 -2
  11. package/.claude/agents/development/dev-backend-api.md +0 -167
  12. package/.claude/agents/development/dev-database.md +43 -0
  13. package/.claude/agents/development/dev-frontend.md +42 -0
  14. package/.claude/agents/devops/ci-cd/ops-cicd-github.md +0 -112
  15. package/.claude/agents/documentation/api-docs/docs-api-openapi.md +0 -111
  16. package/.claude/agents/security/security-auditor.md +45 -0
  17. package/.claude/guidance/shipped/moflo-agent-rules.md +172 -0
  18. package/.claude/guidance/shipped/moflo-claude-swarm-cohesion.md +73 -265
  19. package/.claude/guidance/shipped/moflo-cli-reference.md +6 -6
  20. package/.claude/guidance/shipped/moflo-core-guidance.md +66 -184
  21. package/.claude/guidance/shipped/moflo-cross-platform.md +1 -1
  22. package/.claude/guidance/shipped/moflo-error-handling.md +3 -3
  23. package/.claude/guidance/shipped/moflo-guidance-rules.md +17 -7
  24. package/.claude/guidance/shipped/moflo-memory-strategy.md +76 -182
  25. package/.claude/guidance/shipped/moflo-memorydb-maintenance.md +6 -8
  26. package/.claude/guidance/shipped/moflo-settings-injection.md +7 -9
  27. package/.claude/guidance/shipped/moflo-source-hygiene.md +5 -5
  28. package/.claude/guidance/shipped/moflo-spell-connectors.md +3 -4
  29. package/.claude/guidance/shipped/moflo-spell-custom-steps.md +3 -4
  30. package/.claude/guidance/shipped/moflo-spell-engine.md +40 -162
  31. package/.claude/guidance/shipped/moflo-spell-runner.md +134 -0
  32. package/.claude/guidance/shipped/moflo-spell-sandboxing.md +10 -57
  33. package/.claude/guidance/shipped/moflo-spell-troubleshooting.md +149 -0
  34. package/.claude/guidance/shipped/moflo-subagents.md +43 -114
  35. package/.claude/guidance/shipped/moflo-task-icons.md +4 -4
  36. package/.claude/guidance/shipped/moflo-user-facing-language.md +3 -3
  37. package/.claude/guidance/shipped/moflo-verbose-command-filtering.md +3 -3
  38. package/.claude/guidance/shipped/moflo-yaml-reference.md +4 -5
  39. package/.claude/helpers/gate.cjs +192 -15
  40. package/.claude/helpers/prompt-hook.mjs +4 -38
  41. package/.claude/helpers/simplify-classify.cjs +32 -11
  42. package/.claude/helpers/subagent-bootstrap.json +1 -1
  43. package/.claude/helpers/subagent-start.cjs +1 -1
  44. package/.claude/skills/connector-builder/SKILL.md +42 -429
  45. package/.claude/skills/connector-builder/templates/connector.md +189 -0
  46. package/.claude/skills/connector-builder/templates/step-command.md +176 -0
  47. package/.claude/skills/eldar/SKILL.md +7 -7
  48. package/.claude/skills/fl/SKILL.md +3 -3
  49. package/.claude/skills/fl/execution-modes.md +39 -16
  50. package/.claude/skills/fl/phases.md +3 -3
  51. package/.claude/skills/{simplify → flo-simplify}/SKILL.md +11 -11
  52. package/.claude/skills/guidance/SKILL.md +17 -9
  53. package/.claude/skills/memory-patterns/SKILL.md +1 -1
  54. package/.claude/skills/publish/SKILL.md +121 -36
  55. package/.claude/skills/reset-epic/SKILL.md +2 -2
  56. package/.claude/skills/spell-builder/SKILL.md +39 -226
  57. package/.claude/skills/spell-builder/architecture.md +1 -1
  58. package/.claude/skills/spell-builder/permissions.md +107 -0
  59. package/.claude/skills/spell-builder/preflight.md +101 -0
  60. package/.claude/skills/spell-schedule/SKILL.md +2 -3
  61. package/bin/gate.cjs +192 -15
  62. package/bin/lib/retired-files.mjs +146 -0
  63. package/bin/prompt-hook.mjs +4 -38
  64. package/bin/session-start-launcher.mjs +120 -1
  65. package/bin/setup-project.mjs +63 -69
  66. package/bin/simplify-classify.cjs +32 -11
  67. package/dist/src/cli/appliance/rvfa-builder.js +1 -1
  68. package/dist/src/cli/commands/agent.js +3 -9
  69. package/dist/src/cli/commands/doctor-checks-deep.js +4 -0
  70. package/dist/src/cli/commands/hooks.js +1 -3
  71. package/dist/src/cli/commands/index.js +2 -0
  72. package/dist/src/cli/commands/retire.js +111 -0
  73. package/dist/src/cli/hooks/reasoningbank/index.js +7 -7
  74. package/dist/src/cli/init/claudemd-generator.js +30 -33
  75. package/dist/src/cli/init/executor.js +53 -69
  76. package/dist/src/cli/init/helpers-generator.js +165 -52
  77. package/dist/src/cli/init/moflo-init.js +41 -114
  78. package/dist/src/cli/init/settings-generator.js +44 -14
  79. package/dist/src/cli/mcp-tools/agent-tools.js +9 -27
  80. package/dist/src/cli/mcp-tools/hooks-tools.js +23 -21
  81. package/dist/src/cli/memory/controllers/semantic-router.js +18 -12
  82. package/dist/src/cli/memory/sona-optimizer.js +6 -6
  83. package/dist/src/cli/neural/domain/services/learning-service.js +3 -3
  84. package/dist/src/cli/services/agent-router.js +2 -5
  85. package/dist/src/cli/services/hook-block-hash.js +11 -2
  86. package/dist/src/cli/services/hook-wiring.js +86 -3
  87. package/dist/src/cli/services/subagent-bootstrap.js +1 -1
  88. package/dist/src/cli/shared/events/example-usage.js +6 -6
  89. package/dist/src/cli/shared/hooks/task-hooks.js +8 -8
  90. package/dist/src/cli/version.js +1 -1
  91. package/package.json +3 -2
  92. package/retired-files.json +1989 -0
  93. package/scripts/post-install-bootstrap.mjs +19 -0
  94. package/src/cli/data/model-registry.json +2 -2
  95. package/.claude/agents/consensus/byzantine-coordinator.md +0 -63
  96. package/.claude/agents/consensus/crdt-synchronizer.md +0 -997
  97. package/.claude/agents/consensus/gossip-coordinator.md +0 -63
  98. package/.claude/agents/consensus/performance-benchmarker.md +0 -851
  99. package/.claude/agents/consensus/quorum-manager.md +0 -823
  100. package/.claude/agents/consensus/raft-manager.md +0 -63
  101. package/.claude/agents/consensus/security-manager.md +0 -622
  102. package/.claude/agents/data/ml/data-ml-model.md +0 -193
  103. package/.claude/agents/github/code-review-swarm.md +0 -538
  104. package/.claude/agents/github/github-modes.md +0 -172
  105. package/.claude/agents/github/issue-tracker.md +0 -311
  106. package/.claude/agents/github/multi-repo-swarm.md +0 -551
  107. package/.claude/agents/github/pr-manager.md +0 -183
  108. package/.claude/agents/github/project-board-sync.md +0 -508
  109. package/.claude/agents/github/release-manager.md +0 -360
  110. package/.claude/agents/github/release-swarm.md +0 -580
  111. package/.claude/agents/github/repo-architect.md +0 -391
  112. package/.claude/agents/github/swarm-issue.md +0 -566
  113. package/.claude/agents/github/swarm-pr.md +0 -414
  114. package/.claude/agents/github/sync-coordinator.md +0 -426
  115. package/.claude/agents/github/workflow-automation.md +0 -606
  116. package/.claude/agents/goal/code-goal-planner.md +0 -440
  117. package/.claude/agents/goal/goal-planner.md +0 -168
  118. package/.claude/agents/hive-mind/collective-intelligence-coordinator.md +0 -127
  119. package/.claude/agents/hive-mind/queen-coordinator.md +0 -198
  120. package/.claude/agents/hive-mind/scout-explorer.md +0 -233
  121. package/.claude/agents/hive-mind/swarm-memory-manager.md +0 -184
  122. package/.claude/agents/hive-mind/worker-specialist.md +0 -208
  123. package/.claude/agents/neural/safla-neural.md +0 -73
  124. package/.claude/agents/optimization/benchmark-suite.md +0 -665
  125. package/.claude/agents/optimization/load-balancer.md +0 -431
  126. package/.claude/agents/optimization/performance-monitor.md +0 -672
  127. package/.claude/agents/optimization/resource-allocator.md +0 -674
  128. package/.claude/agents/optimization/topology-optimizer.md +0 -808
  129. package/.claude/agents/reasoning/goal-planner.md +0 -67
  130. package/.claude/agents/sona/sona-learning-optimizer.md +0 -74
  131. package/.claude/agents/sparc/architecture.md +0 -472
  132. package/.claude/agents/sparc/pseudocode.md +0 -318
  133. package/.claude/agents/sparc/refinement.md +0 -525
  134. package/.claude/agents/sparc/specification.md +0 -276
  135. package/.claude/agents/specialized/mobile/spec-mobile-react-native.md +0 -225
  136. package/.claude/agents/swarm/adaptive-coordinator.md +0 -391
  137. package/.claude/agents/swarm/hierarchical-coordinator.md +0 -321
  138. package/.claude/agents/swarm/mesh-coordinator.md +0 -383
  139. package/.claude/agents/testing/production-validator.md +0 -395
  140. package/.claude/agents/testing/tdd-london-swarm.md +0 -244
  141. package/.claude/agents/v3/adr-architect.md +0 -184
  142. package/.claude/agents/v3/aidefence-guardian.md +0 -277
  143. package/.claude/agents/v3/claims-authorizer.md +0 -208
  144. package/.claude/agents/v3/collective-intelligence-coordinator.md +0 -988
  145. package/.claude/agents/v3/ddd-domain-expert.md +0 -220
  146. package/.claude/agents/v3/injection-analyst.md +0 -232
  147. package/.claude/agents/v3/memory-specialist.md +0 -987
  148. package/.claude/agents/v3/performance-engineer.md +0 -1225
  149. package/.claude/agents/v3/pii-detector.md +0 -146
  150. package/.claude/agents/v3/reasoningbank-learner.md +0 -213
  151. package/.claude/agents/v3/security-architect-aidefence.md +0 -405
  152. package/.claude/agents/v3/security-architect.md +0 -865
  153. package/.claude/agents/v3/security-auditor.md +0 -771
  154. package/.claude/agents/v3/sparc-orchestrator.md +0 -182
  155. package/.claude/agents/v3/swarm-memory-manager.md +0 -142
  156. package/.claude/agents/v3/v3-integration-architect.md +0 -205
  157. package/.claude/commands/claude-flow-help.md +0 -103
  158. package/.claude/commands/claude-flow-memory.md +0 -107
  159. package/.claude/commands/claude-flow-swarm.md +0 -205
  160. package/.claude/commands/github/README.md +0 -11
  161. package/.claude/commands/github/code-review-swarm.md +0 -514
  162. package/.claude/commands/github/code-review.md +0 -25
  163. package/.claude/commands/github/github-modes.md +0 -146
  164. package/.claude/commands/github/github-swarm.md +0 -113
  165. package/.claude/commands/github/issue-tracker.md +0 -284
  166. package/.claude/commands/github/issue-triage.md +0 -25
  167. package/.claude/commands/github/multi-repo-swarm.md +0 -519
  168. package/.claude/commands/github/pr-enhance.md +0 -26
  169. package/.claude/commands/github/pr-manager.md +0 -164
  170. package/.claude/commands/github/project-board-sync.md +0 -471
  171. package/.claude/commands/github/release-manager.md +0 -332
  172. package/.claude/commands/github/release-swarm.md +0 -544
  173. package/.claude/commands/github/repo-analyze.md +0 -25
  174. package/.claude/commands/github/repo-architect.md +0 -361
  175. package/.claude/commands/github/swarm-issue.md +0 -482
  176. package/.claude/commands/github/swarm-pr.md +0 -285
  177. package/.claude/commands/github/sync-coordinator.md +0 -294
  178. package/.claude/commands/github/workflow-automation.md +0 -442
  179. package/.claude/commands/hooks/README.md +0 -11
  180. package/.claude/commands/hooks/overview.md +0 -58
  181. package/.claude/commands/hooks/post-edit.md +0 -117
  182. package/.claude/commands/hooks/post-task.md +0 -112
  183. package/.claude/commands/hooks/pre-edit.md +0 -113
  184. package/.claude/commands/hooks/pre-task.md +0 -111
  185. package/.claude/commands/hooks/session-end.md +0 -118
  186. package/.claude/commands/hooks/setup.md +0 -103
  187. package/.claude/commands/simplify.md +0 -101
  188. package/.claude/commands/sparc/analyzer.md +0 -42
  189. package/.claude/commands/sparc/architect.md +0 -43
  190. package/.claude/commands/sparc/ask.md +0 -86
  191. package/.claude/commands/sparc/batch-executor.md +0 -44
  192. package/.claude/commands/sparc/code.md +0 -78
  193. package/.claude/commands/sparc/coder.md +0 -44
  194. package/.claude/commands/sparc/debug.md +0 -72
  195. package/.claude/commands/sparc/debugger.md +0 -44
  196. package/.claude/commands/sparc/designer.md +0 -43
  197. package/.claude/commands/sparc/devops.md +0 -98
  198. package/.claude/commands/sparc/docs-writer.md +0 -69
  199. package/.claude/commands/sparc/documenter.md +0 -44
  200. package/.claude/commands/sparc/innovator.md +0 -44
  201. package/.claude/commands/sparc/integration.md +0 -72
  202. package/.claude/commands/sparc/mcp.md +0 -106
  203. package/.claude/commands/sparc/memory-manager.md +0 -44
  204. package/.claude/commands/sparc/optimizer.md +0 -44
  205. package/.claude/commands/sparc/orchestrator.md +0 -116
  206. package/.claude/commands/sparc/post-deployment-monitoring-mode.md +0 -72
  207. package/.claude/commands/sparc/refinement-optimization-mode.md +0 -72
  208. package/.claude/commands/sparc/researcher.md +0 -44
  209. package/.claude/commands/sparc/reviewer.md +0 -44
  210. package/.claude/commands/sparc/security-review.md +0 -69
  211. package/.claude/commands/sparc/sparc-modes.md +0 -139
  212. package/.claude/commands/sparc/sparc.md +0 -99
  213. package/.claude/commands/sparc/spec-pseudocode.md +0 -69
  214. package/.claude/commands/sparc/spell-manager.md +0 -44
  215. package/.claude/commands/sparc/supabase-admin.md +0 -337
  216. package/.claude/commands/sparc/swarm-coordinator.md +0 -44
  217. package/.claude/commands/sparc/tdd.md +0 -44
  218. package/.claude/commands/sparc/tester.md +0 -44
  219. package/.claude/commands/sparc/tutorial.md +0 -68
  220. package/.claude/commands/sparc.md +0 -151
  221. package/.claude/guidance/shipped/moflo-session-start.md +0 -154
  222. package/.claude/guidance/shipped/moflo-spell-engine-architecture.md +0 -145
  223. package/.claude/skills/browser/SKILL.md +0 -204
  224. package/.claude/skills/github-code-review/SKILL.md +0 -1140
  225. package/.claude/skills/github-multi-repo/SKILL.md +0 -866
  226. package/.claude/skills/github-project-management/SKILL.md +0 -1272
  227. package/.claude/skills/github-release-management/SKILL.md +0 -1074
  228. package/.claude/skills/github-workflow-automation/SKILL.md +0 -1060
  229. package/.claude/skills/hive-mind-advanced/SKILL.md +0 -712
  230. package/.claude/skills/hooks-automation/SKILL.md +0 -1193
  231. package/.claude/skills/pair-programming/SKILL.md +0 -1202
  232. package/.claude/skills/performance-analysis/SKILL.md +0 -563
  233. package/.claude/skills/skill-builder/SKILL.md +0 -910
  234. package/.claude/skills/sparc-methodology/SKILL.md +0 -904
  235. package/.claude/skills/stream-chain/SKILL.md +0 -563
  236. package/.claude/skills/swarm-advanced/SKILL.md +0 -811
  237. package/.claude/skills/swarm-orchestration/SKILL.md +0 -179
  238. package/.claude/skills/verification-quality/SKILL.md +0 -649
  239. package/.claude/skills/worker-benchmarks/skill.md +0 -135
  240. package/.claude/skills/worker-integration/skill.md +0 -154
@@ -59,6 +59,10 @@ export function getReferenceHookBlock() {
59
59
  matcher: '^Bash$',
60
60
  hooks: [gateHook('check-dangerous-command', 2000), gateHook('check-before-pr', 2000)],
61
61
  },
62
+ // #931 — TaskCreate REMINDER + namespace hint advisory at Agent-spawn time.
63
+ // Routed via gate-hook.mjs so HOOK_SESSION_ID is forwarded for per-actor
64
+ // single-shot emission of the namespace hint.
65
+ { matcher: '^Agent$', hooks: [gateHook('check-before-agent', 2000)] },
62
66
  ],
63
67
  PostToolUse: [
64
68
  {
@@ -72,13 +76,18 @@ export function getReferenceHookBlock() {
72
76
  hooks: [gateHook('check-bash-memory', 2000), gateHook('record-test-run', 2000)],
73
77
  },
74
78
  { matcher: '^Skill$', hooks: [gateHook('record-skill-run', 2000)] },
75
- { matcher: 'mcp__moflo__memory_', hooks: [gateHook('record-memory-searched', 3000)] },
79
+ { matcher: '^mcp__moflo__memory_(search|retrieve|list|stats|store)$', hooks: [gateHook('record-memory-searched', 3000)] },
76
80
  { matcher: '^TaskUpdate$', hooks: [gateCjs('check-task-transition', 2000)] },
77
81
  { matcher: '^mcp__moflo__memory_store$', hooks: [gateCjs('record-learnings-stored', 2000)] },
82
+ // #952 — wired so /fl -s/--swarm and /fl -h/--hive runs satisfy the
83
+ // check-before-agent gate after the protected MCP init has been called.
84
+ { matcher: '^mcp__moflo__swarm_init$', hooks: [gateCjs('record-swarm-init', 2000)] },
85
+ { matcher: '^mcp__moflo__hive-mind_init$', hooks: [gateCjs('record-hive-init', 2000)] },
78
86
  ],
79
87
  UserPromptSubmit: [
80
88
  { hooks: [helperHook('prompt-hook.mjs', '', 3000)] },
81
- { hooks: [gateHook('prompt-reminder', 3000)] },
89
+ // #931 — Defensive safety-net hook. State reset only, no emission.
90
+ { hooks: [gateHook('prompt-state-reset', 3000)] },
82
91
  ],
83
92
  SubagentStart: [
84
93
  { hooks: [helperHook('subagent-start.cjs', '', 2000)] },
@@ -18,6 +18,9 @@ export const REQUIRED_HOOK_WIRING = [
18
18
  { event: 'PreToolUse', pattern: 'check-before-read' },
19
19
  { event: 'PreToolUse', pattern: 'check-dangerous-command' },
20
20
  { event: 'PreToolUse', pattern: 'check-before-pr' },
21
+ // #931 — TaskCreate REMINDER + namespace hint emit only at Agent spawn now,
22
+ // not on every prompt. Saves ~90 tokens × every prompt × every consumer.
23
+ { event: 'PreToolUse', pattern: 'check-before-agent' },
21
24
  { event: 'PostToolUse', pattern: 'record-task-created' },
22
25
  { event: 'PostToolUse', pattern: 'record-memory-searched' },
23
26
  { event: 'PostToolUse', pattern: 'check-task-transition' },
@@ -26,7 +29,14 @@ export const REQUIRED_HOOK_WIRING = [
26
29
  { event: 'PostToolUse', pattern: 'record-test-run' },
27
30
  { event: 'PostToolUse', pattern: 'record-skill-run' },
28
31
  { event: 'PostToolUse', pattern: 'reset-edit-gates' },
29
- { event: 'UserPromptSubmit', pattern: 'prompt-reminder' },
32
+ // First UserPromptSubmit hook (prompt-hook.mjs internally calls
33
+ // `gate.cjs prompt-reminder`). Substring check tolerates either the
34
+ // shipped helper-script command or an inlined gate call.
35
+ { event: 'UserPromptSubmit', pattern: 'prompt-hook.mjs' },
36
+ // Second (defensive) UserPromptSubmit hook — state reset only. Replaced
37
+ // the duplicate `prompt-reminder` wiring that was emitting the TaskCreate
38
+ // REMINDER twice per prompt (#931).
39
+ { event: 'UserPromptSubmit', pattern: 'prompt-state-reset' },
30
40
  ];
31
41
  /**
32
42
  * Map gate pattern → hook entry to add when missing from settings.json.
@@ -41,14 +51,29 @@ export const HOOK_ENTRY_MAP = {
41
51
  // record-memory-searched MUST go through gate-hook.mjs (not gate.cjs directly)
42
52
  // — the wrapper forwards Claude Code's session_id as HOOK_SESSION_ID, which
43
53
  // markMemorySearched needs to stamp the per-actor map (#879).
44
- 'record-memory-searched': { event: 'PostToolUse', matcher: 'mcp__moflo__memory_', hook: { type: 'command', command: 'node "$CLAUDE_PROJECT_DIR/.claude/helpers/gate-hook.mjs" record-memory-searched', timeout: 3000 } },
54
+ // Matcher MUST be a fully-anchored regex: Claude Code anchors hook matchers
55
+ // (`^...$` semantics), so a bare `mcp__moflo__memory_` never fires for any
56
+ // tool name (#929 regression — the hook silently no-ops, leaving every
57
+ // memory_search uncounted by the gate).
58
+ 'record-memory-searched': { event: 'PostToolUse', matcher: '^mcp__moflo__memory_(search|retrieve|list|stats|store)$', hook: { type: 'command', command: 'node "$CLAUDE_PROJECT_DIR/.claude/helpers/gate-hook.mjs" record-memory-searched', timeout: 3000 } },
45
59
  'check-task-transition': { event: 'PostToolUse', matcher: '^TaskUpdate$', hook: { type: 'command', command: 'node "$CLAUDE_PROJECT_DIR/.claude/helpers/gate.cjs" check-task-transition', timeout: 2000 } },
46
60
  'record-learnings-stored': { event: 'PostToolUse', matcher: '^mcp__moflo__memory_store$', hook: { type: 'command', command: 'node "$CLAUDE_PROJECT_DIR/.claude/helpers/gate.cjs" record-learnings-stored', timeout: 2000 } },
47
61
  'check-bash-memory': { event: 'PostToolUse', matcher: '^Bash$', hook: { type: 'command', command: 'node "$CLAUDE_PROJECT_DIR/.claude/helpers/gate-hook.mjs" check-bash-memory', timeout: 2000 } },
48
62
  'record-test-run': { event: 'PostToolUse', matcher: '^Bash$', hook: { type: 'command', command: 'node "$CLAUDE_PROJECT_DIR/.claude/helpers/gate-hook.mjs" record-test-run', timeout: 2000 } },
49
63
  'record-skill-run': { event: 'PostToolUse', matcher: '^Skill$', hook: { type: 'command', command: 'node "$CLAUDE_PROJECT_DIR/.claude/helpers/gate-hook.mjs" record-skill-run', timeout: 2000 } },
50
64
  'reset-edit-gates': { event: 'PostToolUse', matcher: '^(Write|Edit|MultiEdit)$', hook: { type: 'command', command: 'node "$CLAUDE_PROJECT_DIR/.claude/helpers/gate-hook.mjs" reset-edit-gates', timeout: 2000 } },
51
- 'prompt-reminder': { event: 'UserPromptSubmit', matcher: '', hook: { type: 'command', command: 'node "$CLAUDE_PROJECT_DIR/.claude/helpers/gate-hook.mjs" prompt-reminder', timeout: 3000 } },
65
+ // #931 Agent-time advisory; never blocks. Pulled the TaskCreate REMINDER
66
+ // and namespace hint out of prompt-reminder so they fire only when Claude is
67
+ // actually about to spawn an Agent. Routed via gate-hook.mjs so Claude Code's
68
+ // session_id is forwarded as HOOK_SESSION_ID — the namespace hint emission
69
+ // is per-actor single-shot (mirror of #879's record-memory-searched fix).
70
+ 'check-before-agent': { event: 'PreToolUse', matcher: '^Agent$', hook: { type: 'command', command: 'node "$CLAUDE_PROJECT_DIR/.claude/helpers/gate-hook.mjs" check-before-agent', timeout: 2000 } },
71
+ // Re-add the prompt-hook.mjs wiring as its own bare UserPromptSubmit block
72
+ // when missing. Empty matcher = bare block, like settings-generator emits.
73
+ 'prompt-hook.mjs': { event: 'UserPromptSubmit', matcher: '', hook: { type: 'command', command: 'node "$CLAUDE_PROJECT_DIR/.claude/helpers/prompt-hook.mjs"', timeout: 3000 } },
74
+ // Defensive safety-net — runs gate.cjs `prompt-state-reset` if prompt-hook.mjs
75
+ // throws before completing the per-prompt state reset. State-only, no emission.
76
+ 'prompt-state-reset': { event: 'UserPromptSubmit', matcher: '', hook: { type: 'command', command: 'node "$CLAUDE_PROJECT_DIR/.claude/helpers/gate-hook.mjs" prompt-state-reset', timeout: 3000 } },
52
77
  };
53
78
  /**
54
79
  * Inspect a parsed settings.json object for missing required hook wirings
@@ -104,6 +129,42 @@ export const HOOK_REWRITE_RULES = [
104
129
  from: 'node "$CLAUDE_PROJECT_DIR/.claude/helpers/gate.cjs" check-bash-memory',
105
130
  to: 'node "$CLAUDE_PROJECT_DIR/.claude/helpers/gate-hook.mjs" check-bash-memory',
106
131
  },
132
+ // Issue #931 — the second UserPromptSubmit hook used to invoke
133
+ // gate-hook.mjs `prompt-reminder`, which (a) duplicated the first hook's
134
+ // emission of `REMINDER: Use TaskCreate...` per prompt and (b) double-
135
+ // incremented `interactionCount`. The first hook (prompt-hook.mjs) still
136
+ // calls gate.cjs `prompt-reminder` internally for the full reset + Context
137
+ // warnings; the safety-net hook now runs `prompt-state-reset` instead —
138
+ // idempotent state reset, no emission, no increment.
139
+ {
140
+ name: '#931: dedupe UserPromptSubmit prompt-reminder → prompt-state-reset',
141
+ from: 'node "$CLAUDE_PROJECT_DIR/.claude/helpers/gate-hook.mjs" prompt-reminder',
142
+ to: 'node "$CLAUDE_PROJECT_DIR/.claude/helpers/gate-hook.mjs" prompt-state-reset',
143
+ },
144
+ // Issue #931 — `check-before-agent` was first wired through gate.cjs
145
+ // directly (no stdin parsing). Without HOOK_SESSION_ID the namespace hint's
146
+ // per-actor tracking falls back to a single `_legacy_` bucket, so a
147
+ // subagent spawning its own agent would silently miss the hint after the
148
+ // parent already consumed it. Route through gate-hook.mjs (the same wrapper
149
+ // that fixed #879) so each session_id gets its own single-shot.
150
+ {
151
+ name: '#931: route check-before-agent → gate-hook.mjs (forwards HOOK_SESSION_ID)',
152
+ from: 'node "$CLAUDE_PROJECT_DIR/.claude/helpers/gate.cjs" check-before-agent',
153
+ to: 'node "$CLAUDE_PROJECT_DIR/.claude/helpers/gate-hook.mjs" check-before-agent',
154
+ },
155
+ ];
156
+ export const MATCHER_REWRITE_RULES = [
157
+ // Issue #929 — Claude Code anchors hook matchers (`^…$` semantics), so a
158
+ // bare `mcp__moflo__memory_` never matches any real MCP tool name and the
159
+ // record-memory-searched stamp silently no-ops on every memory_search.
160
+ // The fix is anchored alternation. Existing consumers that upgrade through
161
+ // this version self-heal here without needing `flo doctor --fix`.
162
+ {
163
+ name: '#929: anchor record-memory-searched matcher',
164
+ from: 'mcp__moflo__memory_',
165
+ to: '^mcp__moflo__memory_(search|retrieve|list|stats|store)$',
166
+ cmdContains: 'record-memory-searched',
167
+ },
107
168
  ];
108
169
  /**
109
170
  * Apply HOOK_REWRITE_RULES to every hook command in `settings.hooks.*`.
@@ -135,6 +196,28 @@ export function rewriteIncorrectHookWiring(settings) {
135
196
  if (count > 0)
136
197
  rewrites.push({ name: rule.name, count });
137
198
  }
199
+ for (const rule of MATCHER_REWRITE_RULES) {
200
+ let count = 0;
201
+ for (const eventName of Object.keys(hooks)) {
202
+ const eventArray = hooks[eventName];
203
+ if (!Array.isArray(eventArray))
204
+ continue;
205
+ for (const block of eventArray) {
206
+ if (block.matcher !== rule.from)
207
+ continue;
208
+ const blockHooks = block.hooks;
209
+ if (!Array.isArray(blockHooks))
210
+ continue;
211
+ const hasMatchingCmd = blockHooks.some((h) => typeof h.command === 'string' && h.command.includes(rule.cmdContains));
212
+ if (!hasMatchingCmd)
213
+ continue;
214
+ block.matcher = rule.to;
215
+ count++;
216
+ }
217
+ }
218
+ if (count > 0)
219
+ rewrites.push({ name: rule.name, count });
220
+ }
138
221
  return { settings, rewrites };
139
222
  }
140
223
  //# sourceMappingURL=hook-wiring.js.map
@@ -21,7 +21,7 @@ const BOOTSTRAP_JSON_REL = '.claude/helpers/subagent-bootstrap.json';
21
21
  // Defense-in-depth copy of the canonical directive in subagent-bootstrap.json.
22
22
  // Kept as a single-line literal so the parity test can verify it matches the
23
23
  // JSON via plain substring containment.
24
- const FALLBACK_DIRECTIVE = 'MANDATORY FIRST ACTION: Your very first tool call MUST be mcp__moflo__memory_search (any query, any namespace). The memory-first gate WILL BLOCK all Glob, Grep, and Read calls until you do this. After memory search, follow `.claude/guidance/shipped/moflo-subagents.md` protocol.';
24
+ const FALLBACK_DIRECTIVE = 'MANDATORY FIRST ACTION: Your very first tool call MUST be mcp__moflo__memory_search (any query, any namespace). The memory-first gate WILL BLOCK all Glob, Grep, and Read calls until you do this. After memory search, follow `.claude/guidance/moflo-subagents.md` protocol.';
25
25
  function loadDirective() {
26
26
  const jsonPath = locateMofloRootPath(BOOTSTRAP_JSON_REL);
27
27
  if (!jsonPath) {
@@ -36,20 +36,20 @@ async function main() {
36
36
  // 3. Record Agent Lifecycle Events
37
37
  // =========================================================================
38
38
  console.log('3. Recording Agent Lifecycle Events...');
39
- // Agent 1: Queen Coordinator
40
- await eventStore.append(createAgentSpawnedEvent('agent-1', 'queen-coordinator', 'coordination', [
39
+ // Agent 1: Coordinator
40
+ await eventStore.append(createAgentSpawnedEvent('agent-1', 'coordinator', 'coordination', [
41
41
  'orchestration',
42
42
  'task-assignment',
43
43
  ]));
44
44
  await eventStore.append(createAgentStartedEvent('agent-1'));
45
- // Agent 2: Security Architect
46
- await eventStore.append(createAgentSpawnedEvent('agent-2', 'security-architect', 'security', [
45
+ // Agent 2: Security Auditor
46
+ await eventStore.append(createAgentSpawnedEvent('agent-2', 'security-auditor', 'security', [
47
47
  'threat-modeling',
48
48
  'security-design',
49
49
  ]));
50
50
  await eventStore.append(createAgentStartedEvent('agent-2'));
51
- // Agent 3: Core Architect
52
- await eventStore.append(createAgentSpawnedEvent('agent-3', 'core-architect', 'core', ['ddd-design', 'architecture']));
51
+ // Agent 3: Architect
52
+ await eventStore.append(createAgentSpawnedEvent('agent-3', 'architect', 'core', ['ddd-design', 'architecture']));
53
53
  await eventStore.append(createAgentStartedEvent('agent-3'));
54
54
  console.log(' Agent events recorded\n');
55
55
  // =========================================================================
@@ -144,27 +144,27 @@ export class TaskHooksManager {
144
144
  },
145
145
  {
146
146
  keywords: ['security', 'vulnerability', 'cve', 'threat'],
147
- agent: 'security-architect',
147
+ agent: 'security-auditor',
148
148
  capabilities: ['security-analysis', 'vulnerability-detection', 'threat-modeling'],
149
149
  },
150
150
  {
151
- keywords: ['performance', 'optimize', 'speed', 'memory'],
152
- agent: 'performance-engineer',
151
+ keywords: ['performance', 'optimize', 'speed', 'memory', 'profile', 'benchmark'],
152
+ agent: 'reviewer',
153
153
  capabilities: ['performance-optimization', 'profiling', 'benchmarking'],
154
154
  },
155
155
  {
156
156
  keywords: ['architect', 'design', 'structure', 'pattern'],
157
- agent: 'core-architect',
157
+ agent: 'architect',
158
158
  capabilities: ['architecture-design', 'pattern-application', 'system-design'],
159
159
  },
160
160
  {
161
- keywords: ['memory', 'storage', 'database', 'cache'],
162
- agent: 'memory-specialist',
161
+ keywords: ['storage', 'database', 'cache', 'persistence'],
162
+ agent: 'researcher',
163
163
  capabilities: ['memory-management', 'data-persistence', 'caching'],
164
164
  },
165
165
  {
166
- keywords: ['swarm', 'coordinate', 'orchestrate', 'agent'],
167
- agent: 'swarm-specialist',
166
+ keywords: ['swarm', 'coordinate', 'orchestrate', 'agent', 'hive'],
167
+ agent: 'coordinator',
168
168
  capabilities: ['swarm-coordination', 'agent-orchestration', 'distributed-systems'],
169
169
  },
170
170
  ];
@@ -2,5 +2,5 @@
2
2
  * Auto-generated by build. Do not edit manually.
3
3
  * Source of truth: root package.json → scripts/sync-version.mjs
4
4
  */
5
- export const VERSION = '4.9.20';
5
+ export const VERSION = '4.9.22';
6
6
  //# sourceMappingURL=version.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "moflo",
3
- "version": "4.9.20",
3
+ "version": "4.9.22",
4
4
  "description": "MoFlo — AI agent orchestration for Claude Code. A standalone, opinionated toolkit with semantic memory, learned routing, gates, spells, and the /flo issue-execution skill.",
5
5
  "main": "dist/src/cli/index.js",
6
6
  "type": "module",
@@ -39,6 +39,7 @@
39
39
  "!.claude/**/*.map",
40
40
  "README.md",
41
41
  "LICENSE",
42
+ "retired-files.json",
42
43
  "scripts/prune-native-binaries.mjs",
43
44
  "scripts/post-install-notice.mjs",
44
45
  "scripts/post-install-bootstrap.mjs"
@@ -81,7 +82,7 @@
81
82
  "@typescript-eslint/eslint-plugin": "^7.18.0",
82
83
  "@typescript-eslint/parser": "^7.18.0",
83
84
  "eslint": "^8.0.0",
84
- "moflo": "^4.9.19",
85
+ "moflo": "^4.9.21",
85
86
  "tsx": "^4.21.0",
86
87
  "typescript": "^5.9.3",
87
88
  "vitest": "^4.0.0"