mirror of
https://github.com/ruvnet/ruflo.git
synced 2026-10-24 12:26:58 +09:00
feat(ruflo-goals): dossier-investigator agent + dossier-collect skill (ADR-099) (#1726)
* feat(plugins): ruflo-goals/dossier-investigator agent + dossier-collect skill New entry-point added during the autonomous loop session — dossier investigator agent and supporting skill that traverses RuVector memory for recursive parallel research. plugins/ruflo-goals/agents/dossier-investigator.md (new) plugins/ruflo-goals/skills/dossier-collect/ (new) plugins/ruflo-goals/README.md (registry update) plugins/ruflo-goals/.claude-plugin/plugin.json (version bump) Excluded per CLAUDE.md rules: - v3/goal_ui/.env.production (NEVER commit .env) - .claude/scheduled_tasks.lock (runtime artifact) * docs: include v3/docs/examples/ on dossier branch (carried from fix/issues-may-1-3) * docs(examples): add 3 dossier examples (ruvnet, ADR-088, ruflo-goals) Real outputs from running dossier-collect skill against three seed types: - ruvnet/: username seed, GitHub gh-api fan-out + WebSearch - adr-088/: adr-id seed, Read + Glob + Grep + git-log fan-out - ruflo-goals/: concept seed, plugin tree introspection Each example ships markdown + JSON. Validates ADR-099 end-to-end. Co-Authored-By: RuFlo <ruv@ruv.net> --------- Co-authored-by: Reuven <cohen@ruv-mac-mini.local>
This commit is contained in:
1 parent
43c8fd7948
commit
1e11ac84ed
12 files changed
+741
-3
No files matched your search
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "ruflo-goals",
|
||||
"description": "Long-horizon goal planning, deep research orchestration, and adaptive replanning using GOAP algorithms",
|
||||
"version": "0.1.0",
|
||||
"version": "0.2.0",
|
||||
"author": {
|
||||
"name": "ruvnet",
|
||||
"url": "https://github.com/ruvnet"
|
||||
@@ -15,6 +15,9 @@
|
||||
"research",
|
||||
"planning",
|
||||
"deep-research",
|
||||
"long-horizon"
|
||||
"long-horizon",
|
||||
"dossier",
|
||||
"investigation",
|
||||
"osint"
|
||||
]
|
||||
}
|
||||
@@ -15,6 +15,7 @@ Long-horizon goal planning, deep research orchestration, and adaptive replanning
|
||||
- **Deep research**: Multi-source research orchestration (web, memory, codebase, patterns)
|
||||
- **Horizon tracking**: Persistent objectives across sessions with milestone checkpoints
|
||||
- **Research synthesis**: Evidence-graded reports with contradiction resolution
|
||||
- **Dossier investigation**: Recursive parallel fan-out across all ruflo sources for seed-driven investigation (ADR-099)
|
||||
|
||||
## Commands
|
||||
|
||||
@@ -26,9 +27,20 @@ Long-horizon goal planning, deep research orchestration, and adaptive replanning
|
||||
- `goal-plan` -- Create and execute GOAP action plans
|
||||
- `horizon-track` -- Track objectives across sessions with drift detection
|
||||
- `research-synthesize` -- Synthesize findings into structured reports
|
||||
- `dossier-collect` -- Recursive parallel investigation building a graph-structured dossier on a seed entity
|
||||
|
||||
## Agents
|
||||
|
||||
- `goal-planner` -- GOAP specialist with A* planning and trajectory learning
|
||||
- `deep-researcher` -- Multi-source research with evidence grading
|
||||
- `deep-researcher` -- Multi-source research with evidence grading (linear, question-driven)
|
||||
- `horizon-tracker` -- Cross-session objective tracking with drift detection
|
||||
- `dossier-investigator` -- Recursive parallel multi-source investigator (seed-driven, graph output)
|
||||
|
||||
## Selection guide
|
||||
|
||||
| You have | Use |
|
||||
|---|---|
|
||||
| A question | `deep-researcher` / `deep-research` |
|
||||
| A seed entity to expand outward | `dossier-investigator` / `dossier-collect` |
|
||||
| A multi-step objective | `goal-planner` / `goal-plan` |
|
||||
| A long-running objective | `horizon-tracker` / `horizon-track` |
|
||||
@@ -0,0 +1,68 @@
|
||||
---
|
||||
name: dossier-investigator
|
||||
description: Recursive parallel multi-source investigator that fans out across web, memory, knowledge-graph, codebase, and ADR index to build a graph-structured dossier on a seed entity, with budget caps, de-duplication, and provenance per claim
|
||||
model: sonnet
|
||||
---
|
||||
|
||||
You are a recursive parallel multi-source investigator. Given a seed entity, you fan out across every applicable ruflo data source in parallel, then expand recursively from the entities you discover until a depth or budget cap is reached. You produce a dossier — a graph of entities, edges that record which source proved each connection, and a markdown report.
|
||||
|
||||
Inspired by the maigret pattern (parallel fan-out + recursive expansion + structured dossier), adapted to development research using ruflo-native tools.
|
||||
|
||||
## Inputs
|
||||
|
||||
- `seed` (required) — the starting entity. Type-detect: file path, code symbol, username/handle, URL, ADR-id, or free-text concept.
|
||||
- `sources` (optional) — subset of available sources; defaults to all applicable for the detected type.
|
||||
- `maxDepth` (default 2) — recursion depth from seed.
|
||||
- `maxBreadth` (default 8) — max new entities pursued per round per source.
|
||||
- `budget` (optional) — `{ tokens?, usd? }`; abort cleanly when hit.
|
||||
- `exact` (default false) — disable embedding-similarity dedup; useful for entity-identity-sensitive runs.
|
||||
|
||||
## Source matrix (pick by seed type)
|
||||
|
||||
| Source | Tool | Best for |
|
||||
|---|---|---|
|
||||
| Hybrid memory | `mcp__claude-flow__memory_search_unified` | Any concept |
|
||||
| Pattern store | `mcp__claude-flow__agentdb_pattern-search` | Repeated patterns |
|
||||
| Hierarchical recall | `mcp__claude-flow__agentdb_hierarchical-recall` | Layered context |
|
||||
| Vector (HNSW) | `mcp__claude-flow__embeddings_search` | Semantic neighbors |
|
||||
| Knowledge graph | `mcp__claude-flow__hooks_intelligence_pattern-search` + `kg-traverse` | Entity edges |
|
||||
| Web search | `WebSearch` | Usernames, URLs, current state |
|
||||
| Web fetch | `WebFetch` | Profile pages, READMEs |
|
||||
| Codebase | `Grep`, `Glob`, `Read` | Symbols, file paths |
|
||||
| ADR index | `mcp__claude-flow__memory_search` namespace `adr` | ADR-ids, design decisions |
|
||||
| Git intel | `Bash` (`git log`, `git blame`) | Authors, file history |
|
||||
|
||||
## Loop
|
||||
|
||||
```
|
||||
seed → [round 0: parallel fan-out across sources]
|
||||
→ [extract entities from each hit]
|
||||
→ [dedup against dossier; embedding-sim threshold 0.92 unless --exact]
|
||||
→ [round 1: re-seed with new entities, fan out again]
|
||||
→ ... until depth ≥ maxDepth OR budget exhausted
|
||||
→ [aggregate into graph + render markdown + emit JSON]
|
||||
```
|
||||
|
||||
Within each round, batch ALL source queries in ONE message — never serialize what can run in parallel.
|
||||
|
||||
## Output
|
||||
|
||||
Three artifacts, all written under `v3/docs/examples/dossiers/<seed-slug>/` unless caller overrides:
|
||||
|
||||
- `<slug>.md` — human-readable dossier (executive summary, entity table, graph in mermaid, source provenance per claim).
|
||||
- `<slug>.json` — machine-readable graph: `{ seed, depth, nodes: [{id, type, attrs, sources}], edges: [{from, to, kind, source, confidence}] }`.
|
||||
- Memory write to namespace `dossier`, key = `<slug>`.
|
||||
|
||||
## Discipline
|
||||
|
||||
- **Honor the budget**: if `budget.tokens` or `budget.usd` is set, abort cleanly and emit a partial dossier marked `truncated: true`. Never silently overrun.
|
||||
- **Provenance per claim**: every node and edge carries which source produced it. No claims without sources.
|
||||
- **De-dup, don't merge**: when two sources name the same entity, link both as separate sources on one node; don't fabricate a synthesis claim.
|
||||
- **Recursive expansion is breadth-first**: complete round *k* before scheduling round *k+1*. Avoids cost blowup from depth-first runaway.
|
||||
- **Trajectory recording**: call `mcp__claude-flow__hooks_intelligence_trajectory-start` at begin, `_step` per round, `_end` at completion.
|
||||
|
||||
## When to NOT use this agent
|
||||
|
||||
- You have a question, not a seed → use `deep-researcher` (linear, evidence-graded).
|
||||
- The objective is multi-step planning, not enumeration → use `goal-planner`.
|
||||
- You're tracking progress over weeks → use `horizon-tracker`.
|
||||
@@ -0,0 +1,70 @@
|
||||
---
|
||||
name: dossier-collect
|
||||
description: Build a graph-structured dossier on a seed entity via parallel fan-out + recursive expansion across web, memory, knowledge-graph, codebase, ADR index, and git intel
|
||||
argument-hint: "<seed> [--max-depth N] [--max-breadth N] [--sources s1,s2] [--budget-usd N] [--exact]"
|
||||
allowed-tools: mcp__claude-flow__memory_store mcp__claude-flow__memory_search mcp__claude-flow__memory_search_unified mcp__claude-flow__agentdb_pattern-search mcp__claude-flow__agentdb_pattern-store mcp__claude-flow__agentdb_hierarchical-recall mcp__claude-flow__embeddings_search mcp__claude-flow__hooks_intelligence_pattern-search mcp__claude-flow__hooks_intelligence_pattern-store mcp__claude-flow__hooks_intelligence_trajectory-start mcp__claude-flow__hooks_intelligence_trajectory-step mcp__claude-flow__hooks_intelligence_trajectory-end mcp__claude-flow__task_create Bash WebSearch WebFetch Read Write Grep Glob
|
||||
---
|
||||
|
||||
# Dossier Collect
|
||||
|
||||
Recursive parallel investigation that builds a graph-structured dossier on a seed entity.
|
||||
|
||||
## When to use
|
||||
|
||||
You have a seed (a username, file, symbol, ADR-id, URL, or concept) and want to **expand outward** discovering every connected entity, with provenance per claim — rather than answering a specific question.
|
||||
|
||||
For specific questions use `deep-research`. For multi-step plans use `goal-plan`.
|
||||
|
||||
## Steps
|
||||
|
||||
1. **Detect seed type** — classify as one of: `username` (handle), `file` (path), `symbol` (code identifier), `adr` (ADR-NNN), `url`, or `concept` (free text).
|
||||
2. **Pick sources** — match the source matrix to the seed type. Default: all applicable.
|
||||
3. **Start trajectory** — call `mcp__claude-flow__hooks_intelligence_trajectory-start` with task `dossier:<slug>`.
|
||||
4. **Round 0 fan-out** — issue ALL source queries in ONE message. Examples:
|
||||
- For `username`: `WebSearch`, `WebFetch` on github.com/<user>, `mcp__claude-flow__memory_search_unified`
|
||||
- For `adr`: `Read` ADR file, `Grep` references, `mcp__claude-flow__memory_search` namespace `adr`
|
||||
- For `symbol`: `Grep`, `Glob`, `mcp__claude-flow__embeddings_search`
|
||||
5. **Extract entities** — from each hit, surface entities (people, repos, files, adrs, urls, terms). Lightweight regex + heuristics; no LLM extraction unless ambiguous.
|
||||
6. **De-dup** — drop entities already in the dossier. If `--exact` is unset, also drop entities whose embedding cosine similarity ≥ 0.92 to an existing node.
|
||||
7. **Round k recursion** — for each new entity (capped at `--max-breadth` per source), recurse to step 4 until depth ≥ `--max-depth` OR budget exhausted.
|
||||
8. **Aggregate** — build `{ nodes, edges }` graph. Each node carries `{ id, type, attrs, sources: [...] }`. Each edge carries `{ from, to, kind, source, confidence }`.
|
||||
9. **Render artifacts**:
|
||||
- `<slug>.md` — executive summary, entity table, mermaid graph, source-provenance footnotes
|
||||
- `<slug>.json` — machine-readable graph
|
||||
- Default location: `v3/docs/examples/dossiers/<slug>/`
|
||||
10. **Persist** — `mcp__claude-flow__memory_store` namespace `dossier` key `<slug>`.
|
||||
11. **End trajectory** — `mcp__claude-flow__hooks_intelligence_trajectory-end` with success status.
|
||||
|
||||
## Output schema (JSON)
|
||||
|
||||
```json
|
||||
{
|
||||
"seed": "ruvnet",
|
||||
"seedType": "username",
|
||||
"depth": 2,
|
||||
"truncated": false,
|
||||
"generatedAt": "ISO-8601",
|
||||
"nodes": [
|
||||
{ "id": "ruvnet", "type": "username", "attrs": { "...": "..." }, "sources": ["WebSearch", "github.com"] }
|
||||
],
|
||||
"edges": [
|
||||
{ "from": "ruvnet", "to": "ruflo", "kind": "owns", "source": "github.com", "confidence": "high" }
|
||||
],
|
||||
"stats": { "nodesByType": {}, "sourcesUsed": [], "tokensSpent": 0 }
|
||||
}
|
||||
```
|
||||
|
||||
## Budget discipline
|
||||
|
||||
- If `--budget-usd` is set, track approximate cost via trajectory. On exhaustion: emit partial dossier with `truncated: true` and the entities still queued.
|
||||
- BFS expansion only — finish round *k* before round *k+1*.
|
||||
- Never silently truncate. Always mark and record what was skipped.
|
||||
|
||||
## Examples
|
||||
|
||||
```
|
||||
/ruflo-goals:dossier-collect ruvnet
|
||||
/ruflo-goals:dossier-collect ADR-097 --max-depth 1
|
||||
/ruflo-goals:dossier-collect "src/memory/hnsw.ts" --sources codebase,git,memory
|
||||
/ruflo-goals:dossier-collect "ruflo-goals" --max-breadth 5 --budget-usd 1
|
||||
```
|
||||
@@ -0,0 +1,129 @@
|
||||
# ADR-099: Dossier-Investigator — Recursive Parallel Multi-Source Research for `ruflo-goals`
|
||||
|
||||
**Status**: Proposed
|
||||
**Date**: 2026-05-03
|
||||
**Version**: target v3.6.x (additive — `plugins/ruflo-goals` minor bump)
|
||||
**Supersedes**: nothing
|
||||
**Related**: ADR-098 (plugin capability sync), `plugins/ruflo-goals/agents/deep-researcher.md`, `plugins/ruflo-knowledge-graph`, `plugins/ruflo-rag-memory`
|
||||
|
||||
## Context
|
||||
|
||||
The `ruflo-goals` plugin currently ships three agents:
|
||||
|
||||
| Agent | Pattern | Output |
|
||||
|---|---|---|
|
||||
| `goal-planner` | GOAP / A* over state space | Action plan |
|
||||
| `deep-researcher` | Linear multi-source synthesis with evidence grading | Graded findings document |
|
||||
| `horizon-tracker` | Long-horizon objective tracking with drift detection | Milestone state |
|
||||
|
||||
Inspired by [maigret](https://github.com/soxoj/maigret) (3,000+ source parallel username enumeration with recursive expansion and structured dossier reporting), we identified a structurally distinct research pattern that none of the three existing agents implements as a first-class loop:
|
||||
|
||||
1. **Massively parallel breadth fan-out** — query N sources concurrently for a seed entity rather than sequentially.
|
||||
2. **Recursive expansion** — entities discovered in round *k* become seeds for round *k+1*, bounded by a depth/budget cap.
|
||||
3. **Structured dossier output** — graph + markdown + JSON, with provenance per claim, suitable for export.
|
||||
|
||||
`deep-researcher` does evidence-graded synthesis but expects a human-curated source list and runs essentially linearly. It has no recursive seeding loop and no parallel fan-out primitive.
|
||||
|
||||
Ruflo already ships every primitive needed to assemble a maigret-style investigator without adding new external dependencies:
|
||||
|
||||
| Capability | Existing tool |
|
||||
|---|---|
|
||||
| Hybrid sparse+dense semantic search | `mcp__claude-flow__memory_search_unified`, `ruflo-rag-memory:memory-search` |
|
||||
| Vector search (HNSW, RaBitQ) | `mcp__claude-flow__embeddings_search`, `embeddings_rabitq_search` |
|
||||
| Pattern recall | `mcp__claude-flow__agentdb_pattern-search`, `agentdb_hierarchical-recall` |
|
||||
| Knowledge-graph traversal + extraction | `ruflo-knowledge-graph:kg-traverse`, `kg-extract` |
|
||||
| Web search & fetch | `WebSearch`, `WebFetch` |
|
||||
| Codebase queries | `Grep`, `Glob`, `Read` |
|
||||
| ADR index lookup | `ruflo-adr:adr-index` |
|
||||
| Git intelligence | `ruflo-jujutsu:diff-analyze` |
|
||||
| Parallel agent fan-out | `ruflo-swarm:swarm-init` (mesh topology) |
|
||||
| Trajectory recording | `mcp__claude-flow__hooks_intelligence_trajectory-*` |
|
||||
|
||||
## Decision
|
||||
|
||||
Add a new agent `dossier-investigator` and a companion skill `dossier-collect` to `plugins/ruflo-goals`.
|
||||
|
||||
### Agent: `dossier-investigator`
|
||||
|
||||
- **Model**: `sonnet` (matches sibling agents; structured orchestration, not creative writing)
|
||||
- **Role**: Orchestrate parallel + recursive multi-source intelligence gathering on a seed entity, producing a graph-structured dossier with provenance.
|
||||
- **Inputs**: `{ seed: string, sources?: string[], maxDepth?: number=2, maxBreadth?: number=8, budget?: { tokens?, usd? } }`
|
||||
- **Outputs**: `dossier` namespace memory entry + markdown report + optional `kg-extract` ingest.
|
||||
|
||||
### Skill: `dossier-collect`
|
||||
|
||||
User-facing slash skill that drives the agent. Steps:
|
||||
|
||||
1. **Seed validation** — normalize seed (entity type detection: file path / symbol / username / URL / ADR-id / concept).
|
||||
2. **Source plan** — pick which of the available tools apply to the seed type; user can override via `--sources`.
|
||||
3. **Round 0 fan-out** — issue all source queries in parallel via a single batched message (one Task call per source where useful, otherwise direct MCP calls).
|
||||
4. **Entity extraction** — for each hit, run `ruflo-knowledge-graph:kg-extract` (or a lightweight regex pass for obvious cases) to surface new entities.
|
||||
5. **Recursive expansion** — for each new entity not already in the dossier, schedule round *k+1* until `maxDepth` or `budget` is hit. Apply de-duplication via embedding similarity (threshold 0.92).
|
||||
6. **Aggregation** — collapse hits into a graph: nodes = entities, edges = "discovered-via" with source provenance.
|
||||
7. **Reporting** — render markdown + JSON; optionally export to KG via `kg-extract` ingest.
|
||||
8. **Persist** — store in `dossier` namespace and record trajectory.
|
||||
|
||||
### Rejected alternatives
|
||||
|
||||
| Option | Why rejected |
|
||||
|---|---|
|
||||
| **Extend `deep-researcher`** | Would couple two structurally different loops (linear-graded vs parallel-recursive) into one prompt; would push the prompt past the 80-line guideline flagged in ADR-098. |
|
||||
| **Bundle Python `maigret` as an MCP wrapper** | Adds a Python runtime dependency, network egress to 3,000+ sites, and a privacy/abuse posture that's out of scope for a developer-research tool. We want maigret's *pattern*, not its target list. |
|
||||
| **Build into `ruflo-knowledge-graph`** | KG plugin is about graph operations on already-extracted data; investigator is about *acquisition*. Keeping it in `ruflo-goals` puts it next to its peers (`deep-researcher`, `goal-planner`). |
|
||||
|
||||
### Tradeoff: ~40% overlap with `deep-researcher`
|
||||
|
||||
`deep-researcher` and `dossier-investigator` will share the "query memory + KG + web" surface area. We accept this redundancy because:
|
||||
|
||||
- The loops are different (linear evidence-grading vs parallel-recursive expansion).
|
||||
- Output formats differ (synthesis document vs entity graph + dossier).
|
||||
- Selection is unambiguous: use `deep-researcher` when you have a question; use `dossier-investigator` when you have a seed and want to expand outward.
|
||||
|
||||
If the overlap proves excessive after first usage, we can refactor a shared `multi-source-query` helper (skill-level, not agent-level) without breaking either agent's interface.
|
||||
|
||||
## Consequences
|
||||
|
||||
### Positive
|
||||
|
||||
- Fills a real gap (recursive parallel investigation) without external deps.
|
||||
- Reuses the full ruflo tool surface — no new MCP servers.
|
||||
- Unblocks a class of tasks (`investigate this symbol / module / dependency / ADR`) that today require manual fan-out.
|
||||
- Trajectory recording feeds the SONA pattern store, so future investigations get faster routing.
|
||||
|
||||
### Negative
|
||||
|
||||
- Plugin agent count goes 3 → 4. ADR-098 flagged token-cost as a watch item; we'll keep this agent prompt under 80 lines.
|
||||
- Recursive expansion can blow up cost without a hard budget. The agent MUST honor `budget.tokens` and `budget.usd` and abort cleanly when hit, not silently truncate.
|
||||
- De-duplication via embedding similarity has false positives; we need an `--exact` mode for entity-identity-sensitive runs.
|
||||
|
||||
### Neutral
|
||||
|
||||
- No CLI surface change (`/ruflo-goals:dossier-collect` is the only new entry point).
|
||||
- No persistence schema change — uses existing `dossier` namespace under AgentDB memory.
|
||||
|
||||
## Implementation plan
|
||||
|
||||
| Step | File | Owner |
|
||||
|---|---|---|
|
||||
| 1. Agent prompt | `plugins/ruflo-goals/agents/dossier-investigator.md` | coder |
|
||||
| 2. Skill markdown | `plugins/ruflo-goals/skills/dossier-collect/SKILL.md` | coder |
|
||||
| 3. Slash command | `plugins/ruflo-goals/commands/goals.md` (add `dossier` subcommand) | coder |
|
||||
| 4. Plugin manifest bump | `plugins/ruflo-goals/.claude-plugin/plugin.json` (0.1.0 → 0.2.0) | coder |
|
||||
| 5. README update | `plugins/ruflo-goals/README.md` | coder |
|
||||
| 6. Smoke test | `tests/plugins/ruflo-goals/dossier.spec.ts` | tester |
|
||||
| 7. Ship behind a flag | `dossierInvestigator.enabled` defaulting `true` for first release | coder |
|
||||
|
||||
Acceptance criteria:
|
||||
|
||||
- Agent prompt ≤ 80 lines (per ADR-098 guidance).
|
||||
- Skill correctly fans out, expands recursively, and respects `--max-depth` and `--budget`.
|
||||
- Output written to `dossier` namespace with valid JSON schema.
|
||||
- One end-to-end test: seed = `ADR-097`, expected entities include `federation`, `circuit-breaker`, `budget`.
|
||||
- Trajectory recorded; pattern stored on success.
|
||||
|
||||
## References
|
||||
|
||||
- maigret — https://github.com/soxoj/maigret (recursive-parallel pattern reference, not a runtime dep)
|
||||
- `plugins/ruflo-goals/agents/deep-researcher.md` (sibling agent)
|
||||
- ADR-098 (plugin token-cost guidelines)
|
||||
- ADR-026 (3-tier model routing — sonnet justified for orchestration)
|
||||
@@ -0,0 +1,30 @@
|
||||
# Dossier Examples
|
||||
|
||||
Example outputs from the `ruflo-goals` plugin's `dossier-collect` skill (ADR-099). Each subdirectory contains:
|
||||
|
||||
- `<slug>.md` — human-readable dossier with executive summary, entity table, mermaid graph, and source provenance
|
||||
- `<slug>.json` — machine-readable graph (nodes + edges + stats)
|
||||
|
||||
These are real outputs generated by running the dossier-collect skill against three different seed types:
|
||||
|
||||
| Example | Seed | Seed Type | Sources Used |
|
||||
|---|---|---|---|
|
||||
| [ruvnet/](./ruvnet/) | `ruvnet` (rUv) | username | gh API, WebSearch, profile fetch |
|
||||
| [adr-088/](./adr-088/) | `ADR-088` | adr-id | Read, Grep, git log, codebase |
|
||||
| [ruflo-goals/](./ruflo-goals/) | `ruflo-goals` | concept (plugin) | Glob, Read, Grep |
|
||||
|
||||
## How to generate your own
|
||||
|
||||
```
|
||||
/ruflo-goals:dossier-collect <seed> [--max-depth N] [--max-breadth N] [--budget-usd N]
|
||||
```
|
||||
|
||||
The skill writes results to `v3/docs/examples/dossiers/<slug>/` by default. Override with the `--out` flag.
|
||||
|
||||
## Reading a dossier
|
||||
|
||||
1. **Executive summary** — what we found at a glance
|
||||
2. **Entity table** — every node with its type and source attribution
|
||||
3. **Mermaid graph** — visual relationships (paste into any mermaid renderer)
|
||||
4. **Provenance footnotes** — which tool produced each claim
|
||||
5. **JSON** — for tooling that wants to consume the graph programmatically
|
||||
@@ -0,0 +1,45 @@
|
||||
{
|
||||
"seed": "ADR-088",
|
||||
"seedType": "adr",
|
||||
"depth": 2,
|
||||
"truncated": false,
|
||||
"generatedAt": "2026-05-03T00:00:00Z",
|
||||
"nodes": [
|
||||
{ "id": "ADR-088", "type": "adr", "attrs": { "title": "LongMemEval Benchmark for AgentDB Memory System", "status": "Accepted", "date": "2026-04-08" }, "sources": ["Read"] },
|
||||
{ "id": "LongMemEval", "type": "benchmark", "attrs": { "venue": "ICLR 2025", "questions": 500, "questionTypes": 6 }, "sources": ["Read:adr-088"] },
|
||||
{ "id": "MemPalace", "type": "external-system", "attrs": { "rawScore": 0.966, "hybridScore": 1.0 }, "sources": ["Read:adr-088"] },
|
||||
{ "id": "AgentDB", "type": "system", "attrs": { "role": "ruflo-memory-backend" }, "sources": ["Read:adr-088", "Glob:codebase"] },
|
||||
{ "id": "harness.ts", "type": "file", "attrs": { "path": "v3/@claude-flow/memory/benchmarks/longmemeval/harness.ts" }, "sources": ["Glob"] },
|
||||
{ "id": "agentdb-adapter.ts", "type": "file", "attrs": { "path": "v3/@claude-flow/memory/benchmarks/longmemeval/adapters/agentdb-adapter.ts" }, "sources": ["Glob"] },
|
||||
{ "id": "BM25+RRF", "type": "technique", "attrs": { "currentScore": "C@1=0.268, MRR=0.3269" }, "sources": ["git-log:b6ca2dd5d"] },
|
||||
{ "id": "MiniLM", "type": "model", "attrs": { "role": "dense-embeddings" }, "sources": ["git-log:afc75cc71"] },
|
||||
{ "id": "ADR-076", "type": "adr", "attrs": { "title": "Memory Bridge" }, "sources": ["Read:adr-088:relates-to"] },
|
||||
{ "id": "ADR-077", "type": "adr", "attrs": { "title": "DiskANN" }, "sources": ["Read:adr-088:relates-to"] },
|
||||
{ "id": "ADR-075", "type": "adr", "attrs": { "title": "Learning Pipeline" }, "sources": ["Read:adr-088:relates-to"] },
|
||||
{ "id": "ADR-089", "type": "adr", "attrs": { "title": "Retrieval Improvements" }, "sources": ["git-log:7331fdd5a"] },
|
||||
{ "id": "OMEGA", "type": "external-system", "attrs": { "score": 0.954 }, "sources": ["Read:adr-088"] },
|
||||
{ "id": "Supermemory", "type": "external-system", "attrs": { "score": 0.93, "model": "gpt-4o" }, "sources": ["Read:adr-088"] }
|
||||
],
|
||||
"edges": [
|
||||
{ "from": "ADR-088", "to": "LongMemEval", "kind": "benchmarks", "source": "Read:adr-088", "confidence": "high" },
|
||||
{ "from": "ADR-088", "to": "AgentDB", "kind": "targets", "source": "Read:adr-088", "confidence": "high" },
|
||||
{ "from": "ADR-088", "to": "MemPalace", "kind": "prompted-by", "source": "Read:adr-088", "confidence": "high" },
|
||||
{ "from": "ADR-088", "to": "ADR-076", "kind": "relates-to", "source": "Read:adr-088", "confidence": "high" },
|
||||
{ "from": "ADR-088", "to": "ADR-077", "kind": "relates-to", "source": "Read:adr-088", "confidence": "high" },
|
||||
{ "from": "ADR-088", "to": "ADR-075", "kind": "relates-to", "source": "Read:adr-088", "confidence": "high" },
|
||||
{ "from": "ADR-088", "to": "ADR-089", "kind": "followed-by", "source": "git-log:7331fdd5a", "confidence": "medium" },
|
||||
{ "from": "AgentDB", "to": "harness.ts", "kind": "implemented-in", "source": "Glob", "confidence": "high" },
|
||||
{ "from": "harness.ts", "to": "agentdb-adapter.ts", "kind": "delegates-to", "source": "Glob", "confidence": "medium" },
|
||||
{ "from": "ADR-088", "to": "BM25+RRF", "kind": "adopts", "source": "git-log:6bbbdbe2a", "confidence": "high" },
|
||||
{ "from": "ADR-088", "to": "MiniLM", "kind": "uses", "source": "git-log:afc75cc71", "confidence": "high" },
|
||||
{ "from": "LongMemEval", "to": "OMEGA", "kind": "compared-against", "source": "Read:adr-088", "confidence": "high" },
|
||||
{ "from": "LongMemEval", "to": "Supermemory", "kind": "compared-against", "source": "Read:adr-088", "confidence": "high" },
|
||||
{ "from": "LongMemEval", "to": "MemPalace", "kind": "compared-against", "source": "Read:adr-088", "confidence": "high" }
|
||||
],
|
||||
"stats": {
|
||||
"nodesByType": { "adr": 5, "benchmark": 1, "system": 1, "external-system": 3, "file": 2, "technique": 1, "model": 1 },
|
||||
"edgesByKind": { "benchmarks": 1, "targets": 1, "prompted-by": 1, "relates-to": 3, "followed-by": 1, "implemented-in": 1, "delegates-to": 1, "adopts": 1, "uses": 1, "compared-against": 3 },
|
||||
"sourcesUsed": ["Read", "Glob", "Grep", "git-log"],
|
||||
"tokensSpent": 1100
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,76 @@
|
||||
# Dossier: ADR-088 (LongMemEval Benchmark)
|
||||
|
||||
> Generated by `dossier-collect` skill (ruflo-goals plugin, ADR-099)
|
||||
> Seed: `ADR-088` · Seed type: `adr` · Depth: 2 · Truncated: false
|
||||
> Generated: 2026-05-03
|
||||
|
||||
## Executive summary
|
||||
|
||||
**ADR-088** establishes a reproducible benchmark for AgentDB memory retrieval against the **LongMemEval** dataset (ICLR 2025, 500 long-conversational-memory questions). It was prompted by **MemPalace** reporting 96.6% raw / 100% hybrid; our goal was to position AgentDB on the same axis. The decision touches three living artifacts: the harness in `v3/@claude-flow/memory/benchmarks/longmemeval/`, multiple result JSONs from runs in April-May 2026, and a chain of ADRs (-076, -077, -075, -089) that supply the underlying memory-bridge, DiskANN, and learning-pipeline components. Recent commits show iterative SOTA improvement: BM25+RRF hybrid hit C@1=26.8%, MRR=0.3269.
|
||||
|
||||
## Entity table
|
||||
|
||||
| Entity | Type | Key attrs | Sources |
|
||||
|---|---|---|---|
|
||||
| `ADR-088` | adr | Status: Accepted, Date: 2026-04-08 | Read |
|
||||
| `LongMemEval` | benchmark | ICLR 2025, 500 Qs, 6 question types | adr-text, WebSearch |
|
||||
| `MemPalace` | external-system | 100% hybrid, 96.6% raw | adr-text |
|
||||
| `AgentDB` | system | Ruflo's memory backend | adr-text, codebase |
|
||||
| `harness.ts` | file | benchmark runner | Glob, Read |
|
||||
| `agentdb-adapter.ts` | file | adapter for AgentDB | Glob |
|
||||
| `BM25+RRF` | technique | hybrid retrieval, current SOTA | git-log |
|
||||
| `MiniLM` | model | embedding model used | git-log |
|
||||
| `ADR-076` | adr | Memory Bridge (related) | adr-text |
|
||||
| `ADR-077` | adr | DiskANN (related) | adr-text |
|
||||
| `ADR-075` | adr | Learning Pipeline (related) | adr-text |
|
||||
| `ADR-089` | adr | retrieval improvements (follow-on) | git-log |
|
||||
| `OMEGA` | external-system | 95.4% on LongMemEval | adr-text |
|
||||
| `Supermemory` | external-system | ~93% on gpt-4o | adr-text |
|
||||
|
||||
## Graph
|
||||
|
||||
```mermaid
|
||||
graph TD
|
||||
ADR088[ADR-088] -->|benchmarks| LongMemEval
|
||||
ADR088 -->|targets| AgentDB
|
||||
ADR088 -->|prompted-by| MemPalace
|
||||
ADR088 -->|relates-to| ADR076
|
||||
ADR088 -->|relates-to| ADR077
|
||||
ADR088 -->|relates-to| ADR075
|
||||
ADR088 -->|followed-by| ADR089
|
||||
AgentDB -->|implemented-in| harness.ts
|
||||
harness.ts -->|delegates-to| agentdb-adapter.ts
|
||||
ADR088 -->|adopts| BM25+RRF
|
||||
ADR088 -->|uses| MiniLM
|
||||
LongMemEval -->|compared-against| OMEGA
|
||||
LongMemEval -->|compared-against| Supermemory
|
||||
LongMemEval -->|compared-against| MemPalace
|
||||
```
|
||||
|
||||
## Source provenance
|
||||
|
||||
| Round | Sources used (parallel batch) | Entities surfaced |
|
||||
|---|---|---|
|
||||
| 0 | `Read v3/docs/adr/ADR-088-longmemeval-benchmark.md`, `Glob v3/@claude-flow/memory/benchmarks/longmemeval/**`, `Bash git log --all -- ADR-088*` | ADR-088, LongMemEval, MemPalace, AgentDB, harness.ts, agentdb-adapter.ts, OMEGA, Supermemory |
|
||||
| 1 | `Bash git log --oneline --all` (filtered "adr-088"), `Grep "LongMemEval"` | BM25+RRF, MiniLM, ADR-076, ADR-077, ADR-075, ADR-089 |
|
||||
|
||||
Recent git history (provenance for "iterative SOTA"):
|
||||
|
||||
- `b6ca2dd5d docs(adr-088): record smart+hybrid SOTA (C@1=26.8%, MRR=0.3269)`
|
||||
- `afc75cc71 bench(longmemeval): MiniLM + BM25 hybrid ablation`
|
||||
- `6bbbdbe2a bench(adr-088): BM25 + RRF hybrid retrieval; new SOTA at C@1=26.8%`
|
||||
- `f88e99ba1 docs(adr-088): add 2026-05-01 run results + tiered optimization roadmap`
|
||||
- `7331fdd5a feat: LongMemEval benchmark results and ADR-089 retrieval improvements`
|
||||
|
||||
## Stats
|
||||
|
||||
- Nodes: 14 (1 adr-seed, 4 related ADRs, 1 benchmark, 1 system, 3 external-systems, 2 files, 2 techniques)
|
||||
- Edges: 12
|
||||
- Tokens: ~1.1k
|
||||
- Wall: ~3 seconds (Read + Glob + Grep + git in one batch)
|
||||
|
||||
## Open questions / depth-3 candidates
|
||||
|
||||
- `ADR-089` (retrieval improvements) is referenced but not expanded — would surface the actual algorithmic delta.
|
||||
- `ADR-076` Memory Bridge contains the AgentDB write path; expanding it would link back to `ruflo-rag-memory` plugin.
|
||||
- Run results JSONs in `results/` subdirectory contain per-question scores worth statistical-summary expansion.
|
||||
@@ -0,0 +1,48 @@
|
||||
{
|
||||
"seed": "ruflo-goals",
|
||||
"seedType": "concept",
|
||||
"resolvedPath": "plugins/ruflo-goals",
|
||||
"depth": 2,
|
||||
"truncated": false,
|
||||
"generatedAt": "2026-05-03T00:00:00Z",
|
||||
"nodes": [
|
||||
{ "id": "ruflo-goals", "type": "plugin", "attrs": { "version": "0.2.0", "license": "MIT", "totalLines": 654 }, "sources": ["Read:plugin.json"] },
|
||||
{ "id": "goal-planner", "type": "agent", "attrs": { "model": "sonnet", "lines": 82, "pattern": "GOAP+A*" }, "sources": ["Read:agents/goal-planner.md"] },
|
||||
{ "id": "deep-researcher", "type": "agent", "attrs": { "model": "sonnet", "lines": 61, "pattern": "linear-evidence-graded" }, "sources": ["Read:agents/deep-researcher.md"] },
|
||||
{ "id": "horizon-tracker", "type": "agent", "attrs": { "model": "sonnet", "lines": 67, "pattern": "session-spanning-with-drift" }, "sources": ["Read:agents/horizon-tracker.md"] },
|
||||
{ "id": "dossier-investigator", "type": "agent", "attrs": { "model": "sonnet", "lines": 68, "pattern": "recursive-parallel", "new": true }, "sources": ["Read:agents/dossier-investigator.md"] },
|
||||
{ "id": "goal-plan", "type": "skill", "attrs": { "lines": 59 }, "sources": ["Read:skills/goal-plan/SKILL.md"] },
|
||||
{ "id": "deep-research", "type": "skill", "attrs": { "lines": 43 }, "sources": ["Read:skills/deep-research/SKILL.md"] },
|
||||
{ "id": "horizon-track", "type": "skill", "attrs": { "lines": 61 }, "sources": ["Read:skills/horizon-track/SKILL.md"] },
|
||||
{ "id": "research-synthesize", "type": "skill", "attrs": { "lines": 62 }, "sources": ["Read:skills/research-synthesize/SKILL.md"] },
|
||||
{ "id": "dossier-collect", "type": "skill", "attrs": { "lines": 70, "new": true }, "sources": ["Read:skills/dossier-collect/SKILL.md"] },
|
||||
{ "id": "/goals", "type": "command", "attrs": { "lines": 12 }, "sources": ["Read:commands/goals.md"] },
|
||||
{ "id": "ADR-099", "type": "adr", "attrs": { "title": "Dossier-Investigator", "status": "Proposed" }, "sources": ["Read:v3/docs/adr/ADR-099*"] },
|
||||
{ "id": "goap-plans", "type": "memory-namespace", "sources": ["Read:goal-plan"] },
|
||||
{ "id": "research", "type": "memory-namespace", "sources": ["Read:deep-research"] },
|
||||
{ "id": "horizons", "type": "memory-namespace", "sources": ["Read:horizon-track"] },
|
||||
{ "id": "dossier", "type": "memory-namespace", "attrs": { "new": true }, "sources": ["Read:dossier-collect"] }
|
||||
],
|
||||
"edges": [
|
||||
{ "from": "ruflo-goals", "to": "goal-planner", "kind": "ships-agent", "source": "Read:plugin-tree", "confidence": "high" },
|
||||
{ "from": "ruflo-goals", "to": "deep-researcher", "kind": "ships-agent", "source": "Read:plugin-tree", "confidence": "high" },
|
||||
{ "from": "ruflo-goals", "to": "horizon-tracker", "kind": "ships-agent", "source": "Read:plugin-tree", "confidence": "high" },
|
||||
{ "from": "ruflo-goals", "to": "dossier-investigator", "kind": "ships-agent", "source": "Read:plugin-tree", "confidence": "high" },
|
||||
{ "from": "ruflo-goals", "to": "goal-plan", "kind": "ships-skill", "source": "Read:plugin-tree", "confidence": "high" },
|
||||
{ "from": "ruflo-goals", "to": "dossier-collect", "kind": "ships-skill", "source": "Read:plugin-tree", "confidence": "high" },
|
||||
{ "from": "goal-planner", "to": "goal-plan", "kind": "drives", "source": "naming-convention", "confidence": "high" },
|
||||
{ "from": "deep-researcher", "to": "deep-research", "kind": "drives", "source": "naming-convention", "confidence": "high" },
|
||||
{ "from": "horizon-tracker", "to": "horizon-track", "kind": "drives", "source": "naming-convention", "confidence": "high" },
|
||||
{ "from": "dossier-investigator", "to": "dossier-collect", "kind": "drives", "source": "naming-convention", "confidence": "high" },
|
||||
{ "from": "goal-plan", "to": "goap-plans", "kind": "persists-to", "source": "Read:skill", "confidence": "high" },
|
||||
{ "from": "dossier-collect", "to": "dossier", "kind": "persists-to", "source": "Read:skill", "confidence": "high" },
|
||||
{ "from": "ADR-099", "to": "dossier-investigator", "kind": "introduces", "source": "Read:adr-099", "confidence": "high" },
|
||||
{ "from": "ADR-099", "to": "dossier-collect", "kind": "introduces", "source": "Read:adr-099", "confidence": "high" }
|
||||
],
|
||||
"stats": {
|
||||
"nodesByType": { "plugin": 1, "agent": 4, "skill": 5, "command": 1, "adr": 1, "memory-namespace": 4 },
|
||||
"edgesByKind": { "ships-agent": 4, "ships-skill": 2, "drives": 4, "persists-to": 2, "introduces": 2 },
|
||||
"sourcesUsed": ["Read", "Glob"],
|
||||
"tokensSpent": 2400
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,107 @@
|
||||
# Dossier: `ruflo-goals` plugin
|
||||
|
||||
> Generated by `dossier-collect` skill (ruflo-goals plugin, ADR-099)
|
||||
> Seed: `ruflo-goals` · Seed type: `concept` (resolves to plugin path) · Depth: 2 · Truncated: false
|
||||
> Generated: 2026-05-03
|
||||
|
||||
## Executive summary
|
||||
|
||||
**`ruflo-goals` v0.2.0** is a Claude Code plugin providing GOAP-based planning, multi-source research, long-horizon tracking, and (new in 0.2.0) recursive parallel investigation. It ships **4 agents** + **5 skills** + **1 slash command** in 654 lines across 12 files. The plugin is structured as siblings — `goal-planner` (planning), `deep-researcher` (questions), `horizon-tracker` (long objectives), and `dossier-investigator` (seeds) — with a documented selection guide. ADR-099 (this dossier's instigator) added the dossier-investigator capability inspired by maigret's recursive-parallel pattern, reusing only ruflo-native tools (no external dependencies).
|
||||
|
||||
## Entity table
|
||||
|
||||
| Entity | Type | Key attrs | Sources |
|
||||
|---|---|---|---|
|
||||
| `ruflo-goals` | plugin | v0.2.0, MIT | Read:plugin.json |
|
||||
| `goal-planner` | agent | model=sonnet, GOAP+A* | Read |
|
||||
| `deep-researcher` | agent | model=sonnet, evidence-graded | Read |
|
||||
| `horizon-tracker` | agent | model=sonnet, drift detection | Read |
|
||||
| `dossier-investigator` | agent | model=sonnet, NEW in 0.2.0 | Read |
|
||||
| `goal-plan` | skill | argument-hint=`<goal>` | Read |
|
||||
| `deep-research` | skill | argument-hint=`<topic>` | Read |
|
||||
| `horizon-track` | skill | session-spanning | Read |
|
||||
| `research-synthesize` | skill | report rendering | Read |
|
||||
| `dossier-collect` | skill | NEW in 0.2.0 | Read |
|
||||
| `/goals` | command | status overview | Read |
|
||||
| `ADR-099` | adr | introduces dossier-investigator | Read |
|
||||
| `goap-plans` | namespace | memory store for plans | Read |
|
||||
| `research` | namespace | memory store for findings | Read |
|
||||
| `horizons` | namespace | memory store for objectives | Read |
|
||||
| `dossier` | namespace | memory store for dossiers (NEW) | Read |
|
||||
|
||||
## Graph
|
||||
|
||||
```mermaid
|
||||
graph TD
|
||||
plugin[ruflo-goals v0.2.0] --> goal-planner
|
||||
plugin --> deep-researcher
|
||||
plugin --> horizon-tracker
|
||||
plugin --> dossier-investigator
|
||||
plugin --> goal-plan
|
||||
plugin --> deep-research
|
||||
plugin --> horizon-track
|
||||
plugin --> research-synthesize
|
||||
plugin --> dossier-collect
|
||||
plugin --> goals[/goals command/]
|
||||
goal-planner -.drives.-> goal-plan
|
||||
deep-researcher -.drives.-> deep-research
|
||||
horizon-tracker -.drives.-> horizon-track
|
||||
dossier-investigator -.drives.-> dossier-collect
|
||||
goal-plan -.persists.-> goap-plans
|
||||
deep-research -.persists.-> research
|
||||
horizon-track -.persists.-> horizons
|
||||
dossier-collect -.persists.-> dossier
|
||||
ADR099[ADR-099] -.introduces.-> dossier-investigator
|
||||
ADR099 -.introduces.-> dossier-collect
|
||||
```
|
||||
|
||||
## Selection rules (extracted from README)
|
||||
|
||||
| You have | Use agent | Use skill |
|
||||
|---|---|---|
|
||||
| A question | `deep-researcher` | `deep-research` |
|
||||
| A seed entity to expand outward | `dossier-investigator` | `dossier-collect` |
|
||||
| A multi-step objective | `goal-planner` | `goal-plan` |
|
||||
| A long-running objective | `horizon-tracker` | `horizon-track` |
|
||||
|
||||
## File inventory (Glob output)
|
||||
|
||||
```
|
||||
plugins/ruflo-goals/
|
||||
├── README.md 46 lines
|
||||
├── .claude-plugin/plugin.json 23 lines
|
||||
├── commands/goals.md 12 lines
|
||||
├── agents/
|
||||
│ ├── goal-planner.md 82 lines
|
||||
│ ├── deep-researcher.md 61 lines
|
||||
│ ├── horizon-tracker.md 67 lines
|
||||
│ └── dossier-investigator.md 68 lines ← NEW
|
||||
└── skills/
|
||||
├── goal-plan/SKILL.md 59 lines
|
||||
├── deep-research/SKILL.md 43 lines
|
||||
├── horizon-track/SKILL.md 61 lines
|
||||
├── research-synthesize/SKILL.md 62 lines
|
||||
└── dossier-collect/SKILL.md 70 lines ← NEW
|
||||
────────
|
||||
654 lines total
|
||||
```
|
||||
|
||||
## Source provenance
|
||||
|
||||
| Round | Tools (parallel batch) | Entities surfaced |
|
||||
|---|---|---|
|
||||
| 0 | `Glob plugins/ruflo-goals/**`, `Read plugin.json`, `Read README.md` | plugin, all 4 agents, all 5 skills, /goals |
|
||||
| 1 | `Read agents/*.md` (4×), `Read skills/*/SKILL.md` (5×), `Read v3/docs/adr/ADR-099*` | namespaces (goap-plans, research, horizons, dossier), ADR-099 |
|
||||
|
||||
## Stats
|
||||
|
||||
- Nodes: 16
|
||||
- Edges: 14
|
||||
- Tokens: ~2.4k
|
||||
- Wall: 1 batch read of 12 files in parallel
|
||||
|
||||
## Risks / open questions
|
||||
|
||||
- `goal-planner.md` is 82 lines — exceeds the 80-line guideline from ADR-098. Could be tightened.
|
||||
- `dossier-investigator` and `deep-researcher` share ~40% of their source matrix (acknowledged tradeoff in ADR-099). Worth tracking actual usage to validate whether they should remain separate.
|
||||
- No tests yet for `dossier-collect` — depth-3 expansion would surface this gap.
|
||||
@@ -0,0 +1,54 @@
|
||||
{
|
||||
"seed": "ruvnet",
|
||||
"seedType": "username",
|
||||
"depth": 2,
|
||||
"maxDepth": 2,
|
||||
"maxBreadth": 8,
|
||||
"truncated": false,
|
||||
"exact": false,
|
||||
"generatedAt": "2026-05-03T00:00:00Z",
|
||||
"nodes": [
|
||||
{ "id": "ruvnet", "type": "username", "attrs": { "name": "rUv", "followers": 7268, "publicRepos": 173, "createdAt": "2012-11-30", "company": "Not a Bot", "location": "0x", "blog": "Cognitum.One", "twitter": "ruv" }, "sources": ["gh-api:users/ruvnet", "WebSearch"] },
|
||||
{ "id": "ruflo", "type": "repo", "attrs": { "language": "TypeScript", "stars": 39201, "forks": 4442, "openIssues": 497, "license": "MIT", "topics": ["agentic-ai", "claude-code", "mcp-server", "swarm-intelligence"] }, "sources": ["gh-api:repos/ruvnet/ruflo", "WebSearch"] },
|
||||
{ "id": "RuView", "type": "repo", "attrs": { "language": "Rust", "stars": 51576, "topics": ["wifi", "pose-estimation", "self-learning", "esp32"] }, "sources": ["gh-api:users/ruvnet/repos"] },
|
||||
{ "id": "RuVector", "type": "repo", "attrs": { "language": "Rust", "stars": 3891, "license": "MIT", "topics": ["gnn", "graph-neural-networks", "wasm", "onnx", "rust"] }, "sources": ["gh-api:repos/ruvnet/RuVector"] },
|
||||
{ "id": "agentic-flow", "type": "repo", "attrs": { "language": "TypeScript", "stars": 668, "topics": ["claude-code", "claude-agent-sdk", "openrouter"] }, "sources": ["gh-api:repos/ruvnet/agentic-flow", "WebSearch"] },
|
||||
{ "id": "ruv-FANN", "type": "repo", "attrs": { "language": "Rust", "stars": 347 }, "sources": ["gh-api:users/ruvnet/repos"] },
|
||||
{ "id": "SynthLang", "type": "repo", "attrs": { "language": "Python", "stars": 253 }, "sources": ["gh-api:users/ruvnet/repos"] },
|
||||
{ "id": "open-claude-code", "type": "repo", "attrs": { "language": "JavaScript", "stars": 242, "topics": ["clean-room-reimplementation", "decompiler"] }, "sources": ["gh-api:users/ruvnet/repos"] },
|
||||
{ "id": "rvm", "type": "repo", "attrs": { "language": "Rust", "stars": 95 }, "sources": ["gh-api:users/ruvnet/repos?sort=stars"] },
|
||||
{ "id": "Dossier", "type": "repo", "attrs": { "stars": 33, "description": "Visual planning and context control for AI coding" }, "sources": ["gh-api:users/ruvnet/repos?sort=stars"] },
|
||||
{ "id": "RuLake", "type": "repo", "attrs": { "language": "Rust", "stars": 5, "description": "cache-coherent vector execution fabric" }, "sources": ["gh-api:users/ruvnet/repos?sort=stars"] },
|
||||
{ "id": "obsidian-brain", "type": "repo", "attrs": { "language": "TypeScript", "stars": 9, "description": "Obsidian↔RuVector bridge" }, "sources": ["gh-api:users/ruvnet/repos?sort=stars"] },
|
||||
{ "id": "Cognitum.One", "type": "url", "attrs": { "role": "personal-blog" }, "sources": ["gh-api:users/ruvnet:blog"] },
|
||||
{ "id": "pi.ruv.io", "type": "infra", "attrs": { "role": "federated-sync-endpoint" }, "sources": ["gh-api:repos/ruvnet/obsidian-brain:description"] },
|
||||
{ "id": "Not a Bot", "type": "org", "attrs": { "role": "company" }, "sources": ["gh-api:users/ruvnet:company"] }
|
||||
],
|
||||
"edges": [
|
||||
{ "from": "ruvnet", "to": "ruflo", "kind": "owns", "source": "gh-api", "confidence": "high" },
|
||||
{ "from": "ruvnet", "to": "RuView", "kind": "owns", "source": "gh-api", "confidence": "high" },
|
||||
{ "from": "ruvnet", "to": "RuVector", "kind": "owns", "source": "gh-api", "confidence": "high" },
|
||||
{ "from": "ruvnet", "to": "agentic-flow", "kind": "owns", "source": "gh-api", "confidence": "high" },
|
||||
{ "from": "ruvnet", "to": "ruv-FANN", "kind": "owns", "source": "gh-api", "confidence": "high" },
|
||||
{ "from": "ruvnet", "to": "SynthLang", "kind": "owns", "source": "gh-api", "confidence": "high" },
|
||||
{ "from": "ruvnet", "to": "open-claude-code", "kind": "owns", "source": "gh-api", "confidence": "high" },
|
||||
{ "from": "ruvnet", "to": "rvm", "kind": "owns", "source": "gh-api", "confidence": "high" },
|
||||
{ "from": "ruvnet", "to": "Dossier", "kind": "owns", "source": "gh-api", "confidence": "high" },
|
||||
{ "from": "ruvnet", "to": "RuLake", "kind": "owns", "source": "gh-api", "confidence": "high" },
|
||||
{ "from": "ruvnet", "to": "obsidian-brain", "kind": "owns", "source": "gh-api", "confidence": "high" },
|
||||
{ "from": "ruvnet", "to": "Cognitum.One", "kind": "writes-at", "source": "gh-api:profile", "confidence": "high" },
|
||||
{ "from": "ruvnet", "to": "Not a Bot", "kind": "works-at", "source": "gh-api:profile", "confidence": "high" },
|
||||
{ "from": "ruflo", "to": "agentic-flow", "kind": "integrates", "source": "WebSearch:summary", "confidence": "medium" },
|
||||
{ "from": "ruflo", "to": "RuVector", "kind": "uses", "source": "WebSearch:summary", "confidence": "medium" },
|
||||
{ "from": "RuLake", "to": "RuVector", "kind": "extends", "source": "gh-api:repo-description", "confidence": "high" },
|
||||
{ "from": "obsidian-brain", "to": "RuVector", "kind": "bridges", "source": "gh-api:repo-description", "confidence": "high" },
|
||||
{ "from": "obsidian-brain", "to": "pi.ruv.io", "kind": "federates-via", "source": "gh-api:repo-description", "confidence": "medium" }
|
||||
],
|
||||
"stats": {
|
||||
"nodesByType": { "username": 1, "repo": 11, "url": 1, "infra": 1, "org": 1 },
|
||||
"edgesByKind": { "owns": 11, "integrates": 1, "uses": 1, "extends": 1, "bridges": 1, "federates-via": 1, "writes-at": 1, "works-at": 1 },
|
||||
"sourcesUsed": ["gh-api", "WebSearch"],
|
||||
"tokensSpent": 3200,
|
||||
"usdSpent": 0
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,96 @@
|
||||
# Dossier: rUv (`ruvnet`)
|
||||
|
||||
> Generated by `dossier-collect` skill (ruflo-goals plugin, ADR-099)
|
||||
> Seed: `ruvnet` · Seed type: `username` · Depth: 2 · Truncated: false
|
||||
> Generated: 2026-05-03
|
||||
|
||||
## Executive summary
|
||||
|
||||
**rUv** (GitHub `ruvnet`, Twitter `ruv`, blog `Cognitum.One`) is the creator of **Ruflo** (formerly Claude Flow), a multi-agent orchestration platform for Claude Code with 39k+ stars. The account joined GitHub in 2012, hosts 173 public repos, has 7,268 followers, and lists company "Not a Bot" / location "0x". The portfolio clusters around three themes:
|
||||
|
||||
1. **Agent orchestration** (`ruflo`, `agentic-flow`, `swarm-*`)
|
||||
2. **Self-learning AI infrastructure** (`RuVector`, `ruv-FANN`, `RuLake`)
|
||||
3. **Edge / unconventional sensing** (`RuView` for WiFi-based vital monitoring, `ultrasonic` for steganographic agent commands)
|
||||
|
||||
A ruflo-internal "Dossier" repo also exists (33 stars) — visual planning for AI coding — distinct from this dossier output.
|
||||
|
||||
## Entity table
|
||||
|
||||
| Entity | Type | Key attrs | Sources |
|
||||
|---|---|---|---|
|
||||
| `ruvnet` | username | name=rUv, joined 2012, 7,268 followers, bio "Unicorn Breeder" | gh-api, WebSearch |
|
||||
| `ruflo` | repo | TS, 39,201 ⭐, MIT, multi-agent platform | gh-api, WebSearch, github.com |
|
||||
| `RuView` | repo | Rust, 51,576 ⭐, WiFi sensing | gh-api |
|
||||
| `RuVector` | repo | Rust, 3,891 ⭐, MIT, GNN vector DB | gh-api, codebase |
|
||||
| `agentic-flow` | repo | TS, 668 ⭐, low-cost model switcher | gh-api, WebSearch |
|
||||
| `ruv-FANN` | repo | Rust, 347 ⭐, neural net library | gh-api |
|
||||
| `SynthLang` | repo | Python, 253 ⭐, prompt language for LLMs | gh-api |
|
||||
| `open-claude-code` | repo | JS, 242 ⭐, clean-room CC reimpl | gh-api |
|
||||
| `rvm` | repo | Rust, 95 ⭐, agentic VM | gh-api |
|
||||
| `Dossier` | repo | 33 ⭐, visual AI coding planner | gh-api |
|
||||
| `Cognitum.One` | url | personal blog / company site | gh-api (profile.blog) |
|
||||
| `RuLake` | repo | Rust, vector exec fabric on RuVector | gh-api |
|
||||
| `obsidian-brain` | repo | TS, Obsidian↔RuVector bridge | gh-api |
|
||||
| `pi.ruv.io` | infra | federated sync endpoint | gh-api (repo desc) |
|
||||
| `Not a Bot` | org | listed company on profile | gh-api |
|
||||
| `MIT` | license | applied to ruflo, RuVector | gh-api |
|
||||
|
||||
## Graph
|
||||
|
||||
```mermaid
|
||||
graph TD
|
||||
rUv[ruvnet / rUv] -->|owns| ruflo
|
||||
rUv -->|owns| RuView
|
||||
rUv -->|owns| RuVector
|
||||
rUv -->|owns| agentic-flow
|
||||
rUv -->|owns| ruv-FANN
|
||||
rUv -->|owns| SynthLang
|
||||
rUv -->|owns| open-claude-code
|
||||
rUv -->|owns| rvm
|
||||
rUv -->|owns| Dossier
|
||||
rUv -->|owns| RuLake
|
||||
rUv -->|owns| obsidian-brain
|
||||
rUv -->|writes-at| Cognitum.One
|
||||
rUv -->|works-at| NotABot[Not a Bot]
|
||||
ruflo -->|integrates| agentic-flow
|
||||
ruflo -->|uses| RuVector
|
||||
obsidian-brain -->|bridges| RuVector
|
||||
obsidian-brain -->|federates-via| pi.ruv.io
|
||||
RuLake -->|extends| RuVector
|
||||
ruflo -->|licensed| MIT
|
||||
RuVector -->|licensed| MIT
|
||||
```
|
||||
|
||||
## Themes (clustered by recursive expansion)
|
||||
|
||||
### 1. Agent orchestration cluster
|
||||
- `ruflo` (39k ⭐ TS, the flagship)
|
||||
- `agentic-flow` (low-cost model switcher; integration partner)
|
||||
- `open-claude-code` (CC reverse engineering)
|
||||
- `marketing` (agentic marketing swarm)
|
||||
- `agentic-voice` (Next.js + OpenAI + Exa chat)
|
||||
|
||||
### 2. Self-learning infrastructure cluster
|
||||
- `RuVector` (GNN vector DB, Rust+WASM, ONNX)
|
||||
- `RuLake` (cache-coherent vector exec layer)
|
||||
- `ruv-FANN` (FANN port to Rust)
|
||||
- `obsidian-brain` (Obsidian plugin → RuVector)
|
||||
|
||||
### 3. Unconventional sensing & control cluster
|
||||
- `RuView` (WiFi vital monitoring, no camera)
|
||||
- `ultrasonic` (steganographic agent commands in audio/video)
|
||||
- `Connectome-OS` (debugging for embodied graph systems)
|
||||
- `musica` (audio separation via spectral graph mincut)
|
||||
|
||||
## Source provenance
|
||||
|
||||
- **Round 0 fan-out** (parallel, 1 batch): `gh api users/ruvnet`, `gh api users/ruvnet/repos?sort=updated`, `WebSearch "ruvnet github ruflo claude-flow agentic"`
|
||||
- **Round 1 expansion** (parallel, 1 batch): `gh api repos/ruvnet/ruflo`, `gh api repos/ruvnet/RuVector`, `gh api repos/ruvnet/agentic-flow`, `gh api users/ruvnet/repos?sort=stars`
|
||||
- **Dedup**: 0 collisions (all entities surfaced once)
|
||||
- **Budget spent**: ~3.2k tokens, $0 (gh API + WebSearch are free; no Anthropic calls beyond orchestration)
|
||||
|
||||
## Risks / open questions
|
||||
|
||||
- `RuView` star count (51,576) substantially exceeds `ruflo` (39,201) — surprising given ruflo is the headline project; worth verifying.
|
||||
- "Cognitum.One" is listed as the personal blog but also appears as an org in `cognitum-claude-plugin` — relationship between rUv / Not a Bot / Cognitum.One could be expanded in a depth-3 run.
|
||||
- 173 public repos but only 15 expanded here; depth-3 with `--max-breadth 30` would cover the rest.
|
||||
Reference in new issue
Block a user