Azure Diagram Generator
Generates architecture diagrams for Azure infrastructure from ARM templates, Azure CLI output, or natural language descriptions.
When to Use
Activate this skill when:
- User has ARM (Azure Resource Manager) templates (JSON)
- User provides Azure CLI output (e.g.,
az vm list)
- User wants to visualize Azure resources
- User mentions Azure services (Virtual Machines, Storage Accounts, VNets, etc.)
- User asks to "diagram my Azure infrastructure"
How It Works
This skill generates Azure-specific diagrams by parsing Azure resources and calling the Eraser API directly:
- Parse Azure Resources: Extract resources from ARM templates, CLI output, or descriptions
- Map Azure Relationships: Identify Resource Groups, VNets, subnets, and service connections
- Generate Eraser DSL: Create Eraser DSL code from Azure resources
- Call Eraser API: Use
/api/render/elements with diagramType: "cloud-architecture-diagram"
Instructions
When the user provides Azure infrastructure information:
Parse the Source
- ARM Templates: Extract
resources array, identify types (Microsoft.Compute/virtualMachines, etc.)
- CLI Output: Parse JSON output from
az commands
- Description: Identify Azure service names and relationships
Identify Azure Components
- Networking: Virtual Networks (VNets), Subnets, Network Security Groups, Load Balancers
- Compute: Virtual Machines, Virtual Machine Scale Sets, App Services, Functions
- Storage: Storage Accounts, Blob Storage, File Shares
- Databases: SQL Databases, Cosmos DB, Redis Cache
- Security: Network Security Groups, Azure AD, Key Vault
- Load Balancing: Application Gateway, Load Balancer, Traffic Manager
- Other: Service Bus, Event Hubs, API Management
Map Relationships
- VMs in subnets
- Subnets in VNets
- VNets in Resource Groups
- Storage accounts accessed by VMs
- Databases accessed by applications
- Network Security Groups attached to subnets
Generate Eraser DSL Convert Azure resources to Eraser DSL:
- CRITICAL: Label Formatting Rules
- Labels MUST be on a single line - NEVER use newlines inside label attributes
- Keep labels simple and readable - prefer separate labels over concatenating too much metadata
- Format DSL with proper line breaks (one node/group per line, but labels stay on single lines)
- If including metadata like CIDR blocks or instance types, include them in the same quoted label string:
[label: "VNet 10.0.0.0/16"]
Example:
myVNet [label: "VNet 10.0.0.0/16"] {
subnet1 [label: "Subnet 1"] {
myVM [icon: azure-vm, label: "Virtual Machine"]
gateway [icon: azure-app-gateway]
}
subnet2 [label: "Subnet 2"] {
database [icon: azure-sql]
}
}
storage [icon: azure-storage]
myVNet -> myVM
myVM -> database
Make the HTTP Request
IMPORTANT: You MUST execute this curl command after generating the DSL. Never stop after generating DSL without making the API call.
CRITICAL: In the X-Skill-Source header below, you MUST replace the value with your AI agent name:
- If you are Claude (Anthropic), use:
claude
- If you are running in Cursor, use:
cursor
- If you are ChatGPT (OpenAI), use:
chatgpt
- If you are Gemini (Google), use:
gemini
- Otherwise, use your model/agent name in lowercase
curl -X POST https://app.eraser.io/api/render/elements \
-H "Content-Type: application/json" \
-H "X-Skill-Source: eraser-skill" \
-H "Authorization: Bearer ${ERASER_API_KEY}" \
-d '{
"elements": [{
"type": "diagram",
"id": "diagram-1",
"code": "<your generated DSL>",
"diagramType": "cloud-architecture-diagram"
}],
"scale": 2,
"theme": "${ERASER_THEME:-dark}",
"background": true
}'
Track Sources During Analysis
As you analyze files and resources to generate the diagram, track:
- Internal files: Record each file path you read and what information was extracted (e.g.,
infra/main.bicep - VNet and subnet definitions)
- External references: Note any documentation, examples, or URLs consulted (e.g., Azure architecture best practices documentation)
- Annotations: For each source, note what it contributed to the diagram
Handle the Response
CRITICAL: Minimal Output Format
Your response MUST always include these elements with clear headers:
Diagram Preview: Display with a header
## Diagram

Use the ACTUAL imageUrl from the API response.
Editor Link: Display with a header
## Open in Eraser
[Edit this diagram in the Eraser editor]({createEraserFileUrl})
Use the ACTUAL URL from the API response.
Sources section: Brief list of files/resources analyzed (if applicable)
## Sources
- `path/to/file` - What was extracted
Diagram Code section: The Eraser DSL in a code block with eraser language tag
## Diagram Code
```eraser
{DSL code here}
Learn More link: You can learn more about Eraser at https://docs.eraser.io/docs/using-ai-agent-integrations
Additional content rules:
- If the user ONLY asked for a diagram, include NOTHING beyond the 5 elements above
- If the user explicitly asked for more (e.g., "explain the architecture", "suggest improvements"), you may include that additional content
- Never add unrequested sections like Overview, Security Considerations, Testing, etc.
The default output should be SHORT. The diagram image speaks for itself.
Azure-Specific Tips
- Resource Groups: Show Resource Groups as logical containers
- VNets as Containers: Always show VNets containing subnets and resources
- Network Security Groups: Include NSG rules and attachments
- Subscriptions: Note subscription context if provided
- Data Flow: Show traffic flow (Internet → Application Gateway → VM → SQL Database)
- Use Azure Icons: Request Azure-specific styling in the description
Example: ARM Template with Multiple Azure Services
User Input
{
"resources": [
{
"type": "Microsoft.Resources/resourceGroups",
"name": "rg-main"
},
{
"type": "Microsoft.Network/virtualNetworks",
"name": "myVNet",
"properties": {
"addressSpace": {
"addressPrefixes": ["10.0.0.0/16"]
},
"subnets": [
{
"name": "subnet1",
"properties": {
"addressPrefix": "10.0.1.0/24"
}
}
]
}
},
{
"type": "Microsoft.Compute/virtualMachines",
"name": "myVM",
"properties": {
"hardwareProfile": {
"vmSize": "Standard_B1s"
}
}
},
{
"type": "Microsoft.Web/sites",
"name": "myAppService",
"properties": {
"serverFarmId": "/subscriptions/.../serverfarms/myPlan"
}
},
{
"type": "Microsoft.Storage/storageAccounts",
"name": "mystorageaccount"
},
{
"type": "Microsoft.Sql/servers",
"name": "mysqlserver",
"properties": {
"administratorLogin": "admin"
}
}
]
}
Expected Behavior
Parses ARM template:
- Resource Group: rg-main (container)
- Networking: VNet with subnet
- Compute: VM, App Service
- Storage: Storage Account
- Database: SQL Server
Generates DSL showing Azure service diversity:
resource-group [label: "Resource Group rg-main"] {
myVNet [label: "VNet 10.0.0.0/16"] {
subnet1 [label: "Subnet 1 10.0.1.0/24"] {
myVM [icon: azure-vm, label: "VM Standard_B1s"]
}
}
myAppService [icon: azure-app-service, label: "App Service"]
mystorageaccount [icon: azure-storage, label: "Storage Account"]
mysqlserver [icon: azure-sql, label: "SQL Server"]
}
myAppService -> mystorageaccount
myVM -> mysqlserver
Important: All label text must be on a single line within quotes. Azure-specific: Show Resource Groups as containers, include App Services, Storage Accounts, and SQL databases with proper Azure icons.
Calls /api/render/elements with diagramType: "cloud-architecture-diagram"
Example: Azure CLI Output
User Input
User runs: az vm list --output json
Provides JSON output
Expected Behavior
Parses JSON to extract:
- VM names, sizes, states
- Resource groups
- Network interfaces
- Storage accounts
Formats and calls API
Converted and distributed by TomeVault — claim your Tome and manage your conversions.
1---2name: azure-diagrams3description: Visualizes Azure infrastructure from ARM templates, Azure CLI, or descriptions. Use when user has Azure resources to diagram. Use when this capability is needed.4---56# Azure Diagram Generator78Generates architecture diagrams for Azure infrastructure from ARM templates, Azure CLI output, or natural language descriptions.910## When to Use1112Activate this skill when:1314- User has ARM (Azure Resource Manager) templates (JSON)15- User provides Azure CLI output (e.g., `az vm list`)16- User wants to visualize Azure resources17- User mentions Azure services (Virtual Machines, Storage Accounts, VNets, etc.)18- User asks to "diagram my Azure infrastructure"1920## How It Works2122This skill generates Azure-specific diagrams by parsing Azure resources and calling the Eraser API directly:23241. **Parse Azure Resources**: Extract resources from ARM templates, CLI output, or descriptions252. **Map Azure Relationships**: Identify Resource Groups, VNets, subnets, and service connections263. **Generate Eraser DSL**: Create Eraser DSL code from Azure resources274. **Call Eraser API**: Use `/api/render/elements` with `diagramType: "cloud-architecture-diagram"`2829## Instructions3031When the user provides Azure infrastructure information:32331. **Parse the Source**3435 - **ARM Templates**: Extract `resources` array, identify types (Microsoft.Compute/virtualMachines, etc.)36 - **CLI Output**: Parse JSON output from `az` commands37 - **Description**: Identify Azure service names and relationships38392. **Identify Azure Components**4041 - **Networking**: Virtual Networks (VNets), Subnets, Network Security Groups, Load Balancers42 - **Compute**: Virtual Machines, Virtual Machine Scale Sets, App Services, Functions43 - **Storage**: Storage Accounts, Blob Storage, File Shares44 - **Databases**: SQL Databases, Cosmos DB, Redis Cache45 - **Security**: Network Security Groups, Azure AD, Key Vault46 - **Load Balancing**: Application Gateway, Load Balancer, Traffic Manager47 - **Other**: Service Bus, Event Hubs, API Management48493. **Map Relationships**5051 - VMs in subnets52 - Subnets in VNets53 - VNets in Resource Groups54 - Storage accounts accessed by VMs55 - Databases accessed by applications56 - Network Security Groups attached to subnets57584. **Generate Eraser DSL** Convert Azure resources to Eraser DSL:5960 - **CRITICAL: Label Formatting Rules**61 - Labels MUST be on a single line - NEVER use newlines inside label attributes62 - Keep labels simple and readable - prefer separate labels over concatenating too much metadata63 - Format DSL with proper line breaks (one node/group per line, but labels stay on single lines)64 - If including metadata like CIDR blocks or instance types, include them in the same quoted label string: `[label: "VNet 10.0.0.0/16"]`6566 Example:6768 ```69 myVNet [label: "VNet 10.0.0.0/16"] {70 subnet1 [label: "Subnet 1"] {71 myVM [icon: azure-vm, label: "Virtual Machine"]72 gateway [icon: azure-app-gateway]73 }74 subnet2 [label: "Subnet 2"] {75 database [icon: azure-sql]76 }77 }78 storage [icon: azure-storage]79 myVNet -> myVM80 myVM -> database81 ```82835. **Make the HTTP Request**8485 **IMPORTANT**: You MUST execute this curl command after generating the DSL. Never stop after generating DSL without making the API call.8687 **CRITICAL**: In the `X-Skill-Source` header below, you MUST replace the value with your AI agent name:88 - If you are Claude (Anthropic), use: `claude`89 - If you are running in Cursor, use: `cursor`90 - If you are ChatGPT (OpenAI), use: `chatgpt`91 - If you are Gemini (Google), use: `gemini`92 - Otherwise, use your model/agent name in lowercase9394 ```bash95 curl -X POST https://app.eraser.io/api/render/elements \96 -H "Content-Type: application/json" \97 -H "X-Skill-Source: eraser-skill" \98 -H "Authorization: Bearer ${ERASER_API_KEY}" \99 -d '{100 "elements": [{101 "type": "diagram",102 "id": "diagram-1",103 "code": "<your generated DSL>",104 "diagramType": "cloud-architecture-diagram"105 }],106 "scale": 2,107 "theme": "${ERASER_THEME:-dark}",108 "background": true109 }'110 ```1111126. **Track Sources During Analysis**113114 As you analyze files and resources to generate the diagram, track:115116 - **Internal files**: Record each file path you read and what information was extracted (e.g., `infra/main.bicep` - VNet and subnet definitions)117 - **External references**: Note any documentation, examples, or URLs consulted (e.g., Azure architecture best practices documentation)118 - **Annotations**: For each source, note what it contributed to the diagram1191207. **Handle the Response**121122 **CRITICAL: Minimal Output Format**123124 Your response MUST always include these elements with clear headers:125126 1. **Diagram Preview**: Display with a header127 ```128 ## Diagram129 130 ```131 Use the ACTUAL `imageUrl` from the API response.132133 2. **Editor Link**: Display with a header134 ```135 ## Open in Eraser136 [Edit this diagram in the Eraser editor]({createEraserFileUrl})137 ```138 Use the ACTUAL URL from the API response.139140 3. **Sources section**: Brief list of files/resources analyzed (if applicable)141 ```142 ## Sources143 - `path/to/file` - What was extracted144 ```145146 4. **Diagram Code section**: The Eraser DSL in a code block with `eraser` language tag147 ```148 ## Diagram Code149 ```eraser150 {DSL code here}151 ```152 ```153154 5. **Learn More link**: `You can learn more about Eraser at https://docs.eraser.io/docs/using-ai-agent-integrations`155156 **Additional content rules:**157 - If the user ONLY asked for a diagram, include NOTHING beyond the 5 elements above158 - If the user explicitly asked for more (e.g., "explain the architecture", "suggest improvements"), you may include that additional content159 - Never add unrequested sections like Overview, Security Considerations, Testing, etc.160161 The default output should be SHORT. The diagram image speaks for itself.162163## Azure-Specific Tips164165- **Resource Groups**: Show Resource Groups as logical containers166- **VNets as Containers**: Always show VNets containing subnets and resources167- **Network Security Groups**: Include NSG rules and attachments168- **Subscriptions**: Note subscription context if provided169- **Data Flow**: Show traffic flow (Internet → Application Gateway → VM → SQL Database)170- **Use Azure Icons**: Request Azure-specific styling in the description171172## Example: ARM Template with Multiple Azure Services173174### User Input175176```json177{178 "resources": [179 {180 "type": "Microsoft.Resources/resourceGroups",181 "name": "rg-main"182 },183 {184 "type": "Microsoft.Network/virtualNetworks",185 "name": "myVNet",186 "properties": {187 "addressSpace": {188 "addressPrefixes": ["10.0.0.0/16"]189 },190 "subnets": [191 {192 "name": "subnet1",193 "properties": {194 "addressPrefix": "10.0.1.0/24"195 }196 }197 ]198 }199 },200 {201 "type": "Microsoft.Compute/virtualMachines",202 "name": "myVM",203 "properties": {204 "hardwareProfile": {205 "vmSize": "Standard_B1s"206 }207 }208 },209 {210 "type": "Microsoft.Web/sites",211 "name": "myAppService",212 "properties": {213 "serverFarmId": "/subscriptions/.../serverfarms/myPlan"214 }215 },216 {217 "type": "Microsoft.Storage/storageAccounts",218 "name": "mystorageaccount"219 },220 {221 "type": "Microsoft.Sql/servers",222 "name": "mysqlserver",223 "properties": {224 "administratorLogin": "admin"225 }226 }227 ]228}229```230231### Expected Behavior2322331. Parses ARM template:234235 - **Resource Group**: rg-main (container)236 - **Networking**: VNet with subnet237 - **Compute**: VM, App Service238 - **Storage**: Storage Account239 - **Database**: SQL Server2402412. Generates DSL showing Azure service diversity:242243 ```244 resource-group [label: "Resource Group rg-main"] {245 myVNet [label: "VNet 10.0.0.0/16"] {246 subnet1 [label: "Subnet 1 10.0.1.0/24"] {247 myVM [icon: azure-vm, label: "VM Standard_B1s"]248 }249 }250 myAppService [icon: azure-app-service, label: "App Service"]251 mystorageaccount [icon: azure-storage, label: "Storage Account"]252 mysqlserver [icon: azure-sql, label: "SQL Server"]253 }254255 myAppService -> mystorageaccount256 myVM -> mysqlserver257 ```258259 **Important**: All label text must be on a single line within quotes. Azure-specific: Show Resource Groups as containers, include App Services, Storage Accounts, and SQL databases with proper Azure icons.2602613. Calls `/api/render/elements` with `diagramType: "cloud-architecture-diagram"`262263## Example: Azure CLI Output264265### User Input266267```268User runs: az vm list --output json269Provides JSON output270```271272### Expected Behavior2732741. Parses JSON to extract:275276 - VM names, sizes, states277 - Resource groups278 - Network interfaces279 - Storage accounts2802812. Formats and calls API282283---284> Converted and distributed by [TomeVault](https://tomevault.io/claim/eraserlabs) — claim your Tome and manage your conversions.285<!-- tomevault:4.0:skill_md:2026-04-11 -->