--- name: baoyu-diagram description: Generates publication-ready SVG diagrams — flowcharts, sequence/protocol diagrams, structural/architecture diagrams, and illustrative intuition diagrams — by writing real SVG code directly following a cohesive design system. Supports both single-diagram mode (topic-based) and multi-diagram mode (analyze article content and generate multiple diagrams at identified positions). Use whenever the user asks to "draw a flowchart", "draw a sequence diagram", "show the OAuth / TCP / auth protocol", "make an architecture diagram", "explain how X works visually", "illustrate this article with diagrams", "为文章画图解", "画流程图", "画时序图", "画架构图", "画示意图", "画图解", or wants clean, embeddable vector diagrams for articles, WeChat posts, slides, or docs. Output is one or more self-contained .svg files that render correctly in light and dark mode anywhere they are embedded. version: 1.1.0 metadata: openclaw: homepage: https://github.com/JimLiu/baoyu-skills#baoyu-diagram --- # Diagram Generator Write **real SVG code** directly, following a consistent design system, the output is self-contained `.svg` files (embedded styles, auto dark-mode), editable by humans, scales to any size without quality loss, and embeds cleanly into articles, WeChat posts, slide decks, Notion, and markdown. When given article or document content, the skill analyzes structure, identifies concepts that benefit from diagramming, and generates multiple diagrams — each with its own type, layout plan, and SVG. When given a single topic, it generates one diagram. This is not an image-generation skill — it does not call any LLM image model. Claude writes the SVG node-by-node, doing the layout math by hand so every diagram honors the rules in `references/`. ## Usage ### Single-diagram mode ```bash # Prompt for the topic if no argument given /baoyu-diagram # Plain-text description /baoyu-diagram "how JWT authentication works" # Path to a markdown file as source content (single diagram about one topic) /baoyu-diagram path/to/content.md --mode single # Force a specific diagram type /baoyu-diagram "transformer attention" --type illustrative /baoyu-diagram "Kubernetes architecture" --type structural /baoyu-diagram "CI/CD pipeline" --type flowchart /baoyu-diagram "OAuth 2.0 flow" --type sequence /baoyu-diagram "Shape hierarchy" --type class # Language and output path /baoyu-diagram "微服务架构" --lang zh /baoyu-diagram "build pipeline" --out docs/build-pipeline.svg ``` ### Multi-diagram mode ```bash # Analyze article and generate diagrams at identified positions /baoyu-diagram path/to/article.md # With density control /baoyu-diagram path/to/article.md --density balanced /baoyu-diagram path/to/article.md --density per-section --lang zh # Force multi mode on pasted content /baoyu-diagram --mode multi ``` ### Mode detection | Signal | Mode | |--------|------| | File path to `.md` / `.txt` (unless `--mode single`) | **Multi** | | Multi-paragraph pasted content (unless `--mode single`) | **Multi** | | Short quoted topic string (under ~100 chars, no markdown structure) | **Single** | | `--type` given | **Single** (forces) | | `--out` given | **Single** (forces) | | `--mode single` or `--mode multi` | Forced by flag | | Ambiguous | Ask with AskUserQuestion | ## Options | Option | Values | |--------|--------| | `--type` | `flowchart`, `sequence`, `structural`, `illustrative`, `class`, `auto` (default — route on verb). Forces single-diagram mode. | | `--lang` | `en`, `zh`, `ja`, `ko`, ... (default: match the user's language) | | `--out` | Output file path (default: `diagram/{slug}/diagram.svg`). Forces single-diagram mode. | | `--density` | `minimal` (1-2), `balanced` (3-5, default), `per-section`, `rich` (6+). Multi-diagram mode only. | | `--mode` | `single`, `multi`, `auto` (default). Override automatic mode detection. | ## Diagram types Pick the type by what the reader needs, not by the noun in the prompt. **The primary test**: is the reader trying to *document* this, or *understand* it? Documentation wants precision — flowchart, sequence, or structural. Understanding wants the right mental model — illustrative. | Type | Reader need | Route on verbs like | Reference | |------|-------------|---------------------|-----------| | **Flowchart** | Walk me through the steps, in order | "walk through", "steps", "process", "lifecycle", "workflow", "state machine", "gate", "router", "parallelization", "orchestrator", "evaluator" | `references/flowchart.md` | | **Flowchart (phase band)** | Walk me through each phase; show the tools at each stage | "phase 1/2/3", "multi-phase operation", "each phase has tools", "attack phases", "phased workflow", "security operation phases", "penetration test stages", "phase N feeds phase N+1" | `references/flowchart-phase-bands.md` | | **Sequence** | Who talks to whom, in what order | "protocol", "handshake", "auth flow", "OAuth", "TCP", "TLS", "gRPC", "request/response", "who calls what", "exchange between", "round trip", "webhook" | `references/sequence.md` | | **Structural** | Show me what's inside what, how it's organized | "architecture", "organised", "components", "layout", "what's inside", "topology", "subsystem", "two systems", "side by side", "foreground + background" | `references/structural.md` | | **Illustrative** | Give me the intuition — draw the mechanism | "how does X work", "explain X", "I don't get X", "intuition for", "why does X do Y", "LLM with tools", "agent and environment", "central + attachments" | `references/illustrative.md` | | **Class** | What are the types and how are they related | "class diagram", "UML", "inheritance", "interface", "schema", "types and subtypes", "data model" | `references/class.md` | **Routing heuristic**: "how does X work" is the default ambiguous case. Prefer **illustrative** unless the user specifically asks for steps or components. A diagram that makes the reader feel "oh, *that's* what it's doing" is illustrative — even if the subject is software. **Multi-actor test for sequence**: if the prompt names ≥2 distinct actors/participants/services (User + Server, Client + Auth + Resource, Browser + CDN + Origin), prefer **sequence** even when the verb is "flow" or "process". Single-actor "X flow" (build pipeline, request lifecycle, GC) stays flowchart. When you pick sequence for a multi-actor reason, announce it: *"Picked sequence because the prompt names N actors (…). Rerun with `--type flowchart` to force the step-list version."* **Worked examples of verb-based routing**: same subject, different diagram depending on what was asked. Use these as a sanity check after picking a type. | User says | Type | What to draw | |-------------------------------------------|--------------|----------------------------------------------------------------------------------| | "how do LLMs work" | Illustrative | Token row, stacked layer slabs, attention threads across layers. | | "transformer architecture / components" | Structural | Labeled boxes: embedding, attention heads, FFN, layer norm. | | "how does attention work" | Illustrative | One query token, fan of lines to every key, line thickness = weight. | | "how does gradient descent work" | Illustrative | Contour surface, a ball rolling down, a trail of discrete steps. | | "what are the training steps" | Flowchart | Forward → loss → backward → update. | | "how does TCP work" | Illustrative | Two endpoints, numbered packets in flight, an ACK returning. | | "TCP handshake sequence" | Sequence | SYN → SYN-ACK → ACK between client and server lifelines. | | "how does a hash map work" | Illustrative | Key falling through a hash function into one of N buckets. | | "LLM with retrieval, tools, memory" | Illustrative | Central LLM subject with dashed radial spokes to three labeled attachments. | | "gate pattern with pass/fail exit" | Flowchart | Pill In → LLM → Gate → LLM → LLM → pill Out, with a dashed Fail branch to Exit. | | "LLM router / parallelization" | Flowchart | Simple fan-out: pill In → hub → 3 branches → aggregator → pill Out. | | "Pi session + background analyzer" | Structural (subsystem) | Two dashed sibling containers side by side, each with a short internal flow, labeled cross-system arrows. | | "prompt engineering vs. context engineering" | Structural (subsystem) | Two sibling containers, each showing its internal mechanism with cross-links. | | "agent + environment loop" | Illustrative | Human pill ↔ LLM rect ↔ Environment pill, Action/Feedback labels on the edges. | | "Claude Code workflow with sub-loops" | Sequence | 4 actors with 1–2 dashed message frames labeled "Until tests pass" / "Until tasks clear". | | "generator-verifier loop" | Flowchart | Outer loop container; two boxes with green ✓ / coral ✗ status circles on the return edge. See `flowchart.md` → "Loop container" + "Status-circle junctions". | | "from TODOs to tasks" | Structural (subsystem) | Two siblings: left = checklist (checkbox glyphs); right = DAG of task nodes with one dashed future-state node. See `structural.md` → "Rich interior" + "Dashed future-state node". | | "finding the sweet spot" | Illustrative | Horizontal spectrum axis between two opposing labels; option boxes under tick points with the middle one highlighted. See `illustrative.md` → "Spectrum / continuum". | | "agent teams with task queue" | Flowchart | Queue glyph inside the lead box, then vertical fan-out to workers. See `flowchart.md` → "Queue glyph inside box" + "Vertical fan-out". | | "message bus architecture" | Structural | Central horizontal bar + agents above/below, each linked by a publish/subscribe arrow pair. See `structural.md` → "Bus topology". | | "shared state store" | Structural | Central hub with a doc icon + 4 corner satellites, bidirectional arrow pairs. See `structural.md` → "Radial star topology". | | "orchestrator vs. agent teams" | Structural (subsystem) | Two siblings; left = hub + fan-out; right = queue + vertical fan-out. See `structural.md` → "Rich interior for subsystem containers". | | "orchestrator vs. message bus" | Structural (subsystem) | Two siblings; left = hub + fan-out; right = mini bus topology. See `structural.md` → "Rich interior". | | "advisor strategy" | Structural | Single container, multi-line box bodies (title/role/meta), mixed solid+dashed+bidirectional arrows with a legend strip. See `structural.md` → "Mixed arrow semantics" + "Multi-line box body". | | "tool calling vs. programmatic" | Sequence | Parallel independent rounds — left = stacked rounds; right = stacked rounds wrapped in a tall script box. See `sequence.md` → "Parallel independent rounds". | | "Claude + environment + skill" | Illustrative | Two subject boxes with a bidirectional arrow; annotation circle at the midpoint labels the skill. See `illustrative.md` → "Annotation circle on connector". | | "code execution vs. dedicated tool" | Structural (subsystem) | Two siblings; left = Computer box with nested Terminal; right = Claude with an attached gadget box for Tools. See `structural.md` → "Rich interior" + "Attached gadget box". | | "Shape inheritance / class hierarchy" | Class | 3-compartment rects (name / attrs / methods) with hollow-triangle inheritance arrows. See `class.md`. | | "order lifecycle / status transitions" | Flowchart (state machine) | State rects + initial/final markers + `event [guard] / action` transition labels. See `flowchart.md` → "State machine". | | "network topology (3-tier)" | Structural (network) | Dashed zone containers (Internet / DMZ / Internal) + labeled device rects. See `structural.md` → "Network topology". | | "database comparison matrix" | Structural (matrix) | Header row + zebra-striped body rows with ✓/✗ glyphs in cells. See `structural.md` → "Comparison matrix". | | "multi-phase attack / each phase has tools" | Flowchart (phase band) | Stacked dashed phase bands; compact tool cards with icons in each band; colored cross-band arrows (normal / exploit / findings); operator icons on left. See `flowchart-phase-bands.md`. | | "phased workflow / phase 1 recon phase 2 exploit" | Flowchart (phase band) | Phase labels as eyebrow text; tool card rows centered in each band; side annotations; legend strip. See `flowchart-phase-bands.md`. | **Most common routing failure**: picking a flowchart because it feels safer when an illustrative diagram would give the reader more insight. Illustrative is the more ambitious choice, and almost always the right one when the reader needs understanding rather than documentation. Cycles, ERDs, and gantt charts are **out of scope for v1**. For cycles, draw the stages linearly with a small `↻ returns to start` return glyph (see `flowchart.md`). For ERDs, suggest a dedicated tool (mermaid, plantuml) — do not attempt to fake them in pure SVG. ## Workflow ### Step 1: Detect mode and capture input Read the user's prompt, content file, or pasted content. Determine the mode: | Signal | Mode | |--------|------| | Short topic string, `--type` given, or `--out` given | **Single** | | File path to `.md` / `.txt`, or multi-paragraph pasted content | **Multi** | | `--mode single` or `--mode multi` | Forced by flag | | Ambiguous (medium-length text, unclear if topic or content) | Ask with AskUserQuestion | **Single mode** → jump to Step 5. **Multi mode** → continue to Step 2. If input is a file path, read the file. If input is pasted content, note it for saving later. If no input at all, ask for it with AskUserQuestion. ### Step 2: Analyze content (multi-diagram mode) Analyze the article or document for diagramming opportunities. For each section or concept cluster, determine: | Analysis | Output | |----------|--------| | Content structure | Sections, subsections, key transitions | | Core concepts | 2-8 concepts that benefit from visual explanation | | Diagram positions | Where in the article each diagram belongs (anchored to specific paragraphs or headings) | | Per-position type signal | What verb/need drives each diagram (→ routing table in "Diagram types") | | Per-position complexity | Simple (3-4 nodes) vs. complex (poster/subsystem) | **What to diagram:** - Core mechanisms the reader needs to *understand* (→ illustrative) - Multi-step processes described in prose (→ flowchart) - Multi-actor interactions (→ sequence) - Architectural descriptions with containment or hierarchy (→ structural) - Type hierarchies or data models (→ class) - Comparisons between two approaches or systems (→ structural subsystem) **What NOT to diagram:** - Simple lists — a bullet list is already visual enough - Concepts already shown in an existing image or figure in the article - Purely emotional or narrative passages with no underlying mechanism - Content that is a single sentence or trivially simple - Decorative filler — every diagram must earn its place with a concrete reader need **Output**: A list of N candidate diagram positions, each with: section anchor, tentative type, named elements, and the "After seeing this diagram, the reader understands ___" sentence. ### Step 3: Confirm settings (multi-diagram mode) **ONE AskUserQuestion, max 3 questions. Q1 required. Q2 required unless `--density` given.** | Q | When to ask | Options | |---|-------------|---------| | **Q1: Diagram positions** | Always | Show the N candidate positions with tentative types. "I identified N positions for diagrams: [numbered list with section anchor + type + one-line purpose]. Adjust, add, or remove?" | | **Q2: Density** | No `--density` flag | minimal (1-2 core concepts only), balanced (3-5 major concepts, Recommended), per-section (one per section/chapter), rich (6+ comprehensive) | | **Q3: Language** | Article language ≠ user's language or `--lang` | Which language for diagram labels? | After confirmation, finalize the list of diagrams to generate. If the user adjusts positions or types, update accordingly. ### Step 4: Generate outline (multi-diagram mode) Save `outline.md` with YAML frontmatter and per-diagram entries: ```yaml --- article: path/to/article.md # or "pasted content" slug: article-topic-slug density: balanced diagram_count: 4 language: en --- ``` Per-diagram entry format: ```markdown ## Diagram 1 **Position**: [section name / paragraph anchor, e.g. "Section 2, after 'Authentication is the first step...'"] **Purpose**: [why this diagram helps the reader] **Type**: [flowchart | sequence | structural | illustrative | class] **Named elements**: [list of actors, components, states, or concepts] **Reader need**: "After seeing this diagram, the reader understands ___" **Slug**: [2-4 kebab-case words] **Filename**: 01-{type}-{slug}/diagram.svg ``` **Requirements**: - Each position justified by a concrete reader need (the "After seeing this..." sentence) - Type chosen per the routing table, not arbitrarily - Count matches the confirmed density - If input was pasted content, also save it as `source-{slug}.md` in the output directory Save to `diagram/{article-slug}/outline.md`. ### Step 5: Load shared references **Always read**: - `references/design-system.md` — philosophy, typography, color palette, hard rules - `references/svg-template.md` — the `