mermaid-diagram
npx skills add https://github.com/blueeventhorizon/swift-selena --skill mermaid-diagram
Agent 安装分布
Skill 文档
Mermaid Diagram Skill
Creates syntactically correct mermaid diagrams following official specifications and preventing common errors.
Overview
This skill helps you create error-free mermaid diagrams by:
- Following official mermaid syntax specifications
- Avoiding common pitfalls (special characters, reserved words, wrong note syntax)
- Providing correct structure for each diagram type
- Based on real experience: 76 diagrams fixed, 20+ iterations avoided
When to use:
- Creating flowcharts, sequence diagrams, class diagrams, etc.
- Editing existing mermaid diagrams
- Converting design ideas into visual diagrams
Quick Start
Flowchart Basic Syntax
flowchart TD
Start[Start Process]
Process[Process Data]
Decision{Is Valid?}
End[End]
Start --> Process
Process --> Decision
Decision -->|Yes| End
Decision -->|No| Process
Sequence Diagram Basic Syntax
sequenceDiagram
participant A as Alice
participant B as Bob
A->>B: Hello Bob
B->>A: Hi Alice
Note right of B: Bob thinks
Class Diagram Basic Syntax
classDiagram
class Animal {
+String name
+int age
+makeSound()
}
class Dog {
+bark()
}
Animal <|-- Dog
Critical Rules (MUST FOLLOW)
Rule 1: Special Characters in Labels
Problem characters: :, (), [], {}, @, ;, ,
Solutions:
Option A: Use double quotes
flowchart LR
A["Function: process()"]
B["Array [1, 2, 3]"]
Option B: Use HTML entities
:â:(â()â)[â[]â];â;
WRONG:
flowchart LR
A[Function: process()] â Colon breaks syntax
Rule 2: Reserved Words
“end” (lowercase):
flowchart TD
Start --> End â
Capitalized OK
Start --> end â Breaks diagram
Start --> END â
All caps OK
“o” and “x” at edge start:
flowchart LR
A --- oB â Creates circle edge
A --- xB â Creates cross edge
A --- oC â
Add space: o B
Rule 3: Subgraph Syntax
CORRECT:
flowchart TD
subgraph ID["Subgraph Title"]
A[Node A]
B[Node B]
end
WRONG:
flowchart TD
subgraph "Subgraph Title" â Missing ID
A[Node A]
end
Rule 4: Note Syntax (Diagram-Specific)
sequenceDiagram ONLY:
sequenceDiagram
A->>B: Message
Note right of B: This is valid â
flowchart/graph: NO note keyword
flowchart TD
Note[Use regular node instead] â
Rule 5: classDiagram Rules
Define before linking:
classDiagram
class Animal {
+name
}
class Dog
Animal <|-- Dog â
Both defined
Method syntax:
classDiagram
class MyClass {
+method(param) ReturnType â
+field: Type â
}
Diagram Types
Flowchart / Graph
Declaration:
flowchart TD(Top-Down)flowchart LR(Left-Right)graph TD(alias)
Node shapes:
A[Rectangle]B(Rounded)C{Diamond}- `D([Stadium)])
E[[Subroutine]]
Edges:
A --> B(arrow)A --- B(line)A -.-> B(dotted arrow)A ==> B(thick arrow)A -->|label| B(labeled edge)
Subgraph:
flowchart TD
subgraph SG1["Group 1"]
A[Node A]
B[Node B]
end
subgraph SG2["Group 2"]
C[Node C]
end
A --> C
sequenceDiagram
Participants:
sequenceDiagram
participant A as Alice
participant B as Bob
Messages:
A->>B: Solid arrowA-->>B: Dotted arrowA-)B: Async
Notes:
Note right of A: TextNote left of B: TextNote over A,B: Text
Blocks:
alt,opt,par,loop,rect
classDiagram
Class definition:
classDiagram
class ClassName {
+publicField: Type
-privateField: Type
+method(param) ReturnType
}
Relationships:
A <|-- B(inheritance)A *-- B(composition)A o-- B(aggregation)A --> B(association)A ..> B(dependency)A ..|> B(realization)
Edge labels:
classDiagram
A --> B : label
A ..> C : another label
stateDiagram-v2
stateDiagram-v2
[*] --> State1
State1 --> State2
State2 --> [*]
state State1 {
[*] --> Nested1
Nested1 --> [*]
}
erDiagram
erDiagram
CUSTOMER ||--o{ ORDER : places
ORDER ||--|{ LINE-ITEM : contains
CUSTOMER {
string name
int id
}
gantt
gantt
title Project Schedule
dateFormat YYYY-MM-DD
section Phase 1
Task 1 :a1, 2025-01-01, 30d
Task 2 :after a1, 20d
mindmap
mindmap
root((Central Idea))
Topic1
Subtopic1
Subtopic2
Topic2
Common Errors and Solutions
Error 1: “Parse error on line X”
Cause: Special characters in labels
Solution: Use double quotes or HTML entities
flowchart LR
A["Method: process()"] â
Error 2: “Subgraph X not found”
Cause: Missing ID in subgraph declaration
Solution:
flowchart TD
subgraph ID["Title"] â
A[Node]
end
Error 3: “Syntax error in graph”
Cause: Reserved word “end” in lowercase
Solution: Capitalize: End, END
Error 4: “Note is not defined”
Cause: Using Note keyword in flowchart
Solution: Use regular node or switch to sequenceDiagram
Error 5: Unexpected edge type
Cause: “o” or “x” at edge start
Solution:
flowchart LR
A --- B â
A --- oC â (creates circle edge)
A --- " oC" â
(add space)
Advanced Topics
For detailed specifications on specific diagram types, see:
- flowchart-reference.md – Complete flowchart syntax
- sequence-reference.md – Complete sequence diagram syntax
- class-reference.md – Complete class diagram syntax
- common-errors.md – Error patterns from 76 diagram corrections
Validation Checklist
Before finalizing a mermaid diagram:
- No special characters without quotes/escaping
- No lowercase “end” as node name
- Subgraphs have ID:
subgraph ID["Title"] - Note only in sequenceDiagram
- All referenced nodes are defined (classDiagram)
- No “o” or “x” at edge start in flowchart
- Proper diagram type declaration
Best Practices
- Keep it simple: Start with basic syntax, add complexity only if needed
- Use double quotes: For any label with special characters
- Test incrementally: Add nodes/edges one at a time if diagram is complex
- Consistent naming: Use clear, descriptive IDs
- Avoid nesting: Deep nesting often causes issues
Examples from Swift-Selena Project
System Architecture (flowchart)
graph TB
subgraph Server["MCP Server"]
Main[SwiftMCPServer]
LSP[LSPState]
end
subgraph Tools["Tools"]
T1[Tool 1]
T2[Tool 2]
end
Main --> LSP
Main --> Tools
style Server fill:#e3f2fd
LSP Protocol Flow (sequenceDiagram)
sequenceDiagram
participant C as Client
participant L as LSP
C->>L: initialize
L->>C: response
C->>L: initialized
Note over L: Ready for requests
C->>L: textDocument/references
L->>C: result
Data Model (erDiagram)
erDiagram
ProjectMemory ||--o{ FileInfo : contains
ProjectMemory ||--o{ Note : contains
FileInfo {
string path
date lastModified
}
Quick Reference
Escape special chars: Use " or &#XX;
Subgraph: subgraph ID["Title"]
Note: sequenceDiagram only
Reserved: Avoid lowercase “end”
classDiagram: Define before link
For complete syntax details, refer to supporting reference files.