Generate Excalidraw diagrams from natural language descriptions. Outputs .excalidraw JSON files openable in Excalidraw. Use when asked to "create a diagram", "make a flowchart", "visualize a process", "draw a system architecture", "create a mind map", "generate an Excalidraw file", "draw an ER diagram", "create a sequence diagram", or "make a class diagram". Supports flowcharts, relationship diagrams, mind maps, architecture, DFD, swimlane, class, sequence, and ER diagrams. Can use icon libraries (AWS, GCP, etc.) when set up. Do NOT use for code architecture analysis (use the architecture skills), Mermaid diagram rendering (use mermaid-studio), or non-visual documentation (use docs-writer).
npx skills add https://github.com/tech-leads-club/agent-skills --skill excalidraw-studio
Generate Excalidraw-format diagrams from natural language descriptions. Outputs .excalidraw JSON files that can be opened directly in Excalidraw (web, VS Code extension, or Obsidian plugin).
UNDERSTAND → CHOOSE TYPE → EXTRACT → GENERATE → SAVE
Analyze the user's description to determine:
Diagram type:
| User Intent | Diagram Type | Keywords |
| -------------------------- | -------------------- | --------------------------------------------- |
| Process flow, steps | Flowchart | "workflow", "process", "steps" |
| Connections, dependencies | Relationship | "relationship", "connections", "dependencies" |
| Concept hierarchy | Mind Map | "mind map", "concepts", "breakdown" |
| System design | Architecture | "architecture", "system", "components" |
| Data movement | Data Flow (DFD) | "data flow", "data processing" |
| Cross-functional processes | Swimlane | "business process", "swimlane", "actors" |
| Object-oriented design | Class Diagram | "class", "inheritance", "OOP" |
| Interaction sequences | Sequence Diagram | "sequence", "interaction", "messages" |
| Database design | ER Diagram | "database", "entity", "data model" |
Visual mode — decide upfront and apply consistently to all elements:
| Mode | roughness | fontFamily | When to use |
| ---------- | ----------- | ------------ | ---------------------------------------------------- |
| Sketch | 1 | 5 | Default — informal, approachable, Excalidraw-native |
| Clean | 0 | 2 | Executive presentations, formal specs |
| Mixed | zones: 0, shapes: 1 | 5 | Architecture diagrams (structural zones + sketchy shapes) |
Extract the key components based on diagram type. For each type, identify:
For detailed extraction guidelines per diagram type, read references/element-types.md.
CRITICAL: Read references/excalidraw-schema.md before generating your first diagram. It contains the correct element format, text container model, and binding system.
Key rules for generation:
boundElements on the shape and a separate text element with containerId. Never use a label shorthand: [
{
"id": "step-1",
"type": "rectangle",
"x": 100, "y": 100, "width": 200, "height": 80,
"boundElements": [{ "type": "text", "id": "text-step-1" }]
},
{
"id": "text-step-1",
"type": "text",
"x": 130, "y": 128, "width": 140, "height": 24,
"text": "My Step", "originalText": "My Step",
"fontSize": 20, "fontFamily": 5,
"textAlign": "center", "verticalAlign": "middle",
"containerId": "step-1", "lineHeight": 1.25, "roundness": null
}
]
boundElements + separate text element with containerId. Never use a label shorthand on arrows: [
{
"id": "arrow-1",
"type": "arrow",
"x": 100, "y": 150,
"points": [[0, 0], [200, 0]],
"boundElements": [{ "type": "text", "id": "text-arrow-1" }]
},
{
"id": "text-arrow-1",
"type": "text",
"x": 160, "y": 132, "width": 80, "height": 18,
"text": "sends data", "originalText": "sends data",
"fontSize": 14, "fontFamily": 5,
"textAlign": "center", "verticalAlign": "middle",
"containerId": "arrow-1", "lineHeight": 1.25, "roundness": null
}
]
startBinding/endBinding (not start/end). Connected shapes must list the arrow in their boundElements: {
"id": "shape-1",
"boundElements": [
{ "type": "text", "id": "text-shape-1" },
{ "type": "arrow", "id": "arrow-1" }
]
}
{
"id": "arrow-1",
"type": "arrow",
"startBinding": { "elementId": "shape-1", "focus": 0, "gap": 1 },
"endBinding": { "elementId": "shape-2", "focus": 0, "gap": 1 }
}
gridSize: 20). Leave 200-300px horizontal gap, 100-150px vertical gap between elements.id. Use descriptive IDs like "step-1", "decision-valid", "arrow-1-to-2", "text-step-1".| Role | Color | Hex |
|------|-------|-----|
| Primary entities | Light blue | #a5d8ff |
| Process steps | Light green | #b2f2bb |
| Important/Central | Yellow | #ffd43b |
| Warnings/Errors | Light red | #ffc9c9 |
| Secondary | Cyan | #96f2d7 |
| Default stroke | Dark | #1e1e1e |
<descriptive-name>.excalidraw Created: user-workflow.excalidraw
Type: Flowchart
Elements: 7 shapes, 6 arrows, 1 title
Total: 14 elements
To view:
1. Visit https://excalidraw.com → Open → drag and drop the file
2. Or use the Excalidraw VS Code extension
3. Or open in Obsidian with the Excalidraw plugin
Pre-built templates are available in assets/ for quick starting points. Use these when the diagram type matches — they provide correct structure and styling:
| Template | File |
| ---------------- | ------------------------------------------------------ |
| Flowchart | assets/flowchart-template.json |
| Relationship | assets/relationship-template.json |
| Mind Map | assets/mindmap-template.json |
| Data Flow (DFD) | assets/data-flow-diagram-template.json |
| Swimlane | assets/business-flow-swimlane-template.json |
| Class Diagram | assets/class-diagram-template.json |
| Sequence Diagram | assets/sequence-diagram-template.json |
| ER Diagram | assets/er-diagram-template.json |
Read a template when creating that diagram type for the first time. Use its structure as a base, then modify elements to match the user's request.
For professional architecture diagrams with service icons (AWS, GCP, Azure, etc.), icon libraries can be set up. Read references/icon-libraries.md when:
| Diagram Type | Recommended | Maximum |
| --------------------- | ----------- | ------- |
| Flowchart steps | 3-10 | 15 |
| Relationship entities | 3-8 | 12 |
| Mind map branches | 4-6 | 8 |
| Sub-topics per branch | 2-4 | 6 |
If the user's request exceeds maximum, suggest breaking into multiple diagrams:
> "Your request includes 15 components. For clarity, I recommend: (1) High-level architecture diagram with 6 main components, (2) Detailed sub-diagrams for each subsystem. Want me to start with the high-level view?"
fontFamily: 5 (Excalifont) for hand-drawn consistency. Fallback to 1 (Virgil) if 5 is not supported.opacity: 35, strokeStyle: "dashed", roughness: 0) as the first elements in the array to create visual grouping regions. See references/excalidraw-schema.md → Background Zones.label: { text: "..." } shorthand on shapes or arrows — not supported by the Excalidraw parsertext directly on shape elements without containerIdstart/end for arrow bindings — use startBinding/endBinding with elementId/focus/gapboundElements arraysoriginalText, lineHeight, autoResize, or backgroundColor: "transparent" from text elements inside containersangle, strokeStyle, opacity, groupIds, frameId, index, isDeleted, seed, version, versionNonce, updated, link, locked) — elements will not render"files": {} at the top level of the JSONroundness: { "type": 3 } on ellipses — ellipses must use roundness: nulllastCommittedPoint, startArrowhead, endArrowhead on arrowsBefore delivering the diagram, verify:
angle, strokeStyle, opacity, groupIds, frameId, index, isDeleted, link, locked, seed, version, versionNonce, updatedindex values are assigned in order ("a0", "a1", …) with text elements getting higher values than shapes/arrows"files": {}boundElements + separate text element with containerIdcontainerId, originalText, lineHeight: 1.25, autoResize: true, roundness: null, backgroundColor: "transparent"startBinding/endBinding (with elementId, focus, gap) when connecting shapes, plus lastCommittedPoint: null, startArrowhead: null, endArrowhead: "arrow"boundElements arraysroundness: null (not { "type": 3 })| Issue | Solution |
| ----------------------------- | --------------------------------------------------------------------------------------------- |
| Text not showing in shapes | Use boundElements + separate text element with containerId, originalText, lineHeight |
| Text hidden behind arrows | Move text elements to end of elements array (after all arrows) |
| Arrows don't move with shapes | Use startBinding/endBinding with elementId, focus: 0, gap: 1 |
| Shape not moving with arrows | Add the arrow to the shape's boundElements array |
| Elements overlap | Increase spacing between coordinates |
| Text doesn't fit | Increase shape width or reduce font size |
| Too many elements | Break into multiple diagrams |
| Colors look inconsistent | Define color palette upfront, apply consistently |
Assess Kubernetes workloads and cluster configuration for AKS Automatic compatibility. Identifies incompatibilities, generates fixes, and guides migration from AKS Standard to AKS Automatic. WHEN: migrate to AKS Automatic, check AKS Automatic readiness, validate manifests for Automatic, assess cluster for Automatic compatibility, fix deployment for Automatic compatibility, identify AKS Automatic migration blockers, is my cluster ready for AKS Automatic.
Discovers available Azure OpenAI model capacity across regions and projects. Analyzes quota limits, compares availability, and recommends optimal deployment locations based on capacity requirements. USE FOR: find capacity, check quota, where can I deploy, capacity discovery, best region for capacity, multi-project capacity search, quota analysis, model availability, region comparison, check TPM availability. DO NOT USE FOR: actual deployment (hand off to preset or customize after discovery), quota increase requests (direct user to Azure Portal), listing existing deployments.
Interactive guided deployment flow for Azure OpenAI models with full customization control. Step-by-step selection of model version, SKU (GlobalStandard/Standard/ProvisionedManaged), capacity, RAI policy (content filter), and advanced options (dynamic quota, priority processing, spillover). USE FOR: custom deployment, customize model deployment, choose version, select SKU, set capacity, configure content filter, RAI policy, deployment options, detailed deployment, advanced deployment, PTU deployment, provisioned throughput. DO NOT USE FOR: quick deployment to optimal region (use preset).
Unified Azure OpenAI model deployment skill with intelligent intent-based routing. Handles quick preset deployments, fully customized deployments (version/SKU/capacity/RAI policy), and capacity discovery across regions and projects. USE FOR: deploy model, deploy gpt, create deployment, model deployment, deploy openai model, set up model, provision model, find capacity, check model availability, where can I deploy, best region for model, capacity analysis. DO NOT USE FOR: listing existing deployments (use foundry_models_deployments_list MCP tool), deleting deployments, agent creation (use agent/create), project creation (use project/create).
Intelligently deploys Azure OpenAI models to optimal regions by analyzing capacity across all available regions. Automatically checks current region first and shows alternatives if needed. USE FOR: quick deployment, optimal region, best region, automatic region selection, fast setup, multi-region capacity check, high availability deployment, deploy to best location. DO NOT USE FOR: custom SKU selection (use customize), specific version selection (use customize), custom capacity configuration (use customize), PTU deployments (use customize).
This skill should be used when working with LaminDB, an open-source data framework for biology that makes data queryable, traceable, reproducible, and FAIR. Use when managing biological datasets (scRNA-seq, spatial, flow cytometry, etc.), tracking computational workflows, curating and validating data with biological ontologies, building data lakehouses, or ensuring data lineage and reproducibility in biological research. Covers data management, annotation, ontologies (genes, cell types, diseases, tissues), schema validation, integrations with workflow managers (Nextflow, Snakemake) and MLOps platforms (W&B, MLflow), and deployment strategies.
Latch platform for bioinformatics workflows. Build pipelines with Latch SDK, @workflow/@task decorators, deploy serverless workflows, LatchFile/LatchDir, Nextflow/Snakemake integration.
Run Python code in the cloud with serverless containers, GPUs, and autoscaling. Use when deploying ML models, running batch processing jobs, scheduling compute-intensive tasks, or serving APIs that require GPU acceleration or dynamic scaling.
Take tech-leads-club/excalidraw-studio 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.