excalidraw
Skill13 starsChanged 3 months agoApache-2.0View on GitHub
Excalidraw diagrams on the live canvas through the excalidraw MCP, with the visual type chosen from the diagram-design catalogue. Use when the user asks for a diagram in Excalidraw, or to change or redraw one on the canvas.
71 other projects use a version of this.
Adopted by
Most recently taken up by
- lesliexqing/skills-for-funtheir own version, first seen Nov 15, 2026
- metaspartan/cybaratheir own version, first seen Nov 15, 2026
- yarikleto/claude-teacher-plugintheir own version, first seen Nov 14, 2026
- omidnw/my-skillstheir own version, first seen Nov 8, 2026
- rliang/skillstheir own version, first seen Nov 8, 2026
- ashleysbrain/skillstheir own version, first seen Nov 8, 2026
Used with
Projects with it also use heartmula, webhook-subscriptions and 10 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
math-incSkillheartmula
Set up and run HeartMuLa, the open-source music generation model family (Suno-like). Generates full songs from lyrics + tags with multilingual support.
Also in 9 projects that use this
Tommy-ywSkillwebhook-subscriptions
Create and manage webhook subscriptions for event-driven agent activation, or for direct push notifications (zero LLM cost). Use when the user wants external services to trigger agent runs OR push notifications to chats.
Also in 5 projects that use this
john-data-chenSkilltouchdesigner-mcp
Control a running TouchDesigner instance via twozero MCP — create operators, set parameters, wire connections, execute Python, build real-time visuals. 36 native tools.
Also in 7 projects that use this
math-incSkillminecraft-modpack-server
Set up a modded Minecraft server from a CurseForge/Modrinth server pack zip. Covers NeoForge/Forge install, Java version, JVM tuning, firewall, LAN config, backups, and launch scripts.
Also in 5 projects that use this
AlekseiULSkillTubeScribe
YouTube video summarizer with speaker detection, formatted documents, and audio output. Works out of the box with macOS built-in TTS. Optional recommended tools (pandoc, ffmpeg, mlx-audio) enhance quality. Requires internet for YouTube access. No paid APIs or subscriptions. Use when user sends a YouTube URL or asks to summarize/transcribe a YouTube video.
Also in 3 projects that use this
mae616Skillp5js
p5.js(クリエイティブコーディング)のProcessing由来「コードでスケッチ」思想を軸に、setup/drawループ・座標系・インタラクション・パフォーマンス最適化を整理する。p5.js、Processing、クリエイティブコーディング、ジェネラティブアート、インタラクティブ表現、ビジュアルプログラミング、Canvas描画、パーティクル、フラクタル、ノイズ表現に関する相談で必ず使うこと。ユーザーが「コードでアート」「動くビジュアル」「インタラクティブな描画」と言った場合にも適用する。
Also in 10 projects that use this
- +5 more from math-inc
Other versions71 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 71
- ShenSeanChen/waku-agent★ 2.2ksame name
- math-inc/OpenGauss★ 1.3ksame name
- dtsola/xiaoyaosearch★ 1ksame name
- boldsoftware/shelley★ 713same name
- neo4j-labs/agent-memory★ 598same name
- Tommy-yw/RunbookHermes★ 546same name
- ooiyeefei/ccc★ 501same name
- RedWoodOG/Hermes-Desktop★ 177same name
- HybridAIOne/hybridclaw★ 162same name
- yamcodes/arkenv★ 151same name
61 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository62 other files it gives its agents.
- AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- check-for-updatesSkill
- api-designSkill
- bddSkill
- blueprintSkill
- brainstormingSkill
- browser-usageSkill
- clarify-codeSkill
- cleanupSkill
- codebase-designSkill
- code-reviewSkill
- commitSkill
- confluence-exportSkill
- database-proSkill
- datadogSkill
- diagnosing-bugsSkill
- diagram-designSkill
- e2e-testSkill
- explain-code-flowSkill
- explain-simplySkill
- frontend-slidesSkill
- glabSkill
- grill-meSkill
- handoffSkill
- herdrSkill
- i-have-adhdSkill
- impeccableSkill
- implementSkill
- improve-codebase-architectureSkill
- jiraSkill
- loomSkill
- markitdownSkill
- mermaid-skillSkill
- modularity-designSkill
- modularity-reviewSkill
- plannotatorSkill
- ponytail-auditSkill
- ponytail-reviewSkill
- ponytailSkill
- prototypeSkill
- qmdSkill
- refactorSkill
- releaseSkill
- researchSkill
- security-reviewSkill
- show-meSkill
- skill-doctorSkill
- stop-the-slopSkill
- tddSkill
- teachSkill
- terraform-engineerSkill
- ticket-overviewSkill
- to-specSkill
- to-ticketsSkill
- update-docstringsSkill
- wayfinderSkill
- write-documentationSkill
- write-readmeSkill
- write-simplySkill
- The first 60 shown.
The file
We split this skill into the rules it gives an agent
12 rules. 0 are common, 4 are distinctive, and 8 are very specific to this project.
0
Common
Most of the 66 edited versions we read keep these.
4
Distinctive
This author's own choices. Worth a look.
8
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 21
Write the reader's question in one sentence.
- Very specific: line 22
Read <dd>/SKILL.md §3 (semantic-pattern table and visual-type guide).
- Very specific: line 24
Run tail -n 12 <history>. When two candidates fit equally, take the one used less recently.
- Distinctive: line 26
When the user names a type, use it and go to step 2.
- Very specific: line 32
Read the full <dd>/references/type-<name>.md and its row in references/recipes.md.
- Very specific: line 40
Put every origin and size on a 20px grid.
- Very specific: line 42
Done when: every element has x, y, width, and height (or points), and each number comes from the grid or the script.
- Very specific: line 46
Call describe_scene. When the canvas holds elements, shift every x so the new diagram starts 200px to the right of their bounding box.
- Very specific: line 56
Call get_canvas_screenshot and look at the image.
- Distinctive: line 61
every shape clear of the others, except a zone behind its contents.
- Distinctive: line 62
every connector running only between its own two ends.
- Very specific: line 121
User edits: before you change a diagram, call describe_scene and work from what is there now.
“Common” is measured: kept by at least 6 in 10 of the 66 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Excalidraw
Draw on the live canvas (http://127.0.0.1:3000) with the mcp__excalidraw__* tools. diagram-design decides what to draw: its 45 visual types and their type references. The translation below and references/recipes.md decide how to draw it with Excalidraw elements.
Paths:
<dd>=<this skill's directory>/../diagram-design<history>=${XDG_STATE_HOME:-$HOME/.local/state}/excalidraw/history.tsv, one line per diagram: date, type, subject.
Steps
1. Pick the type
Choose the type whose dominant axis matches the reader's question. Content decides; habit does not.
- Write the reader's question in one sentence. Name its axis: time, quantity, share, ownership, containment, topology, state, sequence, comparison, or cause.
- Read
<dd>/SKILL.md§3 (semantic-pattern table and visual-type guide). When behaviour carries the meaning, also read<dd>/references/semantic-patterns.mdand choose one pattern. - Shortlist three types that answer the question from different axes. Read the first 15 lines of each
<dd>/references/type-<name>.md. Keep a candidate only when the content meets its rules: a funnel needs counts that shrink stage by stage, a Sankey needs exactly 3 stages, a loop needs a last step that feeds the first. - Run
tail -n 12 <history>. When two candidates fit equally, take the one used less recently. Architecture and Flowchart are fallback types: choose them when topology or branching is the dominant axis, and say why the other two lose.
When the user names a type, use it and go to step 2.
Done when you can state one line, and you give it to the user before you draw: Type: <type> (pattern: <pattern or none>). Also considered: <A> (<why not>), <B> (<why not>).
2. Load the grammar
Read the full <dd>/references/type-<name>.md and its row in references/recipes.md. From the type reference, take the inputs contract, the budget, the placement rules, and the geometry formulas. Take colours, fonts, and shapes from the translation below.
Apply the complexity budget in <dd>/SKILL.md §7 and the type's own limits. Above the budget, draw an overview and offer the detail as a second diagram.
Done when you can list every element the diagram needs, each with its primitive and role, and the count is inside the budget.
3. Compute the coordinates
Put every origin and size on a 20px grid. A type is parametric when its reference or recipe gives formulas (angles, scales, squarified tiles, projections). For a parametric type, a short python3 script computes the geometry and prints the element JSON.
Done when every element has x, y, width, and height (or points), and each number comes from the grid or the script.
4. Find space on the canvas
Call describe_scene. When the canvas holds elements, shift every x so the new diagram starts 200px to the right of their bounding box. The canvas keeps the user's work; clear it only when the user asks.
5. Draw
Send one batch_create_elements call in this order: zones, nodes, connectors, free text (title, zone labels, axis labels, legend). Give every node an id, so arrows bind to it and later edits find it. Then call set_viewport with scrollToContent: true.
Done when the call reports the element count you planned in step 2.
6. Verify
Call get_canvas_screenshot and look at the image. Fix with update_element or delete_element, then take a new screenshot.
Done when the screenshot shows all of these:
- each label on the lines you wrote, complete;
- every shape clear of the others, except a zone behind its contents;
- every connector running only between its own two ends;
- the type's grammar: a reader can name the type from the picture alone;
- accent within the limit in the roles table.
7. Log and report
mkdir -p "$(dirname <history>)" && printf '%s\t%s\t%s\n' "$(date +%F)" "<type>" "<subject>" >> <history>Report the type line from step 1 and the canvas URL. Offer the two other candidates as redraws.
Translation
Roles to styles
diagram-design names roles. Use these Excalidraw values for them. Set fillStyle: "solid" on every filled shape. Use at most 4 fill colours in one diagram.
| Role | strokeColor | backgroundColor | Use |
| ink (default node) | #1e1e1e | #ffffff | most nodes |
| muted | #868e96 | #e9ecef | default connectors, secondary nodes, axes, grid |
| accent | #e8590c | #ffd8a8 | the 1 or 2 focal elements |
| link / external | #1971c2 | #a5d8ff | HTTP/API calls, external systems, users |
| store / state | #0c8599 | #99e9f2 | databases, queues, stored state |
| service | #9c36b5 | #eebefa | services, middleware |
| positive / negative | #2f9e44 / #e03131 | #b2f2bb / #ffc9c9 | pass/fail, up/down, gain/loss |
| zone / boundary | #868e96 | #e9ecef, opacity: 40 | containers; strokeStyle: "dashed" for trust boundaries |
Text: title fontSize: 28; node names 16 to 20; small labels 14 minimum. Use fontFamily: 3 (mono) for technical text only: ports, commands, IDs, SQL types, axis numbers.
Primitives
| Need | Excalidraw element |
| node | rectangle with text. Width at least max(160, longest line in characters × 10 + 40), height 60 for one line, 80 for two |
| decision | diamond, 120 × 120 minimum |
| state, set, point | ellipse (a 12 to 16px ellipse is a dot) |
| zone, lane, band | big rectangle drawn first, with its label as a free text element 12px inside its top-left corner |
| frame (Before/After, slide) | frame |
| axis, spine, lifeline, grid line | line with points; dashed for lifelines and grid |
| polygon (radar ring, pyramid tier, isometric face) | line with closed points (last point = first) plus backgroundColor |
| quantity band (Sankey, flow width) | line with points, strokeWidth in proportion to the amount, opacity: 50 |
| tabular content (ER, schema, matrix) | a grid of rectangle cells, or one rectangle plus left-aligned free text |
Connectors
Tested behaviour of this MCP server:
- Bound arrows draw straight. An arrow with
startElementIdandendElementIdignorespointsandelbowed, and follows the shapes when the user drags them. Put the two ends on the same x or the same y so the line is straight. - Routed arrows keep their path. An arrow without bindings keeps its
points, andelbowed: truerounds the corners. It stays put when the user drags a shape, so use it only where an aligned straight path cannot exist: a swimlane hand-off, a back-edge, a route around a zone. - Headless connectors are lines. The tool rejects
endArrowhead: null; draw a connector without a head as aline. - Dashed = async, optional, return, or event. Accent = the one headline path.
- Arrow labels are 12 characters or fewer and sit at the midpoint. A bound arrow is 16px shorter than the gap between its shapes, and a label needs about
characters × 9 + 24px of arrow, so leave a 160px gap where an arrow has a label. Label an arrow only when the layout does not already say it.
Gotchas
- Zone labels:
texton a large rectangle is centred in it and lands on the contents. Label zones with a freetextelement. - Symbols: a non-Latin character (
→,✓,•, CJK) makes that label fall back to a system font. Write words or ASCII (->,-,x). - User edits: before you change a diagram, call
describe_sceneand work from what is there now. The user's edits win. - Saving and sharing:
export_scenewith afilePathwrites a.excalidrawfile;export_to_excalidraw_urlmakes a share link. Use them when the user asks.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

