Blueprint
Human-facing documentation, architecture docs, and mermaid diagrams for a codebase, a module, or a feature — "draw me the architecture, with receipts." Fans out read-only sub-agents to build a grounded component graph first: every node is a real path, every edge backed by a grep-verified import or call — unverifiable edges are dropped, not drawn. Diagrams render from that verified table per a fixed checklist (never freehand mermaid), capped at 5–8 top-level components with drill-down pages; every doc section cites its sources as file:line. Drafts in chat, writes docs/blueprint/ only on your yes, and stamps a manifest with date + commit so /blueprint refresh regenerates only what the diff touched. Use for "generate an architecture diagram", "document this codebase or module for people", "create a mermaid diagram of this feature" — e.g. "/blueprint", "/blueprint the payment flow", "/blueprint refresh". For agent-facing orientation (AGENTS.md) use map; blueprint is the human-facing sibling.From its SKILL.md
npx -y skills add duthaho/skillhub --skill blueprintAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- 9 stars9 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
- runs commandsInstructs the agent to run 6 commands, including `git rev-list --count` and 5 more.
SKILL.md
9.6 KB, ~2.2k tokens by cl100k_base, as published. Nobody here has run it
blueprint — architecture the team can read, with receipts
/blueprint — whole-repo architecture doc + top-level mermaid diagram
/blueprint <module|feature> — scoped doc + diagram for one area
/blueprint refresh — regenerate only what the diff since the stamp touched
Answer one question: what does a person need to see to understand how this code is put together — and can every box and arrow be defended? The documented failure mode of AI-generated architecture docs is confident fiction: diagrams with components that don't exist and arrows nobody can trace. The countermeasure is structural, not stylistic — no edge without a locator, no mermaid the checklist didn't render, no write without a yes.
Step 0 — Scope, and respect what exists
Look before generating:
- Existing output? Check for
docs/blueprint/and itsmanifest.md. The explicit command wins: a scope argument runs SCOPED and/blueprint refreshruns REFRESH regardless. A bare/blueprintwith existing output defaults to REFRESH — read the manifest first and jump to the refresh path in Step 5; offer a full regenerate only if the user asks or the manifest looks obsolete. An existing hand-writtendocs/architecture*file is context to read and link, never to overwrite. Whichever mode wins, if the manifest's stamp trails HEAD, state the drift in one line — "blueprint is N commits behind (touched: X, Y)" viagit rev-list --count+git diff --statover<stamped-commit>..HEAD— and offer the refresh unless this run already is one. A stamp that no longer resolves (rebase, shallow clone) is itself the staleness signal: report it and offer a full regenerate. Staleness surfaces at every touch, not only on a remembered refresh. - Orient cheaply first. Read
AGENTS.md/CLAUDE.md/READMEif present (the map skill writes the first) — they answer in seconds what fan-out answers in minutes. No AGENTS.md in a large repo? Offer/mapfirst; its output makes this run better and the repo better oriented for every later agent. - Size the repo (
git ls-files | wc -l, top-level layout) to scale the fan-out: a small repo graphs in one pass inline; a large or polyglot one gets one Explore agent per area. - A scope argument (
/blueprint the payment flow) narrows everything to that module or feature: the graph, the doc, and the diagram cover that area and its direct boundaries — not the whole repo.
State the mode picked (FULL / SCOPED / REFRESH) and why.
Step 1 — Fan out, gather the raw graph
Dispatch read-only Explore sub-agents — grep/glob/read, keyless, no index to go stale — one per area (FULL) or one per boundary (SCOPED). Each agent returns, for its area:
- Candidate components — the directories/modules that act as units, each with its entry file and one line on its job.
- Candidate edges — imports, calls, route registrations, queue producers/consumers, config wiring — each with the file:line where it was seen. An edge the agent "believes" but didn't see is reported as a question, not an edge.
- The story — how execution flows through the area, as prose pointing at files.
Lossless hand-off: each agent writes full findings to
out/blueprint/.work/<area>.md and returns a summary; synthesize from the
files, not the relay.
Step 2 — The verified graph (before any diagram)
Distill the findings into a node/edge table — the single source of truth everything downstream renders from:
- Nodes: 5–8 top-level components (≤30 nodes total including
sub-nodes). Each row: stable ID (
comp-<slug>, survives renames), display name, the real path it lives at, one-line job. A node whose path doesn't exist doesn't enter the table. Utilities/logging don't get boxes — they're noise at this altitude. - Edges: each row: from-ID, to-ID, verb ("calls", "imports", "publishes to"), and the locator — the file:line of the import/call/route that proves it. Before an edge enters the table, grep the claimed locator: the cited line must actually contain the relation. Unverifiable edge → dropped and listed under "unverified candidates" in the work notes — never softened into the diagram.
- Collapse first. When the table exceeds the caps, roll nodes up to their parent component rather than shrinking the boxes — a hairball communicates nothing (the decade-long lesson of every dependency-graph tool). Scoped runs may drill one level deeper per component page.
Step 3 — Render the diagram (never freehand)
Read references/mermaid-checklist.md now and follow it exactly. The rules
in brief: the mermaid is rendered mechanically from the table — short
IDs from the node rows, quoted labels, no raw parentheses/brackets in label
text, click links to each node's real path, flowchart TD, size caps
honored. The LLM never composes mermaid prose-first; two independent
projects (gitdiagram, deepwiki-open) proved prompt rules alone don't stop
syntax breakage — structure does.
Validate before it ships: re-parse the output against the checklist's failure list. On a broken render, repair with max 3 attempts, each fixing only the itemized issues — then degrade to a simpler diagram (fewer nodes, no subgraphs) rather than attempt a fourth. A plain diagram that renders beats a rich one that doesn't.
Step 4 — Write the docs (grounded prose)
Read references/output-template.md now for the exact layout. The doc set:
docs/blueprint/README.md (overview + top-level diagram), one
<component>.md per drill-down (SCOPED runs and large components), and
manifest.md (the node table + stamp). Prose rules, non-negotiable:
- Every section ends with
Sources: <file>:<start>-<end>, …— the files the section was written from. A section that can't cite sources gets rewritten from files it can cite, or cut. - Verb-first, no filler. "Routes payments to the gateway
(
src/pay/router.ts:40)" — never "This file is responsible for…". No personas, no marketing adjectives, no claims the code doesn't show. - Explain the why where the code can't. The prose earns its place by
saying what a diagram can't: why the boundary sits here, what invariant
the arrow protects. Anything a
readtrivially reveals is cut.
Step 5 — Approve, write, stamp — and refresh
The output lands in the user's repo, so nothing is written without a yes:
- Show the full draft in chat — diagram and docs — and invite edits; cuts count as much as additions.
- On approval, write
docs/blueprint/, stampingmanifest.mdwith today'sdate +%Fand the current commit (git rev-parse --short HEAD) — never a guessed date. - Offer, don't perform, the commit.
Auto mode (under autopilot): the draft→approve gate becomes write-and-log, per the run's charter — same as map.
On REFRESH: git diff --name-only <stamped-commit>..HEAD, map the
changed paths to component IDs via the manifest's node table, and
regenerate only the pages and diagram sections those IDs own; re-stamp.
Component identity is the stable ID, not the display name — a renamed
component updates in place instead of forking a new page. Pages whose
components saw no diff are left byte-identical. Changed paths that map to
no node (new, moved, or deleted territory) mean the graph itself moved:
re-derive the affected part of the node table and regenerate the overview
and manifest, not just member pages.
Guardrails
- No edge without a locator. An arrow nobody can trace to a file:line is fiction wearing a diagram — dropped, not drawn. (The one habit that separates this from every "AI architecture diagram" complaint thread.)
- Collapse beats shrink. 5–8 boxes that mean something over 50 that don't; drill-down pages carry the detail.
- The table is the diagram's source. Mermaid is rendered from the verified node/edge table per the checklist — composing it freehand is how syntax errors and invented components get in.
- Never write or commit unprompted. Draft → approve → write; commit only on an explicit yes. (Auto mode logs instead of asks, per charter.)
- Refresh regenerates the minimum. Untouched components keep byte-identical pages — churn-free diffs are what make the docs re-runnable, and re-runnable is what keeps them alive.
- Out of scope, on purpose: HTML viewers, CI auto-regeneration, static-analysis engines, multi-repo, and non-mermaid formats (dot, d2, images) — machinery this repo's axis (keyless, zero-dependency, prose-only) exists to avoid.
What ships with it: 2 files
5.3 KB alongside SKILL.md
references/
- mermaid-checklist.md2.5 KB
- output-template.md2.8 KB
Gives 0 of the 12 instructions most docs writing skills give in ~2.2k tokens
Counted across 1,951 of the 3,904 authors here whose files we hold, read 2026-09-06
- Use third-person for skill descriptionsin 54 of 1951, across 35 files
- Start descriptions with Use whenin 43 of 1951, across 29 files
- Run baseline scenarios before writing any skillin 40 of 1951, across 26 files
- Use active voicein 40 of 1951, across 36 files
- Map file responsibilities before defining tasksin 36 of 1951, across 29 files
- Use checkbox syntax for tracking stepsin 35 of 1951, across 27 files
- Ask one question at a timein 35 of 1951
- Offer execution options after saving the planin 33 of 1951, across 24 files
- Include complete code in every stepin 33 of 1951, across 27 files
- Design units with clear boundaries and interfacesin 31 of 1951, across 23 files
- Announce the skill usage at the startin 30 of 1951
- Verify agent compliance after adding the skillin 29 of 1951, across 17 files
Said here and by no other author read
- state the chosen mode and the reason for selection
- verify every edge using file and line number locators
- render mermaid diagrams mechanically from the verified table
- limit diagrams to five to eight top-level components
- cite sources for every documentation section
- draft content in chat before writing to the repository
Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.