How to Use the diagram-generator Module for Attack Path Diagrams
The diagram-generator module in the reverse-skill repository converts natural-language attack path descriptions into editable diagram source code (Mermaid, Graphviz, or PlantUML) and can render them to PNG, SVG, or PDF using scripts/render_diagram.py.
The diagram-generator skill is a core component of the zhaoxuya520/reverse-skill framework, purpose-built for security analysts who need to visualize attack chains, system architectures, and process flows. Located at skills/diagram-generator/, this module outputs version-controllable text that integrates directly with the docs-generator and attack-chain skills.
Architecture of the diagram-generator Module
The module follows a three-stage pipeline: decision, generation, and optional rendering. Understanding this flow is essential for using the diagram-generator module effectively.
Decision Table: Choosing the Right Diagram Language
The skill automatically selects the optimal diagram language based on your input characteristics. The decision table in skills/diagram-generator/SKILL.md guides this selection:
| Scenario | Recommended Language | Rationale |
|---|---|---|
| Linear attack paths, quick iteration | Mermaid | Human-readable, native markdown support |
| Dense dependency graphs, fine-grained layout control | Graphviz DOT | Sophisticated ranking and clustering |
| Formal UML, sequence diagrams, or architectural specs | PlantUML | Standardized notation, extensive libraries |
Source Generation Rules
Once the language is selected, the module applies concise style rules documented in the same SKILL.md file:
- Mermaid generation: Uses
flowchart TD(top-down) orLR(left-right) directives, explicit node labels in brackets, and subgraphs for logical grouping - Graphviz DOT generation: Enforces
rankdir, consistentnode [shape=...]declarations, and edge attributes for styling
The output is always plain text—store it in git, diff it, and modify it programmatically.
Generating Attack Path Diagrams: Step-by-Step
Step 1: Describe Your Attack Path in Natural Language
The skill accepts descriptions like "attacker sends phishing email, executes payload, steals credentials, moves laterally, exfiltrates data."
Step 2: Receive Generated Source Code
The module returns ready-to-use diagram source. Here's a typical Mermaid output for the attack path above:
下面是可编辑的 Mermaid 版本:
```mermaid
flowchart TD
attacker[Attacker] --> phish[Phishing Email]
phish --> exec[Execute Payload]
exec --> cred[Steal Credentials]
cred --> lateral[lateral movement]
lateral --> exfil[Data Exfiltration]
Assumptions:
- The chain is linear and only includes the listed steps.
Note the Chinese prefix "下面是可编辑的 Mermaid 版本:" (translated: "Below is the editable Mermaid version:")—this is the skill's standard output format indicating editable source follows.
### Step 3: Optional—Render to Image Format
When you need a visual artifact instead of source code, invoke the rendering helper. Save the source to a file first:
```bash
# Save Mermaid source to attack_path.mmd, then render
python "skills/diagram-generator/scripts/render_diagram.py" attack_path.mmd --format svg --out attack_path.svg
The render_diagram.py script detects file extensions (.mmd, .dot, .puml) and dispatches to the appropriate local renderer.
Using render_diagram.py for Attack Path Visualization
The helper script at skills/diagram-generator/scripts/render_diagram.py is the rendering engine for all diagram types. It provides dependency-tolerant execution—if a renderer is missing, it prints installation instructions rather than failing.
Supported Input Formats and Renderers
| Extension | Language | Required Tool |
|---|---|---|
.mmd |
Mermaid | mmdc (Mermaid CLI via npm) |
.dot |
Graphviz | dot (system package) |
.puml |
PlantUML | plantuml (Java + jar or system package) |
Rendering Examples
Mermaid to SVG:
python "skills/diagram-generator/scripts/render_diagram.py" attack_path.mmd --format svg --out attack_path.svg
Graphviz DOT to PNG (better for complex attack paths with branching):
下面是可编辑的 Graphviz DOT 版本:
```dot
digraph G {
rankdir=LR;
node [shape=box];
A -> B;
A -> C;
B -> D;
C -> D;
D -> E;
}
Assumptions:
- Nodes represent components; edges represent dependencies.
Then render:
```bash
python "skills/diagram-generator/scripts/render_diagram.py" deps.dot --format png --out deps.png
The script validates outputs and reports the final file path on success.
Integrating with the Broader reverse-skill Framework
The diagram-generator module doesn't operate in isolation. It feeds into two complementary skills:
attack-chainskill (skills/attack-chain/SKILL.md): Automatically consumes generated diagrams to visualize complete attack chains from reconnaissance through impactdocs-generatorskill (skills/docs-generator/SKILL.md): Embeds diagrams into final security reports, handling format conversion and styling
The routing context section in SKILL.md explains how the framework orchestrates these handoffs—diagram source flows from generator to document assembler without manual intervention.
Key Files for Attack Path Diagram Generation
| File | Purpose |
|---|---|
skills/diagram-generator/SKILL.md |
Complete workflow documentation, decision tables, generation rules, rendering instructions |
skills/diagram-generator/scripts/render_diagram.py |
CLI renderer supporting .mmd, .dot, .puml → PNG/SVG/PDF |
skills/diagram-generator/references/diagram-patterns.md |
Reusable pattern library for rapid diagram construction |
skills/attack-chain/SKILL.md |
Attack-path specific use cases and integration patterns |
skills/docs-generator/SKILL.md |
Report embedding and publication workflows |
Summary
- The
diagram-generatormodule outputs editable, version-controllable diagram source in Mermaid, Graphviz, or PlantUML format - Use
skills/diagram-generator/scripts/render_diagram.pyto convert source files to images when visual artifacts are required - The module auto-detects file types and tolerates missing dependencies with helpful installation hints
- Generated diagrams feed directly into the
attack-chainanddocs-generatorskills for end-to-end security documentation - All generation rules and style conventions are documented in
skills/diagram-generator/SKILL.md
Frequently Asked Questions
What diagram format should I use for attack path visualization?
Mermaid is the default choice for linear attack paths and rapid iteration—it renders in most markdown viewers without additional tools. Use Graphviz DOT when your attack graph has complex branching, cycles, or requires precise node positioning. PlantUML is optimal for sequence diagrams showing temporal attack progression or when UML standards compliance matters.
Can I use the diagram-generator module without installing renderers?
Yes. The module produces source code that renders in many environments natively—GitHub, GitLab, Notion, and VS Code all preview Mermaid diagrams without local tools. The render_diagram.py script is only needed when generating static image files (PNG/SVG/PDF) for reports or presentations.
How does the module handle errors when renderers are missing?
The render_diagram.py script detects missing dependencies and prints installation hints rather than throwing exceptions. For example, if mmdc is absent, it displays npm installation commands. This design ensures the skill degrades gracefully in restricted environments.
Where can I find reusable patterns for common attack path structures?
The skills/diagram-generator/references/diagram-patterns.md file contains a curated library of compact snippets—including lateral movement patterns, credential theft flows, and exfiltration sequences—that accelerate diagram authoring for security scenarios.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →