moflo 4.6.9 → 4.6.10

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.
package/README.md CHANGED
@@ -1,442 +1,442 @@
1
- <p align="center">
2
- <img src="https://raw.githubusercontent.com/eric-cielo/moflo/main/docs/moflo.png" alt="MoFlo" width="480" />
3
- </p>
4
-
5
- # MoFlo
6
-
7
- **An opinionated fork of [Ruflo/Claude Flow](https://github.com/ruvnet/ruflo), optimized for local development.**
8
-
9
- MoFlo adds automatic code and guidance cataloging along with memory gating on top of the original Ruflo/Claude Flow orchestration engine. Where the upstream project provides raw building blocks, MoFlo ships opinionated defaults — workflow gates that enforce memory-first patterns, semantic indexing that runs at session start, and learned routing that improves over time — so you get a productive setup from `flo init` without manual tuning.
10
-
11
- Install it as a dev dependency and run `flo init`.
12
-
13
- ## Opinionated Defaults
14
-
15
- MoFlo makes deliberate choices so you don't have to:
16
-
17
- - **Fully self-contained** — No external services, no cloud dependencies, no API keys. Everything runs locally on your machine.
18
- - **Node.js runtime** — Targets Node.js specifically. All scripts, hooks, and tooling are JavaScript/TypeScript. No Python, no Rust binaries, no native compilation.
19
- - **sql.js (WASM)** — The memory database uses sql.js, a pure WebAssembly build of SQLite. No native `better-sqlite3` bindings to compile, no platform-specific build steps. Works identically on Windows, macOS, and Linux.
20
- - **Simplified embeddings pipeline** — 384-dimensional neural embeddings via Transformers.js (MiniLM-L6-v2, WASM). Same model and precision as the upstream multi-provider pipeline, but simpler — two scripts instead of an abstraction layer. Runs locally, no API calls.
21
- - **Full learning stack wired up OOTB** — The following are all configured and functional from `flo init`, no manual setup:
22
- - **SONA** (Self-Optimizing Neural Architecture) — learns from task trajectories via `@ruvector/sona` (Rust/NAPI)
23
- - **MicroLoRA** — rank-2 LoRA weight adaptations at ~1µs per adapt via `@ruvector/learning-wasm` (WASM)
24
- - **EWC++** (Elastic Weight Consolidation) — prevents catastrophic forgetting across sessions
25
- - **HNSW Vector Search** — fast nearest-neighbor search via `@ruvector/core` VectorDb
26
- - **Semantic Routing** — maps tasks to agents via `@ruvector/router` SemanticRouter
27
- - **Trajectory Persistence** — outcomes stored in `routing-outcomes.json`, survive across sessions
28
- - All WASM/NAPI-based, no GPU, no API keys, no external services.
29
- - **Memory-first workflow** — Claude must search what it already knows before exploring files. Enforced by hooks, not just instructions.
30
- - **Task registration before agents** — Sub-agents can't spawn until work is tracked. Prevents runaway agent proliferation.
31
- - **Learned routing** — Task outcomes feed back into the routing system automatically. No manual configuration needed — it gets smarter with use.
32
- - **Incremental indexing** — Guidance and code map indexes run on every session start but skip unchanged files. Fast after the first run.
33
- - **AI client agnostic** — Works with any MCP-capable AI client. We develop and test with Claude Code, but the MCP tools, memory system, and hooks are client-independent.
34
- - **GitHub-oriented** — The `/flo` skill, PR workflows, and issue tracking are built around GitHub. With Claude's help, you can adapt them to your own issue tracker and source control system.
35
- - **Cross-platform** — Forward-slash path normalization, no `sh -c` shell commands, `windowsHide` on all spawn calls.
36
-
37
- ## Features
38
-
39
- | Feature | What It Does |
40
- |---------|-------------|
41
- | **Semantic Memory** | 384-dim domain-aware embeddings. Store knowledge, search it instantly. |
42
- | **Code Navigation** | Indexes your codebase structure so Claude can answer "where does X live?" without Glob/Grep. |
43
- | **Guidance Indexing** | Chunks your project docs (`.claude/guidance/`, `docs/`) and makes them searchable. |
44
- | **Workflow Gates** | Enforces memory-first and task-creation patterns via Claude Code hooks. Prevents Claude from skipping steps. |
45
- | **Learned Routing** | Routes tasks to the right agent type. Learns from outcomes — gets better over time. |
46
- | **`/flo` Skill** | Execute GitHub issues through a full workflow: research → enhance → implement → test → simplify → PR. (Also available as `/fl`.) |
47
- | **Context Tracking** | Monitors context window usage (FRESH → MODERATE → DEPLETED → CRITICAL) and advises accordingly. |
48
- | **Cross-Platform** | Works on macOS, Linux, and Windows. |
49
-
50
- ## Getting Started
51
-
52
- ### 1. Install and init
53
-
54
- ```bash
55
- npm install --save-dev moflo
56
- npx flo init
57
- ```
58
-
59
- `flo init` automatically scans your project to find where your guidance and code live, then writes the results into `moflo.yaml`. It looks for:
60
-
61
- | What | Directories it checks | Default if none found |
62
- |------|----------------------|----------------------|
63
- | **Guidance** | `.claude/guidance`, `docs/guides`, `docs`, `architecture`, `adr`, `.cursor/rules` | `.claude/guidance` |
64
- | **Source code** | `src`, `packages`, `lib`, `app`, `apps`, `services`, `server`, `client` | `src` |
65
- | **Languages** | Scans detected source dirs for file extensions | `.ts`, `.tsx`, `.js`, `.jsx` |
66
-
67
- It also generates:
68
-
69
- | Generated File | Purpose |
70
- |----------------|---------|
71
- | `moflo.yaml` | Project config with detected guidance/code locations |
72
- | `.claude/settings.json` | Workflow gate hooks for Claude Code |
73
- | `.claude/skills/flo/` | The `/flo` issue execution skill (also `/fl`) |
74
- | `CLAUDE.md` section | Teaches Claude how to use MoFlo |
75
- | `.gitignore` entries | Excludes MoFlo state directories |
76
-
77
- In interactive mode (`flo init` without `--yes`), it shows what it found and lets you confirm or adjust before writing.
78
-
79
- ### 2. Review your guidance and code settings
80
-
81
- Open `moflo.yaml` to see what init detected. The two key sections:
82
-
83
- **Guidance** — documentation that helps Claude understand your project (conventions, architecture, domain context):
84
-
85
- ```yaml
86
- guidance:
87
- directories:
88
- - .claude/guidance # project rules, patterns, conventions
89
- - docs # general documentation
90
- ```
91
-
92
- **Code map** — source files to index for "where does X live?" navigation:
93
-
94
- ```yaml
95
- code_map:
96
- directories:
97
- - src # your source code
98
- - packages # shared packages (monorepo)
99
- extensions: [".ts", ".tsx"]
100
- exclude: [node_modules, dist, .next, coverage]
101
- ```
102
-
103
- MoFlo chunks your guidance files into semantic embeddings and indexes your code structure, so Claude searches your knowledge base before touching any files. Adjust these directories to match your project:
104
-
105
- ```yaml
106
- # Monorepo with shared docs
107
- guidance:
108
- directories: [.claude/guidance, docs, packages/shared/docs]
109
- code_map:
110
- directories: [packages, apps, libs]
111
-
112
- # Backend + frontend
113
- code_map:
114
- directories: [server/src, client/src]
115
- ```
116
-
117
- ### 3. Index and verify
118
-
119
- ```bash
120
- npx flo memory index-guidance # Index your guidance docs
121
- npx flo memory code-map # Index your code structure
122
- npx flo doctor # Verify everything works
123
- ```
124
-
125
- Both indexes run automatically at session start after this, so you only need to run them manually on first setup or after major structural changes.
126
-
127
- ## Commands
128
-
129
- You don't need to run these for normal use — `flo init` sets everything up, and the hooks handle memory, routing, and learning automatically. These commands are here for manual setup, debugging, and tweaking.
130
-
131
- ### Memory
132
-
133
- ```bash
134
- flo memory store -k "key" --value "data" # Store with 384-dim embedding
135
- flo memory search -q "auth patterns" # Semantic search
136
- flo memory index-guidance # Index guidance docs
137
- flo memory code-map # Index code structure
138
- flo memory rebuild-index # Regenerate all embeddings
139
- flo memory stats # Show statistics
140
- ```
141
-
142
- ### Routing & Learning
143
-
144
- ```bash
145
- flo hooks route --task "description" # Route task to optimal agent
146
- flo hooks learn --pattern "..." --domain "." # Store a pattern
147
- flo hooks patterns # List learned patterns
148
- flo hooks consolidate # Promote/prune patterns
149
- ```
150
-
151
- ### Workflow Gates
152
-
153
- ```bash
154
- flo gate check-before-scan # Blocks Glob/Grep if memory not searched
155
- flo gate check-before-agent # Blocks Agent tool if no TaskCreate
156
- flo gate prompt-reminder # Context bracket tracking
157
- flo gate session-reset # Reset workflow state
158
- ```
159
-
160
- ### Feature Orchestration
161
-
162
- Sequence multiple GitHub issues through `/flo` workflows using a YAML definition:
163
-
164
- ```bash
165
- flo orc run feature.yaml # Execute a feature (stories in dependency order)
166
- flo orc run feature.yaml --dry-run # Show execution plan without running
167
- flo orc run feature.yaml --verbose # Execute with Claude output streaming
168
- flo orc status my-feature # Check progress of a feature
169
- flo orc reset my-feature # Reset feature state for re-run
170
- ```
171
-
172
- Feature YAML example:
173
-
174
- ```yaml
175
- feature:
176
- id: my-feature
177
- name: "My Feature"
178
- repository: /path/to/project
179
- base_branch: main
180
-
181
- stories:
182
- - id: story-1
183
- name: "Entity and service"
184
- issue: 101
185
-
186
- - id: story-2
187
- name: "Routes and tests"
188
- issue: 102
189
- depends_on: [story-1]
190
- ```
191
-
192
- Stories are resolved via topological sort (respecting `depends_on`), then executed sequentially by spawning `claude -p "/flo <issue>"`.
193
-
194
- ### The `/flo` Skill
195
-
196
- Inside your AI client, the `/flo` (or `/fl`) slash command drives GitHub issue workflows. Quick reference:
197
-
198
- ```
199
- /flo <issue> # Full workflow (research → implement → test → PR)
200
- /flo -e <issue> # Enhance only (research and update ticket, then stop)
201
- /flo -r <issue> # Research only (analyze issue, output findings)
202
- /flo -sw <issue> # Swarm mode (default, multi-agent coordination)
203
- /flo -hv <issue> # Hive-mind mode (consensus-based coordination)
204
- /flo -n <issue> # Naked mode (single agent, no swarm)
205
- /flo <epic-issue> # Detects epics, processes stories sequentially
206
- ```
207
-
208
- For full options and details, type `/flo` with no arguments — your AI client will display the complete skill documentation. Also available as `/fl`.
209
-
210
- #### Epic handling
211
-
212
- When you pass an issue number, `/flo` automatically checks if it's an epic — no extra flag needed. An issue is treated as an epic if any of these are true:
213
-
214
- - It has a label matching `epic`, `tracking`, `parent`, or `umbrella` (case-insensitive)
215
- - Its body contains a `## Stories` or `## Tasks` section
216
- - Its body has checklist-linked issues: `- [ ] #101`
217
- - Its body has numbered issue references: `1. #101`
218
- - The issue has GitHub sub-issues (via the API)
219
-
220
- When an epic is detected, `/flo` processes each child story sequentially — full workflow per story (research → implement → test → PR), one at a time, in the order listed. The `-e`, `-r`, `-n`, `-sw`, and `-hv` flags still apply and get passed through to each story.
221
-
222
- Stories are extracted from markdown checklists (`- [ ] #101`) or numbered lists (`1. #101`), processed top-to-bottom.
223
-
224
- ### System
225
-
226
- ```bash
227
- flo init # Initialize project (one-time setup)
228
- flo doctor # Health check
229
- flo --version # Show version
230
- ```
231
-
232
-
233
- ## Full Configuration Reference
234
-
235
- `flo init` generates a `moflo.yaml` at your project root. Here's the complete set of options:
236
-
237
- ```yaml
238
- project:
239
- name: "my-project"
240
-
241
- guidance:
242
- directories: [.claude/guidance]
243
- namespace: guidance
244
-
245
- code_map:
246
- directories: [src, packages]
247
- extensions: [".ts", ".tsx"]
248
- exclude: [node_modules, dist]
249
- namespace: code-map
250
-
251
- gates:
252
- memory_first: true # Must search memory before file exploration
253
- task_create_first: true # Must TaskCreate before Agent tool
254
- context_tracking: true # Track context window depletion
255
-
256
- auto_index:
257
- guidance: true # Auto-index docs on session start
258
- code_map: true # Auto-index code on session start
259
-
260
- hooks:
261
- pre_edit: true # Track file edits for learning
262
- post_edit: true # Record edit outcomes
263
- pre_task: true # Agent routing before task spawn
264
- post_task: true # Record task results for learning
265
- gate: true # Workflow gate enforcement
266
- route: true # Intelligent task routing
267
- stop_hook: true # Session-end persistence
268
- session_restore: true # Restore session state on start
269
-
270
- models:
271
- default: opus
272
- research: sonnet
273
- review: opus
274
- test: sonnet
275
-
276
- model_routing:
277
- enabled: false # Set to true for automatic model selection
278
- confidence_threshold: 0.85
279
- cost_optimization: true
280
- circuit_breaker: true
281
-
282
- status_line:
283
- enabled: true
284
- branding: "MoFlo V4"
285
- mode: compact # single-line, compact, or dashboard
286
- show_dir: true # current directory name (compact/dashboard only)
287
- show_git: true
288
- show_session: true
289
- show_swarm: true
290
- show_agentdb: true
291
- show_mcp: true
292
- ```
293
-
294
- ### Model Routing
295
-
296
- By default, MoFlo uses **static model preferences** — each agent role uses the model specified in `models:`. This is predictable and gives you full control.
297
-
298
- Set `model_routing.enabled: true` to enable **intelligent routing**, which analyzes each task's complexity and auto-selects the cheapest capable model:
299
-
300
- | Complexity | Model | Example Tasks |
301
- |-----------|-------|---------------|
302
- | Low | Haiku | Typos, renames, config changes, formatting |
303
- | Medium | Sonnet | Implement features, write tests, fix bugs |
304
- | High | Opus | Architecture, security audits, complex debugging |
305
-
306
- The router learns from outcomes — if a model fails a task, the circuit breaker penalizes it and escalates to a more capable model.
307
-
308
- You can pin specific agents even when routing is enabled:
309
-
310
- ```yaml
311
- model_routing:
312
- enabled: true
313
- agent_overrides:
314
- security-architect: opus # Never downgrade security work
315
- researcher: sonnet # Pin research to sonnet
316
- ```
317
-
318
- ## How It Works
319
-
320
- MoFlo sits between Claude Code and your project. It uses Claude Code's native hook system to enforce good habits, store knowledge, and learn from outcomes — so Claude gets better at working in your codebase over time.
321
-
322
- ### The Gate System
323
-
324
- MoFlo installs Claude Code hooks that run on every tool call. Together, these gates create a **feedback loop** that prevents Claude from wasting tokens on blind exploration and ensures it builds on prior knowledge.
325
-
326
- **Memory-first gate** — Before Claude can use Glob, Grep, or Read on guidance files, it must first search the memory database. This forces Claude to check what it already knows (or what was learned in prior sessions) before re-exploring from scratch. The gate automatically classifies each prompt — simple directives like "commit" or "yes" skip the gate, while task-oriented prompts like "fix the auth bug" enforce it.
327
-
328
- **Task-create gate** — Before Claude can spawn sub-agents via the Task tool, it must call TaskCreate first. This ensures every agent spawn is tracked, preventing runaway agent proliferation and making it possible to review what work was delegated.
329
-
330
- **Context tracking** — Each interaction increments a counter. As the conversation grows, MoFlo warns Claude about context depletion (FRESH → MODERATE → DEPLETED → CRITICAL) and advises it to checkpoint progress, compact, or start a fresh session before quality degrades.
331
-
332
- **Routing** — On each prompt, MoFlo's route hook analyzes the task and recommends the optimal agent type and model tier (haiku for simple tasks, sonnet for moderate, opus for complex). This saves cost without sacrificing quality.
333
-
334
- All gates are configurable via `moflo.yaml` — you can disable any individual hook if it doesn't suit your workflow.
335
-
336
- ### Intelligent Agent Routing
337
-
338
- MoFlo ships with 12 built-in task patterns that map common work to the right agent type:
339
-
340
- | Pattern | Keywords | Primary Agent |
341
- |---------|----------|---------------|
342
- | security-task | auth, password, encryption, CVE | security-architect |
343
- | testing-task | test, spec, coverage, e2e | tester |
344
- | database-task | schema, migration, SQL, ORM | architect |
345
- | feature-task | implement, add, create, build | architect → coder |
346
- | bugfix-task | bug, fix, error, crash, debug | coder |
347
- | api-task | endpoint, REST, route, handler | architect → coder |
348
- | ... | | *(12 patterns total)* |
349
-
350
- When you route a task (`flo hooks route --task "..."` or via MCP), MoFlo runs semantic similarity against these patterns using HNSW vector search and returns a ranked recommendation with confidence scores.
351
-
352
- **The routing gets smarter over time.** Every time a task completes successfully, MoFlo's post-task hook records the outcome — the full task description, which agent handled it, and whether it succeeded. These learned patterns are combined with the built-in seeds on every future route call. Because learned patterns contain rich task descriptions (not just short keywords), they discriminate better as they accumulate.
353
-
354
- Routing outcomes are stored in `.claude-flow/routing-outcomes.json` and persist across sessions. You can inspect them with `flo hooks patterns` or transfer them between projects with `flo hooks transfer`.
355
-
356
- ### What Ships Out of the Box
357
-
358
- `flo init` wires up the following systems automatically — no configuration needed:
359
-
360
- | System | What It Does | Technology |
361
- |--------|-------------|------------|
362
- | **Semantic Memory** | Store and search knowledge with 384-dim embeddings | sql.js (WASM SQLite) + Transformers.js (MiniLM-L6-v2) |
363
- | **HNSW Vector Search** | Fast nearest-neighbor search across all stored knowledge | `@ruvector/core` VectorDb |
364
- | **Semantic Routing** | Match tasks to agent types using vector similarity | `@ruvector/router` SemanticRouter |
365
- | **SONA Learning** | Learn from task trajectories — what agent handled what, and whether it succeeded | `@ruvector/sona` SonaEngine (Rust/NAPI) |
366
- | **MicroLoRA Adaptation** | Rank-2 LoRA weight updates from successful patterns (~1µs per adapt) | `@ruvector/learning-wasm` |
367
- | **EWC++ Consolidation** | Prevent catastrophic forgetting — new learning doesn't overwrite old patterns | Built into hooks-tools |
368
- | **Workflow Gates** | Memory-first and task-registration enforcement via Claude Code hooks | `.claude/settings.json` hooks |
369
- | **Context Tracking** | Monitor context window depletion (FRESH → CRITICAL) | Session interaction counter |
370
- | **Guidance Indexing** | Chunk and embed your project docs on session start | `flo-index` bin script |
371
- | **Code Map** | Index source file structure (types, exports, functions) on session start | `flo-codemap` bin script |
372
- | **Learned Routing** | Task outcomes feed back into routing — gets smarter over time | `routing-outcomes.json` persistence |
373
- | **Status Line** | Live dashboard showing git, swarm, memory, and MCP status | `statusline.cjs` hook |
374
-
375
- All of these run locally with zero external dependencies. The SONA, MicroLoRA, and HNSW components are WASM/NAPI binaries that ship with the npm package — no compilation, no GPU, no API keys.
376
-
377
- ### The Two-Layer Task System
378
-
379
- MoFlo doesn't replace your AI client's task system — it wraps it. Your client (Claude Code, Cursor, or any MCP-capable tool) handles spawning agents and running code. MoFlo adds a coordination layer on top that handles memory, routing, and learning.
380
-
381
- ```
382
- ┌──────────────────────────────────────────────────┐
383
- │ YOUR AI CLIENT (Execution Layer) │
384
- │ Spawns agents, runs code, streams output │
385
- │ TaskCreate → Agent → TaskUpdate → results │
386
- ├──────────────────────────────────────────────────┤
387
- │ MOFLO (Knowledge Layer) │
388
- │ Routes tasks, gates agent spawns, stores │
389
- │ patterns, learns from outcomes │
390
- └──────────────────────────────────────────────────┘
391
- ```
392
-
393
- Here's how a typical task flows through both layers:
394
-
395
- 1. **MoFlo routes** — Before work starts, MoFlo analyzes the prompt and recommends an agent type and model tier via hook or MCP tool.
396
- 2. **MoFlo gates** — Before an agent can spawn, MoFlo verifies that memory was searched and a task was registered. This prevents blind exploration.
397
- 3. **Your client executes** — The actual agent runs through your client's native task system. MoFlo doesn't manage the agent — your client handles execution, output, and completion.
398
- 4. **MoFlo learns** — After the agent finishes, MoFlo records what worked (or didn't) in its memory database. Successful patterns feed into future routing.
399
-
400
- The key insight: **your client handles execution, MoFlo handles knowledge.** Your client is good at spawning agents and running code. MoFlo is good at remembering what happened, routing to the right agent, and ensuring prior knowledge is checked before exploring from scratch.
401
-
402
- For complex work, MoFlo structures tasks into waves — a research wave discovers context, then an implementation wave acts on it — with dependencies tracked through both the client's task system and MoFlo's coordination layer. The full integration pattern is documented in `.claude/guidance/task-swarm-integration.md`.
403
-
404
- The `/flo` skill ties both systems together for GitHub issues — driving a full workflow (research → enhance → implement → test → simplify → PR) with your client's agents for execution and MoFlo's memory for continuity.
405
-
406
- ### Memory & Knowledge Storage
407
-
408
- MoFlo uses a SQLite database (via sql.js/WASM — no native deps) to store three types of knowledge:
409
-
410
- | Namespace | What's Stored | How It Gets There |
411
- |-----------|---------------|-------------------|
412
- | `guidance` | Chunked project docs (`.claude/guidance/`, `docs/`) with 384-dim embeddings | `flo-index` on session start |
413
- | `code-map` | Structural index of source files (exports, classes, functions) | `flo-codemap` on session start |
414
- | `patterns` | Learned patterns from successful task outcomes | Post-task hooks after agent work |
415
-
416
- **Semantic search** uses cosine similarity on neural embeddings (MiniLM-L6-v2, 384 dimensions). When Claude searches memory, it gets the most relevant chunks ranked by semantic similarity — not keyword matching.
417
-
418
- **Session start indexing** — Three background processes run on every session start: the guidance indexer, the code map generator, and the learning service. All three are incremental (unchanged files are skipped) and run in parallel so they don't block the session.
419
-
420
- **Cross-session persistence** — Everything stored in the database survives across sessions. Patterns learned on Monday are available on Friday. The stop hook exports session metrics, and the session-restore hook loads prior state.
421
-
422
- ### For Claude
423
-
424
- When `flo init` runs, it appends a workflow section to your CLAUDE.md that teaches Claude:
425
- - Always search memory before Glob/Grep/Read (enforced by gates)
426
- - Use `mcp__claude-flow__memory_search` for knowledge retrieval
427
- - Use `/flo <issue>` (or `/fl`) for issue execution
428
- - Store learnings after task completion
429
-
430
- ## Architecture
431
-
432
- - **7 standalone bin scripts** shipped with npm: `flo-search`, `flo-embeddings`, `flo-index`, `flo-codemap`, `flo-learn`, `flo-setup`, plus the main `flo` CLI
433
- - **Project config system**: `moflo.yaml` for per-project settings
434
- - **One-stop init**: `flo init` generates everything needed for OOTB operation
435
-
436
- ## Ruflo / Claude Flow
437
-
438
- MoFlo builds on top of the full [Ruflo/Claude Flow](https://github.com/ruvnet/ruflo) engine. For detailed documentation on the underlying capabilities — swarm topologies, hive-mind consensus, HNSW vector search, neural routing, MCP server internals, and more — check out the [Ruflo repository](https://github.com/ruvnet/ruflo).
439
-
440
- ## License
441
-
442
- MIT (inherited from [Ruflo/Claude Flow](https://github.com/ruvnet/ruflo))
1
+ <p align="center">
2
+ <img src="https://raw.githubusercontent.com/eric-cielo/moflo/main/docs/moflo.png?v=4" alt="MoFlo" />
3
+ </p>
4
+
5
+ # MoFlo
6
+
7
+ **An opinionated fork of [Ruflo/Claude Flow](https://github.com/ruvnet/ruflo), optimized for local development.**
8
+
9
+ MoFlo adds automatic code and guidance cataloging along with memory gating on top of the original Ruflo/Claude Flow orchestration engine. Where the upstream project provides raw building blocks, MoFlo ships opinionated defaults — workflow gates that enforce memory-first patterns, semantic indexing that runs at session start, and learned routing that improves over time — so you get a productive setup from `flo init` without manual tuning.
10
+
11
+ Install it as a dev dependency and run `flo init`.
12
+
13
+ ## Opinionated Defaults
14
+
15
+ MoFlo makes deliberate choices so you don't have to:
16
+
17
+ - **Fully self-contained** — No external services, no cloud dependencies, no API keys. Everything runs locally on your machine.
18
+ - **Node.js runtime** — Targets Node.js specifically. All scripts, hooks, and tooling are JavaScript/TypeScript. No Python, no Rust binaries, no native compilation.
19
+ - **sql.js (WASM)** — The memory database uses sql.js, a pure WebAssembly build of SQLite. No native `better-sqlite3` bindings to compile, no platform-specific build steps. Works identically on Windows, macOS, and Linux.
20
+ - **Simplified embeddings pipeline** — 384-dimensional neural embeddings via Transformers.js (MiniLM-L6-v2, WASM). Same model and precision as the upstream multi-provider pipeline, but simpler — two scripts instead of an abstraction layer. Runs locally, no API calls.
21
+ - **Full learning stack wired up OOTB** — The following are all configured and functional from `flo init`, no manual setup:
22
+ - **SONA** (Self-Optimizing Neural Architecture) — learns from task trajectories via `@ruvector/sona` (Rust/NAPI)
23
+ - **MicroLoRA** — rank-2 LoRA weight adaptations at ~1µs per adapt via `@ruvector/learning-wasm` (WASM)
24
+ - **EWC++** (Elastic Weight Consolidation) — prevents catastrophic forgetting across sessions
25
+ - **HNSW Vector Search** — fast nearest-neighbor search via `@ruvector/core` VectorDb
26
+ - **Semantic Routing** — maps tasks to agents via `@ruvector/router` SemanticRouter
27
+ - **Trajectory Persistence** — outcomes stored in `routing-outcomes.json`, survive across sessions
28
+ - All WASM/NAPI-based, no GPU, no API keys, no external services.
29
+ - **Memory-first workflow** — Claude must search what it already knows before exploring files. Enforced by hooks, not just instructions.
30
+ - **Task registration before agents** — Sub-agents can't spawn until work is tracked. Prevents runaway agent proliferation.
31
+ - **Learned routing** — Task outcomes feed back into the routing system automatically. No manual configuration needed — it gets smarter with use.
32
+ - **Incremental indexing** — Guidance and code map indexes run on every session start but skip unchanged files. Fast after the first run.
33
+ - **AI client agnostic** — Works with any MCP-capable AI client. We develop and test with Claude Code, but the MCP tools, memory system, and hooks are client-independent.
34
+ - **GitHub-oriented** — The `/flo` skill, PR workflows, and issue tracking are built around GitHub. With Claude's help, you can adapt them to your own issue tracker and source control system.
35
+ - **Cross-platform** — Forward-slash path normalization, no `sh -c` shell commands, `windowsHide` on all spawn calls.
36
+
37
+ ## Features
38
+
39
+ | Feature | What It Does |
40
+ |---------|-------------|
41
+ | **Semantic Memory** | 384-dim domain-aware embeddings. Store knowledge, search it instantly. |
42
+ | **Code Navigation** | Indexes your codebase structure so Claude can answer "where does X live?" without Glob/Grep. |
43
+ | **Guidance Indexing** | Chunks your project docs (`.claude/guidance/`, `docs/`) and makes them searchable. |
44
+ | **Workflow Gates** | Enforces memory-first and task-creation patterns via Claude Code hooks. Prevents Claude from skipping steps. |
45
+ | **Learned Routing** | Routes tasks to the right agent type. Learns from outcomes — gets better over time. |
46
+ | **`/flo` Skill** | Execute GitHub issues through a full workflow: research → enhance → implement → test → simplify → PR. (Also available as `/fl`.) |
47
+ | **Context Tracking** | Monitors context window usage (FRESH → MODERATE → DEPLETED → CRITICAL) and advises accordingly. |
48
+ | **Cross-Platform** | Works on macOS, Linux, and Windows. |
49
+
50
+ ## Getting Started
51
+
52
+ ### 1. Install and init
53
+
54
+ ```bash
55
+ npm install --save-dev moflo
56
+ npx flo init
57
+ ```
58
+
59
+ `flo init` automatically scans your project to find where your guidance and code live, then writes the results into `moflo.yaml`. It looks for:
60
+
61
+ | What | Directories it checks | Default if none found |
62
+ |------|----------------------|----------------------|
63
+ | **Guidance** | `.claude/guidance`, `docs/guides`, `docs`, `architecture`, `adr`, `.cursor/rules` | `.claude/guidance` |
64
+ | **Source code** | `src`, `packages`, `lib`, `app`, `apps`, `services`, `server`, `client` | `src` |
65
+ | **Languages** | Scans detected source dirs for file extensions | `.ts`, `.tsx`, `.js`, `.jsx` |
66
+
67
+ It also generates:
68
+
69
+ | Generated File | Purpose |
70
+ |----------------|---------|
71
+ | `moflo.yaml` | Project config with detected guidance/code locations |
72
+ | `.claude/settings.json` | Workflow gate hooks for Claude Code |
73
+ | `.claude/skills/flo/` | The `/flo` issue execution skill (also `/fl`) |
74
+ | `CLAUDE.md` section | Teaches Claude how to use MoFlo |
75
+ | `.gitignore` entries | Excludes MoFlo state directories |
76
+
77
+ In interactive mode (`flo init` without `--yes`), it shows what it found and lets you confirm or adjust before writing.
78
+
79
+ ### 2. Review your guidance and code settings
80
+
81
+ Open `moflo.yaml` to see what init detected. The two key sections:
82
+
83
+ **Guidance** — documentation that helps Claude understand your project (conventions, architecture, domain context):
84
+
85
+ ```yaml
86
+ guidance:
87
+ directories:
88
+ - .claude/guidance # project rules, patterns, conventions
89
+ - docs # general documentation
90
+ ```
91
+
92
+ **Code map** — source files to index for "where does X live?" navigation:
93
+
94
+ ```yaml
95
+ code_map:
96
+ directories:
97
+ - src # your source code
98
+ - packages # shared packages (monorepo)
99
+ extensions: [".ts", ".tsx"]
100
+ exclude: [node_modules, dist, .next, coverage]
101
+ ```
102
+
103
+ MoFlo chunks your guidance files into semantic embeddings and indexes your code structure, so Claude searches your knowledge base before touching any files. Adjust these directories to match your project:
104
+
105
+ ```yaml
106
+ # Monorepo with shared docs
107
+ guidance:
108
+ directories: [.claude/guidance, docs, packages/shared/docs]
109
+ code_map:
110
+ directories: [packages, apps, libs]
111
+
112
+ # Backend + frontend
113
+ code_map:
114
+ directories: [server/src, client/src]
115
+ ```
116
+
117
+ ### 3. Index and verify
118
+
119
+ ```bash
120
+ npx flo memory index-guidance # Index your guidance docs
121
+ npx flo memory code-map # Index your code structure
122
+ npx flo doctor # Verify everything works
123
+ ```
124
+
125
+ Both indexes run automatically at session start after this, so you only need to run them manually on first setup or after major structural changes.
126
+
127
+ ## Commands
128
+
129
+ You don't need to run these for normal use — `flo init` sets everything up, and the hooks handle memory, routing, and learning automatically. These commands are here for manual setup, debugging, and tweaking.
130
+
131
+ ### Memory
132
+
133
+ ```bash
134
+ flo memory store -k "key" --value "data" # Store with 384-dim embedding
135
+ flo memory search -q "auth patterns" # Semantic search
136
+ flo memory index-guidance # Index guidance docs
137
+ flo memory code-map # Index code structure
138
+ flo memory rebuild-index # Regenerate all embeddings
139
+ flo memory stats # Show statistics
140
+ ```
141
+
142
+ ### Routing & Learning
143
+
144
+ ```bash
145
+ flo hooks route --task "description" # Route task to optimal agent
146
+ flo hooks learn --pattern "..." --domain "." # Store a pattern
147
+ flo hooks patterns # List learned patterns
148
+ flo hooks consolidate # Promote/prune patterns
149
+ ```
150
+
151
+ ### Workflow Gates
152
+
153
+ ```bash
154
+ flo gate check-before-scan # Blocks Glob/Grep if memory not searched
155
+ flo gate check-before-agent # Blocks Agent tool if no TaskCreate
156
+ flo gate prompt-reminder # Context bracket tracking
157
+ flo gate session-reset # Reset workflow state
158
+ ```
159
+
160
+ ### Feature Orchestration
161
+
162
+ Sequence multiple GitHub issues through `/flo` workflows using a YAML definition:
163
+
164
+ ```bash
165
+ flo orc run feature.yaml # Execute a feature (stories in dependency order)
166
+ flo orc run feature.yaml --dry-run # Show execution plan without running
167
+ flo orc run feature.yaml --verbose # Execute with Claude output streaming
168
+ flo orc status my-feature # Check progress of a feature
169
+ flo orc reset my-feature # Reset feature state for re-run
170
+ ```
171
+
172
+ Feature YAML example:
173
+
174
+ ```yaml
175
+ feature:
176
+ id: my-feature
177
+ name: "My Feature"
178
+ repository: /path/to/project
179
+ base_branch: main
180
+
181
+ stories:
182
+ - id: story-1
183
+ name: "Entity and service"
184
+ issue: 101
185
+
186
+ - id: story-2
187
+ name: "Routes and tests"
188
+ issue: 102
189
+ depends_on: [story-1]
190
+ ```
191
+
192
+ Stories are resolved via topological sort (respecting `depends_on`), then executed sequentially by spawning `claude -p "/flo <issue>"`.
193
+
194
+ ### The `/flo` Skill
195
+
196
+ Inside your AI client, the `/flo` (or `/fl`) slash command drives GitHub issue workflows. Quick reference:
197
+
198
+ ```
199
+ /flo <issue> # Full workflow (research → implement → test → PR)
200
+ /flo -e <issue> # Enhance only (research and update ticket, then stop)
201
+ /flo -r <issue> # Research only (analyze issue, output findings)
202
+ /flo -sw <issue> # Swarm mode (default, multi-agent coordination)
203
+ /flo -hv <issue> # Hive-mind mode (consensus-based coordination)
204
+ /flo -n <issue> # Naked mode (single agent, no swarm)
205
+ /flo <epic-issue> # Detects epics, processes stories sequentially
206
+ ```
207
+
208
+ For full options and details, type `/flo` with no arguments — your AI client will display the complete skill documentation. Also available as `/fl`.
209
+
210
+ #### Epic handling
211
+
212
+ When you pass an issue number, `/flo` automatically checks if it's an epic — no extra flag needed. An issue is treated as an epic if any of these are true:
213
+
214
+ - It has a label matching `epic`, `tracking`, `parent`, or `umbrella` (case-insensitive)
215
+ - Its body contains a `## Stories` or `## Tasks` section
216
+ - Its body has checklist-linked issues: `- [ ] #101`
217
+ - Its body has numbered issue references: `1. #101`
218
+ - The issue has GitHub sub-issues (via the API)
219
+
220
+ When an epic is detected, `/flo` processes each child story sequentially — full workflow per story (research → implement → test → PR), one at a time, in the order listed. The `-e`, `-r`, `-n`, `-sw`, and `-hv` flags still apply and get passed through to each story.
221
+
222
+ Stories are extracted from markdown checklists (`- [ ] #101`) or numbered lists (`1. #101`), processed top-to-bottom.
223
+
224
+ ### System
225
+
226
+ ```bash
227
+ flo init # Initialize project (one-time setup)
228
+ flo doctor # Health check
229
+ flo --version # Show version
230
+ ```
231
+
232
+
233
+ ## Full Configuration Reference
234
+
235
+ `flo init` generates a `moflo.yaml` at your project root. Here's the complete set of options:
236
+
237
+ ```yaml
238
+ project:
239
+ name: "my-project"
240
+
241
+ guidance:
242
+ directories: [.claude/guidance]
243
+ namespace: guidance
244
+
245
+ code_map:
246
+ directories: [src, packages]
247
+ extensions: [".ts", ".tsx"]
248
+ exclude: [node_modules, dist]
249
+ namespace: code-map
250
+
251
+ gates:
252
+ memory_first: true # Must search memory before file exploration
253
+ task_create_first: true # Must TaskCreate before Agent tool
254
+ context_tracking: true # Track context window depletion
255
+
256
+ auto_index:
257
+ guidance: true # Auto-index docs on session start
258
+ code_map: true # Auto-index code on session start
259
+
260
+ hooks:
261
+ pre_edit: true # Track file edits for learning
262
+ post_edit: true # Record edit outcomes
263
+ pre_task: true # Agent routing before task spawn
264
+ post_task: true # Record task results for learning
265
+ gate: true # Workflow gate enforcement
266
+ route: true # Intelligent task routing
267
+ stop_hook: true # Session-end persistence
268
+ session_restore: true # Restore session state on start
269
+
270
+ models:
271
+ default: opus
272
+ research: sonnet
273
+ review: opus
274
+ test: sonnet
275
+
276
+ model_routing:
277
+ enabled: false # Set to true for automatic model selection
278
+ confidence_threshold: 0.85
279
+ cost_optimization: true
280
+ circuit_breaker: true
281
+
282
+ status_line:
283
+ enabled: true
284
+ branding: "MoFlo V4"
285
+ mode: compact # single-line, compact, or dashboard
286
+ show_dir: true # current directory name (compact/dashboard only)
287
+ show_git: true
288
+ show_session: true
289
+ show_swarm: true
290
+ show_agentdb: true
291
+ show_mcp: true
292
+ ```
293
+
294
+ ### Model Routing
295
+
296
+ By default, MoFlo uses **static model preferences** — each agent role uses the model specified in `models:`. This is predictable and gives you full control.
297
+
298
+ Set `model_routing.enabled: true` to enable **intelligent routing**, which analyzes each task's complexity and auto-selects the cheapest capable model:
299
+
300
+ | Complexity | Model | Example Tasks |
301
+ |-----------|-------|---------------|
302
+ | Low | Haiku | Typos, renames, config changes, formatting |
303
+ | Medium | Sonnet | Implement features, write tests, fix bugs |
304
+ | High | Opus | Architecture, security audits, complex debugging |
305
+
306
+ The router learns from outcomes — if a model fails a task, the circuit breaker penalizes it and escalates to a more capable model.
307
+
308
+ You can pin specific agents even when routing is enabled:
309
+
310
+ ```yaml
311
+ model_routing:
312
+ enabled: true
313
+ agent_overrides:
314
+ security-architect: opus # Never downgrade security work
315
+ researcher: sonnet # Pin research to sonnet
316
+ ```
317
+
318
+ ## How It Works
319
+
320
+ MoFlo sits between Claude Code and your project. It uses Claude Code's native hook system to enforce good habits, store knowledge, and learn from outcomes — so Claude gets better at working in your codebase over time.
321
+
322
+ ### The Gate System
323
+
324
+ MoFlo installs Claude Code hooks that run on every tool call. Together, these gates create a **feedback loop** that prevents Claude from wasting tokens on blind exploration and ensures it builds on prior knowledge.
325
+
326
+ **Memory-first gate** — Before Claude can use Glob, Grep, or Read on guidance files, it must first search the memory database. This forces Claude to check what it already knows (or what was learned in prior sessions) before re-exploring from scratch. The gate automatically classifies each prompt — simple directives like "commit" or "yes" skip the gate, while task-oriented prompts like "fix the auth bug" enforce it.
327
+
328
+ **Task-create gate** — Before Claude can spawn sub-agents via the Task tool, it must call TaskCreate first. This ensures every agent spawn is tracked, preventing runaway agent proliferation and making it possible to review what work was delegated.
329
+
330
+ **Context tracking** — Each interaction increments a counter. As the conversation grows, MoFlo warns Claude about context depletion (FRESH → MODERATE → DEPLETED → CRITICAL) and advises it to checkpoint progress, compact, or start a fresh session before quality degrades.
331
+
332
+ **Routing** — On each prompt, MoFlo's route hook analyzes the task and recommends the optimal agent type and model tier (haiku for simple tasks, sonnet for moderate, opus for complex). This saves cost without sacrificing quality.
333
+
334
+ All gates are configurable via `moflo.yaml` — you can disable any individual hook if it doesn't suit your workflow.
335
+
336
+ ### Intelligent Agent Routing
337
+
338
+ MoFlo ships with 12 built-in task patterns that map common work to the right agent type:
339
+
340
+ | Pattern | Keywords | Primary Agent |
341
+ |---------|----------|---------------|
342
+ | security-task | auth, password, encryption, CVE | security-architect |
343
+ | testing-task | test, spec, coverage, e2e | tester |
344
+ | database-task | schema, migration, SQL, ORM | architect |
345
+ | feature-task | implement, add, create, build | architect → coder |
346
+ | bugfix-task | bug, fix, error, crash, debug | coder |
347
+ | api-task | endpoint, REST, route, handler | architect → coder |
348
+ | ... | | *(12 patterns total)* |
349
+
350
+ When you route a task (`flo hooks route --task "..."` or via MCP), MoFlo runs semantic similarity against these patterns using HNSW vector search and returns a ranked recommendation with confidence scores.
351
+
352
+ **The routing gets smarter over time.** Every time a task completes successfully, MoFlo's post-task hook records the outcome — the full task description, which agent handled it, and whether it succeeded. These learned patterns are combined with the built-in seeds on every future route call. Because learned patterns contain rich task descriptions (not just short keywords), they discriminate better as they accumulate.
353
+
354
+ Routing outcomes are stored in `.claude-flow/routing-outcomes.json` and persist across sessions. You can inspect them with `flo hooks patterns` or transfer them between projects with `flo hooks transfer`.
355
+
356
+ ### What Ships Out of the Box
357
+
358
+ `flo init` wires up the following systems automatically — no configuration needed:
359
+
360
+ | System | What It Does | Technology |
361
+ |--------|-------------|------------|
362
+ | **Semantic Memory** | Store and search knowledge with 384-dim embeddings | sql.js (WASM SQLite) + Transformers.js (MiniLM-L6-v2) |
363
+ | **HNSW Vector Search** | Fast nearest-neighbor search across all stored knowledge | `@ruvector/core` VectorDb |
364
+ | **Semantic Routing** | Match tasks to agent types using vector similarity | `@ruvector/router` SemanticRouter |
365
+ | **SONA Learning** | Learn from task trajectories — what agent handled what, and whether it succeeded | `@ruvector/sona` SonaEngine (Rust/NAPI) |
366
+ | **MicroLoRA Adaptation** | Rank-2 LoRA weight updates from successful patterns (~1µs per adapt) | `@ruvector/learning-wasm` |
367
+ | **EWC++ Consolidation** | Prevent catastrophic forgetting — new learning doesn't overwrite old patterns | Built into hooks-tools |
368
+ | **Workflow Gates** | Memory-first and task-registration enforcement via Claude Code hooks | `.claude/settings.json` hooks |
369
+ | **Context Tracking** | Monitor context window depletion (FRESH → CRITICAL) | Session interaction counter |
370
+ | **Guidance Indexing** | Chunk and embed your project docs on session start | `flo-index` bin script |
371
+ | **Code Map** | Index source file structure (types, exports, functions) on session start | `flo-codemap` bin script |
372
+ | **Learned Routing** | Task outcomes feed back into routing — gets smarter over time | `routing-outcomes.json` persistence |
373
+ | **Status Line** | Live dashboard showing git, swarm, memory, and MCP status | `statusline.cjs` hook |
374
+
375
+ All of these run locally with zero external dependencies. The SONA, MicroLoRA, and HNSW components are WASM/NAPI binaries that ship with the npm package — no compilation, no GPU, no API keys.
376
+
377
+ ### The Two-Layer Task System
378
+
379
+ MoFlo doesn't replace your AI client's task system — it wraps it. Your client (Claude Code, Cursor, or any MCP-capable tool) handles spawning agents and running code. MoFlo adds a coordination layer on top that handles memory, routing, and learning.
380
+
381
+ ```
382
+ ┌──────────────────────────────────────────────────┐
383
+ │ YOUR AI CLIENT (Execution Layer) │
384
+ │ Spawns agents, runs code, streams output │
385
+ │ TaskCreate → Agent → TaskUpdate → results │
386
+ ├──────────────────────────────────────────────────┤
387
+ │ MOFLO (Knowledge Layer) │
388
+ │ Routes tasks, gates agent spawns, stores │
389
+ │ patterns, learns from outcomes │
390
+ └──────────────────────────────────────────────────┘
391
+ ```
392
+
393
+ Here's how a typical task flows through both layers:
394
+
395
+ 1. **MoFlo routes** — Before work starts, MoFlo analyzes the prompt and recommends an agent type and model tier via hook or MCP tool.
396
+ 2. **MoFlo gates** — Before an agent can spawn, MoFlo verifies that memory was searched and a task was registered. This prevents blind exploration.
397
+ 3. **Your client executes** — The actual agent runs through your client's native task system. MoFlo doesn't manage the agent — your client handles execution, output, and completion.
398
+ 4. **MoFlo learns** — After the agent finishes, MoFlo records what worked (or didn't) in its memory database. Successful patterns feed into future routing.
399
+
400
+ The key insight: **your client handles execution, MoFlo handles knowledge.** Your client is good at spawning agents and running code. MoFlo is good at remembering what happened, routing to the right agent, and ensuring prior knowledge is checked before exploring from scratch.
401
+
402
+ For complex work, MoFlo structures tasks into waves — a research wave discovers context, then an implementation wave acts on it — with dependencies tracked through both the client's task system and MoFlo's coordination layer. The full integration pattern is documented in `.claude/guidance/task-swarm-integration.md`.
403
+
404
+ The `/flo` skill ties both systems together for GitHub issues — driving a full workflow (research → enhance → implement → test → simplify → PR) with your client's agents for execution and MoFlo's memory for continuity.
405
+
406
+ ### Memory & Knowledge Storage
407
+
408
+ MoFlo uses a SQLite database (via sql.js/WASM — no native deps) to store three types of knowledge:
409
+
410
+ | Namespace | What's Stored | How It Gets There |
411
+ |-----------|---------------|-------------------|
412
+ | `guidance` | Chunked project docs (`.claude/guidance/`, `docs/`) with 384-dim embeddings | `flo-index` on session start |
413
+ | `code-map` | Structural index of source files (exports, classes, functions) | `flo-codemap` on session start |
414
+ | `patterns` | Learned patterns from successful task outcomes | Post-task hooks after agent work |
415
+
416
+ **Semantic search** uses cosine similarity on neural embeddings (MiniLM-L6-v2, 384 dimensions). When Claude searches memory, it gets the most relevant chunks ranked by semantic similarity — not keyword matching.
417
+
418
+ **Session start indexing** — Three background processes run on every session start: the guidance indexer, the code map generator, and the learning service. All three are incremental (unchanged files are skipped) and run in parallel so they don't block the session.
419
+
420
+ **Cross-session persistence** — Everything stored in the database survives across sessions. Patterns learned on Monday are available on Friday. The stop hook exports session metrics, and the session-restore hook loads prior state.
421
+
422
+ ### For Claude
423
+
424
+ When `flo init` runs, it appends a workflow section to your CLAUDE.md that teaches Claude:
425
+ - Always search memory before Glob/Grep/Read (enforced by gates)
426
+ - Use `mcp__claude-flow__memory_search` for knowledge retrieval
427
+ - Use `/flo <issue>` (or `/fl`) for issue execution
428
+ - Store learnings after task completion
429
+
430
+ ## Architecture
431
+
432
+ - **7 standalone bin scripts** shipped with npm: `flo-search`, `flo-embeddings`, `flo-index`, `flo-codemap`, `flo-learn`, `flo-setup`, plus the main `flo` CLI
433
+ - **Project config system**: `moflo.yaml` for per-project settings
434
+ - **One-stop init**: `flo init` generates everything needed for OOTB operation
435
+
436
+ ## Ruflo / Claude Flow
437
+
438
+ MoFlo builds on top of the full [Ruflo/Claude Flow](https://github.com/ruvnet/ruflo) engine. For detailed documentation on the underlying capabilities — swarm topologies, hive-mind consensus, HNSW vector search, neural routing, MCP server internals, and more — check out the [Ruflo repository](https://github.com/ruvnet/ruflo).
439
+
440
+ ## License
441
+
442
+ MIT (inherited from [Ruflo/Claude Flow](https://github.com/ruvnet/ruflo))