diagram-design

Introduction: Thirteen editorial diagram types for Claude Code. Self-contained HTML + SVG. No shadows, no Mermaid-slop.
More: Author   ReportBugs   
Tags:

Editorial diagrams your designer won't hate.

Content site architecture

The self-improving loop

New in 2.0 — the Loop: flywheels with a shared-memory hub. The dashed lines are the write-backs.

27 types. One agent skill for Claude Code, Codex, and Pi. Your brand in 60 seconds — the skill reads your website and maps colors + fonts to every diagram. Already have diagrams in draw.io? Point it at the file and it redraws them at the format, size, and level of detail your audience needs.

No Figma. No generic rounded boxes. No 30-minute color-picking sessions.


Why I built it

I write at littlemight.com (and run BestSelf.co on the side). Every time I needed a diagram — an architecture sketch, a flowchart, a pyramid of what matters most — I'd ask Claude and get back a generic rounded-box thing that looked nothing like the rest of the site. I'd either fight with Figma for 30 minutes or just skip the diagram.

So I built a Claude Code skill for it. Twenty-seven types, editorial quality, matches your brand in 60 seconds by reading your website.

The highest-quality move is usually deletion. Every node earns its place. The accent color is reserved for the 1–2 things the reader should look at first. Target density: 4/10.


What it makes

All 27 diagrams ship in three variants: minimal light, minimal dark, and full-editorial. Open any of them directly in a browser — no build step, no JS, no external images.

Architecture
Architecture
Components + connections
Flowchart
Flowchart
Decision logic
Sequence
Sequence
Messages over time
State machine
State machine
States + transitions
ER
ER / data model
Entities + fields
Timeline
Timeline
Events on an axis
Swimlane
Swimlane
Cross-functional flow
Quadrant
Quadrant
Two-axis positioning
Nested
Nested
Hierarchy by containment
Tree
Tree
Parent → children
Org chart
Org chart
Ownership + routing
Venn
Venn
Set overlap
Layers
Layer stack
Stacked abstractions
Pyramid
Pyramid / funnel
Ranked hierarchy or drop-off
Consultant 2×2
Consultant 2×2
Scenario matrix · named cells
Radar
Radar / Spider
Multi-axis comparison
Loop
Loop
Flywheel · stations around a hub
IT current-state
IT current-state
Legacy landscape · modernization
High-Level
High-Level
End-to-end stack on a cluster
Bar chart
Bar chart
Categorical comparison
Line chart
Line chart
Trends over time
Gantt
Gantt
Tasks and phases on a timeline
Scatter plot
Scatter plot
Distribution and correlation
Process
Process
Multi-actor sequential workflow
Medallion
Medallion
Multi-tier data storage
Data flow
Data flow
Role-scoped pipeline steps
DP integration
DP integration
Sources → core → consumers
DP security matrix
DP security matrix
Per-role access permissions

Browse the live gallery: open skills/diagram-design/assets/index.html in your browser to flip through all 27 diagrams with light / dark / full-editorial tabs.


Install

Pi:

pi install https://github.com/cathrynlavery/diagram-design

Run /reload in an open Pi session. Pi makes the skill available for matching diagram requests; use /skill:diagram-design to invoke it explicitly. Pi also loads the /export-diagram prompt template.

Claude Code:

/plugin marketplace add cathrynlavery/diagram-design
/plugin install diagram-design@diagram-design

Claude Cowork: Customize → Directory → Plugins → + → paste cathrynlavery/diagram-design → Sync, then install from the Personal list.

Codex:

npx skills add https://github.com/cathrynlavery/diagram-design --skill diagram-design

Editable install

Managed installs are convenient, but changes to references/style-guide.md may be replaced by package updates. Clone the repo and install the local path if you plan to customize the style guide:

git clone git@github.com:cathrynlavery/diagram-design.git ~/code/diagram-design

# Pi: register the checkout as a local package
pi install ~/code/diagram-design

# Claude Code: symlink the inner skill
ln -s ~/code/diagram-design/skills/diagram-design ~/.claude/skills/diagram-design

The shared skill lives at skills/diagram-design/. Pi discovers it through the repo's standard skills/ package directory; Claude Code, Codex, and other Agent Skills-compatible tools use the same files.


Onboarding — make it look like your brand

The whole point: ship editorial-quality diagrams in your colors and typography, not a generic template.

Out of the box, diagrams render in a clean jet-black + atomic-tangerine palette (white-smoke paper, jet-black ink, atomic-tangerine accent, blue-slate muted, silver hairlines). Good enough to screenshot straight away. But 60 seconds of onboarding is better — the skill will pull your brand from your website and apply it across every diagram.

The flow

You:     "onboard diagram-design to https://yoursite.com"
Agent:   → fetches the homepage
         → extracts the dominant palette + font stack
         → maps detected values to semantic roles:
             paper, ink, muted, accent, link
         → shows a proposed diff
         → writes your tokens to references/style-guide.md
You:     "yes, apply it"

Every new diagram now uses your colors. Your website's paper color becomes the diagram background. Your CTA color becomes the focal accent. Your body font stack becomes the node label family.

What gets extracted

Detected from your site Becomes
<body> background paper token
Primary text color ink token
Secondary / caption text muted token
Cards or containers paper-2 token
Most-used brand color (CTA, link, heading) accent token
<h1> font family title font
<body> font family node-name font
<code> / <pre> font sublabel font

Contrast checks happen automatically

Before writing tokens, the skill verifies WCAG AA contrast on ink over paper. If your site has a color that fails contrast at diagram sizes (9–12px), it proposes an adjusted value and explains why.

Manual override

Prefer to set tokens by hand? Open skills/diagram-design/references/style-guide.md and edit the table. Everything downstream reads from there — all 27 diagrams, the annotation primitive, and the gallery all inherit semantic role names (accent, not #eb6c36).

First-run gate

The skill won't silently ship default-skinned diagrams into a branded project. On first use in a new project, it checks if style-guide.md has been customized. If not, it pauses and asks:

"This is your first diagram in this project. The style guide is still at the default. Want to run onboarding, paste tokens manually, or proceed with default?"

See skills/diagram-design/references/onboarding.md for the full spec.


Quickstart

# From a cloned checkout, open the gallery to see all 27 diagrams
open skills/diagram-design/assets/index.html       # macOS
xdg-open skills/diagram-design/assets/index.html  # Linux

# In Claude Code, Codex, or Pi, ask:
# "Make me an architecture diagram of my app: frontend, backend, database, Redis cache."
# "I need a quadrant showing Q2 projects by impact vs effort."
# "Give me a sequence of a bearer call with token refresh on 401."
# (branching refresh uses the ALT combined-fragment grammar in type-sequence.md;
#  see skills/diagram-design/assets/example-sequence-oauth.html — not a full authorize-code handshake)

Your agent will pick the right type, build the HTML, and save it. You can also start from a template directly:

cp skills/diagram-design/assets/template.html my-diagram.html        # minimal light
cp skills/diagram-design/assets/template-full.html my-diagram.html   # editorial with summary cards

Import from draw.io

Already have diagrams in draw.io / diagrams.net? Point the skill at the file and it redraws them — same content, this design system, at whatever the destination needs.

Redrawn from a .drawio file

A 12-node draw.io file redrawn at balanced detail for a blog post. The source's six pastel fills became one accent; its hand-dragged coordinates became a 4px grid.

/diagram-design:import platform.drawio
/diagram-design:import platform.drawio --size=slide-16x9 --detail=simplified --audience=executive
/diagram-design:import platform.drawio --detail=faithful --format=png --page=all

Or just ask: "redraw this drawio file for my deck" / "この drawio をスライド用にきれいにして".

Reads the common containers draw.io writes — .drawio, .drawio.xml, .drawio.png (embedded diagram), and .drawio.svg — including compressed payloads that look like base64 garbage in an editor.

The four dials

The point isn't conversion, it's fitting the output to where it's going. Same source file, three different diagrams:

Dial Options What it changes
Format html · svg · png · html+png The deliverable. SVG for Figma, PNG for slides, HTML for the web.
Size doc-inline · doc-wide · slide-16x9 · slide-4x3 · social-og · social-square · print-a4-landscape · print-letter-landscape · fit The viewBox and the type ramp — a projected slide gets 16px node names, not 12px.
Detail faithful (≤24 nodes, zoned) · balanced (≤12) · simplified (≤7) How much of the source survives, via a fixed degrade ladder — decorations, then duplicates, then leaf clusters, then infrastructure.
Audience engineer · mixed · executive The wording, not the count. Auth Service / JWT · RS256 · :8443Auth Service / token checkSign-in.

Every import ends with a fidelity ledger — what got merged, collapsed, or dropped. You know the source; you'd notice anyway.

Detail: balanced · 12 source nodes → 8 drawn
Collapsed: "Token valid?" decision → edge label on Gateway → Auth
Dropped:   1 sticky note ("legacy path, to be retired") — unconnected in source
Kept in full: the request path (Web/Mobile → Gateway → Orders → Postgres)

What never carries over: source coordinates, source palette, source fonts, draw.io's diagonal connector spaghetti. What always does: components, relationships, grouping, and direction. See references/import-drawio.md and references/output-spec.md.


Export to PNG / SVG

Diagrams ship as self-contained HTML, but you can export the diagram itself for Figma, slides, or social cards. Use the slash command for your agent:

Pi:

/export-diagram path/to/diagram.html
/export-diagram path/to/diagram.html --svg-only
/export-diagram path/to/diagram.html --png-only --scale=3

Claude Code:

/diagram-design:export path/to/diagram.html
/diagram-design:export path/to/diagram.html --svg-only
/diagram-design:export path/to/diagram.html --png-only --scale=3

Or just ask in natural language:

"Export this diagram as SVG and PNG."
"Save my-diagram.html as PNG."
  • SVG — extracts the <svg> node and injects Google Fonts so it renders standalone in browsers, Figma, and Illustrator.
  • PNG — rasterizes the diagram via Playwright at 2× by default. One-time setup: pip install playwright && playwright install chromium.

Both formats are diagram-only — editorial cards and headers from -full variants aren't included. For a screenshot of the full editorial layout, use your browser's print-to-PDF or full-page screenshot. See skills/diagram-design/references/export.md for the full procedure.


Architecture

Progressive disclosure. SKILL.md is a lean index — it tells the agent how to pick a type and where to look for detail. Every type lives in its own reference file, loaded only when relevant.

diagram-design/
├── commands/
│   ├── export-diagram.md            — Claude Code export command
│   └── import-drawio.md             — Claude Code draw.io import command
├── prompts/
│   └── export-diagram.md            — Pi `/export-diagram` prompt template
├── skills/
│   └── diagram-design/
│       ├── SKILL.md                 — philosophy, selection guide, checklist
│       ├── references/              — loaded only when a type or primitive is chosen
│       │   ├── style-guide.md       — single source of truth for colors + fonts
│       │   ├── onboarding.md        — the URL-to-tokens flow
│       │   ├── import-drawio.md     — draw.io redraw procedure
│       │   ├── output-spec.md       — format × size × detail level
│       │   ├── export.md            — SVG / PNG export + sizing
│       │   ├── type-architecture.md
│       │   ├── type-flowchart.md
│       │   ├── type-sequence.md
│       │   ├── type-state.md
│       │   ├── type-er.md
│       │   ├── type-timeline.md
│       │   ├── type-swimlane.md
│       │   ├── type-quadrant.md
│       │   ├── type-nested.md
│       │   ├── type-tree.md
│       │   ├── type-org-chart.md
│       │   ├── type-layers.md
│       │   ├── type-venn.md
│       │   ├── type-pyramid.md
│       │   ├── primitive-annotation.md
│       │   ├── primitive-sketchy.md
│       │   └── primitive-terminal.md
│       ├── scripts/
│       │   └── drawio_extract.py    — draw.io → structured IR
│       └── assets/
│           ├── index.html           — live gallery, tabbed
│           ├── template*.html       — scaffolds for new diagrams
│           ├── example-<type>.html  — 3 variants × 27 types
│           ├── example-loop-terminal.html
│           ├── example-quadrant-consultant.html
│           ├── example-import-drawio.html
│           └── example-sequence-oauth*.html
└── docs/screenshots/                — images used in this README

This keeps the agent's working context tight (only load what you need) and makes the skill easy to extend — drop a new type-<name>.md and wire it into the selection guide. The skill ships with 36 reference files covering every diagram type, primitive, and utility.

Contributing / skin lint

Before submitting a new example, run python3 scripts/lint-skin.py <your-new-example.html>. The repository-wide check python3 scripts/lint-skin.py --all --baseline must stay green. If you touch the draw.io import path, python3 scripts/verify-drawio-import.py must also pass — it drives the real extractor against scripts/fixtures/sample-architecture.drawio in all four container formats and checks the references stay in sync.

What loads when

At startup, the agent sees only the skill name and description. When a request matches, it loads SKILL.md; type references are pulled in only when relevant. This keeps the skill fast even with 36 reference files.

You ask for… Agent loads
"Make me a flowchart" SKILL.md + references/type-flowchart.md
"Build an architecture diagram" SKILL.md + references/type-architecture.md
"Onboard this skill to my site" SKILL.md + references/onboarding.md + references/style-guide.md
"Add an editorial callout to this diagram" SKILL.md + references/primitive-annotation.md
"Give me a hand-drawn version" SKILL.md + references/primitive-sketchy.md
"Give me a terminal / CLI-window version" SKILL.md + references/primitive-terminal.md
"Redraw this .drawio file for my deck" SKILL.md + references/import-drawio.md + references/output-spec.md + the chosen type's reference
Routine diagram-making (any of the 27 diagrams) Only SKILL.md + that one type's reference

No matter how many types exist, the agent only reads the one you need. Add a new type tomorrow and nothing else changes.


The design system (in one paragraph)

One accent color, 1–2 focal elements per diagram. Three font families: Instrument Serif (title + italic callouts), Geist sans (node names), Geist Mono (technical sublabels). 1px hairline borders, no shadows, max border-radius 10px. Every coord, width, and gap divisible by 4 — non-negotiable, it's what keeps the diagrams from feeling AI-generated. Mono is for technical content (ports, URLs, field types), not a blanket "dev" aesthetic. Coral-tinted focal nodes draw the eye to the 1–2 things that matter. Full spec in SKILL.md.


Primitives


When not to use this skill

  • Quick unicode diagrams for tweets or terminal output → wiretext-style skill.
  • Lists of anything → a table or bullets.
  • Before/after comparisons → a table.
  • One-shape "diagrams" — a single box with a label → just write the sentence.

Before drawing, ask: would a reader learn more from this than from a well-written paragraph? If no, don't draw.


About

Made by Cathryn Lavery — founder of BestSelf.co. I write about AI, entrepreneurship, and designing nice-looking things at littlemight.com — blog + newsletter.

If this is useful, star the repo and come say hi on X.

Apps
About Me
GitHub: Trinea
Facebook: Dev Tools
AI Daily Digest