terraform-development
Skill4 starsChanged 3 months agoApache-2.0View on GitHub
Plan-first iteration on Terraform (or compatible IaC) changes: format, validate, lint/static-analyze, and produce a safe human-readable plan summary — without ever exposing a sensitive value or treating a plan as proof of a safe apply. This is the company-common capability referenced by governance/engineering/agent-skill-architecture.md (HORO-969) §1; it composes with engineering-loop, which supplies the Explore → Narrow → Validate → Escalate → Full Gate loop and diagnostic discipline this skill runs inside of. Auto-used. Invoke whenever iterating on a .tf/.tf.json change, in…
In this repository21 other files it gives its agents.
- .claude/CLAUDE.mdCLAUDE.md
- adr-governanceSkill
- credential-operationsSkill
- documentation-experienceSkill
- engineering-loopSkill
- governance-doctorSkill
- homebrew-tap-mergeSkill
- jira-deliverySkill
- product-validationSkill
- public-release-reconcileSkill
- release-assuranceSkill
- release-docs-syncSkill
- release-evidence-finalizeSkill
- release-qa-gateSkill
- release-security-gateSkill
- release-tag-cutSkill
- release-validate-channelsSkill
- repo-bootstrapSkill
- repo-scaffoldSkill
- rust-developmentSkill
- shell-developmentSkill
The file
We split this skill into the rules it gives an agent
2 rules. About 0 are common, 0 are distinctive, and 2 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈0
Distinctive · estimate
This author's own choices. Worth a look.
2
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 62
Run, in order, stopping to fix at the first failure: fmt -check → validate → lint/static analysis → plan.
- Very specific: line 68
Never skip straight to plan on unformatted or unvalidated config — a plan run against config that doesn't even parse cleanly wastes a cycle …
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
<!-- horonom:generated --><!-- Source: horonomy/.github agents/skills/terraform-development/SKILL.md. Do not hand-edit — rerun `python3 agents/common/project_skills.py`. -->SKILL.md — terraform-development
Purpose
Plan-first iteration on Terraform (or compatible IaC) changes: format,
validate, lint/static-analyze, and produce a safe human-readable plan
summary — without ever exposing a sensitive value or treating a plan as
proof of a safe apply. This is the company-common capability referenced by
governance/engineering/agent-skill-architecture.md (HORO-969) §1; it
composes with engineering-loop, which supplies the Explore → Narrow →
Validate → Escalate → Full Gate loop and diagnostic discipline this skill
runs inside of.
Type
Auto-used. Invoke whenever iterating on a .tf/.tf.json change, in any
repo where manifest.yaml's stacks: [terraform] applicability matches
(HORO-969 §3 — *.tf evidence).
Security posture — read before anything else
Terraform plans routinely surface values that must never land in agent
context, a commit, a PR body, or CI output verbatim — resource attribute
values, some outputs, and provider-specific fields a schema marks
sensitive (and some it doesn't, see below). This skill's central
obligation is references/sensitive-value-safety.md. Read it before
running terraform plan on any repo that provisions real infrastructure.
This skill does not restate the company's non-waivable secret-handling
invariant — never inspect, print, log, or otherwise cause a credential's
plaintext to appear in output, files, commits, or conversation context —
that rule lives in governance/engineering/security.md's "Secrets —
opaque-capability model" section and applies here unmodified. A Terraform
plan/state that carries a raw credential (a generated DB password, an API
key output) is covered by that rule exactly like any other secret; this
skill's references/sensitive-value-safety.md is the operational
procedure for the broader class of plan-carried sensitive values
(including ones no schema flags as sensitive), not a replacement for it.
When to use
- Any iterative loop that edits Terraform config: adding/changing a resource, module, variable, or output.
- Reviewing what a proposed change would actually do before it is authorized to apply.
When NOT to use
- To perform
terraform apply,destroy,import, or any direct state mutation (state mv/rm/push) automatically. These stay outside this skill's automatic scope — see "Apply and state mutation" below. - As proof that a change is safe to deploy —
terraform validatechecks syntax and internal consistency only; it is never deployment/apply proof. Only a reviewedplan(and, once authorized, a realapply) demonstrates what will actually happen.
Routing decision — the plan-first progression
Run, in order, stopping to fix at the first failure: fmt -check →
validate → lint/static analysis → plan. Full detail on each stage,
module/workspace/backend/provider discovery, init/lockfile behavior, and
identity verification before any production-sensitive action:
references/plan-first-workflow.md.
Never skip straight to plan on unformatted or unvalidated config — a
plan run against config that doesn't even parse cleanly wastes a cycle
and, worse, can produce a misleading diff against stale provider state.
-target is exceptional, not routine
-target restricts plan/apply to a subgraph. It is a surgical
recovery tool for a specific, understood problem (e.g. unblocking one
broken resource while a dependency is fixed out of band) — never a
routine way to make plan faster or to avoid understanding a change's
full blast radius. A -target plan is not a substitute for eventually
running a full, untargeted plan before anything is authorized to apply.
Apply, destroy, import, and state mutation
This skill's automatic scope ends at a reviewed plan and its safe
summary. apply, destroy, import, and any terraform state
mutation always require explicit task authorization — a human or an
explicitly-scoped task instruction naming the action — never inferred
from "the plan looked fine" or "tests passed." This mirrors
engineering-loop's Full Gate discipline (a passing narrow check is
evidence, never blanket authorization) and the credential-adjacent
boundary in governance/engineering/agent-skill-architecture.md §5.
Worked example
examples/fmt-validate-plan-review.md — a concrete fmt -check →
validate → safe plan-summary walkthrough for adding a cloud resource.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

