Claude Code skills · updated 2026-10-03

OpenTofu migration skill for Claude Code — version pins and HCP ties

Every line that stops tofu init or ties you to HCP Terraform

opentofu-migration-check - findings on the bundled example

On the bundled main.tf: 9 findings (1 error, 4 warnings, 4 info) from 13 rules, led by a required_version pin that excludes OpenTofu 1.11.14.

Get it on Whop - $12 onceGet it on Gumroad

Who it's for

Platform and DevOps engineers moving Terraform repos and CI pipelines from HCP Terraform to OpenTofu.

What breaks, and when

OpenTofu 1.11 and earlier check required_version against the OpenTofu version, so tofu init stops on a Terraform pin; the HCP Terraform Free plan stops at 500 managed resources.

What it printed on the bundled example

== OpenTofu Migration Lint — 9 findings (1 error, 4 warnings, 4 info) in 1 file · 13 rules
  ERROR main.tf:2  [required-version-pin]
        required_version excludes OpenTofu 1.11.14: OpenTofu 1.11 and earlier check required_version against the OpenTofu version, so tofu init stops on this Terraform pin. Fix: Keep the Terraform pin in versions.tf and add versions.tofu with language { compatible_with { opentofu = ">= 1.12" } } (OpenTofu 1.12+); when both files exist OpenTofu ignores versions.tf.
  INFO  main.tf:2  [required-version-bsl]
        required_version asks for Terraform 1.6.0 or later, which is Business Source License code: the Terraform LICENSE covers "Terraform Version 1.6.0 or later" (Licensor: IBM). Fix: Record the Terraform pin for Terraform only and declare OpenTofu support in versions.tofu: language { compatible_with { opentofu = ">= 1.12" } }.
  WARN  main.tf:4  [hcp-cloud-block]
        cloud block: state and runs live in HCP Terraform. The HCP Terraform Free plan stops at 500 managed resources and 1 concurrent run, and OpenTofu cannot use a cloud block and a state backend in the same configuration. Fix: Back up state first (terraform state pull > backup.tfstate), move it to an s3, gcs, azurerm or pg backend, then run tofu init and tofu plan and expect "No changes".
  WARN  main.tf:13  [hashicorp-registry-host]
        Provider source written with the registry.terraform.io host. The OpenTofu migration guide's tofu init step downloads providers from the OpenTofu registry, which only applies to host-less sources. Fix: Write the source without a host, e.g. source = "hashicorp/aws", then run tofu init -upgrade and commit the new .terraform.lock.hcl.

What you get

Install

Unzip into ~/.claude/skills/ (all projects) or your-repo/.claude/skills/ (one repo), then ask Claude Code: "We're moving this repo from Terraform to OpenTofu. What will break or stay tied to HCP Terraform? Don't edit anything yet.". Needs Node 16+.

unzip opentofu-migration-check.zip -d ~/.claude/skills/

Ask Claude

“We're moving this repo from Terraform to OpenTofu. What will break or stay tied to HCP Terraform? Don't edit anything yet.”

What it does not do

It does not run terraform or tofu, read state or move it; no network calls, no edits without your OK.

FAQ

What is a Claude Code skill?

A folder with a SKILL.md and scripts that Claude Code loads when your request matches it. You ask in plain words and Claude runs the scanner the skill carries.

How is this different from asking Claude without the skill?

The skill carries a dated rule table and a scanner that reads every file, so Claude quotes the exact date and line instead of answering from memory.

Does it send my code anywhere?

It does not run terraform or tofu, read state or move it; no network calls, no edits without your OK.

How do I install it?

Unzip into ~/.claude/skills/ (all projects) or your-repo/.claude/skills/ (one repo), then ask Claude Code: "We're moving this repo from Terraform to OpenTofu. What will break or stay tied to HCP Terraform? Don't edit anything yet.". Needs Node 16+.

What do I get when I buy?

The zip. On Whop it is in your library as a download lesson with the zip attached; on Gumroad it is the product file.