Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Generates DrawIO XML diagrams for Amazon Web Services architectures from text descriptions or images. Analyzes existing .drawio files to extract AWS components. Use for AWS architecture diagrams, cloud infrastructure documentation, or when converting AWS diagram images to editable DrawIO format.
.claude/skills/a5c-ai-generating-aws-diagrams/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-07 | ✗→✓ | ▲ Improved | 55% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 14% | 0% |
| case-13 | ✗→✓ | ▲ Improved | 31% | 0% |
| case-18 | ✗→✓ | ▲ Improved | 55% | 0% |
| case-22 | ✗→✓ | ▲ Improved | 117% | 0% |
Generates professional DrawIO XML diagrams for Amazon Web Services architectures.
There are two icon types. Use service icons when labeling the AWS service itself, and instance icons when representing a specific resource.
Service icon (colored square background) — for labeling the service:
shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.{shape_name}Instance icon (bare icon, no background) — for specific resources:
shape=mxgraph.aws4.{shape_name};fillColor={category_color}> CRITICAL: Always keep fillColor set to the category color. Without it the icon renders white/invisible. The only difference from a service icon is the absence of the resourceIcon background square — never remove fillColor when using an instance icon.
| Scenario | Icon Type | Label Example | |----------|-----------|---------------| | The AWS service itself | Service (with background) | "AWS Lambda", "Amazon RDS" | | A specific resource/instance | Instance (no background) | "Order Processor", "Users Table" | | Multiple instances of same service | Instance (no background) | "ECS Task 1", "ECS Task 2" |
Multi-word AWS shape names use UNDERSCORES in style properties!
step_functions (correct)api_gateway (correct)kinesis_data_streams (correct)step functions (WRONG - will not render)api gateway (WRONG - will not render)The aws4.xml stencil defines names with spaces, but DrawIO's style parser requires underscores.
Always look up exact names in assets/aws-icons.json before using.
| Service | Service Icon (with background) | Instance Icon (no background) | |---------|-------------------------------|-------------------------------| | Lambda | shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.lambda | shape=mxgraph.aws4.lambda | | Amazon S3 | shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.s3 | shape=mxgraph.aws4.s3 | | Amazon EC2 | shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.ec2 | shape=mxgraph.aws4.ec2 | | DynamoDB | shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.dynamodb | shape=mxgraph.aws4.dynamodb | | API Gateway | shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.api_gateway | shape=mxgraph.aws4.api_gateway | | Amazon SQS | shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.sqs | shape=mxgraph.aws4.sqs | | Amazon SNS | shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.sns | shape=mxgraph.aws4.sns | | Step Functions | shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.step_functions | shape=mxgraph.aws4.step_functions | | Amazon ECS | shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.ecs | shape=mxgraph.aws4.ecs | | Amazon RDS | shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.rds | shape=mxgraph.aws4.rds |
| Container | Use Case | |-----------|----------| | aws_cloud | Top-level AWS Cloud boundary | | aws_region | Region grouping | | aws_availability_zone | AZ grouping | | aws_vpc | VPC boundary | | aws_public_subnet | Public subnet | | aws_private_subnet | Private subnet | | aws_security_group | Security group boundary | | aws_auto_scaling_group | Auto scaling group | | aws_account | AWS Account boundary | | aws_corporate_datacenter | Corporate datacenter | | aws_generic_group | Generic grouping | | aws_step_functions_workflow | Step Functions workflow | | aws_elastic_beanstalk_container | Elastic Beanstalk app |
Use this workflow to extract and document all components from an existing DrawIO file.
.drawio XML file<mxCell> elementsvertex="1"edge="1"parent attribute.drawio fileGenerate a Markdown report with:
markdown# DrawIO Analysis Report ## Summary - Total shapes: X - Total connections: Y - Containers: Z ## Shape Inventory | ID | Label | Type | Position | Parent | |----|-------|------|----------|--------| | abc | Lambda | mxgraph.aws4.lambda | (100,200) | vpc1 | ## Connection Matrix | From | To | Label | Type | |------|-----|-------|------| | Lambda | DynamoDB | API | solid | ## Container Hierarchy - VPC (vpc1) - Lambda (lambda1) - Lambda (lambda2) - DynamoDB (db1) ## Style Analysis ### Unique Shapes Found - mxgraph.aws4.lambda (4 instances) - mxgraph.aws4.dynamodb (2 instances)
Use this workflow to recreate an AWS architecture diagram from an image.
assets/aws-icons.json by visual signature or labelassets/aws-containers.jsonstep_functions, not step functions)assets/templates/drawio-base.xml.drawio XML filemarkdown# Conversion Confidence Report ## Overall Confidence: 85% ## Identified Components ### High Confidence (>90%) - Lambda x4 - Clear icon match - DynamoDB x2 - Clear icon match - VPC container - Purple border, correct label ### Medium Confidence (70-90%) - Step Functions - Icon similar, label confirms (using `step_functions` with underscores) ### Low Confidence (<70%) - Unknown icon at position (300, 400) - Mapped to generic service ## Connection Accuracy - 12/14 connections clearly visible - 2 connections inferred from layout ## Notes - VPC subnet grouping identified - Bidirectional arrows on 3 connections
Use this workflow to generate a new AWS diagram from text specifications.
assets/aws-icons.jsonassets/aws-containers.jsonassets/templates/drawio-base.xml as starting point.drawio XML fileCreate an AWS serverless architecture with:
- VPC container
- API Gateway triggering Lambda
- Lambda connecting to DynamoDB and S3
- Step Functions orchestrating the workflowxml<mxfile ...> <diagram name="AWS Architecture"> <mxGraphModel ...> <root> <mxCell id="0" /> <mxCell id="1" parent="0" /> <!-- VPC Container --> <mxCell id="vpc" value="VPC" style="..." vertex="1" parent="1"> <mxGeometry x="50" y="50" width="700" height="400" /> </mxCell> <!-- API Gateway --> <mxCell id="api_gateway" value="API Gateway" style="...resIcon=mxgraph.aws4.api_gateway" vertex="1" parent="vpc"> <mxGeometry x="50" y="100" width="64" height="64" /> </mxCell> <!-- More shapes... --> <!-- Connections --> <mxCell id="conn_api_gateway_to_lambda" edge="1" source="api_gateway" target="lambda" style="..." /> </root> </mxGraphModel> </diagram> </mxfile>
assets/aws-icons.jsonservice_name or recognition_keywordsdrawio_shape.full_style for complete stylingshape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.{shape_name}Service Coverage:
references/ICON-COMPATIBILITY.md for the list. For these, use a visually similar validated service icon or a generic shape.#232F3ELook up the exact category, fillColor, and full_style for any service in assets/aws-icons.json. All 24 categories with colors are listed there.
See references/DIAGRAM-BEST-PRACTICES.md for full guidelines. Key rules:
labelBackgroundColor=#FFFFFF;fontSize=10;fontColor=#232F3E;1 for most connections, 2 only for primary data paths (max 1–3 per diagram)For complete XML examples and detailed structure, see references/xml-examples.md.
The key building blocks:
<mxCell id="api_gateway" value="Label" style="..." vertex="1" parent="1"> with <mxGeometry><mxCell id="conn_api_gateway_to_lambda" edge="1" source="api_gateway" target="lambda" style="...">container=1 in style; children set parent to container ID<mxCell id="0"/> and <mxCell id="1" parent="0"/>api_gateway, not apigw; step_functions, not stepfnlambda_api_handler, lambda_processor, not lambda1, lambda2conn_{source}_to_{target} using full IDsSee references/DIAGRAM-BEST-PRACTICES.md for complete ID naming convention.
For XML parsing and extraction techniques, see references/xml-parser-guide.md.
step_functions, NOT step functionsshape=mxgraph.aws4.resourceIcon AND resIcon=mxgraph.aws4.{name} are presentshape=mxgraph.aws4.{name} is used directly (no resourceIcon wrapper)productIcon/prIcon — always use resourceIcon/resIcon for service iconsvertex="1" is present<mxGeometry> has valid width/height (64x64)See the Quick Reference section for the full definition of each icon type. In summary:
shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.{name} — labels the AWS service itselfshape=mxgraph.aws4.{name};fillColor={category_color} — represents a specific resource; fillColor is required or the icon renders whiteedge="1" is setparent attribute to container's IDcontainer=1 in stylevalue attribute is setfontSize is reasonable (12-14 for AWS)fontColor=#232F3E is setid="0" and id="1" root cells exist
 for newlines)After generating a .drawio file, you can validate and preview it:
python scripts/validate-drawio.py output.drawio --verbosepython scripts/analyze-existing.py output.drawio --markdownpython scripts/validate-aws-icons.py./scripts/export-diagram.sh output.drawio png./scripts/open-diagram.sh output.drawioRequires DrawIO Desktop. Install on macOS: brew install drawio
| File | Purpose | |------|---------| | SKILL.md | This file - main instructions | | Assets | | | assets/aws-icons.json | AWS service icon database (264 services) | | assets/aws-containers.json | AWS container/group and connection styles | | assets/templates/drawio-base.xml | Base XML template | | assets/templates/node-template.xml | Shape insertion template | | assets/templates/connection-template.xml | Connection template | | References | | | references/ICON-COMPATIBILITY.md | Icon validation reference (255/264 validated) | | references/DIAGRAM-BEST-PRACTICES.md | Visual design and layout guidelines | | references/xml-parser-guide.md | Detailed XML parsing reference | | references/xml-examples.md | Copy-paste XML examples | | references/coordinate-system.md | Positioning and layout guide | | references/style-guide.md | Style string reference | | Scripts | | | scripts/validate-drawio.py | Validate .drawio XML structure | | scripts/validate-aws-icons.py | Validate AWS icon compatibility | | scripts/fix-aws-icons.py | Auto-fix icon shape names | | scripts/fix-drawio-icons.py | Bulk fix icon references in .drawio files | | scripts/extract-shape-names.py | Extract available shapes from DrawIO stencil | | scripts/analyze-existing.py | Extract shapes/connections from .drawio files | | scripts/export-diagram.sh | Export to PNG/PDF via DrawIO Desktop CLI | | scripts/open-diagram.sh | Open .drawio file in DrawIO Desktop |
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 4,691 | 11,399 | +143% | 1 | 1 | 0% | 276 | 4,871 | +1665% | 0 | 0 | — |
case-02 | fail→fail | 36,128 | 8,347 | -77% | 1 | 1 | 0% | 8,260 | 4,890 | -41% | 0 | 0 | — |
case-03 | fail→fail | 48,572 | 46,183 | -5% | 1 | 1 | 0% | 8,261 | 12,745 | +54% | 0 | 0 | — |
case-04 | pass→pass | 21,963 | 36,415 | +66% | 1 | 1 | 0% | 4,965 | 12,707 | +156% | 0 | 0 | — |
case-05 | pass→pass | 18,594 | 34,912 | +88% | 1 | 1 | 0% | 4,592 | 12,703 | +177% | 0 | 0 | — |
case-06 | pass→pass | 13,986 | 7,848 | -44% | 1 | 1 | 0% | 2,591 | 5,948 | +130% | 0 | 0 | — |
case-07 | fail→pass | 44,730 | 45,554 | +2% | 1 | 1 | 0% | 8,219 | 12,703 | +55% | 0 | 0 | — |
case-08 | fail→fail | 37,973 | 36,147 | -5% | 1 | 1 | 0% | 8,231 | 12,715 | +54% | 0 | 0 | — |
case-09 | pass→pass | 21,039 | 12,495 | -41% | 1 | 1 | 0% | 3,617 | 7,131 | +97% | 0 | 0 | — |
case-10 | fail→fail | 36,496 | 35,899 | -2% | 1 | 1 | 0% | 8,217 | 12,701 | +55% | 0 | 0 | — |
case-11 | pass→pass | 27,431 | 16,111 | -41% | 1 | 1 | 0% | 6,287 | 8,194 | +30% | 0 | 0 | — |
case-12 | fail→pass | 33,522 | 11,954 | -64% | 1 | 1 | 0% | 6,021 | 6,864 | +14% | 0 | 0 | — |
case-13 | fail→pass | 45,634 | 34,386 | -25% | 1 | 1 | 0% | 8,228 | 10,763 | +31% | 0 | 0 | — |
case-14 | pass→pass | 23,562 | 18,261 | -22% | 1 | 1 | 0% | 3,817 | 7,636 | +100% | 0 | 0 | — |
case-15 | fail→fail | 23,963 | 7,039 | -71% | 1 | 1 | 0% | 3,910 | 4,893 | +25% | 0 | 0 | — |
case-16 | fail→fail | 35,489 | 11,129 | -69% | 1 | 1 | 0% | 8,221 | 5,593 | -32% | 0 | 0 | — |
case-17 | fail→fail | 15,865 | 14,852 | -6% | 1 | 1 | 0% | 3,725 | 8,000 | +115% | 0 | 0 | — |
case-18 | fail→pass | 34,972 | 32,095 | -8% | 1 | 1 | 0% | 8,213 | 12,697 | +55% | 0 | 0 | — |
case-19 | pass→pass | 19,193 | 14,324 | -25% | 1 | 1 | 0% | 4,025 | 7,674 | +91% | 0 | 0 | — |
case-20 | pass→pass | 10,892 | 9,405 | -14% | 1 | 1 | 0% | 2,149 | 6,459 | +201% | 0 | 0 | — |
case-21 | pass→pass | 19,992 | 12,124 | -39% | 1 | 1 | 0% | 4,037 | 7,096 | +76% | 0 | 0 | — |
case-22 | fail→pass | 16,863 | 8,322 | -51% | 1 | 1 | 0% | 2,840 | 6,164 | +117% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 18 counted toward the lift figure. The other 4 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +23 percentage points is the difference between those two pass rates over the 18 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.