Agent Skills: Why SKILL.md Won't Load + Fix Guide¶
This guide solves 3 problems:
- Why your SKILL.md isn't loading (and how to verify)
- How to write descriptions that trigger matching
- A minimal, working template you can copy
Quick Diagnostic¶
If your skill isn't being selected:
- Check file location:
.github/skills/<name>/SKILL.mdor.claude/skills/ - Validate with SDK:
skills-ref validate ./my-skill - Confirm frontmatter:
nameanddescriptionare required YAML fields - Test matching: Does your
descriptioninclude the keywords the user would type?
Still stuck? See Top 7 Reasons Skills Fail below.
Minimal Template¶
---
name: my-skill
description: Short summary. Use for keyword1, keyword2, topic.
---
## Goal
...
## Procedure
1. ...
2. ...
Top 7 Reasons Your Skill Isn't Selected¶
| # | Symptom | Cause | Fix |
|---|---|---|---|
| 1 | Skill never loads | File not in .github/skills/ or .claude/skills/ | Move SKILL.md to correct location |
| 2 | Validation fails | Missing name or description in frontmatter | Add required YAML fields |
| 3 | Name mismatch | name field doesn't match folder name | Rename folder or update name |
| 4 | Invalid name format | Uppercase, spaces, or consecutive hyphens | Use lowercase, numbers, single hyphens only |
| 5 | Skill loads but never triggers | Description lacks trigger keywords | Add "Use for X, Y, Z" with user-typed terms |
| 6 | Wrong skill selected | Multiple skills with overlapping descriptions | Differentiate keywords, add negative examples |
| 7 | Tool/agent doesn't support skills | Using older version or unsupported tool | Update CLI, enable chat.useAgentSkills in VS Code |
Symptom-by-Symptom Fixes¶
1. Skill never loads
- Verify path:
ls .github/skills/my-skill/SKILL.md - Run
skills-ref validate ./my-skill - Check for typos in folder structure
2. Validation fails
- Ensure YAML frontmatter starts with
---and ends with--- - Required fields:
name,description
3. Name mismatch
# Folder: .github/skills/terraform-plan-review/
# SKILL.md name field must be:
name: terraform-plan-review
4. Invalid name format
Terraform-Plan(uppercase)terraform--plan(consecutive hyphens)terraform-plan-review
5. Description lacks keywords
# Bad
description: Helps with infrastructure reviews.
# Good
description: Standardize Terraform plan diff reviews. Use for Terraform, plan, diff, IAM, network, cost topics.
6. Overlapping skills
- Add unique keywords to each skill's description
- Consider merging similar skills
7. Tool doesn't support skills
- GitHub Copilot: Supported (Dec 2025+)
- VS Code: Enable
chat.useAgentSkillsin settings - Codex CLI: v0.76.0+ required
Description Design Patterns¶
The description field determines when your skill is selected. Here are patterns that work:
Good Examples¶
# Pattern 1: Task + Keywords
description: Standardize Terraform plan diff reviews. Use for Terraform, plan, diff, infrastructure review, IAM, network, cost topics.
# Pattern 2: Problem + Solution
description: Fix failing CI builds by analyzing logs and suggesting fixes. Use for CI, build failure, GitHub Actions, pipeline debug.
# Pattern 3: Domain + Actions
description: Generate release notes from git history. Use for release, changelog, version, git log, notes.
Bad Examples¶
# Too vague - won't match specific queries
description: Helps with infrastructure reviews.
# Missing trigger keywords
description: A comprehensive solution for code analysis.
# Too long - buries the keywords
description: This skill provides a complete end-to-end solution for reviewing and analyzing infrastructure-as-code changes including but not limited to Terraform, Pulumi, and CloudFormation templates with a focus on security best practices and cost optimization strategies.
Key Principles¶
- Front-load keywords: Put the most important terms in the first sentence
- Include "Use for X, Y, Z": Explicitly list trigger keywords
- Match user vocabulary: Use terms users actually type, not internal jargon
- Keep it under 200 characters: Longer descriptions dilute matching
🔗 Official Docs vs This Guide¶
| Source | What It Covers | What This Guide Adds |
|---|---|---|
| agentskills.io Specification | Formal spec, SDK reference | Debugging workflow, description patterns |
| VS Code Agent Skills Docs | Enabling skills, basic structure | Top 7 failure reasons, fix checklist |
| OpenAI Codex Skills | Codex-specific setup | Cross-tool compatibility notes |
| Agent Skills Quickstart | Pre-built vs custom, 3-minute intro | Deep debugging, templates |
What Are Agent Skills¶
Agent Skills are instructions (Markdown) plus supplementary resources (scripts/references/templates) bundled into a single folder — an open standard format that agents load "only when needed."
Progressive Disclosure is Key
- At startup, only
name/description(metadata) is read - The
SKILL.mdbody loads when determined necessary - Additional files like
references/orscripts/load only if further needed
Skills vs Custom Instructions vs MCP¶
| Use Case | Best For | Examples |
|---|---|---|
| Custom Instructions | Rules common to almost all tasks (always on) | Naming conventions, lint policies |
| Agent Skills | Procedural knowledge + assets loaded when conditions match | Release procedures, incident triage |
| MCP | External APIs and operations | Database access, Slack integration |
MCP adds "what can be done" (APIs/operations), while Skills provide "how to use them" (procedural knowledge).
Supported Tools (December 2025)¶
| Tool | Status | Notes |
|---|---|---|
| GitHub Copilot | Copilot coding agent, CLI, VS Code agent mode | |
| VS Code | Enable chat.useAgentSkills | |
| OpenAI Codex | v0.76.0+ required | |
| Cursor | Listed on agentskills.io | |
| Claude Code | Origin of Skills (.claude/skills) |
Folder Location¶
.github/skills/<skill-name>/SKILL.md ← Recommended (GitHub Copilot / VS Code)
.claude/skills/ ← Legacy location (still supported)
GitHub Copilot auto-recognizes .claude/skills/, so existing Claude Code skills work as-is.
name Field Specification¶
| Constraint | Details |
|---|---|
| Length | 1-64 characters |
| Allowed | Lowercase (a-z), numbers (0-9), hyphens (-) |
| Start/End | Cannot start or end with hyphen |
| Consecutive hyphens | -- not allowed |
| Directory name | Must match parent folder name |
Valid: pdf-processing, data-analysis, code-review, terraform2Invalid: PDF-Processing, -pdf, pdf--processing
Example: Terraform Plan Review Skill¶
# .github/skills/terraform-plan-review/SKILL.md
---
name: terraform-plan-review
description: Standardize Terraform plan diff reviews. Classify plan changes and prioritize inspection of destructive changes, permission changes, network changes, and cost impacts. Use for Terraform, plan, diff, infrastructure review, IAM, network, cost topics.
license: Proprietary
metadata:
author: platform-team
version: "0.1"
compatibility: Requires terraform CLI and access to repo IaC code.
---
## Goal
Conduct Terraform plan reviews comprehensively and consistently.
## Inputs
- `terraform plan` output (text or JSON)
- Target module/environment (dev/stg/prod)
## Procedure
1. **Classify changes** (Resource type / Impact scope / Environment)
2. **Detect destructive changes** (delete/replace)
3. **IAM/permissions** (role/policy/binding additions or relaxations)
4. **Network** (ingress/egress, public exposure, SG/NSG)
5. **Data protection** (KMS, encryption, backup, retention)
6. **Estimate cost impact** (new major resources, scale increases)
7. **Rollback strategy** (on apply failure, state consistency)
## Output format
- Summary: What changes (3 lines)
- Risks: Critical risks (bullet points)
- Checks done: Inspection points completed
- Questions: Unclear points (for PR comments)
Validation with SDK¶
# Installation
pip install skills-ref
# Validate a skill
skills-ref validate ./my-skill
# Read properties (JSON output)
skills-ref read-properties ./my-skill
Add validation to CI for team stability.
FAQ¶
How does skill matching work?¶
At startup, agents read only name and description. The body loads when the agent determines the skill is relevant based on keywords in description. Progressive disclosure keeps context efficient.
Why isn't my skill selected even though it's valid?¶
Your description may lack the keywords users type. Add "Use for X, Y, Z" phrases that match expected queries. Also check for conflicting skills with overlapping triggers.
How do I avoid conflicts between multiple skills?¶
Give each skill a distinct set of trigger keywords. If two skills overlap significantly, consider merging them or adding negative examples ("Do NOT use for...") to clarify boundaries.
Reference Links¶
- Agent Skills Official Specification
- GitHub Copilot Skills Announcement (2025/12/18)
- VS Code Agent Skills Documentation
- OpenAI Codex Skills
- GitHub Docs - About Agent Skills
- Anthropic Skills Repository
Summary¶
| Item | Content |
|---|---|
| What are Agent Skills | Open standard: SKILL.md + scripts/references/assets in folders |
| Progressive disclosure | Startup: name/description → when needed: body → additional resources |
| Supported tools | GitHub Copilot, VS Code, OpenAI Codex, Cursor, Claude Code |
| Recommended location | .github/skills/<skill-name>/SKILL.md |
| Minimal structure | YAML frontmatter (name/description required) + Markdown body |
| Success keys | Trigger keywords in description, fix procedures + output formats |
| Validation | Integrate skills-ref validate into CI |