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 +442 -442
- package/package.json +120 -120
- package/src/@claude-flow/cli/package.json +110 -110
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"
|
|
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))
|