Bruce Drawio logo

Bruce Drawio

Community
bruc3van
bruce-drawio

**Use this skill** when the user wants to create any diagram: flowchart, architecture, UML (sequence/class), ER, mindmap, network topology, or any visual diagram. Trigger words: "draw", "diagram", "flowchart", "architecture", "UML", "sequence diagram", "mindmap", "ER diagram", "network topology", "visualize", "draw.io", "drawio". Workflow: understand requirements -> generate drawio XML directly -> self-review -> CLI export PNG/SVG/PDF.

Overview

Publisherbruc3van
Repositoryagent-skills-guard
Skill namebruce-drawio
Stars
391
Forks
35
Bundled files
5
LicenseMIT
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • 5 bundled files

    Scripts, templates, and references the model can read while it works. Files are read-only and never executed.

  • Open source

    Published by bruc3van on GitHub. Read the source before you install it.

Installation

Install the Bruce Drawio AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/bruc3van/agent-skills-guard/tree/main/test/test-skills/positive-real/agents-bruce-drawio
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/bruc3van/agent-skills-guard.git /tmp/agent-skills-guard
mkdir -p .claude/skills
cp -r /tmp/agent-skills-guard/test/test-skills/positive-real/agents-bruce-drawio .claude/skills/bruce-drawio
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Bruce Drawio in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Bruce Drawio on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Bruce Drawio is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

Draw.io Diagram Generator

Workflow

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

Step 1: Understand Requirements

Determine:

  • Diagram type: flowchart / architecture / uml-sequence / uml-class / er / mindmap / network
  • Key elements: nodes, components, participants, entities
  • Relationships: connections, dependencies, flow direction
  • Output format: PNG (default) / SVG / PDF
  • Language: match the user's language for labels

Step 2: Generate XML

You MUST write the XML directly. Do not call any script to generate it.

Base XML Structure

xml
<?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>

Node Template

xml
<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>

Text Content Rules

  • For multi-line labels, encode line breaks as &#xa; inside value, for example value="API&#xa;Gateway"
  • Do not write literal \n inside value; draw.io will render it as backslash + n text
  • Keep html=1 on nodes, but still use &#xa; as the default line-break form for predictable output

Edge Template

xml
<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>

Step 3: Layout Rules (CRITICAL for beautiful output)

General Principles

  1. Grid alignment: all x, y coordinates must be multiples of 10 (snap to grid)
  2. Generous spacing: minimum 80px gap between node edges (not centers)
  3. Center alignment: nodes in the same column share the same x; nodes in the same row share the same y
  4. Consistent sizing: same-type nodes use identical width and height
  5. Page margins: keep at least 60px from the canvas edge (pageWidth/pageHeight)
  6. Use whiteSpace=wrap;html=1; on all nodes so long text wraps instead of overflowing
  7. Balanced gutters: outer padding around a row/column should visually match the internal gaps; avoid one oversized blank side
  8. Symmetry first: centered groups should have roughly equal left/right and top/bottom whitespace
  9. Dense fill: containers, sub-groups, and sidebars should fit content plus consistent padding; do not leave large dead zones just because the canvas is large

Layout by Diagram Type

TypeDirectionPrimary axisSpacing (between edges)Alignment
FlowchartTop-to-bottomY increases100px verticalCenter x
ArchitectureLayered block (preferred)Y increases20px between layersLeft label + container rows
UML SequenceLeft-to-right participantsX increases200px horizontalTop-aligned
UML ClassGrid / top-to-bottomY increases100px vertical, 80px horizontalLeft-aligned columns
ER DiagramSpread / gridBoth axes120px bothGrid-aligned
MindmapCenter-outward radialBoth axes150px from center per levelRadial symmetric
NetworkHierarchical layersY increases100px vertical, 120px horizontalCenter each layer

Anti-Overlap Checklist

Before finalizing coordinates, verify:

  • No two nodes' bounding boxes overlap (check x, y, width, height)
  • Edge labels don't overlap with nodes
  • Decision branches (Yes/No) go in clearly different directions
  • For flowcharts with branches: main path goes down, alternate path goes right (or left)
  • For wide diagrams: increase pageWidth in mxGraphModel; for tall ones increase pageHeight

Calculating Coordinates

Use 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:

  • increase item width moderately
  • increase item count per row only if still readable
  • reduce container width
  • split into multiple balanced rows

For incomplete last rows, center the remaining items instead of left-aligning them and leaving a large blank tail.

Standard Sizes

ElementWidthHeight
Standard node16060
Decision (rhombus)16080
Database (cylinder)14080
Actor (UML)4060
Start/End (rounded)16060
Mindmap center18080
Mindmap branch14050
Mindmap leaf12040
ER table header200varies
Group/containerautoauto

Step 4: Self-Review (DO NOT SKIP)

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:

  • All id values are unique across the entire file
  • Every mxCell with vertex="1" has correct parent (usually "1", but container children use the container ID)
  • Every edge's source and target reference existing node IDs
  • XML is well-formed: all tags closed, all attribute values quoted
  • mxGeometry always has as="geometry" attribute

Layout checks (these are the most common failures — actually verify the numbers):

  • No two non-container nodes overlap: for each pair, confirm their bounding boxes (x, y, x+width, y+height) don't intersect
  • All coordinates (x, y) are multiples of 10 — scan every mxGeometry element
  • Page dimensions (pageWidth, pageHeight) are large enough for all content with margins
  • Sibling items in the same row/column use equal sizes and equal gaps unless there is a clear reason not to
  • Left/right padding and top/bottom padding inside each container are visually balanced; no obvious one-sided blank area
  • Containers, sub-groups, and sidebars are sized to content plus padding; if a blank region is larger than a normal item gap or roughly a full item row, tighten the layout
  • Incomplete last rows are centered or otherwise balanced; they are not stuck to one side with a large empty remainder

Style checks:

  • All nodes include whiteSpace=wrap;html=1; in style
  • Every multi-line label uses &#xa; inside value, never literal \n
  • fontSize=14 or larger for readability
  • Edges use edgeStyle=orthogonalEdgeStyle for clean routing (except mindmaps which use curved=1)
  • Decision nodes use rhombus shape; database nodes use shape=cylinder3

Step 5: CLI Export (Cross-Platform)

5a. Detect draw.io

Run these commands in order, stop at the first one that succeeds:

bash
# 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:

bash
ls /Applications/draw.io.app/Contents/MacOS/draw.io 2>/dev/null

Windows (bash/MSYS2):

bash
# 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:

bash
ls /usr/bin/drawio 2>/dev/null || ls /snap/bin/drawio 2>/dev/null

5b. If not found, guide installation

Tell the user draw.io is not installed and suggest:

PlatformInstall Command
macOSbrew install --cask drawio
Windowswinget install JGraph.Draw
Linuxsnap install drawio
AllDownload from https://github.com/jgraph/drawio-desktop/releases

Do NOT auto-install without user confirmation.

5c. Export

Use the detected path (stored as $DRAWIO) to export:

bash
"$DRAWIO" -x -f png --scale 2 -o output.png diagram.drawio

Export flags

FlagPurpose
-xExport mode (no GUI)
-f png/svg/pdfOutput format
-o pathOutput file path
--scale 22x resolution for crisp PNG
--border 20Add border padding (px)
--width 1600Constrain output width
-p 0Export specific page (0-indexed)
--cropCrop to diagram content

Step 6: Deliver to User

After export:

  • Show the exported image
  • Tell the user the .drawio file location (can be edited at https://app.diagrams.net)
  • Mention the export format used

File Naming

  • Lowercase + hyphens: ecommerce-order-flow.drawio
  • No Chinese characters, spaces, or special characters in filenames
  • Output image uses same base name: ecommerce-order-flow.png

Architecture Diagram: Layered Block Style

For 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.

Modifying Existing Diagrams

When the user is not satisfied with the result and asks for modifications:

  1. Read the existing .drawio file first to understand current structure
  2. Edit based on the existing XML — do not regenerate from scratch
  3. Apply the user's requested changes while preserving the overall layout and style
  4. Run the same self-review and export steps

Reference

references/best-practices.md contains:

  • General Rules — ID management, style essentials, common mistakes
  • Architecture Diagram Templates (Layered Block Style) — the preferred architecture style with full XML templates and layout constants

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.

Bundled files

The model reads these on demand while the skill is loaded. They are exposed as readable files and are never executed.

Frequently asked questions

What does the Bruce Drawio AI skill do?

**Use this skill** when the user wants to create any diagram: flowchart, architecture, UML (sequence/class), ER, mindmap, network topology, or any visual diagram. Trigger words: "draw", "diagram", "flowchart", "architecture", "UML", "sequence diagram", "mindmap", "ER diagram", "network topology", "visualize", "draw.io", "drawio". Workflow: understand requirements -> generate drawio XML directly -> self-review -> CLI export PNG/SVG/PDF.

Why use Bruce Drawio on TypingMind?

Because you install it once and use it with any model. Bruce Drawio is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Bruce Drawio in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/bruc3van/agent-skills-guard/tree/main/test/test-skills/positive-real/agents-bruce-drawio. TypingMind reads its SKILL.md and bundles its files and installs it as a skill you can enable per chat.

Which AI models can use Bruce Drawio?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Bruce Drawio?

As many as you like. As long as a model supports skills, you can use Bruce Drawio with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Bruce Drawio AI skill free?

Yes. It is published on GitHub by bruc3van under the MIT license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇