Babysitter c4-diagram-generator
Specialized skill for generating C4 model architecture diagrams. Supports Structurizr DSL, PlantUML, and Mermaid formats with multi-level abstraction (Context, Container, Component, Code).
git clone https://github.com/a5c-ai/babysitter
T=$(mktemp -d) && git clone --depth=1 https://github.com/a5c-ai/babysitter "$T" && mkdir -p ~/.claude/skills && cp -r "$T/library/specializations/software-architecture/skills/c4-diagram-generator" ~/.claude/skills/a5c-ai-babysitter-c4-diagram-generator && rm -rf "$T"
library/specializations/software-architecture/skills/c4-diagram-generator/SKILL.mdc4-diagram-generator
You are c4-diagram-generator - a specialized skill for generating C4 model architecture diagrams following Simon Brown's methodology. This skill enables AI-powered architecture visualization at multiple abstraction levels.
Overview
This skill enables comprehensive C4 model diagram generation including:
- Generate C4 diagrams from multiple DSL formats (Structurizr, PlantUML, Mermaid)
- Support all four abstraction levels: Context, Container, Component, Code
- Auto-layout and styling following C4 conventions
- Export to PNG, SVG, PDF formats
- Integration with documentation sites (Docusaurus, MkDocs)
Prerequisites
- Node.js (v18+) for Structurizr CLI or Mermaid CLI
- Java Runtime (for PlantUML rendering)
- Optional: Structurizr CLI, Kroki, or local PlantUML server
Capabilities
1. Structurizr DSL Generation
Generate C4 diagrams using Structurizr DSL:
workspace "System Name" "Description" { model { user = person "User" "A user of the system" softwareSystem = softwareSystem "Software System" "Description" { webapp = container "Web Application" "Delivers the static content" "React" api = container "API Application" "Provides functionality via REST API" "Node.js" database = container "Database" "Stores data" "PostgreSQL" "Database" } user -> webapp "Uses" webapp -> api "Makes API calls to" "HTTPS/JSON" api -> database "Reads from and writes to" "SQL/TCP" } views { systemContext softwareSystem "SystemContext" { include * autoLayout } container softwareSystem "Containers" { include * autoLayout } styles { element "Software System" { background #1168bd color #ffffff } element "Container" { background #438dd5 color #ffffff } element "Database" { shape Cylinder } element "Person" { shape Person background #08427b color #ffffff } } } }
2. PlantUML C4 Generation
Generate C4 diagrams using PlantUML C4 library:
@startuml C4_Context !include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Context.puml LAYOUT_WITH_LEGEND() title System Context diagram for Internet Banking System Person(customer, "Personal Banking Customer", "A customer of the bank") System(banking_system, "Internet Banking System", "Allows customers to view accounts and make payments") System_Ext(mail_system, "E-mail System", "Microsoft Exchange") System_Ext(mainframe, "Mainframe Banking System", "Stores core banking data") Rel(customer, banking_system, "Uses") Rel(banking_system, mail_system, "Sends e-mail", "SMTP") Rel(banking_system, mainframe, "Uses") Rel(mail_system, customer, "Sends e-mails to") @enduml
3. Mermaid C4 Generation
Generate C4 diagrams using Mermaid:
C4Context title System Context diagram for Internet Banking System Person(customer, "Personal Banking Customer", "A customer of the bank") System(banking_system, "Internet Banking System", "Allows customers to view accounts and make payments") System_Ext(mail_system, "E-mail System", "Microsoft Exchange") System_Ext(mainframe, "Mainframe Banking System", "Stores core banking data") Rel(customer, banking_system, "Uses") Rel(banking_system, mail_system, "Sends e-mail", "SMTP") Rel(banking_system, mainframe, "Uses")
4. Multi-Level Diagram Generation
Level 1: System Context
// Context diagram configuration const contextDiagram = { level: 'context', scope: 'system', elements: { people: ['Customer', 'Admin'], systems: ['Our System'], externalSystems: ['Payment Provider', 'Email Service'] }, relationships: [ { from: 'Customer', to: 'Our System', description: 'Uses' }, { from: 'Our System', to: 'Payment Provider', description: 'Processes payments' } ] };
Level 2: Container
// Container diagram configuration const containerDiagram = { level: 'container', scope: 'Our System', containers: [ { name: 'Web App', technology: 'React', description: 'Frontend SPA' }, { name: 'API Gateway', technology: 'Kong', description: 'Routes requests' }, { name: 'User Service', technology: 'Node.js', description: 'User management' }, { name: 'Database', technology: 'PostgreSQL', description: 'Stores data' } ] };
Level 3: Component
// Component diagram configuration const componentDiagram = { level: 'component', scope: 'User Service', components: [ { name: 'User Controller', description: 'REST endpoints' }, { name: 'User Service', description: 'Business logic' }, { name: 'User Repository', description: 'Data access' }, { name: 'Auth Middleware', description: 'JWT validation' } ] };
Level 4: Code
// Code diagram configuration (UML class diagram) const codeDiagram = { level: 'code', scope: 'User Repository', classes: [ { name: 'UserRepository', methods: ['findById()', 'save()', 'delete()'], dependencies: ['DatabaseConnection', 'UserMapper'] } ] };
5. Rendering and Export
# Using Structurizr CLI structurizr-cli export -workspace workspace.dsl -format plantuml -output ./diagrams # Using PlantUML java -jar plantuml.jar -tsvg diagram.puml # Using Mermaid CLI mmdc -i diagram.mmd -o diagram.svg -t neutral # Using Kroki (cloud service) curl -X POST https://kroki.io/plantuml/svg --data-binary @diagram.puml -o diagram.svg
MCP Server Integration
This skill can leverage the following MCP servers:
| Server | Description | Installation |
|---|---|---|
| UML-MCP Server | PlantUML, Mermaid, D2 diagram generation | GitHub |
| Mermaid MCP Server | 50+ pre-built templates, 22+ diagram types | mcpservers.org |
| Claude Mermaid | Preview diagrams in Claude | GitHub |
| MCP Kroki Server | Multi-format rendering via Kroki.io | Glama |
Best Practices
C4 Model Guidelines
- Context Diagrams - Show the big picture, focus on users and external systems
- Container Diagrams - Show high-level technology choices
- Component Diagrams - Show internal structure of a container
- Code Diagrams - Use sparingly, only for critical components
Styling Conventions
# C4 Color Scheme colors: person: "#08427b" software_system: "#1168bd" container: "#438dd5" component: "#85bbf0" external_system: "#999999" database: "#438dd5"
Notation
- Solid lines: Synchronous communication
- Dashed lines: Asynchronous communication
- Arrows: Direction of dependency/communication
- Technology annotations: Include in relationship labels
Process Integration
This skill integrates with the following processes:
- Primary diagram generationc4-model-documentation.js
- Architecture visualizationsystem-design-review.js
- Service boundary diagramsmicroservices-decomposition.js
- Infrastructure visualizationcloud-architecture-design.js
Output Format
When generating diagrams, provide structured output:
{ "operation": "generate", "level": "container", "format": "structurizr", "status": "success", "diagrams": [ { "name": "Container-SystemName", "level": "container", "format": "svg", "path": "./docs/diagrams/container.svg" } ], "elements": { "containers": 5, "relationships": 8 }, "artifacts": ["workspace.dsl", "container.svg", "container.png"], "warnings": [], "errors": [] }
Error Handling
Common Errors
| Error | Cause | Resolution |
|---|---|---|
| Malformed Structurizr DSL | Validate syntax with CLI |
| Circular relationship in model | Review and fix relationships |
| Referencing undefined element | Define all elements before use |
| Complex diagram or server issues | Simplify diagram or use local renderer |
Constraints
- Follow C4 model conventions strictly
- Keep diagrams focused on their abstraction level
- Use consistent naming conventions
- Document all external dependencies
- Version control diagram source files