Get the FREE Ultimate OpenClaw Setup Guide →

yaml-authoring

npx machina-cli add skill aiskillstore/marketplace/yaml-authoring --openclaw
Files (1)
SKILL.md
6.0 KB

YAML Diagram Authoring

Basic Structure

version: 1
docId: unique-document-id
title: "My Architecture Diagram"  # optional

nodes:
  - id: unique-id
    provider: aws  # Provider name (e.g., aws, gcp, azure)
    kind: compute.lambda  # Service category.type
    label: "Display Name"  # optional
    parent: container-id  # optional, for nesting in VPC/Subnet
    layout:  # optional for child nodes (auto-positioned)
      x: 100  # optional for child nodes
      y: 200  # optional for child nodes
      w: 200  # required for containers (VPC/Subnet)
      h: 150  # required for containers

edges:
  - id: edge-1
    from: source-node-id
    to: target-node-id
    label: "optional label"  # optional

Auto-Layout

Child nodes (with parent) can omit layout entirely for automatic positioning:

nodes:
  - id: vpc
    provider: aws
    kind: network.vpc
    layout: { x: 0, y: 0, w: 800, h: 600 }  # Container: explicit layout

  - id: ec2_1
    provider: aws
    kind: compute.ec2
    parent: vpc
    # No layout - auto-positioned at (40, 40)

  - id: ec2_2
    provider: aws
    kind: compute.ec2
    parent: vpc
    # No layout - auto-positioned at (200, 40)

Auto-layout rules:

  • 3 columns per row
  • 60px padding, 160px horizontal spacing, 140px vertical spacing
  • Explicit x/y overrides auto-positioning
  • Cannot specify only x or only y (both or neither)

Node Kind Categories

The kind field uses a hierarchical format: category.type or category.subcategory.type

Container Types (require w/h in layout)

KindDescription
network.vpcVirtual Private Cloud
network.subnetSubnet within VPC

Resource Types

CategoryKind Examples
computecompute.lambda, compute.ec2, compute.ecs, compute.eks
compute.lbcompute.lb.alb, compute.lb.nlb, compute.lb.elb
databasedatabase.dynamodb, database.rds, database.aurora
storagestorage.s3, storage.efs, storage.ebs
integrationintegration.apiGateway, integration.sns, integration.sqs, integration.eventBridge
securitysecurity.iam, security.cognito, security.waf
analyticsanalytics.kinesis, analytics.athena, analytics.glue

Examples

Simple Lambda + S3

version: 1
docId: lambda-s3-example
title: "Lambda S3 Integration"

nodes:
  - id: fn
    provider: aws
    kind: compute.lambda
    label: "Process Upload"
    layout:
      x: 100
      y: 100
  - id: bucket
    provider: aws
    kind: storage.s3
    label: "uploads-bucket"
    layout:
      x: 300
      y: 100

edges:
  - id: fn-to-bucket
    from: fn
    to: bucket

API with Database

version: 1
docId: api-db-example
title: "REST API Architecture"

nodes:
  - id: api
    provider: aws
    kind: integration.apiGateway
    label: "REST API"
    layout:
      x: 100
      y: 200
  - id: handler
    provider: aws
    kind: compute.lambda
    label: "Handler"
    layout:
      x: 300
      y: 200
  - id: db
    provider: aws
    kind: database.dynamodb
    label: "Users Table"
    layout:
      x: 500
      y: 200

edges:
  - id: api-to-handler
    from: api
    to: handler
    label: "invoke"
  - id: handler-to-db
    from: handler
    to: db
    label: "read/write"

VPC with Nested Resources

version: 1
docId: vpc-example
title: "VPC Architecture"

nodes:
  - id: vpc
    provider: aws
    kind: network.vpc
    label: "Production VPC"
    layout:
      x: 50
      y: 50
      w: 600
      h: 400
  - id: public-subnet
    provider: aws
    kind: network.subnet
    label: "Public Subnet"
    parent: vpc
    layout:
      x: 70
      y: 100
      w: 250
      h: 300
  - id: alb
    provider: aws
    kind: compute.lb.alb
    label: "Application LB"
    parent: public-subnet
    layout:
      x: 100
      y: 150
  - id: lambda
    provider: aws
    kind: compute.lambda
    label: "API Handler"
    parent: public-subnet
    layout:
      x: 100
      y: 280

edges:
  - id: alb-to-lambda
    from: alb
    to: lambda

Validation

# Validate and build to JSON
bun run packages/cli/src/index.ts build diagram.yaml

# Serve with live reload (default port: 3456)
bun run packages/cli/src/index.ts serve diagram.yaml

Common Errors

Missing Required Fields

Error: Missing required field "version"
Error: Missing required field "docId"

Ensure version and docId are at the document root.

Duplicate IDs

Error: Duplicate node id: "my-node"

Each node and edge must have a unique id.

Missing Edge ID

Error: Edge must have an id

All edges require an id field.

Missing Layout

Error: layout is required for top-level nodes
Error: layout.x is required for top-level nodes

Top-level nodes (without parent) must have a layout with x and y. Child nodes can omit layout for auto-positioning.

Partial Coordinates

Error: layout.x and layout.y must be both specified or both omitted

You cannot specify only x or only y. Either provide both, or omit both for auto-layout.

Invalid Parent Reference

Error: Node "child" references unknown parent: "missing-vpc"

Ensure parent references an existing container node.

Missing Edge Target

Error: Edge references unknown node: "missing-id"

Ensure from and to reference existing node IDs.

YAML Syntax Error

Error: YAML parse error at line 5

Check indentation (2 spaces) and proper quoting.

Tips

  • Use descriptive IDs: user-api not n1
  • Labels can include spaces and special characters (use quotes)
  • Use parent to nest resources inside VPC/Subnet containers
  • Container nodes (VPC, Subnet) require w and h in layout
  • Child nodes can omit layout entirely for automatic grid positioning
  • Use comments with # for documentation
  • The kind field is flexible - use any string that makes sense for your architecture

Source

git clone https://github.com/aiskillstore/marketplace/blob/main/skills/7nohe/yaml-authoring/SKILL.mdView on GitHub

Overview

yaml-authoring lets you construct YAML-based architecture diagrams by defining nodes, edges, and container layouts. It supports auto-layout for nested resources and enforces layout rules to keep diagrams organized. Use it to create new diagrams or troubleshoot YAML syntax.

How This Skill Works

You declare a version, docId, and optional title, then list nodes with provider, kind, layout, and optional parent, and connect nodes with edges. The tool applies auto-layout for child nodes when layout is omitted, following container rules and spacing, and requires proper w/h for container nodes.

When to Use It

  • Creating a new architecture diagram in YAML
  • Troubleshooting YAML syntax or layout issues
  • Documenting VPCs and nested resources with parent relationships
  • Using auto-layout to position child nodes without manual coordinates
  • Validating container dimensions for required w and h in layout

Quick Start

  1. Step 1: Create a YAML document with version 1 and a unique docId
  2. Step 2: Define nodes with provider, kind, and optional layout or parent
  3. Step 3: Define edges by from and to and add labels if needed

Best Practices

  • Start diagrams with version and docId for consistency
  • Use container nodes with width and height when required by kind
  • Leverage parent to model VPCs and subnets and reflect hierarchy
  • Prefer auto-layout for simple diagrams and explicit x/y for overrides
  • Label edges when semantics are important to the diagram

Example Use Cases

  • Simple Lambda + S3: Lambda function connected to an S3 bucket
  • API with Database: REST API gateway calling a Lambda and DynamoDB
  • VPC with Nested Resources: VPC with subnet and nested resources
  • Auto-layout usage: child nodes auto positioned within a VPC
  • Explicit layout override: use x and y to position a container

Frequently Asked Questions

Add this skill to your agents
Sponsor this space

Reach thousands of developers