Install
openclaw skills install excalidraw-proGenerate Excalidraw diagrams (.excalidraw files) from natural language descriptions. Use this skill whenever the user asks to create, draw, or visualize a di...
openclaw skills install excalidraw-proYou generate .excalidraw files from natural language descriptions. The user can open these files directly in Excalidraw (File → Open) or drag-and-drop onto the canvas.
diagram_input.jsonbuild_excalidraw.py to produce the file| What the user describes | Type to use |
|---|---|
| Steps, process, decisions, branching | flowchart |
| Systems, services, components, infrastructure | architecture |
| Topics, ideas, concepts radiating from a center | mindmap |
| Two or more parties exchanging messages over time | sequence |
When in doubt, prefer flowchart — it handles the widest range of content.
Generate one of the following formats as diagram_input.json in the current working directory.
{
"type": "flowchart",
"title": "Short descriptive title",
"nodes": [
{"id": "unique_id", "label": "Display Text", "shape": "rectangle"},
{"id": "decision", "label": "Is it valid?", "shape": "diamond"},
{"id": "start_end", "label": "Start", "shape": "oval"}
],
"edges": [
{"from": "node_a", "to": "node_b"},
{"from": "decision", "to": "node_c", "label": "Yes"},
{"from": "decision", "to": "node_d", "label": "No"}
]
}
Shape choices: rectangle (default), diamond (decisions/conditions), oval (start/end points)
{
"type": "architecture",
"title": "System Architecture",
"groups": [
{
"id": "frontend",
"label": "Frontend",
"nodes": [
{"id": "web", "label": "Web App"},
{"id": "mobile", "label": "Mobile App"}
]
},
{
"id": "backend",
"label": "Backend",
"nodes": [
{"id": "api", "label": "API Gateway"},
{"id": "auth", "label": "Auth Service"}
]
}
],
"nodes": [],
"edges": [
{"from": "web", "to": "api", "label": "HTTPS"},
{"from": "mobile", "to": "api", "label": "HTTPS"}
]
}
Note: groups is optional. Use nodes at the top level for ungrouped components. You can mix both.
{
"type": "mindmap",
"title": "Topic Overview",
"root": "Central Topic",
"branches": [
{
"label": "Branch 1",
"children": ["Subtopic A", "Subtopic B", "Subtopic C"]
},
{
"label": "Branch 2",
"children": ["Subtopic D", "Subtopic E"]
}
]
}
{
"type": "sequence",
"title": "Interaction Flow",
"actors": ["User", "Frontend", "API", "Database"],
"messages": [
{"from": "User", "to": "Frontend", "label": "Click Login"},
{"from": "Frontend", "to": "API", "label": "POST /login"},
{"from": "API", "to": "Database", "label": "Query user"},
{"from": "Database", "to": "API", "label": "Return record"},
{"from": "API", "to": "Frontend", "label": "JWT token"},
{"from": "Frontend", "to": "User", "label": "Redirect"}
]
}
After writing diagram_input.json, run the build script:
python <skill_dir>/scripts/build_excalidraw.py \
--input diagram_input.json \
--output <title>.excalidraw
Where <skill_dir> is the directory containing this SKILL.md file, and <title> is a sanitized version of the diagram title.
After successful generation, tell the user:
✓ Diagram saved to: <filename>.excalidraw
To open in Excalidraw:
1. Go to https://excalidraw.com
2. Click the menu (☰) → Open → select the file
— or — drag the file onto the canvas
api_gateway, check_auth)If the script fails:
diagram_input.json has valid JSON syntaxfrom/to values match existing node id valuespython3 --version)