Skip to content

Skills and Instructions

Each skill follows a standard layout:

.github/skills/{name}/
├── SKILL.md # Core overview (≤ 500 lines)
├── references/ # Deep reference material (loaded on demand)
│ ├── detailed-guide.md
│ └── lookup-table.md
└── templates/ # Template files (loaded on demand)
└── artifact.template.md

Skills implement three levels of disclosure:

  1. Level 1 — SKILL.md: Compact overview loaded when the agent reads the skill. Contains quick-reference tables, decision frameworks, and pointers to deeper content.

  2. Level 2 — references/: Detailed guides, lookup tables, and protocol definitions. Loaded only when a specific sub-task requires deep knowledge.

  3. Level 3 — templates/: Exact structural skeletons for artefact generation. Loaded only during the output generation phase.

The system contains the following skills across several domains:

DomainSkills
Azure Infrastructureazure-defaults, azure-bicep-patterns, terraform-patterns
Azure Operationsazure-diagnostics, azure-diagrams, azure-adr
Artefact Generationazure-artifacts, context-shredding
Documentationdocs-writer
Workflow and Statesession-resume, workflow-engine, golden-principles
Deploymentiac-common
GitHub Operationsgithub-operations, git-commit
Azure Plugin Skillsazure-prepare, azure-cost-optimization, azure-deploy (not active), azure-compute, azure-compliance, azure-rbac, azure-storage, azure-messaging, azure-kusto, azure-ai, azure-aigateway, azure-quotas, azure-resource-lookup, azure-resource-visualizer, azure-cloud-migrate, azure-hosted-copilot-sdk, appinsights-instrumentation, entra-app-registration, microsoft-foundry
Microsoft Learnmicrosoft-docs, microsoft-code-reference, microsoft-skill-creator
Meta / Toolingmake-skill-template, context-optimizer, copilot-customization

The copilot-customization skill is an authoritative reference for VS Code Copilot customisation mechanisms: instructions, prompt files, custom agents, agent skills, MCP servers, hooks, and plugins.

Instructions are not read explicitly by agents. They are injected automatically by VS Code Copilot when a matching file is in context. The applyTo glob pattern controls when each instruction activates:

InstructionapplyToEnforces
bicep-code-best-practices**/*.bicepAVM-first, security baseline, naming
terraform-code-best-practices**/*.tfAVM-TF, provider pinning, naming
bicep-policy-compliance**/*.bicepAzure Policy compliance in Bicep
terraform-policy-compliance**/*.tfAzure Policy compliance in Terraform
iac-cost-repeatability**/*.bicep, **/*.tf, **/04-impl*.mdBudget alerts, zero hardcoded values
azure-artifacts**/agent-output/**/*.mdH2 template compliance for artefacts
agent-definitions**/*.agent.mdFrontmatter standards for agents
agent-research-first**/*.agent.md, agent-output, skillsMandatory research-before-implementation
agent-skills**/.github/skills/**/SKILL.mdSkill file format standards
instructions**/*.instructions.mdMeta: instruction file guidelines
markdown**/*.mdDocumentation standards
context-optimizationAgents, skills, instructionsContext window management rules
code-commenting**/*.{js,mjs,cjs,ts,tsx,jsx,py,ps1,sh,bicep,tf}Self-explanatory code, minimal comments
code-review**/*.{js,mjs,cjs,ts,tsx,jsx,py,ps1,sh,bicep,tf}Priority tiers, security checks
cost-estimate**/03-des-cost-estimate.md, **/07-ab-cost-*.mdCost estimate documentation standards
docs-trigger**/*.{js,mjs,cjs,ts,tsx,jsx,py,ps1,sh,bicep,tf}Trigger conditions for doc updates
docsdocs/**/*.mdUser-facing documentation standards
governance-discovery**/04-governance-constraints.*Azure Policy discovery requirements
workload-documentation**/agent-output/**/07-*.mdWorkload documentation standards
github-actions.github/workflows/*.ymlGitHub Actions workflow standards
javascript**/*.{js,mjs,cjs}JavaScript/Node.js conventions
json**/*.{json,jsonc}JSON/JSONC formatting
python**/*.pyPython coding conventions
shell**/*.shShell scripting best practices
powershell**/*.ps1, **/*.psm1PowerShell cmdlet best practices
prompt**/*.prompt.mdPrompt file guidelines
no-heredoc**Prevents terminal heredoc corruption

When multiple instructions apply to the same file via overlapping applyTo globs, precedence rules determine which takes priority. See .github/instructions/references/precedence-matrix.md for the full matrix. Short version: Azure Policy compliance (Tier 1) always wins over domain IaC (Tier 2), which wins over cross-cutting cost rules (Tier 3), which wins over general code quality (Tier 4).

iac-cost-repeatability is a cross-cutting instruction that enforces two mandatory rules across ALL projects (Bicep and Terraform):

  1. Cost Monitoring: Every deployment must include an Azure Budget resource with parameterised amount, forecast alerts at 80/100/120% thresholds, and anomaly detection alerts to a technicalContact parameter.
  2. Repeatability (zero hardcoded values): Templates must deploy to any tenant/region/subscription without source-code modification. projectName must be a parameter with no default; all tag values reference parameters; .bicepparam/terraform.tfvars is the only place for project-specific defaults.

Following the Golden Principle “Mechanical Enforcement Over Documentation,” every instruction has a corresponding validation script. The rule is: if it can be a linter check, it should be one. Documentation is for humans; machines enforce rules.

This section walks through creating a new skill from scratch.

Use the make-skill-template skill to generate the folder structure:

@workspace /make-skill-template Create a skill called "my-new-skill"

This creates:

.github/skills/my-new-skill/
├── SKILL.md # Core overview (≤ 500 lines)
├── references/ # Deep reference material
└── templates/ # Template files for artifact generation

For the full scaffolding guide, see .github/skills/make-skill-template/references/step-by-step-guide.md.

The SKILL.md file requires YAML frontmatter:

---
name: my-new-skill
description: "Short description of the skill's purpose.
USE FOR: keyword triggers.
DO NOT USE FOR: anti-triggers."
compatibility: List of compatible agents
---
# My New Skill
Quick-reference tables, decision frameworks, and pointers to deeper content.

Frontmatter rules (from .github/instructions/agent-skills.instructions.md):

  • name must match the folder name exactly
  • description must be an inline string (not a YAML block scalar)
  • Keep SKILL.md under 500 lines — move deep content to references/

Use the three levels of disclosure:

LevelDirectoryLoaded WhenContent
1SKILL.mdAgent reads the skillOverview, quick-reference tables
2references/Sub-task needs deep knowledgeDetailed guides, lookup tables
3templates/Output generation phaseStructural skeletons for artifacts

Example: a pricing skill might have SKILL.md with a service-to-tool mapping table, references/pricing-guidance.md with detailed MCP tool usage, and templates/cost-estimate.template.md with the output skeleton.

Update .github/skill-affinity.json to declare which agents use the skill:

{
"my-new-skill": {
"primary": ["06b-Bicep CodeGen"],
"secondary": ["03-Architect"],
"never": ["09-Diagnose"]
}
}
  • primary — agent loads this skill by default
  • secondary — agent loads on demand when relevant
  • never — agent must not load this skill (prevents context waste)

Add a skill reference in the relevant agent’s .agent.md body:

## MANDATORY: Read Skills First
1. **Read** `.github/skills/my-new-skill/SKILL.md`
Terminal window
# Check skill format and frontmatter
npm run lint:skills-format
# Check skill size and references
npm run validate:skill-checks
# Verify skill-affinity consistency
npm run validate:skill-affinity

Agents discover skills through description keywords. When a user’s request matches keywords in the skill’s description field (USE FOR / DO NOT USE FOR), VS Code automatically suggests loading that skill. Write descriptions with specific, searchable trigger words.