--- name: drawio-generator description: Generate professional draw.io architecture diagrams from text descriptions. The agent generates mxGraph XML directly, validates it, and iterates until correct. Includes 8900+ vendor stencils (AWS, Azure, GCP, Cisco, Kubernetes, etc.). Use when the user asks for draw.io diagrams, architecture diagrams, cloud infrastructure diagrams, or system design visualizations. --- # Draw.io Diagram Generator Generate professional-grade Draw.io (mxGraph) XML diagrams from natural language. You ARE the LLM — generate the XML directly, validate it, fix issues, and deliver. ## Critical Rules ### Structure Rules - **S1: Check Stencil Names** 🚨 NEVER guess stencil names. Check `stencils/*.md` for EXACT names. Wrong: `mxgraph.cisco.router` → Correct: `mxgraph.cisco.routers.router` - **S2: Stencils Require fillColor** Many stencils have no default color. Always add `fillColor`/`strokeColor`. Exception: edge/link stencils are connectors, not devices. - **S3: Root Cells Required** Must include `` and `` or diagram won't render. - **S4: Labels Below Stencils** Use `verticalLabelPosition=bottom;verticalAlign=top;labelPosition=center;align=center;` for device/icon labels. - **S5: mxCell Must Be Siblings** ALL mxCell elements must be siblings under `` — NEVER nest mxCell inside another mxCell. - **S6: Container Transparency** For container shapes, use `fillColor=none;` to make background transparent and prevent covering child elements. - **S7: No Array Elements** ⚠️ NEVER use `` elements in mxGeometry — this CRASHES draw.io! Let draw.io auto-route edges. Use `exitX/exitY/entryX/entryY` style params instead. - **S8: No XML Comments** NEVER include `` in generated XML — breaks editing. ### Layout Rules - **L1: Starting Margin** Begin positioning from x=40, y=40. - **L2: Element Spacing** Keep 40-60px gaps between connected shapes; 150-200px for routing channels between groups. - **L3: Compact Layouts** Use vertical stacking or grid layouts. Keep within x: 0-800, y: 0-600 viewport. Avoid spreading elements too far apart. ### Edge Routing Rules — CRITICAL for Clean Diagrams - **E1: No Shared Paths** Multiple edges between same nodes must use DIFFERENT exit/entry positions (`exitY=0.3` and `exitY=0.7`, NOT both 0.5). - **E2: Bidirectional Use Opposite Sides** A→B: `exitX=1`, `entryX=0`. B→A: `exitX=0`, `entryX=1`. - **E3: Explicit Exit/Entry Points** Every edge should specify: `exitX`, `exitY`, `entryX`, `entryY` in style. - **E4: Route Around Obstacles** If any shape is between source and target, let draw.io auto-route with `edgeStyle=orthogonalEdgeStyle`. Do NOT use `` waypoints. - **E5: Plan Layout First** Organize shapes into columns/rows. Trace each edge mentally: "What shapes are between source and target?" - **E6: Natural Connection Points** NEVER use corners (`entryX=1,entryY=1`). Top-to-bottom: `exitY=1`, `entryY=0`. Left-to-right: `exitX=1`, `entryX=0`. - **E7: Diagonal Routing Principle** When connecting distant nodes diagonally, route along the PERIMETER of the diagram, NOT through the middle where other shapes exist. ### Pre-Generation Checklist 1. Do any edges cross over non-source/target shapes? → Rearrange layout 2. Do any two edges share the same path? → Adjust exit/entry points 3. Are any connections at corners? → Use edge centers instead 4. Could rearranging shapes reduce crossings? → Revise layout ## Workflow ### 1. Understand the Request Determine: - **Diagram type**: Cloud architecture, microservices, network, UML, ERD, etc. - **Components**: Systems, services, databases, actors involved - **Relationships**: Connections (sync/async, data flow, dependencies) If the user provides a file (PDF, DOCX, TXT, MD), read it and extract entities, relationships, and processes. ### 2. Read the Prompt References Before generating, read these files for rules and styling guidance: - `references/drawio_system_prompt.txt` — the master system prompt with all XML rules - `references/color_palette.md` — professional colors by component type - `references/drawio_xml_rules.md` — quick-reference for mxGraph syntax Also study `assets/example_simple.drawio` as a structural reference. ### 3. Select Stencils (if applicable) If the diagram involves vendor-specific icons (AWS, Azure, GCP, Cisco, Kubernetes, etc.): 1. Identify which stencil library to use from the table below 2. Read the corresponding `stencils/.md` file for EXACT shape names 3. Note the required `fillColor` and recommended dimensions for each shape **NEVER guess stencil names** — always verify against the stencil file. ### 4. Plan the Layout (Multi-Phase for Complex Diagrams) For diagrams with >15 components, use this phased approach: - **P1: Plan** — Identify diagram type, choose canvas size, select stencil libraries. Plan element positions first, then derive zone boundaries. - **P2: Zones** — Write zone/container cells FIRST in XML (drawio renders by document order). Solid fill: `rounded=1;fillColor=#BAC8D3;strokeColor=none;opacity=60`. Dashed border: `rounded=1;dashed=1;dashPattern=8 8;fillColor=none;strokeColor=#0BA5C4`. - **P3: Elements** — Position shapes on grid (multiples of 10/20). Keep consistent device style per stencil family. - **P4: Connections** — Add edges last. Network links: `endArrow=none;endFill=0`. Data flow: `endArrow=classic`. Dashed for logical/VPN: `dashed=1`. - **P5: Labels** — Add floating text, legends. Verify every element has a `value` or adjacent label. - **P6: Chunking** — When a diagram exceeds ~30 elements, split XML output into chunks. ### 5. Generate the Draw.io XML Following the system prompt rules, generate the complete mxFile XML. Key rules: - Use the exact root skeleton: `` → `` → `` → `` - Always include `` and `` - Shapes: `vertex="1" parent="1"` with unique descriptive IDs - Edges: `edge="1" parent="1"` with valid `source` and `target` - **NEVER** use `` elements — crashes draw.io - Use color palette by component type - Position shapes at grid multiples of 10 or 20 - Labels match the user's language Save the XML to a `.drawio` file using `write_to_file`. ### 6. Validate (ReAct Loop) Run the validator script on the saved file: ```bash python .agent/skills/drawio-generator/scripts/validate_drawio.py ``` - If ✅ valid → proceed to step 7 - If ❌ errors → read the error messages, fix the XML, save again, re-validate - Repeat until all checks pass Common fixes: - **Duplicate IDs**: Renumber cells sequentially - **Broken edges**: Ensure source/target IDs exist as vertex cells - **Array elements**: Remove `` children from edge geometries - **Malformed XML**: Fix unclosed tags, unescape `&` or `<` in labels ### 7. Deliver Tell the user: - Where the `.drawio` file was saved - Brief design concept (what architectural decisions you made) - How to open: draw.io desktop, [app.diagrams.net](https://app.diagrams.net), or VS Code Draw.io extension ### 8. Iterative Refinement If the user wants changes to an existing diagram: 1. Read the current `.drawio` file 2. Modify the XML preserving existing IDs where possible 3. Save, validate, and deliver the updated file ## Stencil Libraries drawio provides 8900+ pre-built stencils across 48 categories. **Full stencil reference:** See `stencils/*.md` files. | Category | Stencil File | Use Case | | ------------------ | ---------------------------------------------------- | ------------------------------------- | | **AWS** | `aws4.md` | AWS cloud architecture (1031 shapes) | | **Azure** | `azure.md`, `mscae.md` | Azure cloud & enterprise architecture | | **GCP** | `gcp2.md` | Google Cloud architecture | | **Cisco** | `cisco.md`, `cisco19.md`, `cisco_safe.md` | Network topology | | **Kubernetes** | `kubernetes.md`, `kubernetes2.md` | Container orchestration | | **Network** | `networks.md`, `networks2.md` | General network diagrams | | **Virtualization** | `citrix.md`, `citrix2.md`, `veeam.md`, `vvd.md` | Infrastructure diagrams | | **Software** | `bpmn.md`, `flowchart.md`, `sitemap.md`, `mockup.md` | Process & UI design | | **Hardware** | `rack.md`, `cabinets.md`, `electrical.md` | Data center & electrical | | **Office** | `office.md`, `atlassian.md`, `salesforce.md` | Business diagrams | | **Cloud (Other)** | `alibaba_cloud.md`, `ibm_cloud.md` | Other cloud providers | ### Stencil Usage Example ```xml ``` ## Common Shapes Reference ### Basic Shapes ```xml ``` ### Container / Swimlane ```xml ``` **Note:** Children use `parent="lane1"` with coordinates RELATIVE to the swimlane. Edges always use `parent="1"`. ### Edge Patterns ```xml ``` ## Common Style Reference - **Arrow Types:** Inheritance(`endArrow=block;endFill=0`) Implementation(`endArrow=block;endFill=0;dashed=1`) Association(`endArrow=open;endFill=1`) Dependency(`endArrow=open;dashed=1`) Aggregation(`startArrow=diamondThin;startFill=0`) Composition(`startArrow=diamondThin;startFill=1`) - **Shape Styles:** `rounded`(0,1) `fillColor`(hex) `strokeColor`(hex) `strokeWidth`(num) `dashed`(0,1) `opacity`(0-100) `fontColor`(hex) `fontSize`(num) `fontStyle`(0=normal,1=bold,2=italic,3=both) `align`(left,center,right) `verticalAlign`(top,middle,bottom) `shadow`(0,1) - **Edge Styles:** `edgeStyle`(orthogonalEdgeStyle,entityRelationEdgeStyle,elbowEdgeStyle) `curved`(0,1) `endArrow`/`startArrow`(classic,block,open,oval,diamond,none) `endFill`/`startFill`(0=hollow,1=filled) - **State Colors:** Pending(`#dae8fc`,`#6c8ebf`) Success(`#d5e8d4`,`#82b366`) Error(`#f8cecc`,`#b85450`) Warning(`#fff2cc`,`#d6b656`) Complete(`#e1d5e7`,`#9673a6`) ## Common Pitfalls | Issue | Solution | | ---------------------------- | ----------------------------------------------------- | | Shape not visible | Verify `vertex="1"` and `parent="1"` attributes | | Edge not connecting | Ensure `source` and `target` match cell IDs | | Styles not applying | Check semicolon separators in style string | | Text not showing | Add `html=1;whiteSpace=wrap;` to style | | Stencil not rendering | Verify exact name in `stencils/*.md`, add `fillColor` | | Edges crossing shapes | Rearrange layout to minimize crossings | | Multiple edges overlapping | Use different `exitY`/`entryY` values (0.3 and 0.7) | | Corner connections look ugly | Use edge centers instead (`exitX=1,exitY=0.5`) | | Diagram too spread out | Keep within x: 0-800, y: 0-600 viewport | | XML crashes draw.io | Remove `` elements, fix unclosed tags | ## Tips for AI Generation 1. **Plan layout first**: Sketch positions mentally before writing XML — identify potential edge crossings 2. **Use grid alignment**: Position shapes at multiples of 10 or 20 3. **Unique IDs**: Use descriptive IDs like `client`, `server`, `db` instead of random strings 4. **Consistent spacing**: Keep 40-60px gaps between connected shapes; 150-200px for routing channels 5. **Layer backgrounds first**: Define zone/container cells before shapes inside them 6. **Color zones**: Use light background colors with `strokeColor=none` for region highlighting 7. **Verify edges mentally**: Before generating, trace each edge and ask "Does this cross any shape?" 8. **Escape special characters**: Use `<` for <, `>` for >, `&` for &, `"` for " ## Files | Path | Purpose | | ------------------------------------- | ----------------------------------------------- | | `scripts/validate_drawio.py` | XML validator — run after every generation | | `references/drawio_system_prompt.txt` | Master system prompt with all mxGraph rules | | `references/drawio_xml_rules.md` | Quick-reference for XML syntax | | `references/color_palette.md` | Professional colors by component type | | `assets/example_simple.drawio` | Working example for structural reference | | `stencils/*.md` | Stencil libraries — 48 categories, 8900+ shapes |