Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Reconstruct a DARE skill repo's true use-dependency relations and render them as a self-contained, offline, Obsidian-style interactive HTML graph (pyvis / vis-network). Use this whenever the user wants to graph / map / visualize the skill dependencies of a repo or package, "画依赖图 / graph 化这个 repo / 把 skill 连边画出来 / 用 pyvis 出个图 / skill 关系图", or to audit how campaign→strategy→ tactic→sop skills connect. Trigger even if the user just says "给这个 package 做个图" without naming pyvis or HTML. Goes straight
.claude/skills/yogsoth-ai-repo-dependency-graph/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-12 | ✗→✓ | ▲ Improved | -9% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 74% | 0% |
| case-07 | ✗→✓ | ▲ Improved | -18% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 116% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 22% | 0% |
Turn a skill repo (or a whole campaign package) into a clean, interactive use-dependency graph: read the original SKILL.md + design docs, reconstruct the real use edges, and render one offline HTML per repo that looks and behaves like an Obsidian graph (force-directed, draggable, neighbourhood-highlight, HTML hover tooltips).
This skill exists because a repo's frontmatter alone gives a broken graph — real routing lives in prose, in references/*-index.md, and in same-layer escalation handoffs. Reconstructing the true graph takes a careful read of each repo, then a deterministic render. This skill captures both halves so the result is consistent every time and reusable across all repos.
references/layer-rules.md for the full rules)campaign (red) · strategy (cyan) · tactic (yellow) ·sop (purple) · references (gray dashed, = a .py/.md helper file).
use: A -->|use| B = A invokes/orchestrates B (caller → callee).type: / layer: (NOT execution:). Inferfrom body+README only if absent, and record the reasoning.
sop → sop use edge (locked decision): "escalate toX" / "for deeper analysis use X" / "import X" are all drawn as use edges. Do NOT promote a skill's layer just to make the edge look legal — same-layer handoff is a first-class edge here.
For each skills/*/SKILL.md: read the full body + frontmatter (layer field, and any prose that invokes/escalates to another skill or points at a references/ helper). Also read README.md, docs/, assets/, and any *-index.md — real routing often lives there, not in frontmatter.
Only draw an edge the design files actually justify. If two skills are independent siblings, leave them unconnected — do not invent edges. A pointer to an external MCP tool (alphaxiv, brave) is a tool, not a vertex. A broken / never-used file pointer does not justify a references vertex — verify the live reference.
For a large package (50+ skills), dispatch one subagent per package to read its skills/ + docs/ and return the reconstructed nodes/edges — they are independent and parallelize cleanly. Give each subagent references/layer-rules.md and references/graph-schema.md so its output is consistent and directly usable.
Emit one JSON file per repo following references/graph-schema.md:
json{ "name": "<repo-name>", "nodes": [ {"id": "<full-skill-name>", "layer": "sop", "desc": "<bilingual hover>"} ], "edges": [ {"from": "...", "to": "...", "tip": "<trigger scenario hover>"} ] }
desc (中英混合) = what the SKILL does + its depth / HARD-GATE. HTML allowed.tip = the condition under which the caller hands off to the callee; quote thesource skill's own escalation language where possible. HTML allowed.
desc and tip are optional — omit and the tooltip falls back toname [layer] / use.
python scripts/render_graph.py --data <repo>.json --out <repo>.html
# or batch a whole directory of graph JSONs:
python scripts/render_graph.py --data-dir ./data --out-dir ./graphsThe script prints a [warn] for any edge that breaks layer legality (sop → sop escalation never warns). It produces a fully offline HTML (vis-network inlined, external CDN stripped) with:
references.#dare-tip hover layer that renders the HTML in desc/tip(vis's native tooltip shows a string title as plain text, leaking <b> tags — the script bypasses it with an event-driven layer; this is why HTML renders).
Open the HTML in a browser and confirm: nodes colored by layer, edges arrow caller→callee, hovering a node/edge shows the bilingual tooltip with HTML rendered (bold + <hr> divider, not raw tags). Requires pyvis (>=0.3.2).
.md. The HTML is the deliverable.emit filesystem paths, log paths, or session IDs into the graph data or output.
See examples/literature-engine.json for a complete, working graph JSON.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-12 | fail→pass | 15,470 | 6,072 | -61% | 1 | 1 | 0% | 2,426 | 2,215 | -9% | 0 | 0 | — |
case-01 | fail→fail | 5,767 | 4,664 | -19% | 1 | 1 | 0% | 276 | 1,455 | +427% | 0 | 0 | — |
case-02 | fail→fail | 34,123 | 6,178 | -82% | 1 | 1 | 0% | 6,214 | 1,556 | -75% | 0 | 0 | — |
case-03 | fail→fail | 5,052 | 4,266 | -16% | 1 | 1 | 0% | 251 | 1,464 | +483% | 0 | 0 | — |
case-04 | pass→pass | 17,364 | 6,614 | -62% | 1 | 1 | 0% | 2,356 | 2,417 | +3% | 0 | 0 | — |
case-05 | pass→pass | 3,123 | 2,171 | -30% | 1 | 1 | 0% | 469 | 1,585 | +238% | 0 | 0 | — |
case-06 | fail→pass | 7,667 | 7,820 | +2% | 1 | 1 | 0% | 1,462 | 2,547 | +74% | 0 | 0 | — |
case-07 | fail→pass | 14,696 | 4,996 | -66% | 1 | 1 | 0% | 2,559 | 2,100 | -18% | 0 | 0 | — |
case-08 | pass→pass | 8,906 | 2,891 | -68% | 1 | 1 | 0% | 1,316 | 1,739 | +32% | 0 | 0 | — |
case-09 | fail→pass | 31,343 | 5,470 | -83% | 1 | 1 | 0% | 949 | 2,054 | +116% | 0 | 0 | — |
case-10 | fail→fail | 15,914 | 5,229 | -67% | 1 | 1 | 0% | 2,271 | 2,036 | -10% | 0 | 0 | — |
case-11 | fail→pass | 15,058 | 8,696 | -42% | 1 | 1 | 0% | 2,210 | 2,693 | +22% | 0 | 0 | — |
case-13 | fail→pass | 10,631 | 3,299 | -69% | 1 | 1 | 0% | 1,898 | 1,778 | -6% | 0 | 0 | — |
case-14 | fail→pass | 13,344 | 9,913 | -26% | 1 | 1 | 0% | 2,031 | 2,706 | +33% | 0 | 0 | — |
case-15 | fail→pass | 9,355 | 5,790 | -38% | 1 | 1 | 0% | 1,375 | 2,113 | +54% | 0 | 0 | — |
case-16 | fail→pass | 12,195 | 2,128 | -83% | 1 | 1 | 0% | 1,823 | 1,531 | -16% | 0 | 0 | — |
case-22 | pass→fail | 18,739 | 4,708 | -75% | 1 | 1 | 0% | 3,637 | 1,439 | -60% | 0 | 0 | — |
case-17 | fail→pass | 10,718 | 2,606 | -76% | 1 | 1 | 0% | 1,750 | 1,660 | -5% | 0 | 0 | — |
case-18 | pass→pass | 5,887 | 4,412 | -25% | 1 | 1 | 0% | 739 | 1,973 | +167% | 0 | 0 | — |
case-19 | fail→fail | 12,176 | 4,179 | -66% | 1 | 1 | 0% | 1,826 | 1,926 | +5% | 0 | 0 | — |
case-20 | fail→fail | 10,090 | 7,378 | -27% | 1 | 1 | 0% | 1,000 | 2,443 | +144% | 0 | 0 | — |
case-21 | pass→pass | 9,461 | 9,056 | -4% | 1 | 1 | 0% | 1,595 | 2,904 | +82% | 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 16 counted toward the lift figure. The other 6 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 +41 percentage points is the difference between those two pass rates over the 16 comparable cases. 3 cases got worse with the skill loaded, and they are included in that figure.
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.