Create, update, review, and validate GitHub Copilot agent skills (SKILL.md files). Use this skill whenever someone wants to create a new skill, build a skill from scratch, package domain knowledge into a reusable agent skill, turn a workflow into a skill, or asks "how do I teach Copilot to do X consistently". Also use when updating or improving an existing SKILL.md, writing the description field for better triggering, or designing the folder structure and bundled resources for a skill. Do NOT use for general coding questions, runtime debugging, or MCP server configuration.
npx skills add https://github.com/thomast1906/github-copilot-agent-skills --skill skill-creator
Create high-quality GitHub Copilot agent skills (SKILL.md) that transform the general-purpose agent into a specialized expert.
A skill is a modular, self-contained knowledge package stored in .github/skills/<skill-name>/SKILL.md. It provides:
Skills load in three levels (progressive disclosure):
name + description) — Always in context (~100 words). This is the trigger mechanism.skill-name/
├── SKILL.md (required)
│ ├── YAML frontmatter name + description (required)
│ └── Markdown instructions
└── Bundled Resources (optional)
├── scripts/ Executable code for deterministic/repetitive tasks
├── references/ Docs loaded into context as needed
└── assets/ Output files (templates, icons, boilerplate)
Do NOT include: setup guides, changelogs, or user-facing documentation — skills are instructions for the agent, not onboarding docs for humans.
Not every workflow needs a skill. Before creating one, choose the right tool:
| Situation | Use instead |
|---|---|
| A rule that applies to ALL Copilot interactions in this repo | copilot-instructions.md entry |
| A rule scoped to specific file types (e.g., always use kebab-case for Bicep variable names) | .github/instructions/*.instructions.md with applyTo glob |
| A one-off prompt you run occasionally | .github/prompts/*.prompt.md |
| A multi-step workflow with domain knowledge that benefits from on-demand loading | Skill |
| A complex workflow with a dedicated agent persona | .github/agents/*.agent.md |
A skill is the right choice when: the workflow is too detailed for copilot-instructions.md, it should only load for relevant requests (not every conversation), and it encapsulates reusable domain knowledge or a repeatable process.
If the user's need is better served by a simpler vehicle, say so and use that instead. Not everything needs to be a skill.
Understand the problem before writing a single line. Ask conversationally:
Collect 2–3 concrete use cases. For each, capture:
Trigger: What the user says/does
Steps: Sequence of actions
Tools: Built-in or MCP tools needed
Result: What success looks like (specific output)
Exit criteria: 2–3 use cases defined, success criteria agreed, tools/dependencies identified.
Make structural decisions before writing:
scripts/, references/, or assets/ when there is a clear reason:scripts/references/assets/Exit criteria: Pattern selected, folder structure planned, description drafted, content mapped.
Write SKILL.md with precision.
Frontmatter rules:
---
name: kebab-case-name
description: [What + When + optional Not-when — single line, under 200 words]
---
name: kebab-case only, matches the folder name exactlydescription: primary trigger mechanism — include trigger phrases, what it does, what it does NOT doBody writing guidelines:
.github/skills/. Never assume it is the only skill in context. Avoid generic section headings like "## Overview" that could conflict, and don't claim to handle tasks that belong to another skill in this repo.Read references/output-patterns.md for patterns on specifying output format (Template, Examples, Scope Communication, Validation Gate) — load it when deciding how to structure the skill's output expectations or examples.
Run the automated validator first:
python .github/skills/skill-creator/scripts/quick_validate.py .github/skills/<skill-name>
Then work through the full references/quality-checklist.md for description quality scoring, instruction quality scoring, trigger testing, and final sign-off.
Quick structure checks (also caught by the script):
name and description, correct YAML delimiters (---)name field< >Trigger checks — propose 3–5 test phrases and verify mentally:
Quality checks:
If starting a new skill from scratch, scaffold the folder first:
python .github/skills/skill-creator/scripts/init_skill.py <skill-name>
This creates the folder and a template SKILL.md with TODO placeholders. Then fill in the skill content and run the validator before presenting to the user.
Place the completed skill at .github/skills/<skill-name>/SKILL.md.
Present a brief summary:
The description field is the primary mechanism that determines whether Copilot invokes the skill. A well-written description is specific, includes trigger phrases, and leans slightly "pushy" — agents tend to undertrigger.
Structure: [What it does] + [When to use it — include actual phrases users would say] + [What NOT to use it for if overlap risk exists]
Good example:
Analyze Azure architectures for cost optimization opportunities and provide savings recommendations. Use when reviewing Azure spending, asked to reduce costs, optimize resources, right-size VMs, or find savings across subscriptions. Do NOT use for general architecture design (use architecture-design skill instead).
Bad example:
Helps with Azure cost analysis.
Rules:
Do NOT use for...) when overlap with other skills is likelyKeep core workflow in SKILL.md; move detailed docs to references/. For each reference file, state exactly when the agent should load it — e.g. "read when the user asks about X" or "read when diagnosing Y".
Organize by domain to avoid loading irrelevant context. When a skill spans multiple environments or tool variants, keep only the selection logic in SKILL.md and move per-variant detail into separate files:
iac-generator/
├── SKILL.md (format selection + shared standards)
└── references/
├── bicep.md (read when user chooses Bicep)
├── terraform.md (read when user chooses Terraform)
├── arm.md (read when user chooses ARM templates)
└── pulumi.md (read when user chooses Pulumi)
Another example — an APIM skill covering multiple environments:
apim-deployment/
├── SKILL.md (shared pipeline and APIOps steps)
└── references/
├── github-actions.md (read when deploying via GitHub Actions)
└── azure-devops.md (read when deploying via Azure DevOps)
Show core content in SKILL.md and load a reference file only when an advanced scenario is triggered. State the load condition inline next to the link.
Key rule: Keep reference links one level deep from SKILL.md. For files over 100 lines, add a table of contents at the top.
Use when the same code is written repeatedly across invocations, or when deterministic reliability is critical.
scripts/init_skill.py (scaffold a new skill folder from template) and scripts/quick_validate.py (validate structure, frontmatter, and body against this repo's conventions)Use for domain knowledge, API specs, schemas, or detailed guides that exceed what fits cleanly in SKILL.md.
references/workflows.md (workflow pattern templates — read during Phase 2), references/output-patterns.md (output formatting patterns — read during Phase 3), and references/quality-checklist.md (pre-delivery quality checks — read during Phase 4)Use for files that appear in the output Claude produces (not loaded into context, but used in final output).
assets/template.docx, assets/logo.png, assets/hello-world/| Anti-pattern | Why it hurts |
|---|---|
| Vague description ("helps with X") | Undertriggering — Copilot won't invoke the skill |
| "When to use" in the body | Body only loads AFTER triggering — too late |
| Wall-of-text instructions | Agent skims and misses critical steps |
| No examples | Agents need concrete input/output pairs |
| README.md inside skill folder | Clutter — agents don't need meta-docs |
| Hardcoded credentials in scripts | Security risk |
| Deeply nested references | Increases cognitive load; keep one level deep |
| SKILL.md over 500 lines | Context bloat on every invocation |
| Overly rigid MUST/NEVER rules | Explain the WHY instead; agents respond better |
When the user says "turn this into a skill" or "capture what we just did", the conversation history is the primary source — mine it before asking a single question.
Step 1 — Mine the history first. Read back through the conversation and extract:
Step 2 — Identify what's missing. After mining, you'll have gaps. Common ones:
Step 3 — Ask only targeted gap-filling questions. Don't dump a full Discovery interview on the user — they just finished the work and want it captured. Ask one or two focused questions maximum, with a suggested default for each: "I'm going to use X as the trigger phrase — does that sound right, or would you phrase it differently?"
Step 4 — Confirm before writing. Present a concise summary of what you're going to encode: the workflow steps, the trigger phrases, the success criteria, any bundled resources you plan to create. Get a yes before writing the SKILL.md.
Step 5 — Generalise, don't transcribe. The biggest risk here is writing a skill that only works for the exact example in the conversation. Before writing each instruction, ask: "If a different user gives a slightly different input, does this still hold?" Strip out specifics (file names, literal values, one-off workarounds) unless they're universally needed. Encode the pattern, not the instance.
Step 6 — Proceed through Phases 2–5 — architecture, craft, validate, deliver as normal.
When improving rather than creating:
name field and folder name — do not renameDrawn from AI coding agent best practices:
DefaultAzureCredential so credentials are never hardcoded" beats "ALWAYS use DefaultAzureCredential"Create new skills, modify and improve existing skills, and measure skill performance. Use when users want to create a skill from scratch, edit, or optimize an existing skill, run evals to test a skill, benchmark skill performance with variance analysis, or optimize a skill's description for better triggering accuracy.
Guide for creating effective skills. This skill should be used when users want to create a new skill (or update an existing skill) that extends Claude's capabilities with specialized knowledge, workflows, or tool integrations.
Guide for creating effective skills. This skill should be used when users want to create a new skill (or update an existing skill) that extends Claude's capabilities with specialized knowledge, workflows, or tool integrations.
Replace with description of the skill and when Claude should use it.
Use when facing 2+ independent tasks that can be worked on without shared state or sequential dependencies
This skill should be used when the user wants to "create a skill", "add a skill to plugin", "write a new skill", "improve skill description", "organize skill content", or needs guidance on skill structure, progressive disclosure, or skill development best practices for Claude Code plugins.
Helps users discover and install agent skills when they ask questions like "how do I do X", "find a skill for X", "is there a skill that can...", or express interest in extending capabilities. This skill should be used when the user is looking for functionality that might exist as an installable skill.
Use when creating new skills, editing existing skills, or verifying skills work before deployment
Take thomast1906/skill-creator from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.