|
npx skills add https://github.com/bruc3van/agent-skills-guard --skill bruce-drawio
1. Understand requirements -> determine diagram type, elements, relationships
2. Generate XML directly -> write drawio XML (read only the relevant section from references/best-practices.md)
3. Self-review (DO NOT SKIP) -> re-read XML and fix any issues found
4. Save .drawio file -> write to user's working directory
5. CLI export -> call draw.io desktop CLI to export image
6. Deliver to user -> show image + provide editable .drawio file
Determine:
You MUST write the XML directly. Do not call any script to generate it.
<?xml version="1.0" encoding="UTF-8"?>
<mxfile host="app.diagrams.net" agent="drawio-skill" version="21.0.0" type="device">
<diagram name="DiagramName" id="diagram-1">
<mxGraphModel dx="1422" dy="762"
grid="1" gridSize="10"
guides="1" tooltips="1" connect="1"
arrows="1" fold="1"
page="1" pageScale="1"
pageWidth="1600" pageHeight="1200"
math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<!-- nodes and edges here -->
</root>
</mxGraphModel>
</diagram>
</mxfile>
<mxCell id="node-1" value="Label"
style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=14;"
vertex="1" parent="1">
<mxGeometry x="100" y="100" width="160" height="60" as="geometry" />
</mxCell>

 inside value, for example value="API
Gateway"\n inside value; draw.io will render it as backslash + n texthtml=1 on nodes, but still use 
 as the default line-break form for predictable output<mxCell id="edge-1" value=""
style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;"
edge="1" parent="1" source="node-1" target="node-2">
<mxGeometry relative="1" as="geometry" />
</mxCell>
whiteSpace=wrap;html=1; on all nodes so long text wraps instead of overflowing| Type | Direction | Primary axis | Spacing (between edges) | Alignment |
|------|-----------|-------------|------------------------|-----------|
| Flowchart | Top-to-bottom | Y increases | 100px vertical | Center x |
| Architecture | Layered block (preferred) | Y increases | 20px between layers | Left label + container rows |
| UML Sequence | Left-to-right participants | X increases | 200px horizontal | Top-aligned |
| UML Class | Grid / top-to-bottom | Y increases | 100px vertical, 80px horizontal | Left-aligned columns |
| ER Diagram | Spread / grid | Both axes | 120px both | Grid-aligned |
| Mindmap | Center-outward radial | Both axes | 150px from center per level | Radial symmetric |
| Network | Hierarchical layers | Y increases | 100px vertical, 120px horizontal | Center each layer |
Before finalizing coordinates, verify:
pageWidth in mxGraphModel; for tall ones increase pageHeightUse this formula to center N items horizontally in a row:
total_width = N * node_width + (N - 1) * gap
start_x = (pageWidth - total_width) / 2
item[i].x = start_x + i * (node_width + gap)
For vertical centering in a column, apply the same logic to Y axis.
For rows inside a fixed-width container, also check fill density:
inner_width = container_width - 2 * side_pad
gap = (inner_width - N * item_width) / (N - 1)
If gap is much larger than the item width, or side padding is much larger than gap, adjust one of:
For incomplete last rows, center the remaining items instead of left-aligning them and leaving a large blank tail.
| Element | Width | Height |
|---------|-------|--------|
| Standard node | 160 | 60 |
| Decision (rhombus) | 160 | 80 |
| Database (cylinder) | 140 | 80 |
| Actor (UML) | 40 | 60 |
| Start/End (rounded) | 160 | 60 |
| Mindmap center | 180 | 80 |
| Mindmap branch | 140 | 50 |
| Mindmap leaf | 120 | 40 |
| ER table header | 200 | varies |
| Group/container | auto | auto |
After generating XML, re-read your output and check each item below. If any check fails, fix the XML before proceeding. This step catches the most common rendering bugs — skipping it results in broken diagrams.
Structural checks:
id values are unique across the entire filemxCell with vertex="1" has correct parent (usually "1", but container children use the container ID)source and target reference existing node IDsmxGeometry always has as="geometry" attributeLayout checks (these are the most common failures — actually verify the numbers):
mxGeometry elementStyle checks:
whiteSpace=wrap;html=1; in style
 inside value, never literal \nfontSize=14 or larger for readabilityedgeStyle=orthogonalEdgeStyle for clean routing (except mindmaps which use curved=1)rhombus shape; database nodes use shape=cylinder3Run these commands in order, stop at the first one that succeeds:
# 1. Try PATH first (works if user installed globally)
which draw.io 2>/dev/null || which drawio 2>/dev/null
If that fails, check platform-specific default paths:
macOS:
ls /Applications/draw.io.app/Contents/MacOS/draw.io 2>/dev/null
Windows (bash/MSYS2):
# Check common install locations
ls "/c/Program Files/draw.io/draw.io.exe" 2>/dev/null || \
ls "$LOCALAPPDATA/Programs/draw.io/draw.io.exe" 2>/dev/null
Linux:
ls /usr/bin/drawio 2>/dev/null || ls /snap/bin/drawio 2>/dev/null
Tell the user draw.io is not installed and suggest:
| Platform | Install Command |
|----------|----------------|
| macOS | brew install --cask drawio |
| Windows | winget install JGraph.Draw |
| Linux | snap install drawio |
| All | Download from https://github.com/jgraph/drawio-desktop/releases |
Do NOT auto-install without user confirmation.
Use the detected path (stored as $DRAWIO) to export:
"$DRAWIO" -x -f png --scale 2 -o output.png diagram.drawio
| Flag | Purpose |
|------|---------|
| -x | Export mode (no GUI) |
| -f png/svg/pdf | Output format |
| -o path | Output file path |
| --scale 2 | 2x resolution for crisp PNG |
| --border 20 | Add border padding (px) |
| --width 1600 | Constrain output width |
| -p 0 | Export specific page (0-indexed) |
| --crop | Crop to diagram content |
After export:
ecommerce-order-flow.drawioecommerce-order-flow.pngFor architecture diagrams, use the Layered Block Style — see references/best-practices.md for full templates and layout constants. This is the preferred style: structured block layout with no arrows, horizontal layers, left label column, and optional cross-cutting sidebar.
When the user is not satisfied with the result and asks for modifications:
references/best-practices.md contains:
For other diagram types (flowchart, UML, ER, mindmap, network, etc.), generate appropriate draw.io XML directly based on your knowledge. Read the "General Rules" section for basic formatting guidance.
Integration with protocols.io API for managing scientific protocols. This skill should be used when working with protocols.io to search, create, update, or publish protocols; manage protocol steps and materials; handle discussions and comments; organize workspaces; upload and manage files; or integrate protocols.io functionality into workflows. Applicable for protocol discovery, collaborative protocol development, experiment tracking, lab protocol management, and scientific documentation.
Analyzes job descriptions and generates tailored resumes that highlight relevant experience, skills, and achievements to maximize interview chances
Generate Excalidraw diagrams from natural language descriptions. Use when asked to "create a diagram", "make a flowchart", "visualize a process", "draw a system architecture", "create a mind map", or "generate an Excalidraw file". Supports flowcharts, relationship diagrams, mind maps, and system architecture diagrams. Outputs .excalidraw JSON files that can be opened directly in Excalidraw.
Build and distribute Expo development clients locally or via TestFlight
Use when you have a written implementation plan to execute in a separate session with review checkpoints
Data structure for annotated matrices in single-cell analysis. Use when working with .h5ad files or integrating with the scverse ecosystem. This is the data format skill—for analysis workflows use scanpy; for probabilistic models use scvi-tools; for population-scale queries use cellxgene-census.
Benchling R&D platform integration. Access registry (DNA, proteins), inventory, ELN entries, workflows via API, build Benchling Apps, query Data Warehouse, for lab data management automation.
Comprehensive molecular biology toolkit. Use for sequence manipulation, file parsing (FASTA/GenBank/PDB), phylogenetics, and programmatic NCBI/PubMed access (Bio.Entrez). Best for batch processing, custom bioinformatics pipelines, BLAST automation. For quick lookups use gget; for multi-service integration use bioservices.
Take bruc3van/bruce-drawio from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.
The instructions reference brew.
Without those the skill loads but fails at the first command.