--- name: diagram-maker description: Create SVG/HTML or Excalidraw diagrams for concepts, architecture, flows, and whiteboards. metadata: { "openclaw": { "emoji": "🧭" } } --- # Diagram Maker Create diagrams as artifacts, not prose. Choose one output mode: - `clean-svg`: educational concepts, physical systems, processes, lifecycle, simple data flow. - `architecture-svg`: software/cloud/infra topology, services, databases, queues, trust zones. - `excalidraw`: editable hand-drawn whiteboard, flowchart, sequence, architecture sketch. Routing - User wants editable/collaborative: choose Excalidraw. - User wants polished standalone browser output: choose SVG/HTML. - Software architecture with infra components: choose architecture SVG. - Science, product, process, concept map, physical object: choose clean SVG. - Unsure: ask one short question only if output format matters; otherwise choose clean SVG. Workflow 1. Extract nodes, groups, labels, and directed relationships. 2. Pick layout first: left-to-right, top-down, hub-spoke, swimlanes, layered stack, sequence. 3. Keep labels short. Prefer 5-9 main elements over dense diagrams. 4. Generate the file at the requested path, or `./diagram.html` / `./diagram.excalidraw`. 5. Verify syntax by opening/parsing when feasible. SVG/HTML rules - Single standalone `.html` file with inline CSS and inline SVG. - No external fonts, JS, images, gradients, glows, decorative blobs, or remote assets. - Use semantic colors, not rainbow sequences: neutral, input, process, storage, external, risk. - Draw connectors before nodes so arrows sit behind boxes. - Every connector path has `fill="none"` and a marker arrow when directed. - Leave 24px text padding inside boxes; do not let text touch borders. - Legend only when symbols/colors are not obvious. SVG template Use `references/svg-template.md` as the wrapper and replace ``. Excalidraw rules - Save `.excalidraw` JSON with `type`, `version`, `source`, `elements`, and `appState`. - Use bound text for shape labels. Do not use a nonstandard `label` property. - Keep bound text immediately after its container in the elements array. - Minimum labeled shape: 120x60. Minimum body text: 16px. - Use roughness `1`, `fontFamily: 1`, and simple fills. For exact Excalidraw element snippets, read `references/excalidraw-patterns.md`.