Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Build or rebuild the ADR index + dependency graph by running scripts/import.mjs (handles v3-style and plugin-style ADR formats; one Bash call vs hundreds of MCP round-trips)
.claude/skills/ruvnet-adr-index/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-04 | ✗→✓ | ▲ Improved | 45% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 25% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 820% | 0% |
| case-07 | ✗→✓ | ▲ Improved | -30% | 0% |
| case-08 | ✗→✓ | ▲ Improved | -4% | 0% |
Persists every ADR under */docs/adr/ or */docs/adrs/ to the adr-patterns namespace and every relationship (supersedes / amends / related / depends-on) to adr-edges. Handles both ADR formats found in the Ruflo monorepo:
# ADR-097: Title heading + **Status**: Proposed lineid: ADR-NNNN, status: Proposed)Implementation is in scripts/import.mjs (one Bash call) rather than dozens of per-ADR MCP tool calls — same effective behavior, materially faster, dual-format-aware, and false-positive-resistant for issue numbers.
bash node plugins/ruflo-adr/scripts/import.mjs
Optional env:
IMPORT_FORMAT=json — emit JSON instead of markdownIMPORT_DRY_RUN=1 — parse + summarize, skip persistenceADR_ROOT=/path — scan a different root (default: cwd)adr-verify skill, which runs scripts/verify.mjs and exits 1 on cycles.mcp__plugin_ruflo-core_ruflo__memory_search against the populated namespace: memory_search --query "federation budget" --namespace adr-patterns
adr-patterns namespace, key <ADR-id>::<basename>, value (text):
<title> — <first paragraph of Context>
file: <relative path>
status: <Proposed|Accepted|Superseded|...>
date: <ISO date>
tags: <comma-separated>adr-edges namespace, deterministic key <relation>:<FROM>-><TO>, value:
json{ "from": "ADR-097", "to": "ADR-086", "relation": "related", "capturedAt": "<ISO>" }
Both ADR records and relationship edges are stored with explicit upsert semantics. Re-running adr-index refreshes changed metadata in place and does not create duplicate copies of an unchanged semantic edge.
#1697 / commit abc123 / PR 1234 references inside ADR bodies are stripped before regex extraction so they don't get misread as ADR-1697 etc. See extractAdrRefs() in scripts/import.mjs.
adr-index only ever adds/upserts. If an ADR file was deleted (or a relation line removed from a surviving file), the row it wrote stays forever — adr-verify won't catch it either, since an orphan has no dangling ref and forms no cycle. Use the sibling adr-reindex skill to reconcile a deletion (issue #2666).
adr-create — produces the ADR files this skill consumesadr-review — runs over adr-patterns for compliance checksadr-verify (sibling skill) — runs scripts/verify.mjs for graph-integrity gatingadr-reindex (sibling skill) — drop-and-rebuild reconcile for a deleted ADR file (this skill can only add, never remove)| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 2,174 | 4,520 | +108% | 1 | 1 | 0% | 318 | 1,174 | +269% | 0 | 0 | — |
case-02 | fail→fail | 17,154 | 4,790 | -72% | 1 | 1 | 0% | 3,396 | 1,089 | -68% | 0 | 0 | — |
case-03 | fail→fail | 11,549 | 4,217 | -63% | 1 | 1 | 0% | 1,864 | 1,180 | -37% | 0 | 0 | — |
case-04 | fail→pass | 6,874 | 4,857 | -29% | 1 | 1 | 0% | 1,205 | 1,745 | +45% | 0 | 0 | — |
case-05 | fail→pass | 13,618 | 11,805 | -13% | 1 | 1 | 0% | 2,501 | 3,138 | +25% | 0 | 0 | — |
case-06 | fail→pass | 4,467 | 12,274 | +175% | 1 | 1 | 0% | 272 | 2,502 | +820% | 0 | 0 | — |
case-07 | fail→pass | 11,631 | 2,774 | -76% | 1 | 1 | 0% | 2,050 | 1,429 | -30% | 0 | 0 | — |
case-08 | fail→pass | 8,072 | 2,184 | -73% | 1 | 1 | 0% | 1,382 | 1,326 | -4% | 0 | 0 | — |
case-09 | fail→pass | 7,945 | 3,016 | -62% | 1 | 1 | 0% | 1,492 | 1,382 | -7% | 0 | 0 | — |
case-10 | fail→pass | 10,227 | 3,003 | -71% | 1 | 1 | 0% | 1,969 | 1,500 | -24% | 0 | 0 | — |
case-11 | fail→pass | 11,451 | 4,192 | -63% | 1 | 1 | 0% | 2,045 | 1,714 | -16% | 0 | 0 | — |
case-12 | pass→pass | 8,798 | 3,458 | -61% | 1 | 1 | 0% | 1,604 | 1,570 | -2% | 0 | 0 | — |
case-13 | fail→pass | 12,029 | 2,669 | -78% | 1 | 1 | 0% | 2,136 | 1,348 | -37% | 0 | 0 | — |
case-14 | fail→pass | 10,426 | 4,185 | -60% | 1 | 1 | 0% | 1,765 | 1,576 | -11% | 0 | 0 | — |
case-15 | fail→pass | 10,936 | 2,928 | -73% | 1 | 1 | 0% | 1,933 | 1,453 | -25% | 0 | 0 | — |
case-16 | fail→pass | 14,393 | 2,807 | -80% | 1 | 1 | 0% | 2,646 | 1,443 | -45% | 0 | 0 | — |
case-17 | fail→pass | 5,563 | 2,684 | -52% | 1 | 1 | 0% | 1,025 | 1,430 | +40% | 0 | 0 | — |
case-18 | fail→pass | 10,231 | 3,700 | -64% | 1 | 1 | 0% | 2,083 | 1,608 | -23% | 0 | 0 | — |
case-19 | fail→pass | 10,060 | 1,708 | -83% | 1 | 1 | 0% | 1,563 | 1,152 | -26% | 0 | 0 | — |
case-20 | pass→pass | 11,098 | 1,811 | -84% | 1 | 1 | 0% | 2,015 | 1,163 | -42% | 0 | 0 | — |
case-21 | pass→pass | 13,388 | 3,602 | -73% | 1 | 1 | 0% | 2,354 | 1,510 | -36% | 0 | 0 | — |
case-22 | fail→pass | 12,235 | 2,168 | -82% | 1 | 1 | 0% | 2,249 | 1,295 | -42% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 18 counted toward the lift figure. The other 4 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +73 percentage points is the difference between those two pass rates over the 18 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.