Files
gh-jeremylongshore-claude-c…/skills/yaml-master/SKILL.md
2025-11-30 08:21:38 +08:00

721 lines
15 KiB
Markdown

---
name: yaml-master
description: |
PROACTIVE YAML INTELLIGENCE: Automatically activates when working with YAML files, configuration management,
CI/CD pipelines, Kubernetes manifests, Docker Compose, or any YAML-based workflows. Provides intelligent
validation, schema inference, linting, format conversion (JSON/TOML/XML), and structural transformations
with deep understanding of YAML specifications and common anti-patterns.
allowed-tools: Read, Write, Edit, Grep, Glob, Bash
version: 1.0.0
---
# YAML Master Agent
**⚡ This skill activates AUTOMATICALLY when you work with YAML files!**
## Automatic Trigger Conditions
This skill proactively activates when Claude detects:
1. **File Operations**: Reading, writing, or editing `.yaml` or `.yml` files
2. **Configuration Management**: Working with Ansible, Kubernetes, Docker Compose, GitHub Actions
3. **CI/CD Workflows**: GitLab CI, CircleCI, Travis CI, Azure Pipelines configurations
4. **Schema Validation**: Validating configuration files against schemas
5. **Format Conversion**: Converting between YAML, JSON, TOML, XML formats
6. **User Requests**: Explicit mentions of "yaml", "validate yaml", "fix yaml syntax", "convert yaml"
**No commands needed!** Just work with YAML files naturally, and this skill activates automatically.
---
## Core Capabilities
### 1. Intelligent YAML Validation
**What It Does**:
- Detects syntax errors (indentation, duplicate keys, invalid scalars)
- Validates against YAML 1.2 specification
- Identifies common anti-patterns (tabs vs spaces, anchors/aliases issues)
- Provides detailed error messages with line numbers and fix suggestions
**Example**:
```yaml
# ❌ INVALID YAML
services:
web:
image: nginx
ports: # Mixed tabs and spaces - ERROR!
- "80:80"
```
**Agent Action**: Automatically detects mixed indentation, suggests fix:
```yaml
# ✅ FIXED YAML
services:
web:
image: nginx
ports: # Consistent 2-space indentation
- "80:80"
```
### 2. Schema Inference & Generation
**What It Does**:
- Analyzes YAML structure and infers JSON Schema
- Generates OpenAPI/Swagger schemas from YAML
- Creates type definitions for TypeScript/Python from YAML configs
- Validates instances against inferred or provided schemas
**Example**:
```yaml
# Input YAML
user:
name: Jeremy
age: 35
roles:
- admin
- developer
```
**Agent Action**: Infers schema:
```json
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"user": {
"type": "object",
"properties": {
"name": { "type": "string" },
"age": { "type": "integer" },
"roles": {
"type": "array",
"items": { "type": "string" }
}
},
"required": ["name", "age", "roles"]
}
}
}
```
### 3. Format Conversion (YAML ↔ JSON ↔ TOML ↔ XML)
**What It Does**:
- Bidirectional conversion between YAML, JSON, TOML, XML
- Preserves comments when possible (YAML ↔ TOML)
- Handles complex nested structures, arrays, anchors/aliases
- Validates converted output maintains semantic equivalence
**Example - YAML to JSON**:
```yaml
# config.yaml
database:
host: localhost
port: 5432
credentials: &creds
user: admin
pass: secret
```
**Agent Action**: Converts to JSON:
```json
{
"database": {
"host": "localhost",
"port": 5432,
"credentials": {
"user": "admin",
"pass": "secret"
}
}
}
```
### 4. Kubernetes Manifest Expertise
**What It Does**:
- Validates K8s manifests against API versions
- Suggests best practices (resource limits, labels, health checks)
- Detects security issues (privileged containers, root users)
- Generates complete manifests from minimal specs
**Example**:
```yaml
# Minimal input
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
```
**Agent Action**: Expands with best practices:
```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
labels:
app: nginx
version: "1.0"
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
version: "1.0"
spec:
containers:
- name: nginx
image: nginx:1.25-alpine
ports:
- containerPort: 80
name: http
resources:
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"
livenessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 30
periodSeconds: 10
readinessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 5
periodSeconds: 5
securityContext:
runAsNonRoot: true
runAsUser: 1000
allowPrivilegeEscalation: false
```
### 5. Docker Compose Optimization
**What It Does**:
- Validates Docker Compose syntax (v2.x, v3.x)
- Suggests networking best practices
- Optimizes volume mounts and environment variables
- Detects security misconfigurations
**Example**:
```yaml
# ❌ SUBOPTIMAL
version: '3'
services:
db:
image: postgres
environment:
POSTGRES_PASSWORD: admin123 # Hardcoded secret!
```
**Agent Action**: Suggests secure alternative:
```yaml
# ✅ OPTIMIZED
version: '3.8'
services:
db:
image: postgres:15-alpine
environment:
POSTGRES_PASSWORD_FILE: /run/secrets/db_password
secrets:
- db_password
volumes:
- db_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 10s
timeout: 5s
retries: 5
restart: unless-stopped
secrets:
db_password:
file: ./secrets/db_password.txt
volumes:
db_data:
driver: local
```
### 6. CI/CD Pipeline Intelligence
**What It Does**:
- Validates GitHub Actions, GitLab CI, CircleCI workflows
- Suggests caching strategies for faster builds
- Detects matrix build inefficiencies
- Optimizes job dependencies and parallelization
**Example - GitHub Actions**:
```yaml
# ❌ INEFFICIENT
name: CI
on: [push]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: npm install # No caching!
- run: npm test
```
**Agent Action**: Optimizes with caching:
```yaml
# ✅ OPTIMIZED
name: CI
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
test:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [18, 20, 22]
steps:
- uses: actions/checkout@v4
- name: Setup Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
cache: 'npm'
- name: Install dependencies
run: npm ci # Faster than npm install
- name: Run tests
run: npm test
- name: Upload coverage
if: matrix.node-version == 20
uses: codecov/codecov-action@v4
```
### 7. YAML Linting & Style Enforcement
**What It Does**:
- Enforces consistent indentation (2 spaces, 4 spaces, tabs)
- Validates key ordering (alphabetical, custom)
- Detects trailing whitespace, missing newlines
- Suggests canonical YAML representations
**Linting Rules**:
```yaml
# Rule 1: Consistent 2-space indentation
# Rule 2: No duplicate keys
# Rule 3: Quoted strings for special characters
# Rule 4: Explicit document markers (---, ...)
# Rule 5: No tabs, only spaces
# Rule 6: Max line length 120 characters
# Rule 7: Comments aligned at column 40
```
### 8. Anchors & Aliases Mastery
**What It Does**:
- Manages complex YAML anchors and aliases
- Suggests reusable configurations with merge keys
- Validates anchor references
- Refactors duplicate blocks into anchors
**Example**:
```yaml
# ❌ REPETITIVE
services:
web:
image: nginx
restart: always
logging:
driver: json-file
options:
max-size: "10m"
api:
image: node:20
restart: always
logging:
driver: json-file
options:
max-size: "10m"
```
**Agent Action**: Refactors with anchors:
```yaml
# ✅ DRY (Don't Repeat Yourself)
x-common-config: &common-config
restart: always
logging:
driver: json-file
options:
max-size: "10m"
services:
web:
<<: *common-config
image: nginx
api:
<<: *common-config
image: node:20
```
---
## Advanced Features
### Multi-Document YAML Handling
Works with YAML files containing multiple documents:
```yaml
---
apiVersion: v1
kind: Service
metadata:
name: nginx-service
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
---
```
**Agent Action**: Validates each document independently, ensures consistency across documents.
### Environment-Specific Configurations
Manages environment overrides and templates:
```yaml
# base.yaml
database: &db
host: localhost
port: 5432
# production.yaml (inherits from base)
database:
<<: *db
host: prod-db.example.com
ssl: true
```
### Complex Data Type Handling
Supports advanced YAML data types:
```yaml
# Timestamps
created_at: 2025-10-24T23:00:00Z
# Binary data (base64)
ssl_cert: !!binary |
R0lGODlhDAAMAIQAAP//9/X
17unp5WZmZgAAAOfn515eXv
# Null values
optional_field: null
another_null: ~
# Custom tags
color: !rgb [255, 128, 0]
```
---
## Common Use Cases
### 1. Fixing Broken YAML Files
**User**: "My Kubernetes manifest won't apply, fix it"
**Agent Action**:
1. Reads the YAML file
2. Identifies syntax errors (indentation, missing fields)
3. Validates against Kubernetes API schema
4. Provides corrected version with explanations
### 2. Converting JSON API Response to YAML Config
**User**: "Convert this JSON to YAML for my config file"
**Agent Action**:
1. Parses JSON input
2. Converts to idiomatic YAML (multi-line strings, minimal quotes)
3. Adds helpful comments
4. Validates output
### 3. Generating Docker Compose from Requirements
**User**: "Create docker-compose.yaml for nginx + postgres + redis"
**Agent Action**:
1. Generates complete docker-compose.yaml
2. Adds healthchecks, volumes, networks
3. Includes environment variable templates
4. Suggests .env file structure
### 4. Optimizing CI/CD Pipeline
**User**: "My GitHub Actions workflow is slow, optimize it"
**Agent Action**:
1. Analyzes workflow YAML
2. Identifies bottlenecks (no caching, sequential jobs)
3. Suggests parallelization, caching strategies
4. Provides optimized workflow
---
## Integration with Other Tools
### Works Seamlessly With:
- **yamllint**: Validates against yamllint rules
- **Kustomize**: Handles Kustomization files
- **Helm**: Works with Helm chart values.yaml
- **Ansible**: Validates playbooks and roles
- **OpenAPI/Swagger**: Converts to/from OpenAPI specs
- **JSON Schema**: Validates against schemas
- **Terraform**: Converts YAML to HCL (experimental)
---
## Error Handling & Troubleshooting
### Common YAML Errors This Skill Fixes:
| Error | Cause | Fix |
|-------|-------|-----|
| `mapping values are not allowed here` | Incorrect indentation | Align keys properly |
| `found duplicate key` | Same key defined twice | Remove or rename duplicate |
| `expected <block end>, but found` | Tab instead of spaces | Replace tabs with spaces |
| `found undefined tag handle` | Custom tag without definition | Define tag or remove |
| `could not find expected ':'` | Missing colon after key | Add colon |
---
## Best Practices Enforced
1. **Indentation**: Consistent 2-space indentation (configurable)
2. **Quotes**: Minimal quoting (only when necessary)
3. **Comments**: Descriptive comments for complex sections
4. **Security**: No hardcoded secrets, use secrets managers
5. **Validation**: Always validate against schemas
6. **Documentation**: Inline documentation for anchors/aliases
7. **Versioning**: Explicit version tags (Docker Compose, K8s API)
---
## Performance Considerations
- **Large Files**: Streams YAML instead of loading entire file into memory
- **Validation**: Incremental validation for real-time feedback
- **Conversion**: Optimized parsers for fast format conversion
- **Caching**: Caches schema validation results
---
## Compliance & Standards
**YAML 1.2 Specification**: Fully compliant
**YAML 1.1**: Backward compatible where possible
**JSON Schema Draft 7**: Supports schema validation
**OpenAPI 3.1**: Compatible with OpenAPI specs
**Kubernetes API**: Validates against all stable APIs
**Docker Compose v3.8**: Full support for latest spec
---
## Examples by Complexity
### Beginner: Simple Config File
```yaml
# app-config.yaml
app:
name: MyApp
version: 1.0.0
environment: production
server:
host: 0.0.0.0
port: 8080
database:
url: postgres://localhost:5432/mydb
```
### Intermediate: Multi-Service Docker Compose
```yaml
version: '3.8'
services:
web:
build: ./web
ports:
- "3000:3000"
depends_on:
- api
- redis
api:
build: ./api
environment:
DATABASE_URL: postgres://db:5432/app
depends_on:
db:
condition: service_healthy
db:
image: postgres:15-alpine
volumes:
- db_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD", "pg_isready"]
interval: 5s
redis:
image: redis:7-alpine
command: redis-server --appendonly yes
volumes:
db_data:
```
### Advanced: Kubernetes Deployment with Secrets
```yaml
apiVersion: v1
kind: Secret
metadata:
name: app-secrets
type: Opaque
stringData:
DATABASE_URL: postgres://user:pass@db:5432/app
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-app
labels:
app: web
spec:
replicas: 3
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- name: web
image: myapp:latest
envFrom:
- secretRef:
name: app-secrets
resources:
requests:
memory: "128Mi"
cpu: "100m"
limits:
memory: "256Mi"
cpu: "500m"
livenessProbe:
httpGet:
path: /health
port: 8080
initialDelaySeconds: 30
readinessProbe:
httpGet:
path: /ready
port: 8080
initialDelaySeconds: 5
---
apiVersion: v1
kind: Service
metadata:
name: web-service
spec:
selector:
app: web
ports:
- port: 80
targetPort: 8080
type: LoadBalancer
```
---
## Troubleshooting Guide
### Issue: "YAML won't parse"
**Diagnosis**:
1. Check indentation (tabs vs spaces)
2. Verify key-value separator (`:` with space after)
3. Look for duplicate keys
### Issue: "Kubernetes apply fails"
**Diagnosis**:
1. Validate API version matches cluster version
2. Check required fields are present
3. Verify resource names are DNS-compliant
### Issue: "Docker Compose won't start"
**Diagnosis**:
1. Check version compatibility
2. Validate service dependencies
3. Verify volume mount paths exist
---
## Version History
- **v1.0.0** (2025-10-24): Initial release with comprehensive YAML capabilities
---
## License
MIT License - See LICENSE file
---
## Support
- **Issues**: Report issues with YAML handling
- **Documentation**: This SKILL.md + plugin README
- **Community**: Share YAML tips and tricks
---
## Credits
**Author**: Jeremy Longshore
**Plugin**: 002-jeremy-yaml-master-agent
**Spec Compliance**: Anthropic Agent Skills Spec v1.0
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>