From Design
Draw, refine, and export professional diagrams on a live Excalidraw canvas via the Excalidraw MCP — architecture, flowcharts, ERDs, sequences, and C4, built as native editable shapes with deliberate palette, layout, and arrow semantics. Use whenever a diagram must be visual, editable, restyled per element, or exported as a committable .excalidraw / PNG / SVG artefact (not just inline Mermaid source).
How this skill is triggered — by the user, by Claude, or both
Slash command
/design:excalidraw-diagramsThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Build genuinely good diagrams on a **live, editable Excalidraw canvas** through the Excalidraw MCP.
Build genuinely good diagrams on a live, editable Excalidraw canvas through the Excalidraw MCP. Every shape is a native, individually-editable element — not a locked image — so you compose, refine per element, verify visually, and export a committable artefact.
This skill covers the full MCP surface (28 tools) and the craft of using it well. Read the reference files on demand; they are the detail behind this page.
Use it when the diagram must be visual and editable, not just Mermaid source in a .md.
.excalidraw artefact plus a PNG/SVG for embedding.patterns.md).If the diagram only needs to render inline in GitHub/PRs and never be hand-edited, plain Mermaid is lighter — use the mermaid-diagrams skill instead.
http://127.0.0.1:3000 (Node ≥ 18, no API keys).EXCALIDRAW_NO_AUTOSTART=1 to opt out.export_scene (repo artefact) or snapshot_scene (named, server-side, this session only).get_canvas_screenshot, export_to_image, set_viewport, and create_from_mermaid — those run in the canvas browser.x grows right, y grows down. Lay content out on a 20px grid.Follow this loop every time; it is the difference between a clean diagram and a tangle.
read_diagram_guide for the live palette/sizing reference, and read references/visual-quality.md for the full quality bar (palette, spacing, arrow semantics, light/dark portability). This overview page is not a substitute for that reference — open it before you draw anything beyond a throwaway sketch.visual-quality.md → Drawing order): background zones → primary shapes → bound arrows → annotations.
batch_create_elements for whole tiers in one call. Give shapes custom ids so arrows can bind to them.startElementId/endElementId — never hand-place arrow endpoints.align_elements and distribute_elements to snap rows/columns; group_elements for clusters you'll move together.describe_scene for structure + connections, then get_canvas_screenshot with background on and off (light and dark). Fix any overflow, overlap, misalignment, or stroke that vanishes on either theme before you consider the diagram done. Structure alone is not trustworthy — render it and look.query_elements to find a shape, then update_element / create_element / delete_element. Never regenerate the whole diagram for a small change.export_scene → a committable .excalidraw beside the doc; export_to_image → PNG/SVG for embedding; snapshot_scene for in-session checkpoints before risky refactors.The MCP's raw defaults look sketchy and unprofessional. Override them every time.
roughness: 0 on every shape and arrow. The default 1 is a hand-drawn wobble — fine for a napkin, wrong for a spec.fontFamily: 2 (sans) for UI/architecture, 3 (mono) for code/tool names. The default 1 is a handwriting font.strokeWidth: 2 for primary shapes/flows, 1.5 for secondary. Below 1.5 disappears when zoomed out.#000000) or pure white (#ffffff) for strokes/text — each vanishes on one canvas theme. Full palette + reasoning in visual-quality.md.backgroundColor paired with a mid-tone strokeColor reads correctly on light and dark.Stroke = the family's meaning; fill = its pale partner. One colour family per relationship/layer; cap at 3–4 per diagram.
| Family | Stroke | Fill | Use for |
|---|---|---|---|
| Blue | #1971c2 | #a5d8ff | primary services, links, frontend |
| Purple | #9c36b5 | #eebefa | middleware, services, certs |
| Cyan | #0c8599 | #99e9f2 | data stores, databases, networking |
| Orange | #e8590c | #ffd8a8 | async, queues, events, ingress |
| Green | #2f9e44 | #b2f2bb | success, healthy, storage |
| Red | #e03131 | #ffc9c9 | errors, warnings, critical |
| Gray | #868e96 | #e9ecef | annotations, secondary, infra |
Zones (background bands) use the palest tint of their family at reduced opacity; see patterns.md.
Set each deliberately and decode them in a legend. Full rules in visual-quality.md.
triangle → directed flow (default); arrow → lighter directed; dot → data store/endpoint; bar → boundary; null → association.text on any arrow whose meaning isn't obvious; give labelled arrows 120px+ of length.These prevent the two most common ways a diagram turns to spaghetti.
A → {stack} → Z.The canvas is one shared in-memory scene — there are no native frames, and get_resource library just returns the current elements (no separate component library). Both needs are still covered — full detail in references/multiple-diagrams-and-stencils.md:
group_elements each, and use set_viewport(scrollToElementId) + get_canvas_screenshot to review/capture one at a time. export_scene is scene-global, so for separate committable files build and export sequentially (snapshot_scene → build A → export → clear_canvas → build B → export)..excalidraw stencil and import_scene(mode: "merge") to stamp it; duplicate_elements to clone one already on the canvas. Keep a repo stencils/ folder as your kit. Export/import paths are sandboxed — use relative paths (EXCALIDRAW_EXPORT_DIR sets the base).roughness/fontFamily at defaults — the diagram looks like a sketch.chars × 0.55 × fontSize ≤ boxWidth − 2·padding) and re-measure after.npx claudepluginhub ani1797/forge --plugin designGuides completion of development work by verifying tests, detecting environment, and presenting structured options for merge, PR, or cleanup.
Guides creation and editing of skills using test-driven development with pressure scenarios and subagents to verify agent compliance.
Dispatches multiple subagents concurrently for independent tasks without shared state. Use when facing 2+ unrelated failures or subsystems that can be investigated in parallel.