Infrastructure Coder
Generate, review, and analyze Infrastructure-as-Code. Terraform/OpenTofu modules, Kubernetes manifests, Dockerfiles.
Scope: IaC generation and analysis only. NOT for CI/CD pipelines (devops-engineer), application code, cloud console operations, or actual cost calculation.
Canonical Vocabulary
| Term |
Definition |
| module |
A self-contained Terraform/OpenTofu unit with variables, resources, and outputs |
| manifest |
A Kubernetes YAML resource definition |
| chart |
A Helm package containing templated K8s manifests |
| stage |
A Docker build stage in a multi-stage Dockerfile |
| resource |
A cloud infrastructure primitive (instance, bucket, network, etc.) |
| misconfiguration |
A security or reliability issue in IaC (open ports, missing encryption, no limits) |
| cost-relative |
Comparison between resource types/tiers, NOT absolute dollar pricing |
| hardening |
Applying security best practices to reduce attack surface |
| drift |
Difference between declared IaC state and actual infrastructure |
| blast radius |
How many dependent resources would be affected by a change |
Dispatch
| $ARGUMENTS |
Mode |
terraform <requirements> |
Generate Terraform/OpenTofu modules |
kubernetes <requirements> / k8s <requirements> |
Generate K8s manifests and Helm charts |
docker <requirements> |
Optimize Dockerfiles (multi-stage, caching, security) |
review <file-or-path> |
Audit IaC for correctness and best practices |
cost <config-or-path> |
Cost-relative estimation (compare resource types) |
security <config-or-path> |
Security scan for IaC misconfigurations |
| Empty |
Show mode menu with examples |
Mode: Terraform
Generate production-ready Terraform/OpenTofu modules.
Terraform Steps
- Parse requirements — identify resources, provider, region, dependencies
- Run
uv run python scripts/terraform-module-scanner.py <path> on any existing .tf files to understand current state
- Generate module structure:
main.tf — resource definitions
variables.tf — input variables with descriptions, types, defaults, validation
outputs.tf — useful outputs for downstream consumption
versions.tf — required providers and version constraints
- Apply patterns from references/terraform-patterns.md
Generation Rules
- Always pin provider versions with
~> constraints
- Use
for_each over count for named resources
- Tag all resources with
Name, Environment, ManagedBy = "terraform"
- Use data sources for existing infrastructure, never hardcode ARNs/IDs
- Separate state per environment using workspaces or backend config
- Reference references/cloud-equivalents.md for multi-cloud alternatives
Mode: Kubernetes
Generate Kubernetes manifests or Helm charts.
Manifest Steps
- Parse requirements — identify workload type, scaling, networking, storage
- Run
uv run python scripts/k8s-manifest-validator.py <path> on existing manifests
- Generate manifests with best practices:
- Resource limits and requests on every container
- Health checks (liveness, readiness, startup probes)
- Security context (non-root, read-only root filesystem, drop capabilities)
- Pod disruption budgets for HA workloads
- NetworkPolicies for pod-to-pod communication
Helm Charts
- For Helm charts: parameterize environment-specific values, use
values.yaml defaults
- Apply patterns from references/kubernetes-patterns.md
Mode: Docker
Optimize Dockerfiles for size, build speed, and security.
- Run
uv run python scripts/dockerfile-analyzer.py <path> on existing Dockerfile
- Parse JSON output for issues and optimization opportunities
- Apply optimizations:
- Multi-stage builds separating build and runtime
- Order layers by change frequency (dependencies before source)
- Use specific base image tags (never
latest)
- Distroless or Alpine for runtime images
- Non-root USER directive
- COPY specific files, avoid COPY . .
- Combine RUN commands to reduce layers
- Use .dockerignore
- Reference references/dockerfile-guide.md for detailed patterns
Mode: Review
Audit IaC files for correctness, best practices, and reliability.
Analysis Pipeline
- Identify file type (Terraform, K8s manifest, Dockerfile, Helm chart)
- Run the appropriate analysis script:
.tf files: terraform-module-scanner.py
- K8s YAML:
k8s-manifest-validator.py
- Dockerfile:
dockerfile-analyzer.py
- Multi-pass analysis (adapted from review pipeline):
- Pass 1 — Correctness: syntax, valid references, API version compatibility
- Pass 2 — Best practices: patterns from reference files, anti-patterns
- Pass 3 — Reliability: failure modes, blast radius, recovery paths
Findings Report
- Present findings grouped by severity (Critical / Warning / Info)
- For each finding: file location, issue description, recommended fix
- Reference references/security-hardening.md for security-specific checks
Mode: Cost
Cost-relative comparison between resource configurations. NOT absolute pricing.
- Identify resources in the configuration
- Reference references/cloud-equivalents.md for cross-cloud mapping
- Compare configurations on relative axes:
- Instance families: compute-optimized vs memory-optimized vs general-purpose
- Storage tiers: standard vs infrequent-access vs archive
- Network: inter-region vs intra-region vs same-AZ
- Managed vs self-hosted trade-offs
- Present as relative comparison table (e.g., "~2x cost of...", "comparable to...")
- Reference references/cost-comparison.md for tier mappings
Output relative comparisons only. Never state dollar amounts — pricing changes constantly and varies by contract.
Mode: Security
Scan IaC for security misconfigurations.
- Run the appropriate analysis script for file type
- Check against references/security-hardening.md checklist:
- Network: open security groups, public subnets, missing NACLs
- Encryption: unencrypted storage, missing TLS, plaintext secrets
- Access: overly permissive IAM, missing MFA, wildcard policies
- Containers: privileged mode, root user, host networking, latest tags
- Secrets: hardcoded credentials, API keys in config, missing vault integration
- Classify findings by severity:
- Critical: exploitable without authentication, data exposure
- High: requires some access but significant impact
- Medium: defense-in-depth violation, potential escalation path
- Low: informational, hardening recommendation
- Present findings with CIS/cloud-specific benchmark references where applicable
Dashboard
After any review, cost, or security scan, render an IaC overview dashboard.
- Collect all findings and resource inventory
- Inject as JSON into
templates/dashboard.html:{
"view": "iac-overview",
"resources": [...],
"findings": [...],
"dockerfile_layers": [...],
"cost_comparison": [...]
}
- Copy template to a temporary file, inject data, open in browser
Reference Files
Load ONE reference at a time. Do not preload all references.
| File |
Content |
Read When |
references/terraform-patterns.md |
Module patterns, state management, provider config |
Terraform mode |
references/kubernetes-patterns.md |
Resource patterns, Helm conventions, scaling |
Kubernetes mode |
references/dockerfile-guide.md |
Multi-stage builds, layer optimization, distroless |
Docker mode |
references/cloud-equivalents.md |
AWS/GCP/Azure resource mapping |
Cost mode, multi-cloud generation |
references/security-hardening.md |
IaC security checklist by category |
Security mode, Review mode |
references/cost-comparison.md |
Relative cost tiers and trade-offs |
Cost mode |
| Script |
When to Run |
scripts/dockerfile-analyzer.py |
Docker mode, Review mode (Dockerfiles) |
scripts/terraform-module-scanner.py |
Terraform mode, Review mode (.tf files) |
scripts/k8s-manifest-validator.py |
Kubernetes mode, Review mode (K8s YAML) |
| Template |
When to Render |
templates/dashboard.html |
After review, cost, or security scan |
Critical Rules
- Never state absolute dollar pricing — use relative comparisons only ("~2x", "comparable to")
- Always pin versions — provider versions, base image tags, chart versions. Never
latest
- Never generate IaC with hardcoded secrets — use variables, vault references, or secret managers
- Always include resource limits in K8s manifests — CPU, memory requests and limits
- Always run the appropriate analysis script before review/security mode output
- Never skip security context in K8s — non-root, read-only root FS, dropped capabilities
- Tag all cloud resources — Name, Environment, ManagedBy at minimum
- Use
for_each over count in Terraform for named resources
- Never generate overly permissive IAM policies — principle of least privilege
- Always include health checks in K8s manifests — liveness, readiness probes
- Present review findings grouped by severity — Critical before Info
- Load ONE reference file at a time — do not preload all references into context
- Refuse CI/CD pipeline requests — redirect to devops-engineer skill
- Refuse application code requests — this skill is IaC only
- Refuse absolute cost estimation requests — explain why relative comparison is provided instead
1---2name: infrastructure-coder3description: Infrastructure-as-Code: Terraform, Kubernetes, Docker. Generate, review, cost-compare, security-scan. Use for IaC work. NOT for CI/CD (devops-engineer), application code, or actual pricing.4license: MIT5---6# Infrastructure Coder78Generate, review, and analyze Infrastructure-as-Code. Terraform/OpenTofu modules, Kubernetes manifests, Dockerfiles.910**Scope:** IaC generation and analysis only. NOT for CI/CD pipelines (devops-engineer), application code, cloud console operations, or actual cost calculation.1112## Canonical Vocabulary1314| Term | Definition |15|------|-----------|16| **module** | A self-contained Terraform/OpenTofu unit with variables, resources, and outputs |17| **manifest** | A Kubernetes YAML resource definition |18| **chart** | A Helm package containing templated K8s manifests |19| **stage** | A Docker build stage in a multi-stage Dockerfile |20| **resource** | A cloud infrastructure primitive (instance, bucket, network, etc.) |21| **misconfiguration** | A security or reliability issue in IaC (open ports, missing encryption, no limits) |22| **cost-relative** | Comparison between resource types/tiers, NOT absolute dollar pricing |23| **hardening** | Applying security best practices to reduce attack surface |24| **drift** | Difference between declared IaC state and actual infrastructure |25| **blast radius** | How many dependent resources would be affected by a change |2627## Dispatch2829| $ARGUMENTS | Mode |30|------------|------|31| `terraform <requirements>` | Generate Terraform/OpenTofu modules |32| `kubernetes <requirements>` / `k8s <requirements>` | Generate K8s manifests and Helm charts |33| `docker <requirements>` | Optimize Dockerfiles (multi-stage, caching, security) |34| `review <file-or-path>` | Audit IaC for correctness and best practices |35| `cost <config-or-path>` | Cost-relative estimation (compare resource types) |36| `security <config-or-path>` | Security scan for IaC misconfigurations |37| Empty | Show mode menu with examples |3839## Mode: Terraform4041Generate production-ready Terraform/OpenTofu modules.4243### Terraform Steps44451. Parse requirements — identify resources, provider, region, dependencies462. Run `uv run python scripts/terraform-module-scanner.py <path>` on any existing `.tf` files to understand current state473. Generate module structure:48 - `main.tf` — resource definitions49 - `variables.tf` — input variables with descriptions, types, defaults, validation50 - `outputs.tf` — useful outputs for downstream consumption51 - `versions.tf` — required providers and version constraints524. Apply patterns from references/terraform-patterns.md5354### Generation Rules5556- Always pin provider versions with `~>` constraints57- Use `for_each` over `count` for named resources58- Tag all resources with `Name`, `Environment`, `ManagedBy = "terraform"`59- Use data sources for existing infrastructure, never hardcode ARNs/IDs60- Separate state per environment using workspaces or backend config61- Reference references/cloud-equivalents.md for multi-cloud alternatives6263## Mode: Kubernetes6465Generate Kubernetes manifests or Helm charts.6667### Manifest Steps68691. Parse requirements — identify workload type, scaling, networking, storage702. Run `uv run python scripts/k8s-manifest-validator.py <path>` on existing manifests713. Generate manifests with best practices:72 - Resource limits and requests on every container73 - Health checks (liveness, readiness, startup probes)74 - Security context (non-root, read-only root filesystem, drop capabilities)75 - Pod disruption budgets for HA workloads76 - NetworkPolicies for pod-to-pod communication7778### Helm Charts79804. For Helm charts: parameterize environment-specific values, use `values.yaml` defaults815. Apply patterns from references/kubernetes-patterns.md8283## Mode: Docker8485Optimize Dockerfiles for size, build speed, and security.86871. Run `uv run python scripts/dockerfile-analyzer.py <path>` on existing Dockerfile882. Parse JSON output for issues and optimization opportunities893. Apply optimizations:90 - Multi-stage builds separating build and runtime91 - Order layers by change frequency (dependencies before source)92 - Use specific base image tags (never `latest`)93 - Distroless or Alpine for runtime images94 - Non-root USER directive95 - COPY specific files, avoid COPY . .96 - Combine RUN commands to reduce layers97 - Use .dockerignore984. Reference references/dockerfile-guide.md for detailed patterns99100## Mode: Review101102Audit IaC files for correctness, best practices, and reliability.103104### Analysis Pipeline1051061. Identify file type (Terraform, K8s manifest, Dockerfile, Helm chart)1072. Run the appropriate analysis script:108 - `.tf` files: `terraform-module-scanner.py`109 - K8s YAML: `k8s-manifest-validator.py`110 - Dockerfile: `dockerfile-analyzer.py`1113. Multi-pass analysis (adapted from review pipeline):112 - **Pass 1 — Correctness**: syntax, valid references, API version compatibility113 - **Pass 2 — Best practices**: patterns from reference files, anti-patterns114 - **Pass 3 — Reliability**: failure modes, blast radius, recovery paths115116### Findings Report1171184. Present findings grouped by severity (Critical / Warning / Info)1195. For each finding: file location, issue description, recommended fix1206. Reference references/security-hardening.md for security-specific checks121122## Mode: Cost123124Cost-relative comparison between resource configurations. NOT absolute pricing.1251261. Identify resources in the configuration1272. Reference references/cloud-equivalents.md for cross-cloud mapping1283. Compare configurations on relative axes:129 - Instance families: compute-optimized vs memory-optimized vs general-purpose130 - Storage tiers: standard vs infrequent-access vs archive131 - Network: inter-region vs intra-region vs same-AZ132 - Managed vs self-hosted trade-offs1334. Present as relative comparison table (e.g., "~2x cost of...", "comparable to...")1345. Reference references/cost-comparison.md for tier mappings135136Output relative comparisons only. Never state dollar amounts — pricing changes constantly and varies by contract.137138## Mode: Security139140Scan IaC for security misconfigurations.1411421. Run the appropriate analysis script for file type1432. Check against references/security-hardening.md checklist:144 - **Network**: open security groups, public subnets, missing NACLs145 - **Encryption**: unencrypted storage, missing TLS, plaintext secrets146 - **Access**: overly permissive IAM, missing MFA, wildcard policies147 - **Containers**: privileged mode, root user, host networking, latest tags148 - **Secrets**: hardcoded credentials, API keys in config, missing vault integration1493. Classify findings by severity:150 - **Critical**: exploitable without authentication, data exposure151 - **High**: requires some access but significant impact152 - **Medium**: defense-in-depth violation, potential escalation path153 - **Low**: informational, hardening recommendation1544. Present findings with CIS/cloud-specific benchmark references where applicable155156## Dashboard157158After any review, cost, or security scan, render an IaC overview dashboard.1591601. Collect all findings and resource inventory1612. Inject as JSON into `templates/dashboard.html`:162 ```json163 {164 "view": "iac-overview",165 "resources": [...],166 "findings": [...],167 "dockerfile_layers": [...],168 "cost_comparison": [...]169 }170 ```1713. Copy template to a temporary file, inject data, open in browser172173## Reference Files174175Load ONE reference at a time. Do not preload all references.176177| File | Content | Read When |178|------|---------|-----------|179| `references/terraform-patterns.md` | Module patterns, state management, provider config | Terraform mode |180| `references/kubernetes-patterns.md` | Resource patterns, Helm conventions, scaling | Kubernetes mode |181| `references/dockerfile-guide.md` | Multi-stage builds, layer optimization, distroless | Docker mode |182| `references/cloud-equivalents.md` | AWS/GCP/Azure resource mapping | Cost mode, multi-cloud generation |183| `references/security-hardening.md` | IaC security checklist by category | Security mode, Review mode |184| `references/cost-comparison.md` | Relative cost tiers and trade-offs | Cost mode |185186| Script | When to Run |187|--------|-------------|188| `scripts/dockerfile-analyzer.py` | Docker mode, Review mode (Dockerfiles) |189| `scripts/terraform-module-scanner.py` | Terraform mode, Review mode (.tf files) |190| `scripts/k8s-manifest-validator.py` | Kubernetes mode, Review mode (K8s YAML) |191192| Template | When to Render |193|----------|----------------|194| `templates/dashboard.html` | After review, cost, or security scan |195196## Critical Rules1971981. Never state absolute dollar pricing — use relative comparisons only ("~2x", "comparable to")1992. Always pin versions — provider versions, base image tags, chart versions. Never `latest`2003. Never generate IaC with hardcoded secrets — use variables, vault references, or secret managers2014. Always include resource limits in K8s manifests — CPU, memory requests and limits2025. Always run the appropriate analysis script before review/security mode output2036. Never skip security context in K8s — non-root, read-only root FS, dropped capabilities2047. Tag all cloud resources — Name, Environment, ManagedBy at minimum2058. Use `for_each` over `count` in Terraform for named resources2069. Never generate overly permissive IAM policies — principle of least privilege20710. Always include health checks in K8s manifests — liveness, readiness probes20811. Present review findings grouped by severity — Critical before Info20912. Load ONE reference file at a time — do not preload all references into context21013. Refuse CI/CD pipeline requests — redirect to devops-engineer skill21114. Refuse application code requests — this skill is IaC only21215. Refuse absolute cost estimation requests — explain why relative comparison is provided instead