wanshuiyin/auto-claude-code-research-in-sleep-mermaid-diagram
Generate Mermaid diagrams from user requirements. Save .mmd and .md files to figures/ with syntax verification. Supports flowcharts, sequence diagrams, class diagrams, ER diagrams, Gantt charts, and many more diagram types.
npx skills add https://github.com/wanshuiyin/Auto-claude-code-research-in-sleep --skill mermaid-diagram
Generate high-quality Mermaid diagram code based on user requirements, with file output and verification.
figures/ — Output directory for generated filesmkdir -p figures
Parse the input: $ARGUMENTS
Select the appropriate diagram type. Use built-in Mermaid knowledge first; if external documentation is needed and your environment provides it, fetch the up-to-date syntax reference.
Choose theme, colors, and layout before writing code. For academic diagrams, prefer clean white backgrounds, restrained colors, and readable labels over decorative styling.
| Type | Use Cases |
| ---- | --------- |
| Flowchart | Processes, decisions, steps |
| Sequence Diagram | Interactions, messaging, API calls |
| Class Diagram | Class structure, inheritance, associations |
| State Diagram | State machines, state transitions |
| ER Diagram | Database design, entity relationships |
| Gantt Chart | Project planning, timelines |
| Pie Chart | Proportions, distributions |
| Mindmap | Hierarchical structures, knowledge graphs |
| Timeline | Historical events, milestones |
| Git Graph | Branches, merges, versions |
| Quadrant Chart | Four-quadrant analysis |
| Requirement Diagram | Requirements traceability |
| C4 Diagram | System architecture |
| Sankey Diagram | Flow, conversions |
| XY Chart | Line charts, bar charts |
| Block Diagram | System components, modules |
| Packet Diagram | Network protocols, data structures |
| Kanban | Task management, workflows |
| Architecture Diagram | System architecture |
| Radar Chart | Multi-dimensional comparison |
| Treemap | Hierarchical data visualization |
| User Journey | User experience flows |
| ZenUML | Sequence diagrams (code style) |
Generate the Mermaid code and save two files:
figures/<diagram-name>.mmd — Raw Mermaid sourceThe .mmd file contains only raw Mermaid code, no markdown fences.
figures/<diagram-name>.md — Markdown with embedded MermaidThe .md file wraps the same Mermaid code in a mermaid code block for preview rendering, plus a short title and description.
Use a concise title in the .md wrapper that matches the generated diagram name.
Naming convention: use a descriptive kebab-case name derived from the request, such as auth-flow, system-architecture, or database-er.
Codex MUST verify the generated Mermaid code by running the Mermaid CLI (mmdc).
if command -v mmdc >/dev/null 2>&1; then
mmdc -i figures/<diagram-name>.mmd -o figures/<diagram-name>.png -b transparent
echo "Syntax valid — PNG rendered to figures/<diagram-name>.png"
else
npx -y @mermaid-js/mermaid-cli@latest -i figures/<diagram-name>.mmd -o figures/<diagram-name>.png -b transparent
echo "Syntax valid — PNG rendered to figures/<diagram-name>.png"
fi
If verification fails:
.mmd and .mdMAX_ITERATIONSAfter successful rendering, Codex MUST read the generated PNG and perform a strict review:
## Codex's STRICT Review of <diagram-name>
### What I See
[Describe the rendered diagram in detail]
### Files Generated
- `figures/<diagram-name>.mmd`
- `figures/<diagram-name>.md`
- `figures/<diagram-name>.png`
### ═══════════════════════════════════════════════════════════════
### STRICT VERIFICATION CHECKLIST (ALL must pass for score ≥ 9)
### ═══════════════════════════════════════════════════════════════
#### A. File Correctness
- [ ] `.mmd` contains valid Mermaid syntax
- [ ] `.md` wraps the Mermaid code in ```mermaid fences
- [ ] `.mmd` and `.md` contain identical Mermaid code
- [ ] Diagram renders without errors
ASCII alias for automated checks: score >= 9.
#### B. Arrow Correctness Verification (CRITICAL - any failure = score ≤ 6)
ASCII alias for automated checks: CRITICAL - any failure = score <= 6.
- [ ] Every arrow points to the correct target
#### C. Block Content Verification (any failure = score ≤ 7)
ASCII alias for automated checks: any failure = score <= 7.
- [ ] Every block label is correct
- [ ] Every block contains the intended content
#### D. Completeness
- [ ] All required components are present
- [ ] All required connections are present
- [ ] Labels are meaningful and match the request
#### E. Visual Quality
- [ ] Layout is clean and readable
- [ ] Colors are professional
- [ ] Text is readable at normal zoom
- [ ] Spacing is balanced
- [ ] Data flow is understandable within 5 seconds
### ═══════════════════════════════════════════════════════════════
### Issues Found (BE SPECIFIC)
1. [issue] -> [fix]
### Score: X/10
### Score Breakdown Guide:
- 10: correct, readable, publication-ready
- 9: minor polish only
- 8: usable but one visual/layout weakness remains
- 7: one content or block-label weakness remains
- 6 or below: arrow direction, missing component, syntax, or semantic error
### Verdict
- [ ] ACCEPT
- [ ] FIX
If the verdict is FIX, apply corrections to both .mmd and .md, re-render, and re-review until ACCEPT or MAX_ITERATIONS is reached.
When accepted, present:
Mermaid diagram generated successfully.
Files:
figures/<diagram-name>.mmd
figures/<diagram-name>.md
figures/<diagram-name>.png
To re-render manually:
mmdc -i figures/<diagram-name>.mmd -o figures/<diagram-name>.png
When generating architecture-beta diagrams, apply these layout techniques for complex diagrams:
Think of the diagram as an invisible grid. Use junction nodes as virtual anchor points on that grid to precisely control placement. This is especially useful when a direct edge produces unexpected positioning.
Instead of connecting services directly:
lb:R --> L:scim
lb:R --> L:webapi
Route through junctions:
junction j_lb_r
lb:R -- L:j_lb_r
junction j_scim_l
j_lb_r:T -- B:j_scim_l
j_scim_l:R --> L:scim
junction j_webapi_l
j_lb_r:B -- T:j_webapi_l
j_webapi_l:R --> L:webapi
For services that have no real logical connection but still need stable placement, use a junction combined with {group} to anchor them without inventing a semantic edge.
When the diagram is intended for academic papers, apply these style standards:
#10B981 / #34D399)#2563EB / #3B82F6)#7C3AED / #8B5CF6)#EA580C / #F97316)#333333 / #1F2937)#FFFFFF)Mermaid supports rendering mathematical expressions via KaTeX. When the diagram content involves formulas, equations, Greek letters, subscripts, superscripts, fractions, or matrices, use KaTeX notation instead of plain-text approximations.
Math rendering with $$...$$ is supported in:
$$ inside quoted strings: A["$$x^2$$"] -->|"$$\\sqrt{x+3}$$"| B("$$\\frac{1}{2}$$")
$$ only around the math portion\text{} for non-math text inside $$| Concept | KaTeX Syntax |
| ------- | ------------ |
| Subscript | $$W_Q$$ |
| Superscript | $$x^2$$ |
| Fraction | $$\\frac{QK^T}{\\sqrt{d_k}}$$ |
| Greek letters | $$\\alpha, \\beta, \\gamma$$ |
| Square root | $$\\sqrt{d_k}$$ |
| Summation | $$\\sum_{i=1}^{n} x_i$$ |
| Matrix | $$\\begin{bmatrix} a & b \\\\ c & d \\end{bmatrix}$$ |
| Softmax | $$\\text{softmax}(z_i)$$ |
| Norm | $$\\|\\|x\\|\\|_2$$ |
| Hat/tilde | $$\\hat{y}, \\tilde{x}$$ |
flowchart TD
Q["$$Q \\in \\mathbb{R}^{n \\times d_k}$$"]
K["$$K \\in \\mathbb{R}^{n \\times d_k}$$"]
V["$$V \\in \\mathbb{R}^{n \\times d_v}$$"]
scores["$$\\frac{QK^T}{\\sqrt{d_k}}$$"]
softmax["$$\\text{softmax}(\\cdot)$$"]
output["$$\\text{Attention}(Q,K,V)$$"]
Q --> scores
K --> scores
scores --> softmax
softmax --> weighted["$$\\alpha V$$"]
V --> weighted
weighted --> output
$$ delimiters must be inside quoted stringsmmdcGenerated Mermaid code MUST:
A, B, C<br/> for line breaks inside node labels, never \nfigures/
├── <diagram-name>.mmd
├── <diagram-name>.md
└── <diagram-name>.png
figures/.mmd and .md10. Fix errors before accepting
11. Use descriptive kebab-case file names
User requirements: $ARGUMENTS
Take wanshuiyin/auto-claude-code-research-in-sleep-mermaid-diagram from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.
The instructions reference npx.
Without those the skill loads but fails at the first command.