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
- Detect seed type — classify as one of:
username (handle), file (path), symbol (code identifier), adr (ADR-NNN), url, or concept (free text).
- Pick sources — match the source matrix to the seed type. Default: all applicable.
- Start trajectory — call
mcp__plugin_ruflo-core_ruflo__hooks_intelligence_trajectory-start with task dossier:<slug>.
- Round 0 fan-out — issue ALL source queries in ONE message. Examples:
- For
username: WebSearch, WebFetch on github.com/, mcp__plugin_ruflo-core_ruflo__memory_search_unified
- For
adr: Read ADR file, Grep references, mcp__plugin_ruflo-core_ruflo__memory_search namespace adr
- For
symbol: Grep, Glob, mcp__plugin_ruflo-core_ruflo__embeddings_search
- Extract entities — from each hit, surface entities (people, repos, files, adrs, urls, terms). Lightweight regex + heuristics; no LLM extraction unless ambiguous.
- 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.
- Round k recursion — for each new entity (capped at
--max-breadth per source), recurse to step 4 until depth ≥ --max-depth OR budget exhausted.
- Aggregate — build
{ nodes, edges } graph. Each node carries { id, type, attrs, sources: [...] }. Each edge carries { from, to, kind, source, confidence }.
- 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>/
- Persist —
mcp__plugin_ruflo-core_ruflo__memory_store namespace dossier key <slug>.
- End trajectory —
mcp__plugin_ruflo-core_ruflo__hooks_intelligence_trajectory-end with success status.
Output schema (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
Source: ruvnet/ruflo → plugins/ruflo-goals/skills/dossier-collect/SKILL.md
1---2name: dossier-collect3description: 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 intel4---5
6
7# Dossier Collect
8
9Recursive parallel investigation that builds a graph-structured dossier on a seed entity.
10
11## When to use
12
13You 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.
14
15For specific questions use `deep-research`. For multi-step plans use `goal-plan`.
16
17## Steps
18
191. **Detect seed type** — classify as one of: `username` (handle), `file` (path), `symbol` (code identifier), `adr` (ADR-NNN), `url`, or `concept` (free text).
202. **Pick sources** — match the source matrix to the seed type. Default: all applicable.
213. **Start trajectory** — call `mcp__plugin_ruflo-core_ruflo__hooks_intelligence_trajectory-start` with task `dossier:<slug>`.
224. **Round 0 fan-out** — issue ALL source queries in ONE message. Examples:
23 - For `username`: `WebSearch`, `WebFetch` on github.com/<user>, `mcp__plugin_ruflo-core_ruflo__memory_search_unified`
24 - For `adr`: `Read` ADR file, `Grep` references, `mcp__plugin_ruflo-core_ruflo__memory_search` namespace `adr`
25 - For `symbol`: `Grep`, `Glob`, `mcp__plugin_ruflo-core_ruflo__embeddings_search`
265. **Extract entities** — from each hit, surface entities (people, repos, files, adrs, urls, terms). Lightweight regex + heuristics; no LLM extraction unless ambiguous.
276. **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.
287. **Round k recursion** — for each new entity (capped at `--max-breadth` per source), recurse to step 4 until depth ≥ `--max-depth` OR budget exhausted.
298. **Aggregate** — build `{ nodes, edges }` graph. Each node carries `{ id, type, attrs, sources: [...] }`. Each edge carries `{ from, to, kind, source, confidence }`.
309. **Render artifacts**:
31 - `<slug>.md` — executive summary, entity table, mermaid graph, source-provenance footnotes
32 - `<slug>.json` — machine-readable graph
33 - Default location: `v3/docs/examples/dossiers/<slug>/`
3410. **Persist** — `mcp__plugin_ruflo-core_ruflo__memory_store` namespace `dossier` key `<slug>`.
3511. **End trajectory** — `mcp__plugin_ruflo-core_ruflo__hooks_intelligence_trajectory-end` with success status.
36
37## Output schema (JSON)
38
39```json
40{
41 "seed": "ruvnet",
42 "seedType": "username",
43 "depth": 2,
44 "truncated": false,
45 "generatedAt": "ISO-8601",
46 "nodes": [
47 { "id": "ruvnet", "type": "username", "attrs": { "...": "..." }, "sources": ["WebSearch", "github.com"] }
48 ],
49 "edges": [
50 { "from": "ruvnet", "to": "ruflo", "kind": "owns", "source": "github.com", "confidence": "high" }
51 ],
52 "stats": { "nodesByType": {}, "sourcesUsed": [], "tokensSpent": 0 }
53}
54```
55
56## Budget discipline
57
58- If `--budget-usd` is set, track approximate cost via trajectory. On exhaustion: emit partial dossier with `truncated: true` and the entities still queued.
59- BFS expansion only — finish round *k* before round *k+1*.
60- Never silently truncate. Always mark and record what was skipped.
61
62## Examples
63
64```
65/ruflo-goals:dossier-collect ruvnet
66/ruflo-goals:dossier-collect ADR-097 --max-depth 1
67/ruflo-goals:dossier-collect "src/memory/hnsw.ts" --sources codebase,git,memory
68/ruflo-goals:dossier-collect "ruflo-goals" --max-breadth 5 --budget-usd 1
69```
70
71---
72
73**Source:** [`ruvnet/ruflo`](https://github.com/ruvnet/ruflo) → `plugins/ruflo-goals/skills/dossier-collect/SKILL.md`