Generates ASCII diagrams for ADRs using graph-easy. Visualizes architecture changes, migrations, integrations via DSL with nodes, edges, groups, and mandatory labeled flows.
From itpnpx claudepluginhub terrylica/cc-skills --plugin itpThis skill is limited to using the following tools:
references/adr-embedding.mdreferences/diagram-examples.mdreferences/dsl-syntax.mdreferences/evolution-log.mdreferences/monospace-symbols.mdreferences/preflight-setup.mdSearches, retrieves, and installs Agent Skills from prompts.chat registry using MCP tools like search_skills and get_skill. Activates for finding skills, browsing catalogs, or extending Claude.
Searches prompts.chat for AI prompt templates by keyword or category, retrieves by ID with variable handling, and improves prompts via AI. Use for discovering or enhancing prompts.
Guides idea refinement into designs: explores context, asks questions one-by-one, proposes approaches, presents sections for approval, writes/review specs before coding.
Create comprehensive ASCII architecture diagrams for Architecture Decision Records (ADRs) using graph-easy. Pure text output with automatic layout - no image rendering required.
Self-Evolving Skill: This skill improves through use. If instructions are wrong, parameters drifted, or a workaround was needed ā fix this file immediately, don't defer. Only update for real, reproducible issues.
Ensure graph-easy is installed and functional before rendering diagrams.
Full setup instructions: Preflight Setup
Quick verify:
echo "[Test] -> [OK]" | graph-easy --as=boxart &>/dev/null && echo "ā graph-easy ready"
Full syntax with examples, node styling, edge styles, and emoji rules: DSL Syntax Reference
[Node] # Node
[A] -> [B] # Edge
[A] -- label --> [B] # Labeled edge
[A] <-> [B] # Bidirectional
( Group: [Node A] [Node B] ) # Group/container
[id] { label: "Display"; } # Custom label
graph { flow: south; } # Top-to-bottom (architecture, decisions)
graph { flow: east; } # Left-to-right (pipelines, sequences)
WARNING: This is the most commonly forgotten requirement. Diagrams without labels are invalid.
Correct:
graph { label: "š Database Migration"; flow: south; }
[Old DB] -> [New DB]
Anti-Pattern (INVALID):
graph { flow: south; }
[Old DB] -> [New DB]
Missing label: with emoji. The preflight validator will BLOCK any ADR containing diagrams without graph { label: "emoji ..."; }.
| Diagram Type | Emoji | Diagram Type | Emoji |
|---|---|---|---|
| Migration/Change | š | Architecture | šļø |
| Deployment/Release | š | Network/API | š |
| Data Flow | š | Storage/Database | š¾ |
| Security/Auth | š | Monitoring | š” |
| Error/Failure | ā ļø | Hook/Event | šŖ |
| Decision/Branch | š | Before/After | ā®ļø/āļø |
| Style | Syntax | Use For |
|---|---|---|
| Rounded corners | { shape: rounded; } | Start/end nodes |
| Double border | { border: double; } | Critical/emphasis |
| Bold border | { border: bold; } | Important nodes |
| Dotted border | { border: dotted; } | Optional/skippable |
| Solid arrow | -> | Main/happy path |
| Dotted arrow | ..> | Conditional/alternate |
| Bold arrow | ==> | Emphasized/critical |
| Labeled edge | -- label --> | Annotated connections |
graph { label: }: OKFull symbol reference: Monospace-Safe Symbols
graph { flow: south; }
[Before] -- migrate --> [After]
graph { flow: south; }
[A] -> [B] -> [C]
[B] -> [D]
graph { flow: east; }
[Input] -> [Process] -> [Output]
graph { flow: south; }
[Decision] -> [Option A]
[Decision] -> [Option B]
( Group:
[Component 1]
[Component 2]
)
[External] -> [Component 1]
[Client] <-> [Server]
[Server] -> [Database]
More patterns by ADR type: Diagram Examples
graph-easy --as=boxart << 'EOF'
graph { flow: south; }
[A] -> [B] -> [C]
EOF
Never use --as=ascii - it produces ugly +--+ boxes instead of clean āāāā lines.
# 1. Write DSL to heredoc
# 2. Render with boxart
# 3. Review output
# 4. Iterate if needed
# 5. Copy final ASCII to ADR
Every rendered diagram MUST include a collapsible <details> block with graph-easy source. Full format guide and GFM syntax rules: ADR Embedding Guide
Required format:
```
āāāāāāāāā āāāāāāāā
ā Build ā --> ā Test ā
āāāāāāāāā āāāāāāāā
```
<details>
<summary>graph-easy source</summary>
```
graph { label: "š Pipeline"; flow: east; }
[Build] -> [Test]
```
</details>
The <details> block is MANDATORY - never embed a diagram without its source.
graph { label: "š Title"; } - semantic emoji + title (MOST FORGOTTEN - check first!)graph { flow: south; } or graph { flow: east; } - explicit direction--as=boxart - NEVER --as=ascii<details> block with source - EVERY diagram MUST have collapsible source code block``` block, followed by <details><summary>graph-easy source</summary> with source{ shape: rounded; } - entry/exit points{ border: double; } or { border: bold; }{ border: dotted; }\n for multiline - max ~15 chars per line-> solid arrow..> dotted arrow==> bold arrow-- YES -->, -- error -->graph { label: "..."; } title( Name: ... ) used for logical clustering when 4+ related nodes[db] { label: "PostgreSQL"; }<details> block with source+--+\n, no truncation\n for complex diagrams( Group: ... ) containers| Issue | Cause | Solution |
|---|---|---|
command not found | graph-easy not installed | Run preflight check |
| Misaligned boxes | Used --as=ascii | Always use --as=boxart |
| Box border broken | Graphical emoji in node | Remove emojis from nodes, use ASCII markers |
| Nodes overlap | Too complex | Split into multiple diagrams (max 7-10 nodes) |
| Edge labels cut off | Label too long | Shorten to 1-3 words |
| No title showing | Wrong syntax | Use graph { label: "Title"; flow: south; } |
| Weird layout | No flow direction | Add graph { flow: south; } or flow: east |
| Parse error | Special chars in node | Escape or simplify node names |
After this skill completes, check before closing:
Only update if the issue is real and reproducible ā not speculative.