agentleFS
aiagentwithdhruvaiagentwithdhruv/skills/excalidraw-diagram/SKILL.md

excalidraw-diagram

Skill16 starsChanged 9 months agoMITView on GitHub

Use when someone asks to draw a diagram, make an Excalidraw diagram, or build an editable diagram. Default for all diagram requests.

51 other projects use a version of this, 1 of them edited.

Adopted by

Most recently taken up by

Used with

Projects with it also use mermaid-visualizer, obsidian-canvas-creator and 9 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.
  • BCS1037Skill

    mermaid-visualizer

    Transform text content into professional Mermaid diagrams for presentations and documentation. Use when users ask to visualize concepts, create flowcharts, or make diagrams from text. Supports process flows, system architectures, comparisons, mindmaps, and more with built-in syntax error prevention.

    Also in 7 projects that use this

  • BCS1037Skill

    obsidian-canvas-creator

    Create Obsidian Canvas files from text content, supporting both MindMap and freeform layouts. Use this skill when users want to visualize content as an interactive canvas, create mind maps, or organize information spatially in Obsidian format.

    Also in 4 projects that use this

  • MicrosoftSkill

    rvap-brand

    Applies the RVAP (Real Value Acceleration Program) brand identity — colors, fonts, logo, and layout patterns — consistently to any GitHub Pages website. Use this skill whenever someone asks to brand, rebrand, apply RVAP/RVAS visual identity, make a site look RVAP, match the brand kit, or transform a GitHub Pages site's look and feel to match RVAP. Also trigger when the user shares an HTML/CSS/MkDocs site and says it should look consistent with other RVAP/RVAS materials, even if they don't explicitly say "brand".

    Also in 3 projects that use this

  • XIYBHKSkill

    huashu-design

    花叔Design(Huashu-Design)——用HTML做高保真原型、交互Demo、幻灯片、动画、设计变体探索+设计方向顾问+专家评审的一体化设计能力。HTML是工具不是媒介,根据任务embody不同专家(UX设计师/动画师/幻灯片设计师/原型师),避免web design tropes。触发词:做原型、设计Demo、交互原型、HTML演示、动画Demo、设计变体、hi-fi设计、UI mockup、prototype、设计探索、做个HTML页面、做个可视化、app原型、iOS原型、移动应用mockup、导出MP4、导出GIF、60fps视频、设计风格、设计方向、设计哲学、配色方案、视觉风格、推荐风格、选个风格、做个好看的、评审、好不好看、review this design。**主干能力**:Junior Designer工作流(先给假设+reasoning+placeholder再迭代)、反AI slop清单、React+Babel最佳实践、Tweaks变体切换、Speaker Notes演示、Starter Components(幻灯片外壳/变体画布/动画引擎/设备边框)、App原型专属守则(默认从Wikimedia/Met/Unsplash取真图、每台iPhone包AppPhone状态管理器可交互、交付前跑Playwright点击测试)、Playwright验证、HTML动画→MP4/GIF视频导出(25fps基础 + 60fps插帧 + palette优化GIF + 6首场景化BGM + 自动fade)。**需求模糊时的Fallback**:设计方向顾问模式——从5流派×20种设计哲学(Pentagram信息建筑/Field.io运动诗学/Kenya Hara东方极简/Sagmeister实验先锋等)推荐3个差异化方向,展示24个预制showcase(8场景×3风格),并行生成3个视觉Demo让用户选。**交付后可选**:专家级5维度评审(哲学一致性/视觉层级/细节执行/功能性/创新性各打10分+修复清单)。

    Also in 4 projects that use this

  • HK-hubSkill

    defuddle

    Extract clean markdown content from web pages using Defuddle CLI, removing clutter and navigation to save tokens. Use instead of WebFetch when the user provides a URL to read or analyze, for online documentation, articles, blog posts, or any standard web page.

    Also in 5 projects that use this

  • wangzhuofengSkill

    obsidian-bases

    Create and edit Obsidian Bases (.base files) with views, filters, formulas, and summaries. Use when working with .base files, creating database-like views of notes, or when the user mentions Bases, table views, card views, filters, or formulas in Obsidian.

    Also in 6 projects that use this

The file

We split this skill into the rules it gives an agent

11 rules. 0 are common, 10 are distinctive, and 1 is very specific to this project.

  • 0

    Common

    Most of the 43 edited versions we read keep these.

  • 10

    Distinctive

    This author's own choices. Worth a look.

  • 1

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Before generating anything, make sure you know:

    line 9
  2. Distinctive:

    If the request is vague (e.g., "make a diagram of Docker"), ask 1-2 clarifying questions:

    line 14
  3. Distinctive:

    If you're not confident about the technical accuracy of the concept, research it before diagramming.

    line 19
  4. Distinctive:

    Before writing any JSON, sketch the layout mentally:

    line 25
  5. Distinctive:

    Write down the section plan:

    line 30
  6. Distinctive:

    If the user asks for changes:

    line 55
  7. Distinctive:

    If a diagram gets complex (20+ elements), build it section by section to avoid coordinate errors

    line 59
  8. Very specific:

    Nesting shows containment: If X lives inside Y, X's box is drawn inside Y's box with consistent padding.

    line 73
  9. Distinctive:

    Always plan coordinates before writing JSON.

    line 85
  10. Distinctive:

    Every element needs these base fields.

    line 147
  11. Distinctive:

    Every diagram uses this shell:

    line 237

“Common” is measured: kept by at least 6 in 10 of the 43 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.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Workflow

Step 1: Understand the request

Before generating anything, make sure you know:

  • What concept or system are they diagramming?
  • What are the major components or sections?
  • What is the flow or relationship between them?

If the request is vague (e.g., "make a diagram of Docker"), ask 1-2 clarifying questions:

  • What specific aspect? (architecture, networking, volumes, etc.)
  • What level of detail? (high-level overview vs. detailed internals)

Step 2: Research if needed

If you're not confident about the technical accuracy of the concept, research it before diagramming. Verify:

  • Correct component names and relationships
  • Proper hierarchy and nesting
  • Accurate data flow direction

Step 3: Plan the layout

Before writing any JSON, sketch the layout mentally:

  • What are the major sections? (left-to-right or top-to-bottom)
  • What is nested inside what?
  • What arrows connect what?

Write down the section plan:

[Section A: w=170] --40px gap-- [Section B: w=170] --40px gap-- [Section C: w=640]

Step 4: Generate elements

Build elements in order:

  1. Outer boxes / containers first
  2. Section header text
  3. Nested elements (top to bottom within each section)
  4. Arrows and arrow labels last

Step 5: Save and deliver

  1. Save to [concept-slug].excalidraw in the current directory
  2. Show the full JSON in a code block so the user can copy it directly
  3. Briefly describe what the diagram shows and what each color zone represents
  4. Tell the user how to use the file:

How to view and edit your diagram:

  • Go to excalidraw.com (free, no account needed)
  • Option A: Click the menu (top-left hamburger icon) > "Open" > select the .excalidraw file
  • Option B: Copy the JSON code block above, open excalidraw.com, and paste it with Ctrl+V / Cmd+V
  • Every element is fully editable -- drag to move, grab handles to resize, double-click to edit text

Step 6: Handle feedback

If the user asks for changes:

  • Shifting an element = update x/y on that element + all elements that depend on it
  • Changing text = update both text and originalText fields
  • Adding a zone = assign it a new color from the palette, keep spacing consistent
  • If a diagram gets complex (20+ elements), build it section by section to avoid coordinate errors

Critical Rule: Text Contrast

Text inside colored shapes must be readable. Use #1e1e1e (near-black) or #343a40 (dark charcoal) for all text inside filled shapes. Never use the zone's stroke color for text sitting on that zone's background (e.g., yellow text on a yellow card is unreadable). Reserve the zone's strokeColor for shape borders and arrows only.


Design Principles

Color tells the story: One color per logical zone. Everything in the "input" zone is blue. Everything in the "output" zone is green. The viewer should understand structure before reading a word.

Nesting shows containment: If X lives inside Y, X's box is drawn inside Y's box with consistent padding. Coordinates are absolute, not relative: child_x = parent_x + padding.

Labels are short: 2-5 words per label. Longer explanations become annotations with smaller fontSize and muted color (#868e96).

White space is structure: 15px minimum gap between siblings. 40px minimum between major sections.

Arrows carry intent: Color arrows to match purpose. Label every non-obvious arrow.


Layout System

Always plan coordinates before writing JSON.

  1. Identify major sections (left-to-right or top-to-bottom)
  2. Assign fixed width and starting x to each section
  3. Calculate gaps: 40-60px between major sections, 15-25px between siblings
  4. Work top-to-bottom within sections: next_y = current_y + current_height + gap

Padding rules:

  • Outer box to inner label: 8-10px top offset
  • Outer box to nested box: 10-15px offset on all sides
  • Sibling elements: 10-15px gap

Text width trick: Set text width = parent box width. Text centers automatically when textAlign: "center".

Arrow labels: Position as separate text elements, 20-25px above the arrow's midpoint y, with width and x matching the arrow.

Coordinate math example:

Section A: x=30,  w=170  -> right edge = 200
Gap:                        40px
Section B: x=240, w=170  -> right edge = 410
Gap:                        40px
Section C: x=450, w=600  -> right edge = 1050

Color System

ZoneUse forstrokeColorbackgroundColor
BlueInput, source, external services#1971c2#e7f5ff
YellowProcessing, transformation#f59f00#fff9db
GreenOutput, containers, success#2f9e44#d3f9d8
PurpleShared layers, infrastructure#862e9c#f3d9fa
RedHost OS, warnings, errors#c92a2a#ffe3e3
GrayHardware, neutral containers#495057#f8f9fa

For nested elements, vary the fill intensity:

  • Outer: lightest (e.g., #d3f9d8)
  • Inner: medium (e.g., #8ce99a)
  • Deep inner: light-medium (e.g., #b2f2bb)

Typography Scale

RolefontSizefontFamily
Diagram title32-361 (Virgil)
Section header20-241
Element label16-181
Annotation14-151
Small note12-131
Code label14-163 (Cascadia)

Text width = parent box width. Text x/y offset ~8-10px from box x/y for padding.


Element Schema

Every element needs these base fields. Do not omit any.

Base fields (all types)

{
  "id": "unique-string",
  "type": "rectangle|ellipse|diamond|arrow|line|text|freedraw",
  "x": 0, "y": 0,
  "width": 100, "height": 50,
  "angle": 0,
  "strokeColor": "#1e1e1e",
  "backgroundColor": "transparent",
  "fillStyle": "solid",
  "strokeWidth": 2,
  "strokeStyle": "solid",
  "roughness": 1,
  "opacity": 100,
  "groupIds": [],
  "frameId": null,
  "roundness": null,
  "boundElements": [],
  "updated": 1,
  "link": null,
  "locked": false
}

Text fields (add to base)

{
  "text": "Label text",
  "fontSize": 16,
  "fontFamily": 1,
  "textAlign": "center",
  "verticalAlign": "top",
  "containerId": null,
  "originalText": "Label text",
  "lineHeight": 1.25
}

Arrow fields (add to base)

{
  "points": [[0, 0], [100, 0]],
  "lastCommittedPoint": null,
  "startBinding": null,
  "endBinding": null,
  "startArrowhead": null,
  "endArrowhead": "arrow"
}

Key values

  • fontFamily: 1 = Virgil (handwritten, default), 2 = Helvetica, 3 = Cascadia (monospace)
  • roughness: 0 = smooth, 1 = slightly rough (default Excalidraw feel), 2 = very rough
  • fillStyle: "solid" for clean diagrams, "hachure" for classic Excalidraw hatching
  • roundness: null = sharp corners, {"type": 3} = rounded rectangles, {"type": 2} = curved arrows
  • strokeStyle: "solid", "dashed" (optional connections), "dotted"

Common Patterns

Labeled box

[Rect: x, y, w, h]
[Title text: x, y+10, w, fontSize=18]
[Subtitle: x, y+38, w, fontSize=14, strokeColor=#868e96]

Nested container

[Host rect: x=0, y=0, w=640, h=500]
[Host label: x=0, y=10, w=640]
[Item 1: x=15, y=50, w=190, h=200]
[Item 2: x=225, y=50, w=190, h=200]
[Item 3: x=435, y=50, w=190, h=200]

Arrow with label

[Arrow: x=start_x, y=mid_y, width=gap_width, points=[[0,0],[gap_width,0]]]
[Label: x=start_x, y=mid_y-25, width=gap_width, textAlign=center]

JSON Wrapper

Every diagram uses this shell:

{
  "type": "excalidraw",
  "version": 2,
  "source": "https://excalidraw.com",
  "elements": [ ... ],
  "appState": {
    "gridSize": null,
    "viewBackgroundColor": "#ffffff"
  },
  "files": {}
}

Download now (ZIP)

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
What did you use it for? e.g. Reviewing pull requests in a Rails app

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.