Terraform and OpenTofu Guide
agentscope-ai/QwenPaw
Guidance for writing and testing Terraform and OpenTofu code: module structure, naming, test approaches, CI/CD workflows, state handling and security scanning.
Add a new Terraform Cloud variable for the Render-hosted backend across production, sandbox, and test.
$ npx skills add polarsource/polar --skill render-env -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install polarsource/polar render-env --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/polarsource/polar.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/render-env .claude/skills/render-env && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "render-env" agent skill from https://github.com/polarsource/polar/tree/main/.agents/skills/render-env into .claude/skills/render-env/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "render-env", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/polarsource/polar/tree/main/.agents/skills/render-envType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add polarsource/polar --skill render-env -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install polarsource/polar render-env --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/polarsource/polar.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/render-env .agents/skills/render-env && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "render-env" agent skill from https://github.com/polarsource/polar/tree/main/.agents/skills/render-env into .agents/skills/render-env/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "render-env", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add polarsource/polar --skill render-env -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install polarsource/polar render-env --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/polarsource/polar.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/render-env .cursor/skills/render-env && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "render-env" agent skill from https://github.com/polarsource/polar/tree/main/.agents/skills/render-env into .cursor/skills/render-env/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "render-env", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/polarsource/polar.git --path .agents/skills/render-env--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add polarsource/polar --skill render-env -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install polarsource/polar render-env --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/polarsource/polar.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/render-env .gemini/skills/render-env && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "render-env" agent skill from https://github.com/polarsource/polar/tree/main/.agents/skills/render-env into .gemini/skills/render-env/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "render-env", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install polarsource/polar render-envInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add polarsource/polar --skill render-env -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/polarsource/polar.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/render-env .github/skills/render-env && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "render-env" agent skill from https://github.com/polarsource/polar/tree/main/.agents/skills/render-env into .github/skills/render-env/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "render-env", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add polarsource/polar --skill render-env -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install polarsource/polar render-env --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/polarsource/polar.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/render-env .opencode/skills/render-env && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "render-env" agent skill from https://github.com/polarsource/polar/tree/main/.agents/skills/render-env into .opencode/skills/render-env/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "render-env", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
render-envAdd a new Terraform Cloud variable for the Render-hosted backend across production, sandbox, and test.
Render Env is an agent skill from polarsource/polar. Add a new Terraform Cloud variable for the Render-hosted backend across production, sandbox, and test. Declares the tfevariable in terraform/global/{production,sandbox,test}.tf and the matching variable {} block in terraform/{production,sandbox,test}/variables.tf, then reminds the user to wire it into render.tf / the renderservice module.
Its SKILL.md is about 1.9k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in DevOps & Cloud, covering Infrastructure as code. It works with Terraform. The repository describes itself as: Polar — A billing platform for the intelligence era. The licence is Apache-2.0.
4 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 599c727. It shows what the files ask for, not the result of running them.
Pre-approves these tools, so the agent can use them without asking each time:
ReadEditWriteBashGrepGlobFrom allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
terraformstripegitFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use git, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
POLAR_PLAIN_TOKENFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Render Env loads about 1.9k tokens when it runs. Until then it costs about 88 tokens; SKILL.md has 904 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check noted patterns worth knowing about, such as sudo or a known installer.
allowed-tools: Read, Edit, Write, Bash, Grep, GlobAutomated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from polarsource/polar at commit 599c727, republished under its Apache-2.0 licence (© polarsource). 904 words, ~1,891 tokens.
.claude/skills/render-env/SKILL.md (or your agent's skills folder).This skill declares a new Terraform Cloud variable so a value can be set via the TFC UI and consumed by the Render backend services. It only does the plumbing — it does not wire the variable into a Render env group. Wiring requires picking the right *_config / *_secrets object in terraform/modules/render_service/, which is task-specific and the user should drive.
The skill takes two positional args from the invocation: /render-env <name> <description>.
${name} — the Terraform variable name in snake_case. Used verbatim as the TFC variable key, the tfe_variable resource suffix, and the variable block name. Example: stripe_climate_api_key.${description} — a short human-readable description. Used in the description attribute and (with the env appended) in the per-env tfe_variable description. Example: Stripe Climate API key.If either arg is missing, ask the user before doing anything. Also ask:
true (almost everything in these files is sensitive). Only set false for non-secret config strings (cf. slo_report_slack_channel, customer_portal_url_overrides).production, sandbox, test). The user may want to skip one — test in particular often omits variables that aren't exercised there.Do not ask about lifecycle { ignore_changes = [value] }. New variables here have no value baked into the Terraform code, so there's nothing for Terraform to overwrite — TFC just holds whatever's typed into the UI, and ignore_changes would be a no-op. The handful of existing blocks that include it (e.g. polar_organization_id, customer_portal_url_overrides) seed a default value in code and want UI overrides to stick; that's a different shape from a fresh secret and the user will tell you up-front if they want it.
Follow the modern bare-key pattern that recent additions use (e.g. polar_access_token, tinybird_api_token, customer_portal_url_overrides):
key is the bare name: key = "${name}" — no _production / _sandbox / _test suffix on the key. Each variable set is per-workspace so the key doesn't need to be globally unique.tfe_variable resource label does get the env suffix: resource "tfe_variable" "${name}_${env}".variable block in terraform/${env}/variables.tf uses the bare name: variable "${name}". This lets render.tf reference it uniformly as var.${name} across all envs.A handful of older variables (e.g. google_client_id_production, backend_secret_production) use a _production/_sandbox-suffixed key and matching variable. Don't replicate that pattern for new additions — it's legacy.
For each selected ${env} in production, sandbox, test, append a block to terraform/global/${env}.tf (after the existing tfe_variable resources, before the file ends):
resource "tfe_variable" "${name}_${env}" {
key = "${name}"
category = "terraform"
description = "${description} for ${env}"
sensitive = ${sensitive}
variable_set_id = tfe_variable_set.${env}.id
}Only add a lifecycle { ignore_changes = [value] } block or a value = "..." line if the user explicitly asks for one (rare — usually let TFC hold the value).
Use Edit with enough surrounding context that the insertion lands at the correct spot. Prefer appending after the last existing tfe_variable resource in the file rather than rewriting the file.
For each selected ${env}, append a block to terraform/${env}/variables.tf:
variable "${name}" {
description = "${description}"
type = string
sensitive = ${sensitive}
}Drop the sensitive = true line when ${sensitive} is false. Drop nothing else.
Run:
terraform fmt -recursive terraformfrom the repo root. If terraform isn't on PATH, note it and skip — the formatting is a nicety, not required.
Report to the user:
terraform/modules/render_service/variables.tf. Pick by purpose:backend_config — non-sensitive backend env vars (URLs, flags, log level, tax processor list).backend_secrets — sensitive backend env vars (API keys, tokens, signing secrets).render_env_group blocks (stripe, github, logfire, tinybird, aws_s3, worker_sqs, apple, prometheus, slo_report, google, etc.) each have their own object — use the matching one when the var belongs to a clear bucket.optional(string, "<default>") if you want a module-level default; otherwise plain string.render_env_group block in terraform/modules/render_service/main.tf as POLAR_${NAME_UPPER} = { value = var.<object>.<field> }. Two backend groups exist:render_env_group "backend" — applied to every environment.render_env_group "backend_production" — production-only values (e.g. POLAR_PLAIN_TOKEN, ...). Put a var here when sandbox/test should not see it.terraform/${env}/render.tf module call, e.g. backend_secrets = { ... ${field} = var.${name} ... }. Sandbox and test won't have this line if the var is production-only.POLAR_* env var, also add the field to the Settings class in server/polar/config.py (Pydantic BaseSettings with env_prefix="polar_"; the env var name is POLAR_<FIELD_NAME>).tfe_variableChoose the right shape up-front:
render.tf (e.g. tax_processors = "[\"stripe\"]"): use when the value is static and you're fine editing + PR'ing terraform to change it.tfe_variable via this skill: use when the value is a secret or needs to be editable from the TFC UI without a code deploy. Don't hardcode a "{}" / "" default in render.tf for something that's supposed to be UI-tunable — it defeats the point.terraform/global/main.tf (the cross-org "Global Settings" set). Per-env sets in global/{env}.tf shadow it, so an entry in main.tf is dead weight when there's already a per-env one.value = "..." unless the user asks. The point of a tfe_variable is that it can be set in the TFC UI.render.tf or the render_service module yourself — that's a structural decision (which secrets object? new object?) the user should make.git add or commit. Leave the changes staged for the user to review.© polarsource, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .agents/skills/render-env of polarsource/polar.
Open the folder on GitHubat commit 599c727
Render Env next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Render Env this skillpolarsource/polar | 10k | — | ~1.9k | Automated safety check: Notes | Apache-2.0 | |
| Terraform and OpenTofu Guideagentscope-ai/QwenPaw | 35k | 6 repos | ~4.2k | Automated safety check: Pass | Apache-2.0 | |
| Terraform Skillantonbabenko/terraform-skill | 2.4k | 1 repos | ~5.1k | Automated safety check: Pass | Apache-2.0 | |
| Senior DevOps Toolkitmaslennikov-ig/claude-code-orchestrator-kit | 259 | 6 repos | ~1.1k | Automated safety check: Notes | Custom licence | |
| Cloudflarehodgef/apiker | 127 | 7 repos | ~2.2k | Automated safety check: Pass | MIT | |
| Terravision Cloud Diagramspatrickchugh/terravision | 1.6k | — | ~5.6k | Automated safety check: Notes | AGPL-3.0-only |
agentscope-ai/QwenPaw
Guidance for writing and testing Terraform and OpenTofu code: module structure, naming, test approaches, CI/CD workflows, state handling and security scanning.
antonbabenko/terraform-skill
A skill your agent uses when writing, reviewing, or debugging Terraform/OpenTofu modules, tests, CI, scans, or state ops - diagnoses failure mode (identity churn, secrets, blast radius, CI drift…
maslennikov-ig/claude-code-orchestrator-kit
Comprehensive DevOps skill for CI/CD, infrastructure automation, containerization, and cloud platforms (AWS, GCP, Azure). Includes pipeline setup…
hodgef/apiker
Comprehensive Cloudflare platform skill covering Workers, Pages, storage (KV, D1, R2), AI (Workers AI, Vectorize, Agents SDK), feature flags (Flagship), networking (Tunnel, Spectrum), security (WAF…
patrickchugh/terravision
Draw cloud architecture diagrams for AWS, Azure or GCP with the official provider icon sets, using TerraVision.
dmmulroy/cloudflare-skill
Comprehensive Cloudflare platform skill covering Workers, Pages, storage (KV, D1, R2), AI (Workers AI, Vectorize, Agents SDK), networking (Tunnel, Spectrum), security (WAF, DDoS), and…
polarsource/polar
Integrate Polar billing in server-side Python applications using the versioned Polar and PolarAsync clients.
polarsource/polar
Integrate Polar billing in server-side TypeScript applications using the versioned createPolar and createPolarCore clients.
polarsource/polar
Check a code change against the repo's Accepted Architecture Decision Records (ADRs) in handbook/engineering/decisions/ and report violations with citations.
polarsource/polar
Review changes to Polar's API contract — Pydantic schemas, FastAPI endpoints, OpenAPI output and the generated SDKs.
polarsource/polar
Review a diff that touches Polar's billing domain — subscriptions, cycles and crons, orders, billing entries, meters and usage, discounts, checkout, payments and dunning, refunds, disputes, payouts…
polarsource/polar
Prepare an interview task for a candidate, as part of our hiring process.
Works with
Categories
Add a new Terraform Cloud variable for the Render-hosted backend across production, sandbox, and test. Render Env is an agent skill from polarsource/polar. Add a new Terraform Cloud variable for the Render-hosted backend across production, sandbox, and test.
Render Env fits situations like: tasks that involve Infrastructure as code.
Run `npx skills add polarsource/polar --skill render-env -a claude-code`. Or copy the skill folder (.agents/skills/render-env in polarsource/polar) into .claude/skills/render-env in your project. Claude Code loads it when a task matches its description.
Run `npx skills add polarsource/polar --skill render-env -a codex`. Or copy the skill folder (.agents/skills/render-env in polarsource/polar) into .agents/skills/render-env in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add polarsource/polar --skill render-env -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/render-env, .gemini/skills/render-env, .github/skills/render-env and .opencode/skills/render-env in your project.
Going by SKILL.md and its folder, Render Env needs the command-line tools its instructions call (terraform, stripe and git) and credentials named POLAR_PLAIN_TOKEN. Our summary lists: A credential in POLAR_PLAIN_TOKEN. Its frontmatter pre-approves these tools: Read, Edit, Write, Bash, Grep, Glob.
SKILL.md contains no URLs. Its commands use git, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found notes only (pre-approves every shell command (allowed-tools: bash)), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.
Render Env is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 1.9k tokens (SKILL.md is roughly 7.6k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Render Env: Terraform and OpenTofu Guide (agentscope-ai/QwenPaw, 35k stars), Terraform Skill (antonbabenko/terraform-skill, 2.4k stars), Senior DevOps Toolkit (maslennikov-ig/claude-code-orchestrator-kit, 259 stars) and Cloudflare (hodgef/apiker, 127 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
polarsource (a GitHub organization) maintains it in polarsource/polar, which has 10,336 GitHub stars. The repository holds 18 skills in this directory. The repository was last updated on October 7, 2026.
Source: polarsource/polar on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.