Terravision Cloud Diagrams
patrickchugh/terravision
Draw cloud architecture diagrams for AWS, Azure or GCP with the official provider icon sets, using TerraVision.
Import existing Azure resources into Terraform using Azure CLI discovery and Azure Verified Modules (AVM).
$ npx skills add github/awesome-copilot --skill import-infrastructure-as-code -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install github/awesome-copilot import-infrastructure-as-code --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/github/awesome-copilot.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/import-infrastructure-as-code .claude/skills/import-infrastructure-as-code && 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 "import-infrastructure-as-code" agent skill from https://github.com/github/awesome-copilot/tree/main/skills/import-infrastructure-as-code into .claude/skills/import-infrastructure-as-code/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "import-infrastructure-as-code", 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/github/awesome-copilot/tree/main/skills/import-infrastructure-as-codeType 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 github/awesome-copilot --skill import-infrastructure-as-code -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install github/awesome-copilot import-infrastructure-as-code --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/github/awesome-copilot.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/import-infrastructure-as-code .agents/skills/import-infrastructure-as-code && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "import-infrastructure-as-code" agent skill from https://github.com/github/awesome-copilot/tree/main/skills/import-infrastructure-as-code into .agents/skills/import-infrastructure-as-code/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "import-infrastructure-as-code", 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 github/awesome-copilot --skill import-infrastructure-as-code -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install github/awesome-copilot import-infrastructure-as-code --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/github/awesome-copilot.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/import-infrastructure-as-code .cursor/skills/import-infrastructure-as-code && 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 "import-infrastructure-as-code" agent skill from https://github.com/github/awesome-copilot/tree/main/skills/import-infrastructure-as-code into .cursor/skills/import-infrastructure-as-code/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "import-infrastructure-as-code", 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/github/awesome-copilot.git --path skills/import-infrastructure-as-code--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 github/awesome-copilot --skill import-infrastructure-as-code -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install github/awesome-copilot import-infrastructure-as-code --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/github/awesome-copilot.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/import-infrastructure-as-code .gemini/skills/import-infrastructure-as-code && 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 "import-infrastructure-as-code" agent skill from https://github.com/github/awesome-copilot/tree/main/skills/import-infrastructure-as-code into .gemini/skills/import-infrastructure-as-code/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "import-infrastructure-as-code", 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 github/awesome-copilot import-infrastructure-as-codeInstalls 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 github/awesome-copilot --skill import-infrastructure-as-code -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/github/awesome-copilot.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/import-infrastructure-as-code .github/skills/import-infrastructure-as-code && 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 "import-infrastructure-as-code" agent skill from https://github.com/github/awesome-copilot/tree/main/skills/import-infrastructure-as-code into .github/skills/import-infrastructure-as-code/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "import-infrastructure-as-code", 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 github/awesome-copilot --skill import-infrastructure-as-code -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install github/awesome-copilot import-infrastructure-as-code --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/github/awesome-copilot.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/import-infrastructure-as-code .opencode/skills/import-infrastructure-as-code && 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 "import-infrastructure-as-code" agent skill from https://github.com/github/awesome-copilot/tree/main/skills/import-infrastructure-as-code into .opencode/skills/import-infrastructure-as-code/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "import-infrastructure-as-code", 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.
import-infrastructure-as-codeImport existing Azure resources into Terraform using Azure CLI discovery and Azure Verified Modules (AVM).
Import Infrastructure As Code is an agent skill from github/awesome-copilot, published by the product's own GitHub organization. Import existing Azure resources into Terraform using Azure CLI discovery and Azure Verified Modules (AVM). Use when asked to reverse-engineer live Azure infrastructure, generate Infrastructure as Code from existing subscriptions/resource groups/resource IDs, map dependencies, derive exact import addresses from downloaded module source, prevent configuration drift, and produce AVM-based Terraform files ready for validation and planning across any Azure resource type.
Its SKILL.md is about 4.7k 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 Microsoft Azure and Terraform. The repository describes itself as: Community-contributed instructions, agents, skills, and configurations to help you make the most of GitHub Copilot. The licence is MIT.
7 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 727ff2e. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
azterraformFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
raw.githubusercontent.comregistry.terraform.iogithub.comFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Import Infrastructure As Code loads about 4.7k tokens when it runs. Until then it costs about 125 tokens; SKILL.md has 2,074 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 found no risky patterns in SKILL.md.
Automated 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 github/awesome-copilot at commit 727ff2e, republished under its MIT licence (© github). 2,074 words, ~4,680 tokens.
.claude/skills/import-infrastructure-as-code/SKILL.md (or your agent's skills folder).Convert existing Azure infrastructure into maintainable Terraform code using discovery data and Azure Verified Modules.
Use this skill when the user asks to:
azurerm_* resourcesaz login)| Parameter | Required | Default | Description |
|---|---|---|---|
subscription-id | No | Active CLI context | Azure subscription used for subscription-scope discovery and context setting |
resource-group-name | No | None | Azure resource group used for resource-group-scope discovery |
resource-id | No | None | One or more Azure ARM resource IDs used for specific-resource-scope discovery |
At least one of subscription-id, resource-group-name, or resource-id is required.
Request one of these scopes before running discovery commands:
<subscription-id><resource-group-name><resource-id> valuesScope handling rules:
/subscriptions/.../providers/...) as cloud resource identifiers, not local file system paths.--ids arguments (for example az resource show --ids <resource-id>).cat, ls, read_file, glob searches) unless the user explicitly says they are local file paths.If scope is missing, ask for it explicitly and stop.
Run only the commands required for the selected scope.
For subscription scope:
az login
az account set --subscription <subscription-id>
az account show --query "{subscriptionId:id, name:name, tenantId:tenantId}" -o jsonExpected output: JSON object with subscriptionId, name, and tenantId.
For resource group or specific resource scope, az login is still required but az account set is optional if the active context is already correct.
When using specific resource scope, prefer direct --ids-based commands first and avoid extra discovery prompts for subscription or resource group unless needed for a concrete command.
Discover resources using the selected scopes. Ensure to fetch all necessary information for accurate Terraform generation.
# Subscription scope
az resource list --subscription <subscription-id> -o json
# Resource group scope
az resource list --resource-group <resource-group-name> -o json
# Specific resource scope
az resource show --ids <resource-id-1> <resource-id-2> ... -o jsonExpected output: JSON object or array containing Azure resource metadata (id, type, name, location, tags, properties).
Parse exported JSON and map:
propertiesIMPORTANT: Generate the following documentation and save it to a docs folder in the root of the project.
exported-resources.json with all discovered resources and their metadata, including dependencies and references.EXPORTED-ARCHITECTURE.MD file with a human-readable architecture overview based on the discovered resources and their relationships.Use the latest AVM version for each resource type.
Note: The following links always point to the latest version of the CSV files on the main branch. As intended, this means the files may change over time. If you require a point-in-time version, consider using a specific release tag in the URL.
https://raw.githubusercontent.com/Azure/Azure-Verified-Modules/refs/heads/main/docs/static/module-indexes/TerraformResourceModules.csvhttps://raw.githubusercontent.com/Azure/Azure-Verified-Modules/refs/heads/main/docs/static/module-indexes/TerraformPatternModules.csvhttps://raw.githubusercontent.com/Azure/Azure-Verified-Modules/refs/heads/main/docs/static/module-indexes/TerraformUtilityModules.csvUse the web tool or another suitable MCP method to get module information if not available locally in the .terraform folder.
Use AVM sources:
https://registry.terraform.io/modules/Azure/<module>/azurerm/latesthttps://github.com/Azure/terraform-azurerm-avm-res-<service>-<resource>Prefer AVM modules over handwritten azurerm_* resources when an AVM module exists.
When fetching module information from GitHub repositories, the README.md file in the root of the repository typically contains all detailed information about the module, for example: https://raw.githubusercontent.com/Azure/terraform-azurerm-avm-res-<service>-<resource>/refs/heads/main/README.md
This step is not optional. Before writing a single line of HCL for a module, fetch and
read the full README for that module. Do not rely on knowledge of the raw azurerm provider
or prior experience with other AVM modules.
For each selected AVM module, fetch its README:
https://raw.githubusercontent.com/Azure/terraform-azurerm-avm-res-<service>-<resource>/refs/heads/main/README.mdOr if the module is already downloaded after terraform init:
cat .terraform/modules/<module_key>/README.mdFrom the README, extract and record before writing code:
type.
Do not assume they match the raw azurerm provider argument names or block shapes.parent_id vs
resource_group_name), how child resources are expressed (inline map vs separate module),
and what syntax each input expects.Use the lessons below as examples of the type of mismatch that often causes imports to fail.
Do not assume these exact names apply to every AVM module. Always verify each selected module's
README and variables.tf.
avm-res-compute-virtualmachine (any version)
network_interfaces is a Required Input. NICs are owned by the VM module. Never
create standalone avm-res-network-networkinterface modules alongside a VM module —
define every NIC inline under network_interfaces.secure_boot_enabled = true
and vtpm_enabled = true. The security_type argument exists only under os_disk for
Confidential VM disk encryption and must not be used for TrustedLaunch.boot_diagnostics is a bool, not an object. Use boot_diagnostics = true; use the
separate boot_diagnostics_storage_account_uri variable if a storage URI is needed.extensions map. Do not create
standalone extension resources.avm-res-network-virtualnetwork (any version)
azurerm. Use parent_id (the full
resource group resource ID string) to specify the resource group, not resource_group_name.parent_id; none show resource_group_name.Generalized takeaway for all AVM modules:
variables.tf.azurerm_* resources.After terraform init downloads the modules, inspect each module's source files to determine
the exact Terraform resource addresses before writing any import {} blocks. Never write
import addresses from memory.
grep "^resource" .terraform/modules/<module_key>/main*.tfThis reveals whether the module uses azurerm_* or azapi_resource labels. For example,
avm-res-network-virtualnetwork exposes azapi_resource "vnet", not
azurerm_virtual_network "this".
grep "^module" .terraform/modules/<module_key>/main*.tfIf child resources are managed in a sub-module (subnets, extensions, etc.), the import address must include every intermediate module label:
module.<root_module_key>.module.<child_module_key>["<map_key>"].<resource_type>.<label>[<index>]count vs for_eachgrep -n "count\|for_each" .terraform/modules/<module_key>/main*.tfAny resource using count requires an index in the import address. When count = 1 (e.g.,
conditional Linux vs Windows selection), the address must end with [0]. Resources using
for_each use string keys, not numeric indexes.
These are examples only. Use them as templates for reasoning, then derive the exact addresses from the downloaded source code for the modules in your current import.
| Resource | Correct import to address pattern |
|---|---|
| AzAPI-backed VNet | module.<vnet_key>.azapi_resource.vnet |
| Subnet (nested, count-based) | module.<vnet_key>.module.subnet["<subnet_name>"].azapi_resource.subnet[0] |
| Linux VM (count-based) | module.<vm_key>.azurerm_linux_virtual_machine.this[0] |
| VM NIC | module.<vm_key>.azurerm_network_interface.virtualmachine_network_interfaces["<nic_key>"] |
| VM extension (default deploy_sequence=5) | module.<vm_key>.module.extension["<ext_name>"].azurerm_virtual_machine_extension.this |
| VM extension (deploy_sequence=1–4) | module.<vm_key>.module.extension_<n>["<ext_name>"].azurerm_virtual_machine_extension.this |
| NSG-NIC association | module.<vm_key>.azurerm_network_interface_security_group_association.this["<nic_key>-<nsg_key>"] |
Produce:
providers.tf with azurerm provider and required version constraintsmain.tf with AVM module blocks and explicit dependenciesvariables.tf for environment-specific valuesoutputs.tf for key IDs and endpointsterraform.tfvars.example with placeholder valuesAfter writing the initial configuration, compare every non-zero property of each discovered
live resource against the default value declared in the corresponding AVM module's
variables.tf. Any property where the live value differs from the module default must be
set explicitly in the Terraform configuration.
Pay particular attention to the following property categories, which are common sources of silent configuration drift:
idle_timeout_in_minutes defaults to 4; live
deployments often use 30)private_endpoint_network_policies defaults to
"Enabled"; existing subnets often have "Disabled")sku, allocation_method)Retrieve full live properties with explicit az commands, for example:
az network public-ip show --ids <resource_id> --query "{idleTimeout:idleTimeoutInMinutes, sku:sku.name, zones:zones}" -o json
az network vnet subnet show --ids <resource_id> --query "{privateEndpointPolicies:privateEndpointNetworkPolicies, delegation:delegations}" -o jsonDo not rely solely on az resource list output, which may omit nested or computed properties.
Pin module versions explicitly:
module "example" {
source = "Azure/<module>/azurerm"
version = "<latest-compatible-version>"
}Run:
terraform init
terraform fmt -recursive
terraform validate
terraform planExpected output: no syntax errors, no validation errors, and a plan that matches discovered infrastructure intent.
| Problem | Likely Cause | Action |
|---|---|---|
az command fails with authorization errors | Wrong tenant/subscription or missing RBAC role | Re-run az login, verify subscription context, confirm required permissions |
| Discovery output is empty | Incorrect scope or no resources in scope | Re-check scope input and run scoped list/show command again |
| No AVM module found for a resource type | Resource type not yet covered by AVM | Use native azurerm_* resource for that type and document the gap |
terraform validate fails | Missing variables or unresolved dependencies | Add required variables and explicit dependencies, then re-run validation |
| Unknown argument or variable not found in module | AVM variable name differs from azurerm provider argument name | Read the module README variables.tf or Optional Inputs section for the correct name |
| Import block fails — resource not found at address | Wrong provider label (azurerm_ vs azapi_), missing sub-module path, or missing [0] index | Run grep "^resource" .terraform/modules/<key>/main*.tf and grep "^module" to find exact address |
terraform plan shows unexpected ~ update on imported resource | Live value differs from AVM module default | Fetch live property with az <resource> show, compare to module default, add explicit value |
| Child-resource module gives "provider configuration not present" | Child resources declared as standalone modules even though parent module owns them | Check Required Inputs in README, remove incorrect standalone modules, and model child resources using the parent module's documented input structure |
| Nested child resource import fails with "resource not found" | Missing intermediate module path, wrong map key, or missing index | Inspect module blocks and count/for_each in source; build full nested import address including all module segments and required key/index |
| Tool tries to read ARM resource ID as file path or asks repeated scope questions | Resource ID not treated as --ids input, or agent did not trust already-provided scope | Treat ARM IDs strictly as cloud identifiers, use az ... --ids ..., and stop re-prompting once one valid scope is present |
When returning results, provide:
parent_id vs
resource_group_name). Skipping the README is the single most common cause of
code errors in AVM-based imports.terraform init, grep the downloaded
module source to discover the actual provider (azurerm vs azapi), resource labels,
sub-module nesting, and count vs for_each usage before writing any import {} block.--ids
arguments and API queries, not file IO tools. Only read local files when a real workspace
path is provided.terraform plan shows 0 destroys and 0
unwanted changes. Telemetry + create resources are acceptable. Any ~ update or
- destroy on real infrastructure resources must be resolved.© github, MIT. 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 skills/import-infrastructure-as-code of github/awesome-copilot.
Open the folder on GitHubat commit 727ff2e
We found 1 copy of this SKILL.md (exact, near-identical or edited) in other folders, from 1 other GitHub owner. This page covers the copy in github/awesome-copilot, which our catalogue first saw on October 7, 2026.
Import Infrastructure As Code 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 |
|---|---|---|---|---|---|---|
| Import Infrastructure As Code this skillgithub/awesome-copilot | 40k | 1 repos | ~4.7k | Automated safety check: Pass | MIT | |
| Terravision Cloud Diagramspatrickchugh/terravision | 1.6k | — | ~5.6k | Automated safety check: Notes | AGPL-3.0-only | |
| TerrasharkLukasNiessen/terrashark | 715 | — | ~843 | Automated safety check: Pass | MIT | |
| Provider Verificationmondoohq/mql | 411 | — | ~3.7k | Automated safety check: Pass | Custom licence | |
| Avm Tf AzapiAzure/terraform-azurerm-avm-ptn-alz | 135 | — | ~2.9k | Automated safety check: Pass | MIT | |
| Tirith MigrateStackGuardian/tirith | 167 | — | ~1.7k | Automated safety check: Pass | Apache-2.0 |
patrickchugh/terravision
Draw cloud architecture diagrams for AWS, Azure or GCP with the official provider icon sets, using TerraVision.
LukasNiessen/terrashark
Prevent Terraform/OpenTofu hallucinations by diagnosing and fixing failure modes: identity churn, secret exposure, blast-radius mistakes, CI drift, and compliance gate gaps.
mondoohq/mql
Verify mql provider resource/field changes against real cloud infrastructure.
Azure/terraform-azurerm-avm-ptn-alz
A skill your agent uses for AVM Terraform AzAPI resources, provider constraints, ARM schemas, parent IDs, resource types, retries, timeouts, response exports, replacement triggers, and…
StackGuardian/tirith
Translate existing policy-as-code into Tirith policies. An agent skill from StackGuardian/tirith.
StackGuardian/tirith
Generate a Tirith policy set for an existing Terraform or OpenTofu repository, covering organization standards such as required tags, naming conventions, allowed regions, permitted resource types…
github/awesome-copilot
Maps an unfamiliar codebase into seven evidence-backed documents in docs/codebase/, using a scan script and templates, for onboarding or architecture write-ups.
github/awesome-copilot
Designs Azure infrastructure from a natural-language description, or diagrams an existing resource group, then refines the design through conversation and deploys it with Bicep.
github/awesome-copilot
Generates, edits and validates draw.io files with correct mxGraph XML, covering flowcharts, architecture, sequence, ER and UML class diagrams.
github/awesome-copilot
Cleans raw credit data and screens variables before loan modeling, dropping unstable, noisy or redundant features and writing an Excel report of every step.
github/awesome-copilot
Builds a warm, browser-based daily focus board the user updates by talking to their agent, with Eisenhower priorities, a brain-dump box and kind not-today carryover.
github/awesome-copilot
End-to-end skill for building, testing, linting, versioning, and publishing a production-grade Python library to PyPI.
Works with
Categories
Import existing Azure resources into Terraform using Azure CLI discovery and Azure Verified Modules (AVM). Import Infrastructure As Code is an agent skill from github/awesome-copilot, published by the product's own GitHub organization. Import existing Azure resources into Terraform using Azure CLI discovery and Azure Verified Modules (AVM).
Import Infrastructure As Code fits situations like: asked to reverse-engineer live Azure infrastructure; generate Infrastructure as Code from existing subscriptions/resource groups/resource IDs; map dependencies; derive exact import addresses from downloaded module source.
Run `npx skills add github/awesome-copilot --skill import-infrastructure-as-code -a claude-code`. Or copy the skill folder (skills/import-infrastructure-as-code in github/awesome-copilot) into .claude/skills/import-infrastructure-as-code in your project. Claude Code loads it when a task matches its description.
Run `npx skills add github/awesome-copilot --skill import-infrastructure-as-code -a codex`. Or copy the skill folder (skills/import-infrastructure-as-code in github/awesome-copilot) into .agents/skills/import-infrastructure-as-code 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 github/awesome-copilot --skill import-infrastructure-as-code -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/import-infrastructure-as-code, .gemini/skills/import-infrastructure-as-code, .github/skills/import-infrastructure-as-code and .opencode/skills/import-infrastructure-as-code in your project.
Going by SKILL.md and its folder, Import Infrastructure As Code needs the command-line tools its instructions call (az and terraform).
SKILL.md names 3 domains. In commands or code: raw.githubusercontent.com, registry.terraform.io and github.com; the agent is likely to contact these when it follows the instructions. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Import Infrastructure As Code is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 4.7k tokens (SKILL.md is roughly 19k 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 Import Infrastructure As Code: Terravision Cloud Diagrams (patrickchugh/terravision, 1.6k stars), Terrashark (LukasNiessen/terrashark, 715 stars), Provider Verification (mondoohq/mql, 411 stars) and Avm Tf Azapi (Azure/terraform-azurerm-avm-ptn-alz, 135 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
github (a GitHub organization, an official publisher) maintains it in github/awesome-copilot, which has 39,748 GitHub stars. The repository holds 417 skills in this directory. The repository was last updated on October 7, 2026.
Source: github/awesome-copilot on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.