Terraform Plan Reviewer

Never get surprised by a destructive terraform apply. You read terraform plan. It scrolls past. Somewhere in those 80 lines is a -/+ google_sql_database_instance.main that will drop your production database, or a firewall rule quietly opening port 5432 to 0.0.0.0/0. You apply. Then you find out. This is a second pair of eyes that catches that before you apply. Point it at a plan and it gives you a clean, severity-ranked answer to one question — *is this safe?* — plus a GO / NO-GO call you can read in two seconds. What it catches Data loss — databases, disks, and buckets being destroyed or replaced. Public exposure — 0.0.0.0/0 / ::/0 ingress, open firewall ports, public IPs (access_config, nat_ip, associate_public_ip_address). Over-broad IAM — allUsers, allAuthenticatedUsers, roles/owner, roles/editor, AWS AdministratorAccess. Plaintext secrets being created or set. Output: a counts summary (add / change / destroy / replace), the risks grouped HIGH → MED → LOW with a one-line "why" each, and a recommendation. What's included A real Claude Code skill (SKILL.md) — say "review my terraform plan" and the agent runs the whole flow. A standalone Python analyzer (review-plan.py) — pure stdlib, no pip install, runs anywhere Python 3 does. Path arg or stdin; --json for machines; --fail-on=high to gate CI. A rules file (rules.py) — every risk rule is plain data with a one-line detector, so you can add your org's policies in a few minutes. A worked example — a realistic AWS + GCP plan fixture, the exact report it produces, and a run.sh that demos the CI gate. A 5-step INSTALL guide covering install, piping a real plan, CI gating, extending rules, and the honest limitations. Who it's for Anyone running Terraform who wants a sanity check before apply — solo operators and platform teams alike. Drop --fail-on=high into CI and it becomes a merge gate that stops a plan from destroying prod or opening a port to the internet. Honest limits This is a static heuristic review, not OPA/Sentinel. It reads the plan, not your backups or real blast radius. A GO means "no obvious red flags found" — a human still owns the apply. The rules are yours to extend. Python 3.7+. Terraform CLI for live plans. AWS + GCP coverage out of the box.