Agent skill

mermaid-diagrams

Expert knowledge for creating print-ready Mermaid diagrams -- syntax, styling, theming, and print optimization. Use when generating or reviewing any Mermaid diagram.

Stars 0
Forks 0

Install this agent skill to your Project

npx add-skill https://github.com/nathanvale/side-quest-marketplace/tree/main/plugins/cortex-engineering/skills/mermaid-diagrams

SKILL.md

Mermaid Diagrams

Background knowledge for producing clean, readable, print-ready Mermaid diagrams. This skill provides the craft -- the visualize skill provides the workflow.

Scope: Mermaid is the engine for all non-mind-map diagram types. Mind maps auto-route to Markmap via the visualize skill. Users can override to Mermaid for mind maps if they prefer themed presets over Markmap's visual quality.

Curated visual identity: All diagrams use one of three preset configs. Each preset pairs a theme, look mode, and layout engine. See default-theme.md for the full specification.

Quick Start

Minimal correct diagram (Classic preset, the default):

flowchart LR
    classDef primary fill:#0072B2,color:#fff,stroke:#005a8c,stroke-width:2px
    classDef success fill:#009E73,color:#fff,stroke:#006B4F,stroke-width:2px
    classDef warning fill:#E69F00,color:#000,stroke:#B37A00,stroke-width:2px

    A[Input]:::primary --> B{Valid?}:::warning
    B -->|Yes| C[Process]:::primary
    B -->|No| D[Error]:::warning
    C --> E[Done]:::success

Export with Classic preset (default):

bash
bunx @mermaid-js/mermaid-cli -i input.mmd -o output.svg \
  -c "$CLAUDE_PLUGIN_ROOT/skills/mermaid-diagrams/references/default-theme.json" \
  -b white

Core Principles

Non-negotiable rules for every diagram:

  1. Max 15 nodes per diagram. Split into multiple diagrams if larger.
  2. Max 3 shapes per diagram. More shapes become visual noise.
  3. Use classDef, not inline styles. Keeps diagrams consistent and maintainable.
  4. Use a preset config via -c flag for all visualize-skill output. Never put %%{init:}%% directives in generated diagrams -- the config file handles theming. Three presets: default-theme.json (Classic), sketch-theme.json (Sketch), blueprint-theme.json (Blueprint).

Diagram Type Selection

Pick the right diagram for the job. Default to the simplest type that communicates the idea.

Diagram Keyword Best for
Flowchart flowchart TD Processes, workflows, decision trees
Sequence sequenceDiagram Interactions between components/actors over time
Mind map mindmap Brainstorms, topic exploration, hierarchical ideas
Class classDiagram Object models, type hierarchies, interfaces
State stateDiagram-v2 Lifecycles, state machines, status transitions
ER erDiagram Data models, database schemas, entity relationships
Gantt gantt Timelines, project schedules, phased plans
Pie pie Proportions, distributions, simple breakdowns
Timeline timeline Chronological events, history, roadmaps
Architecture architecture-beta System components and their connections
Block block-beta Generic block diagrams, layout-driven visuals
Quadrant quadrantChart 2x2 matrices, priority/effort grids
Sankey sankey-beta Flow volumes, resource distribution
XY chart xychart-beta Line/bar charts with axes
Treemap treemap-beta Hierarchical data as nested rectangles
Kanban kanban Board-style task tracking
Packet packet-beta Network packet structures
Requirement requirementDiagram Requirements traceability
Radar radar-beta Multi-axis comparison (v11.6.0+)
Git graph gitGraph Branch/commit visualization
C4 Context C4Context System context (C4 model)

Decision heuristic: If you're unsure, start with flowchart TD. It handles 70% of use cases. Upgrade to a specialized type only when the data demands it.

Core Styling Principles

1. Readability first

  • Max 15 nodes per diagram. Split into multiple diagrams if larger.
  • Max 3-5 main branches for mind maps.
  • Keep node labels under 30 characters. Use abbreviations + a legend if needed.
  • Prefer <br/> over backtick markdown-string syntax for line breaks -- backtick labels cause dagre layout cramping with 10+ nodes.
  • Max 2 lines per node label. Move detail to edge labels, legends, or index.md.
  • One concept per node. Never combine two ideas.

2. Direction matters

Direction Code When to use
Top-down TD or TB Hierarchies, org charts, inheritance
Left-right LR Pipelines, sequences, timelines
Right-left RL Reverse flows, rollback processes
Bottom-up BT Dependency trees (leaf to root)

3. Grouping with subgraphs

Use subgraph to visually cluster related nodes. Label every subgraph. Keep nesting to 2 levels max -- deeper nesting kills readability at print scale.

subgraph "API Layer"
    A[REST Controller] --> B[Service]
    B --> C[Repository]
end

4. Edge labels

Label every edge that isn't self-explanatory. Use -->|label| syntax. Keep labels to 1-3 words.

Theme Configuration

Init directive

Place at the top of any diagram to configure theme and variables:

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A --> B

Built-in themes

Theme Use for
base Default choice. Blank slate with custom themeVariables. Used by default-theme.json.
neutral Black on white, high contrast, no colored fills. Good for B&W printing.
default Screen viewing. Mermaid's standard blue palette
dark Dark backgrounds. Inverted colors
forest Green palette. Good for environmental/organic topics

Use base with default-theme.json for all visualize skill output. The neutral theme silently ignores themeVariables (GitHub #4264), so base is the only option for custom palettes.

Custom theme variables

Override specific colors via themeVariables in the init directive:

%%{init: {'theme': 'base', 'themeVariables': {
    'primaryColor': '#4a90d9',
    'primaryTextColor': '#ffffff',
    'primaryBorderColor': '#2c5f8a',
    'lineColor': '#333333',
    'secondaryColor': '#f0f4f8',
    'tertiaryColor': '#e8e8e8',
    'fontSize': '16px'
}}}%%

Important: Mermaid only recognizes hex colors (#4a90d9), not color names (blue).

Node Shapes

Flowcharts support many shapes. Use them semantically:

Shape Syntax Semantic meaning
Rectangle [text] Process, action, step
Rounded (text) Start/end, terminal
Stadium ([text]) Start/end (alternative)
Diamond {text} Decision, condition
Hexagon {{text}} Preparation, setup
Circle ((text)) Connector, junction
Cylinder [(text)] Database, data store
Parallelogram [/text/] Input/output
Subroutine [[text]] Predefined process, function call
Trapezoid [/text\] Manual operation
Double circle (((text))) Double-click event, emphasis

Rule of thumb: Use max 3 different shapes per diagram. More than that and the visual language becomes noise.

Print-Safe Color Palette

When color is needed on print diagrams, use this accessible palette. Based on the Wong palette (Nature Methods, 2011) -- the standard for colorblind-safe scientific visualization. All colors maintain WCAG AA contrast against white.

Role Hex classDef name Usage
Primary #0072B2 primary Main nodes, primary flow
Info #56B4E9 info Information, notes
Success #009E73 success Success states, completed
Warning #E69F00 warning Warnings, decision points (dark text)
Danger #D55E00 danger Error states, failures
Highlight #F0E442 highlight Emphasis, callouts
Accent #CC79A7 accent Tertiary accent

The full classDef block is in default-theme.md. Apply with ::::

classDef primary fill:#0072B2,color:#fff,stroke:#005a8c
classDef secondary fill:#009E73,color:#fff,stroke:#007a5a
classDef accent fill:#E69F00,color:#000,stroke:#b87d00

A[Start]:::primary --> B{Check}:::accent
B -->|Pass| C[Done]:::secondary

Font Sizing for Print

These minimums ensure readability at 1-2 meters viewing distance on A3/A2 paper:

Element Minimum
Node labels 14pt
Edge labels 12pt
Subgraph titles 16pt
Root/title nodes 18pt

Set via init directive:

%%{init: {'theme': 'base', 'themeVariables': {'fontSize': '16px'}}}%%

Export with mmdc CLI

The @mermaid-js/mermaid-cli (mmdc) is the primary export path. Use with -c <preset>-theme.json for the curated visual identity. The MCP server's export_diagram_formats produces placeholder files -- do not use it for export.

Basic export

bash
bunx @mermaid-js/mermaid-cli -i input.mmd -o output.svg \
  -c "$CLAUDE_PLUGIN_ROOT/skills/mermaid-diagrams/references/default-theme.json" \
  -b white

Key flags

Flag Purpose Default
-i Input file (required)
-o Output file (.svg, .pdf, .png) (required)
-t Theme default
-b Background color white
-w Width in pixels 800
-H Height in pixels auto
--scale Scale factor 1
-c Config JSON file none

Print-ready export

bash
# A4 landscape SVG (default)
bunx @mermaid-js/mermaid-cli -i input.mmd -o diagram.svg \
  -c "$CLAUDE_PLUGIN_ROOT/skills/mermaid-diagrams/references/default-theme.json" \
  -b white -w 3508 -H 2480

# A3 landscape SVG (wall poster)
bunx @mermaid-js/mermaid-cli -i input.mmd -o diagram.svg \
  -c "$CLAUDE_PLUGIN_ROOT/skills/mermaid-diagrams/references/default-theme.json" \
  -b white -w 4961 -H 3508

# PDF for direct printing (add --pdfFit)
bunx @mermaid-js/mermaid-cli -i input.mmd -o diagram.pdf \
  -c "$CLAUDE_PLUGIN_ROOT/skills/mermaid-diagrams/references/default-theme.json" \
  -b white -w 3508 -H 2480 --pdfFit

A4 landscape = 3508 x 2480px at 300 DPI. A3 landscape = 4961 x 3508px.

Quality Checklist

Verify before finalizing any diagram:

  • Max 15 nodes
  • Labels under 30 characters
  • Node labels max 2 lines, using <br/> (not backtick syntax)
  • Max 3 different shapes
  • All non-obvious edges labeled
  • Subgraph nesting max 2 levels
  • Font size >= 14pt for nodes
  • Color + shape together (not color alone)
  • No %%{init:}%% in visualize-skill output

Anti-Patterns

Don't Do instead
20+ nodes in one diagram Split into 2-3 focused diagrams
Crossing edges everywhere Restructure node order to minimize crossings
Rainbow colors Max 3-4 colors with semantic meaning
Tiny text with fontSize: '10px' Minimum 14pt for nodes, 12pt for edges
Unlabeled edges Label every non-obvious connection
Deep subgraph nesting (3+) Flatten to max 2 levels
Color as only differentiator Combine color with shape or label prefix
default theme for print Use neutral -- saves ink, better contrast
Inline styles on every node Use classDef for consistent, reusable styles
Giant node labels 30 chars max, use abbreviations + legend
Backtick markdown-string labels <br/> for line breaks (dagre calculates width correctly)

Done When

The diagram is complete when every item in the Quality Checklist above passes and the exported file (SVG/PDF/PNG) renders correctly at the target paper size.

Reference Files

For comprehensive details, see:

  • default-theme.md - Curated visual identity, preset classDef blocks, type detection, export commands
  • default-theme.json - Classic preset config (pass via -c)
  • sketch-theme.json - Sketch preset config (hand-drawn, warm tones)
  • blueprint-theme.json - Blueprint preset config (monochrome, ELK layout)
  • syntax-reference.md - Full syntax for all diagram types
  • styling-patterns.md - Themes, classDef, custom variables
  • print-optimization.md - Paper sizes, mmdc CLI, export recipes
  • config-engineering.md - Config tuning, layout workarounds, known Mermaid bugs

Expand your agent's capabilities with these related and highly-rated skills.

nathanvale/side-quest-marketplace

cli-mcp-decision

Decide whether a workflow should use CLI skills, MCP, or a hybrid approach. Use when planning agentic tooling, writing ADRs, or evaluating migrations between CLI and MCP.

0 0
Explore
nathanvale/side-quest-marketplace

agent-cli

Patterns for building CLIs that serve both humans and AI agents. Covers tri-modal output (JSON/JSONL/human), typed exit codes, structured error contracts, zero-dependency arg parsing, topic-based help, service discovery, field projection, and auto agent-mode detection. Reference implementation: @side-quest/observability CLI. Use when: building a CLI, adding a command, CLI output format, agent-friendly CLI, machine-readable output, JSON CLI contract, exit codes, --json flag, NDJSON streaming, how should my CLI work with agents, CLI design patterns.

0 0
Explore
nathanvale/side-quest-marketplace

explain-codebase

Generate an engaging, deep-dive explanation document (FOR_[NAME].md) that explains a codebase or domain in plain language with analogies, lessons learned, and practical wisdom.

0 0
Explore
nathanvale/side-quest-marketplace

vscode-bookmarks

Create and manage VS Code Bookmarks extension labeled bookmarks in .vscode/bookmarks.json. Use when the user wants to add navigation bookmarks to a codebase, trace data flows through code, mark important code locations, or set up labeled waypoints for code walkthroughs. Also use when user says "bookmark", "label this code", "mark this flow", or "add waypoints".

0 0
Explore
nathanvale/side-quest-marketplace

manage-plugins

Add or remove inline plugins from the ccdev function in dotfiles .zshrc

0 0
Explore
nathanvale/side-quest-marketplace

observability

Start, stop, or check status of the Side Quest observability event server. Use when asked to start the server, stop the server, check server status, or manage the observability dashboard lifecycle.

0 0
Explore

Didn't find tool you were looking for?

Be as detailed as possible for better results