How OpenTofu’s scores are calculated
The full audit trail, recomputed from the verdict data at build time through the same code that produced the leaderboard: verdict × quality × story weight per cell, cells sum to dimension scores, dimensions blend into the PA Score. Every number on the product page is reproducible from this page alone; for why the formula looks like this, see the methodology.
verdict factors: full ×1.0 · partial ×0.6 · disputed ×0.3 · none ×0.0 · n/a excluded from both sides · cell points = weight × quality × factor · cell max = weight × 10
PA Score30/100
Agent-ready 40.9 × 0.30 = 12.27
API quality 4.3 × 0.20 = 0.86
Openness 63.5 × 0.20 = 12.70
Built-in AI 12.0 × 0.15 = 1.80
Automation 17.0 × 0.15 = 2.55
(12.27 + 0.86 + 12.70 + 1.80 + 2.55) ÷ (0.30 + 0.20 + 0.20 + 0.15 + 0.15) = 30.18 ÷ 1.00 = 30.2
Scores are stored to 1 decimal; the product page’s pills round to whole numbers for display. Each dimension below shows the stories, verdicts, and cited evidence behind its number.
Agent-ready40.9/100×0.30 of the PA blend
Outside-in: can YOUR agent reach and drive this product — API, MCP, CLI, headless runs, agent docs.
Point an agent at llms.txt or agent-oriented docsweight 2
2 (weight) × 0 (quality) × 0.0 (none) = 0.0 of 20 max
Run the product headlessly / in CI for automationweight 2
2 (weight) × 9 (quality) × 1.0 (full) = 18.0 of 20 max
- [probe] https://opentofu.org/docs/cli/commands/plan/“PROBE cli-plan (local run, macOS, OpenTofu v1.12.6): on the same minimal config used for Terraform, `tofu init -input=false` exited 0 and `tofu plan -input=false -detailed-exitcode -out=plan.out` exited 2 (changes present) proposing 1 create — drop-in Terraform-compatible headless plan workflow.”
- [probe] https://opentofu.org/docs/cli/commands/show/“PROBE cli-plan-json (local run): `tofu show -json plan.out` exited 0 and emitted machine-readable plan JSON (format_version 1.2) with planned_values identical in shape to Terraform's, parseable by the same agent tooling.”
- [probe] https://opentofu.org/docs/cli/commands/apply/“PROBE cli-apply (local run): `tofu apply -input=false -auto-approve plan.out` exited 0 ("Apply complete! Resources: 1 added") and `tofu destroy -auto-approve` exited 0 — full headless plan→apply→destroy loop, keyless, installed via `brew install opentofu`.”
- [claimed-docs] https://opentofu.org/docs/cli/commands/plan/“The `tofu plan` command creates an execution plan, which lets you preview the changes that OpenTofu plans to make to your infrastructure.”
- [claimed-docs] https://opentofu.org/docs/cli/commands/plan/“You can use the optional `-out=FILE` option to save the generated plan to a file on disk, which you can later execute by passing the file to `tofu apply` as an extra argument.”
Plug MCP servers into this product so it can use their toolsweight 3
n/a — not applicable to this product: excluded from numerator and denominator
no evidence cited — the verdict rests on absence of evidence, re-checked on refresh
Connect an agent via an official MCP serverweight 3
n/a — not applicable to this product: excluded from numerator and denominator
no evidence cited — the verdict rests on absence of evidence, re-checked on refresh
Use an official CLIweight 2
2 (weight) × 9 (quality) × 1.0 (full) = 18.0 of 20 max
- [probe] https://opentofu.org/docs/cli/“official CLI documented at https://opentofu.org/docs/cli/”
- [probe] https://opentofu.org/docs/cli/commands/plan/“PROBE cli-plan (local run, macOS, OpenTofu v1.12.6): on the same minimal config used for Terraform, `tofu init -input=false` exited 0 and `tofu plan -input=false -detailed-exitcode -out=plan.out` exited 2 (changes present) proposing 1 create — drop-in Terraform-compatible headless plan workflow.”
- [probe] https://opentofu.org/docs/cli/commands/show/“PROBE cli-plan-json (local run): `tofu show -json plan.out` exited 0 and emitted machine-readable plan JSON (format_version 1.2) with planned_values identical in shape to Terraform's, parseable by the same agent tooling.”
- [probe] https://opentofu.org/docs/cli/commands/apply/“PROBE cli-apply (local run): `tofu apply -input=false -auto-approve plan.out` exited 0 ("Apply complete! Resources: 1 added") and `tofu destroy -auto-approve` exited 0 — full headless plan→apply→destroy loop, keyless, installed via `brew install opentofu`.”
- [claimed-docs] https://opentofu.org/docs/cli/commands/plan/“The `tofu plan` command creates an execution plan, which lets you preview the changes that OpenTofu plans to make to your infrastructure.”
- [claimed-docs] https://opentofu.org/docs/cli/commands/plan/“You can use the optional `-out=FILE` option to save the generated plan to a file on disk, which you can later execute by passing the file to `tofu apply` as an extra argument.”
Drive the product through a documented public APIweight 3
3 (weight) × 5 (quality) × 0.6 (partial) = 9.0 of 30 max
- [probe] https://opentofu.org/docs/cli/commands/plan/“PROBE cli-plan (local run, macOS, OpenTofu v1.12.6): on the same minimal config used for Terraform, `tofu init -input=false` exited 0 and `tofu plan -input=false -detailed-exitcode -out=plan.out` exited 2 (changes present) proposing 1 create — drop-in Terraform-compatible headless plan workflow.”
- [probe] https://opentofu.org/docs/cli/commands/show/“PROBE cli-plan-json (local run): `tofu show -json plan.out` exited 0 and emitted machine-readable plan JSON (format_version 1.2) with planned_values identical in shape to Terraform's, parseable by the same agent tooling.”
- [probe] https://opentofu.org/docs/cli/commands/apply/“PROBE cli-apply (local run): `tofu apply -input=false -auto-approve plan.out` exited 0 ("Apply complete! Resources: 1 added") and `tofu destroy -auto-approve` exited 0 — full headless plan→apply→destroy loop, keyless, installed via `brew install opentofu`.”
- [probe] https://opentofu.org/llms.txt“PROBE llms.txt: HTTP 404 at https://opentofu.org/llms.txt”
- [probe] https://opentofu.org/docs/.md“PROBE docs-md: HTTP 404 at https://opentofu.org/docs/.md”
- [probe] https://opentofu.org/openapi.json“PROBE openapi: all candidate paths 404 (https://opentofu.org/openapi.json, https://opentofu.org/swagger.json, https://opentofu.org/api/openapi.json, https://opentofu.org/.well-known/openapi.json)”
- [probe] https://opentofu.org/docs/cli/“official CLI documented at https://opentofu.org/docs/cli/”
Issue scoped/least-privilege API credentials for an agentweight 2
n/a — not applicable to this product: excluded from numerator and denominator
no evidence cited — the verdict rests on absence of evidence, re-checked on refresh
Build against official SDKsweight 2
2 (weight) × 0 (quality) × 0.0 (none) = 0.0 of 20 max
- [probe] https://opentofu.org/llms.txt“PROBE llms.txt: HTTP 404 at https://opentofu.org/llms.txt”
- [probe] https://opentofu.org/docs/.md“PROBE docs-md: HTTP 404 at https://opentofu.org/docs/.md”
- [probe] https://opentofu.org/openapi.json“PROBE openapi: all candidate paths 404 (https://opentofu.org/openapi.json, https://opentofu.org/swagger.json, https://opentofu.org/api/openapi.json, https://opentofu.org/.well-known/openapi.json)”
- [probe] https://opentofu.org/docs/cli/“official CLI documented at https://opentofu.org/docs/cli/”
Subscribe to events via webhooksweight 2
n/a — not applicable to this product: excluded from numerator and denominator
no evidence cited — the verdict rests on absence of evidence, re-checked on refresh
Agent-ready = 45.0 ÷ 110 × 100 = 40.9
API quality4.3/100×0.20 of the PA blend
The programmable surface once an agent is there — machine-readable spec, interactive docs, sandbox, versioning discipline.
Explore an interactive API reference with runnable examplesweight 2
2 (weight) × 0 (quality) × 0.0 (none) = 0.0 of 20 max
- [probe] https://opentofu.org/openapi.json“PROBE openapi: all candidate paths 404 (https://opentofu.org/openapi.json, https://opentofu.org/swagger.json, https://opentofu.org/api/openapi.json, https://opentofu.org/.well-known/openapi.json)”
- [probe] https://opentofu.org/llms.txt“PROBE llms.txt: HTTP 404 at https://opentofu.org/llms.txt”
- [claimed-docs] https://opentofu.org/docs/cli/commands/plan/“The `tofu plan` command creates an execution plan, which lets you preview the changes that OpenTofu plans to make to your infrastructure.”
- [claimed-docs] https://opentofu.org/docs/cli/commands/test/“The `tofu test` command lets you test your OpenTofu configuration by creating real infrastructure and checking that the required conditions (assertions) are met. Once the test is complete, OpenTofu destroys the resources it created.”
Download a machine-readable API spec (OpenAPI or equivalent)weight 2
2 (weight) × 0 (quality) × 0.0 (none) = 0.0 of 20 max
- [probe] https://opentofu.org/openapi.json“PROBE openapi: all candidate paths 404 (https://opentofu.org/openapi.json, https://opentofu.org/swagger.json, https://opentofu.org/api/openapi.json, https://opentofu.org/.well-known/openapi.json)”
- [probe] https://opentofu.org/llms.txt“PROBE llms.txt: HTTP 404 at https://opentofu.org/llms.txt”
- [probe] https://opentofu.org/docs/.md“PROBE docs-md: HTTP 404 at https://opentofu.org/docs/.md”
Test against a sandbox environment without touching production dataweight 1
1 (weight) × 5 (quality) × 0.6 (partial) = 3.0 of 10 max
- [claimed-docs] https://opentofu.org/docs/cli/commands/test/“The `tofu test` command lets you test your OpenTofu configuration by creating real infrastructure and checking that the required conditions (assertions) are met. Once the test is complete, OpenTofu destroys the resources it created.”
- [claimed-docs] https://opentofu.org/docs/cli/commands/test/“The `tofu test` command lets you test your OpenTofu configuration by creating real infrastructure and checking that the required conditions (assertions) are met.”
- [claimed-docs] https://opentofu.org“Dynamically generate provider configurations with for_each, eliminating repetitive code and improving maintainability. Perfect for multi-region deployments, multi-environment setups (dev/staging/prod)...”
- [claimed-docs] https://opentofu.org/docs/cli/commands/plan/“The `tofu plan` command creates an execution plan, which lets you preview the changes that OpenTofu plans to make to your infrastructure.”
- [probe] https://opentofu.org/docs/cli/commands/plan/“PROBE cli-plan (local run, macOS, OpenTofu v1.12.6): on the same minimal config used for Terraform, `tofu init -input=false` exited 0 and `tofu plan -input=false -detailed-exitcode -out=plan.out` exited 2 (changes present) proposing 1 create — drop-in Terraform-compatible headless plan workflow.”
Rely on versioned APIs with a documented deprecation policyweight 2
2 (weight) × 0 (quality) × 0.0 (none) = 0.0 of 20 max
- [probe] https://opentofu.org/docs/cli/commands/show/“PROBE cli-plan-json (local run): `tofu show -json plan.out` exited 0 and emitted machine-readable plan JSON (format_version 1.2) with planned_values identical in shape to Terraform's, parseable by the same agent tooling.”
- [probe] https://opentofu.org/docs/cli/“official CLI documented at https://opentofu.org/docs/cli/”
API quality = 3.0 ÷ 70 × 100 = 4.3
Openness63.5/100×0.20 of the PA blend
Can you leave, inspect, or self-host — data export, open source, portability.
Do everything through the API that I can do in the UIweight 2
n/a — not applicable to this product: excluded from numerator and denominator
- [probe] https://opentofu.org/docs/cli/“official CLI documented at https://opentofu.org/docs/cli/”
- [probe] https://opentofu.org/docs/cli/commands/plan/“PROBE cli-plan (local run, macOS, OpenTofu v1.12.6): on the same minimal config used for Terraform, `tofu init -input=false` exited 0 and `tofu plan -input=false -detailed-exitcode -out=plan.out` exited 2 (changes present) proposing 1 create — drop-in Terraform-compatible headless plan workflow.”
- [probe] https://opentofu.org/docs/cli/commands/apply/“PROBE cli-apply (local run): `tofu apply -input=false -auto-approve plan.out` exited 0 ("Apply complete! Resources: 1 added") and `tofu destroy -auto-approve` exited 0 — full headless plan→apply→destroy loop, keyless, installed via `brew install opentofu`.”
- [probe] https://opentofu.org/openapi.json“PROBE openapi: all candidate paths 404 (https://opentofu.org/openapi.json, https://opentofu.org/swagger.json, https://opentofu.org/api/openapi.json, https://opentofu.org/.well-known/openapi.json)”
Export all of my data in open formats and leaveweight 3
3 (weight) × 6 (quality) × 0.6 (partial) = 10.8 of 30 max
- [claimed-docs] https://opentofu.org/manifesto/“Now that we are part of the Linux Foundation, we can guarantee that OpenTofu will remain: Truly open source”
- [claimed-docs] https://opentofu.org/manifesto/“Backwards-compatible - so that the existing code can drive value for years to come”
- [probe] https://opentofu.org/docs/cli/commands/show/“PROBE cli-plan-json (local run): `tofu show -json plan.out` exited 0 and emitted machine-readable plan JSON (format_version 1.2) with planned_values identical in shape to Terraform's, parseable by the same agent tooling.”
- [probe] https://opentofu.org/llms.txt“PROBE llms.txt: HTTP 404 at https://opentofu.org/llms.txt”
- [community] https://news.ycombinator.com/item?id=40365198“Fortunately using OpenTofu is just s/terraform/opentofu/g at this point.”
Read the product's source under an open licenseweight 2
2 (weight) × 8 (quality) × 1.0 (full) = 16.0 of 20 max
- [github] https://github.com/opentofu/opentofu“OpenTofu builds a graph of all your resources, and parallelizes the creation and modification of any non-dependent resources.”
- [claimed-docs] https://opentofu.org/manifesto/“Now that we are part of the Linux Foundation, we can guarantee that OpenTofu will remain: Truly open source”
- [community] https://news.ycombinator.com/item?id=37581132“It seems the license info is not readily available on the website. I can easily find it in the GitHub repo but not on the website. I think it would be nice to have it clearly visible on the website, too.”
Self-host the core productweight 3
3 (weight) × 8 (quality) × 1.0 (full) = 24.0 of 30 max
- [claimed-docs] https://opentofu.org/docs/intro/install/“You can install OpenTofu via a wide range of methods. Please select your operating system and installation method”
- [claimed-docs] https://opentofu.org/manifesto/“Now that we are part of the Linux Foundation, we can guarantee that OpenTofu will remain: Truly open source”
- [probe] https://opentofu.org/docs/cli/commands/plan/“PROBE cli-plan (local run, macOS, OpenTofu v1.12.6): on the same minimal config used for Terraform, `tofu init -input=false` exited 0 and `tofu plan -input=false -detailed-exitcode -out=plan.out` exited 2 (changes present) proposing 1 create — drop-in Terraform-compatible headless plan workflow.”
- [probe] https://opentofu.org/docs/cli/commands/show/“PROBE cli-plan-json (local run): `tofu show -json plan.out` exited 0 and emitted machine-readable plan JSON (format_version 1.2) with planned_values identical in shape to Terraform's, parseable by the same agent tooling.”
- [probe] https://opentofu.org/docs/cli/commands/apply/“PROBE cli-apply (local run): `tofu apply -input=false -auto-approve plan.out` exited 0 ("Apply complete! Resources: 1 added") and `tofu destroy -auto-approve` exited 0 — full headless plan→apply→destroy loop, keyless, installed via `brew install opentofu`.”
- [claimed-docs] https://opentofu.org/manifesto/“Backwards-compatible - so that the existing code can drive value for years to come”
Openness = 50.8 ÷ 80 × 100 = 63.5
Built-in AI12.0/100×0.15 of the PA blend
Inside-out: how agentic the product itself is for its users — built-in assistants, autonomous features.
Get AI-generated insights and suggestions from my data inside the productweight 2
n/a — not applicable to this product: excluded from numerator and denominator
no evidence cited — the verdict rests on absence of evidence, re-checked on refresh
Set up automations that run autonomously in the backgroundweight 2
2 (weight) × 4 (quality) × 0.6 (partial) = 4.8 of 20 max
- [probe] https://opentofu.org/docs/cli/commands/plan/“PROBE cli-plan (local run, macOS, OpenTofu v1.12.6): on the same minimal config used for Terraform, `tofu init -input=false` exited 0 and `tofu plan -input=false -detailed-exitcode -out=plan.out` exited 2 (changes present) proposing 1 create — drop-in Terraform-compatible headless plan workflow.”
- [probe] https://opentofu.org/docs/cli/commands/show/“PROBE cli-plan-json (local run): `tofu show -json plan.out` exited 0 and emitted machine-readable plan JSON (format_version 1.2) with planned_values identical in shape to Terraform's, parseable by the same agent tooling.”
- [probe] https://opentofu.org/docs/cli/commands/apply/“PROBE cli-apply (local run): `tofu apply -input=false -auto-approve plan.out` exited 0 ("Apply complete! Resources: 1 added") and `tofu destroy -auto-approve` exited 0 — full headless plan→apply→destroy loop, keyless, installed via `brew install opentofu`.”
Delegate tasks to a built-in AI assistant inside the productweight 3
n/a — not applicable to this product: excluded from numerator and denominator
no evidence cited — the verdict rests on absence of evidence, re-checked on refresh
Operate the product with natural-language commandsweight 2
2 (weight) × 0 (quality) × 0.0 (none) = 0.0 of 20 max
- [probe] https://opentofu.org/llms.txt“PROBE llms.txt: HTTP 404 at https://opentofu.org/llms.txt”
- [probe] https://opentofu.org/docs/.md“PROBE docs-md: HTTP 404 at https://opentofu.org/docs/.md”
- [probe] https://opentofu.org/docs/cli/“official CLI documented at https://opentofu.org/docs/cli/”
- [claimed-docs] https://opentofu.org/docs/cli/commands/plan/“The `tofu plan` command creates an execution plan, which lets you preview the changes that OpenTofu plans to make to your infrastructure.”
Built-in AI = 4.8 ÷ 40 × 100 = 12.0
Automation17.0/100×0.15 of the PA blend
Depth of automation primitives — rules, scheduling, bulk operations, webhooks.
Perform bulk operations across many items at onceweight 2
2 (weight) × 6 (quality) × 0.6 (partial) = 7.2 of 20 max
- [github] https://github.com/opentofu/opentofu“OpenTofu builds a graph of all your resources, and parallelizes the creation and modification of any non-dependent resources.”
- [claimed-docs] https://opentofu.org“Selectively exclude resources from operations with the -exclude flag. This provides more control during testing and rollouts, allowing you to focus on specific parts of your infrastructure.”
- [claimed-docs] https://opentofu.org“Dynamically generate provider configurations with for_each, eliminating repetitive code and improving maintainability.”
- [claimed-docs] https://opentofu.org“Update all your modules programmatically with a single variable change. Never miss updating a module version by accident - keep your infrastructure consistent and secure with centralized version management.”
- [claimed-docs] https://opentofu.org“Dynamically generate provider configurations with for_each, eliminating repetitive code and improving maintainability. Perfect for multi-region deployments, multi-environment setups (dev/staging/prod)...”
Define rules that trigger actions automatically on eventsweight 3
3 (weight) × 0 (quality) × 0.0 (none) = 0.0 of 30 max
no evidence cited — the verdict rests on absence of evidence, re-checked on refresh
Schedule recurring jobs or workflowsweight 2
n/a — not applicable to this product: excluded from numerator and denominator
no evidence cited — the verdict rests on absence of evidence, re-checked on refresh
Version, review, and roll back my automationsweight 1
1 (weight) × 5 (quality) × 0.6 (partial) = 3.0 of 10 max
- [claimed-docs] https://opentofu.org“Version control your infrastructure with OpenTofu. Track changes, collaborate with your team, and deploy DNS configurations with a single command.”
- [claimed-docs] https://opentofu.org/docs/cli/commands/plan/“The `tofu plan` command creates an execution plan, which lets you preview the changes that OpenTofu plans to make to your infrastructure.”
- [claimed-docs] https://opentofu.org/docs/cli/commands/plan/“You can use the optional `-out=FILE` option to save the generated plan to a file on disk, which you can later execute by passing the file to `tofu apply` as an extra argument.”
- [probe] https://opentofu.org/docs/cli/commands/plan/“PROBE cli-plan (local run, macOS, OpenTofu v1.12.6): on the same minimal config used for Terraform, `tofu init -input=false` exited 0 and `tofu plan -input=false -detailed-exitcode -out=plan.out` exited 2 (changes present) proposing 1 create — drop-in Terraform-compatible headless plan workflow.”
- [probe] https://opentofu.org/docs/cli/commands/apply/“PROBE cli-apply (local run): `tofu apply -input=false -auto-approve plan.out` exited 0 ("Apply complete! Resources: 1 added") and `tofu destroy -auto-approve` exited 0 — full headless plan→apply→destroy loop, keyless, installed via `brew install opentofu`.”
Automation = 10.2 ÷ 60 × 100 = 17.0