Individual skill
tf-best-practices
Best-practice authoring guidance AND a read-only policy gate for AWS Terraform generated by a migration skill. Load during any phase that writes a terraform/ directory — first as the "what to emit" posture rules + security-baseline spec, then after writing as the deterministic policy verdict. Read-only: it reports whether the generated Terraform passes; it never edits .tf files, never touches .phase-status.json, and never decides phase completion. Complements (does not replace) terraform fmt/init/validate.
plugins/aws-startup-advisor/skills/tf-best-practices/SKILL.md
Source commit 1761e96813ebcbd43ed81d19e837219033f0afe5
What was checked
- Matches the observed repository HEAD
- Yes
- Scanner rules are current
- No
- Repository scan complete
- No
- Skill scan complete
- No
- Observed behavior
- Not checked yet
- Last checked
- Nov 3, 2026
These are observations at the recorded commit, not a guarantee of safety. Review the source before running it.
Install this skill
Choose an agent in your Stack or copy a command below. Commands fetch the pinned commit and copy only this skill directory. Existing destinations are refused. Copying a command does not install anything.
An install command is unavailable: current rules, complete repository and skill scans, an eligible behavior level and a permitted license are required.
Repository context
- Repository stars (not skill ratings)
- 3,438
- Repository last updated
- Nov 7, 2026
- License
- Apache-2.0
Observed agent integration: No specific integration evidence. Standard SKILL.md installation does not imply verified compatibility.
Files and excerpt
File metadata and permitted, redacted excerpts come from the recorded scan. Source links are pinned to that commit.
Browse files
.gitignoreasset · 51 bytesSKILL.mdcore · 14,427 bytesSKILL.mdcore · 14,427 bytesSKILL.mdcore · 14,427 bytesSKILL.mdcore · 14,427 bytesSKILL.mdcore · 14,427 bytesfixtures/terraform-policy/bad-db-sg-public-quoted-port/vpc.tfasset · 514 bytesfixtures/terraform-policy/bad-db-sg-public/vpc.tfasset · 356 bytesfixtures/terraform-policy/bad-elasticache-cluster-redis-unencrypted/cache.tfasset · 389 bytesfixtures/terraform-policy/bad-elasticache-unencrypted/cache.tfasset · 422 bytesfixtures/terraform-policy/bad-heroku-eb-elasticache/cache.tfasset · 834 bytesfixtures/terraform-policy/bad-http-forward/compute.tfasset · 556 bytesfixtures/terraform-policy/bad-rds-public-brace-in-comment/main.tfasset · 690 bytesfixtures/terraform-policy/bad-rds-public-closing-brace/main.tfasset · 692 bytesfixtures/terraform-policy/bad-rds-public-interpolated-brace/rds.tfasset · 903 bytesfixtures/terraform-policy/bad-rds-public-unencrypted/database.tfasset · 372 bytesfixtures/terraform-policy/bad-sg-public-ipv6/vpc.tfasset · 1,135 bytesfixtures/terraform-policy/bad-sg-public-ssh/vpc.tfasset · 537 bytesfixtures/terraform-policy/bad-wildcard-iam-listform/security.tfasset · 470 bytesfixtures/terraform-policy/bad-wildcard-iam/security.tfasset · 381 bytesfixtures/terraform-policy/good-db-sg-scoped/vpc.tfasset · 986 bytesfixtures/terraform-policy/good-elasticache-cluster-memcached/cache.tfasset · 372 bytesfixtures/terraform-policy/good-elasticache-cluster-redis-encrypted/cache.tfasset · 601 bytesfixtures/terraform-policy/good-elasticache-encrypted/cache.tfasset · 749 bytesfixtures/terraform-policy/good-heroku-eb-codepipeline/pipeline.tfasset · 295 bytesfixtures/terraform-policy/good-heroku-eb-loadbalanced/compute.tfasset · 2,673 bytesfixtures/terraform-policy/good-heroku-eb-loadbalanced/database.tfasset · 839 bytesfixtures/terraform-policy/good-heroku-eb-loadbalanced/security.tfasset · 899 bytesfixtures/terraform-policy/good-heroku-eb-only/compute.tfasset · 1,491 bytesfixtures/terraform-policy/good-heroku-eb-singleinstance/compute.tfasset · 1,881 bytesfixtures/terraform-policy/good-https-redirect/compute.tfasset · 1,008 bytesfixtures/terraform-policy/good-iam-scoped-list/security.tfasset · 573 bytesfixtures/terraform-policy/good-internet-nlb/compute.tfasset · 621 bytesfixtures/terraform-policy/good-quoted-port-https/compute.tfasset · 1,293 bytesfixtures/terraform-policy/good-rds-private-encrypted/database.tfasset · 607 bytesfixtures/terraform-policy/good-scoped-iam/security.tfasset · 744 bytesfixtures/terraform-policy/good-sg-ipv6-scoped/vpc.tfasset · 1,043 bytesfixtures/terraform-policy/good-sg-public-webapp/vpc.tfasset · 989 bytesfixtures/terraform-policy/internal-alb-only/compute.tfasset · 555 bytesreferences/security-posture-rules.mddoc · 17,677 bytesreferences/terraform-validation.mddoc · 10,072 bytesscripts/rds_windows.pyruns · 10,311 bytesscripts/test_validate_terraform_policy.pyruns · 34,391 bytesscripts/validate-migration-artifacts.pyruns · 91,439 bytesscripts/validate-terraform-policy.pyruns · 44,674 bytesscripts/validate-terraform-report.pyruns · 4,219 bytes
Read excerpt
# tf-best-practices — Generated-IaC posture rules + read-only policy gate
A **shared authoring guide and verdict producer**, not a workflow. It answers two
questions for a phase that generates AWS Terraform:
1. **Before writing** — "what security posture must the generated `terraform/` follow?"
(the posture rules + the `baseline.tf` account-hardening spec)
2. **After writing** — "does the generated `terraform/` pass policy?" (a deterministic,
**read-only** verdict + a machine-readable report)
## Routing — load the part that matches your context
This skill is entered at two touchpoints in the caller's Generate flow, with the caller's
own terraform-authoring work in between. **The caller states which touchpoint it is at when it