Claude skills vs GitHub Copilot skills: directories, surfaces, and the instructions layer
GitHub Copilot reads Agent Skills from .github/skills, .claude/skills, and .agents/skills across the CLI, cloud coding agent, code review, VS Code, JetBrains, and Visual Studio. How that compares with Claude Code, and how skills relate to copilot-instructions.md, prompt files, and custom agents.
Contents
GitHub Copilot adopted the Agent Skills specification and did something none of the other implementations did: it reads Claude Code’s directory natively. A repository with .claude/skills/ committed is already a repository with Copilot skills. That makes “Claude skills vs Copilot skills” less a question of format and more a question of surfaces, always-on instruction layers, and which tool’s optional features you are leaning on.
This article covers where Copilot looks, which of its many surfaces run skills, how skills relate to Copilot’s older customization files, and every place the Copilot implementation differs from Claude Code’s.
Shared format
Both tools read the same SKILL.md:
---
name: my-skill
description: "Description of what the skill does and when to use it."
---
# My Skill
Detailed instructions for the skill...
That example is lifted almost verbatim from GitHub’s own documentation, and it is a valid Claude Code skill as written. Both tools inject the file into the agent’s context when the skill is chosen, both choose based on the description, and both recommend keeping the main file under 500 lines with detailed reference material split into separate files.
Directories
| Scope | Claude Code | GitHub Copilot |
|---|---|---|
| Project | .claude/skills/<name>/SKILL.md | .github/skills/, .claude/skills/, or .agents/skills/ |
| Personal | ~/.claude/skills/<name>/SKILL.md | ~/.copilot/skills/ or ~/.agents/skills/ |
| Plugin | <plugin>/skills/ as /plugin:skill | Not a separate concept |
| Enterprise | Managed settings directory | Organization-level configuration through GitHub |
The overlap on .claude/skills is the headline. A team where some people use Claude Code and some use Copilot can commit skills once to .claude/skills/ and both tools pick them up. If the team also includes Codex or Cursor users, .agents/skills/ is read by Copilot, Codex, and Cursor but not Claude Code, so .claude/skills/ remains the single path with the widest reach, and a CLI install to every detected agent covers the rest:
npm i -g skillmds
skillmd add github/review-and-refactor # all detected agents
skillmd add github/review-and-refactor -a github-copilot # Copilot only
The GitHub Copilot install guide on SkillMD lists the paths and the manual copy steps.
Surfaces: where the skill runs
This is the biggest structural difference. Claude Code is one product with a terminal UI, an IDE extension, a desktop app, a web app, and cloud sessions, all reading the same skill directories. Copilot is a family of products, and skills reach all of them:
| Copilot surface | Reads repo skills | Notes |
|---|---|---|
| Copilot CLI | Yes | Also reads personal skills |
| Copilot cloud coding agent | Yes | Runs in GitHub’s environment; repo skills only |
| Copilot code review | Yes | A review skill in the repo shapes automated PR reviews |
| Copilot app | Yes | |
| VS Code agent mode | Yes | Personal skills too |
| JetBrains agent mode | Yes | |
| Visual Studio | Yes |
The code-review row is worth a second look. A skill named, say, review-and-refactor committed to the repository influences how Copilot reviews pull requests, not just how it writes code in the editor. Claude Code’s equivalent is the /code-review bundled skill, which a project skill of the same name replaces, and which runs as a forked subagent locally or through Claude’s GitHub integration.
Skills vs the older Copilot customization files
Copilot had a customization system before skills, and it still exists. Each file type answers a different question.
| File | Loads | Use it for |
|---|---|---|
.github/copilot-instructions.md | Every request in the repo | Facts and constraints: stack, conventions, do-nots |
*.instructions.md with applyTo globs | Requests touching matching files | Area-specific constraints |
*.prompt.md prompt files | When you run them | Reusable prompts you trigger by hand |
*.agent.md custom agents | When you select the agent | A persona with its own tools and instructions |
SKILL.md skills | When the task matches the description | Procedures and reference material, loaded on demand |
The mapping to Claude Code is close:
| Copilot | Claude Code |
|---|---|
copilot-instructions.md | CLAUDE.md |
*.instructions.md with applyTo | Nested CLAUDE.md in subfolders, or a paths-style approach via skill descriptions |
| Prompt files | Manual-only skills (disable-model-invocation: true) |
| Custom agents | Subagents in .claude/agents/ |
| Skills | Skills |
The rule for splitting content is the same in both ecosystems: always-on files hold constraints, skills hold procedures. If your copilot-instructions.md has grown a “how to add a migration” section with eight numbered steps, that section is a skill.
Frontmatter: what each tool honors
Copilot’s documentation describes name and description and defers to the open spec for the rest. Claude Code adds a long list of optional fields. What happens to each in Copilot:
| Field | Claude Code | GitHub Copilot |
|---|---|---|
name, description | Read | Read |
license, compatibility, metadata | Read, passed through | Tolerated (spec fields) |
allowed-tools | Pre-approves tools for the invoking turn | Not documented as honored |
disable-model-invocation | Manual-only via /name | Not documented; Copilot triggers by description |
user-invocable | Hide from the / menu | Not applicable |
context: fork, agent, model, hooks, argument-hint | Read | Ignored |
Unknown fields do not break loading in Copilot, so a Claude skill with context: fork still works there; it runs inline. The practical gap is manual-only: Copilot does not offer a frontmatter switch to stop a skill from auto-triggering. If a skill has side effects and you need to guarantee a human triggers it, in Copilot that is a prompt file rather than a skill.
Invocation
| Action | Claude Code | GitHub Copilot |
|---|---|---|
| Automatic | By description | By description |
| Explicit | /skill-name [args], body reads $ARGUMENTS | Describe the task; Copilot selects the skill. Prompt files for explicit triggers |
| Manage installed skills | /skills menu, live reload | gh skill commands in the GitHub CLI |
| Discover community skills | Registries, plugins, claude.ai sync | gh skill, github/awesome-copilot, anthropics/skills, registries |
Cloud behavior
Both tools have the same rule for cloud execution: personal skills stay on your machine.
- Copilot’s cloud coding agent and code review run in GitHub’s environment and see only skills committed to the repository.
- Claude Code’s cloud sessions and Cowork sessions do not read
~/.claude/skills/; they load skills enabled on your claude.ai account plus skills committed to.claude/skills/in the cloned repo.
If it has to work in CI, in a cloud agent, or in automated review, it has to be in the repo.
Distribution and safety
Copilot points users at gh skill, the github/awesome-copilot collection, and Anthropic’s anthropics/skills repository. Claude Code points at plugins and claude.ai. Both accept anything spec-compliant from anywhere, which puts the safety question on you.
A skill is instructions the agent will follow, and Copilot’s code-review surface means a malicious skill committed to a repository could shape what automated review says about a pull request. Read skills before committing them, check bundled scripts, and prefer sources that review submissions. Every public skill on SkillMD passes a safety review before listing and shows a capabilities summary on its page; the registry lists 25,000+ skills and tags which agents each author tested with.
Writing one skill for both
- Frontmatter:
name,description,license. Nothing else unless you accept it will only take effect in Claude Code. - Folder name equals
name, lowercase with hyphens, under 64 characters. - Body under 500 lines; long reference material in
references/. - Do not rely on
allowed-toolsfor correctness. In Copilot the skill must work with normal permission prompts. - If the skill must never auto-trigger, use
disable-model-invocation: truefor Claude Code and ship a prompt file for Copilot, or accept description-based triggering in Copilot. - Commit to
.claude/skills/. Both tools read it. Add.github/skills/only if your organization standardizes on it. skillmd lintbefore you commit.
Summary table
| Dimension | Claude Code | GitHub Copilot |
|---|---|---|
| Spec | Agent Skills SKILL.md | Agent Skills SKILL.md |
| Project dirs | .claude/skills | .github/skills, .claude/skills, .agents/skills |
| Personal dirs | ~/.claude/skills | ~/.copilot/skills, ~/.agents/skills |
| Surfaces | CLI, IDE extension, desktop, web, cloud sessions | CLI, cloud coding agent, code review, app, VS Code, JetBrains, Visual Studio |
| Always-on layer | CLAUDE.md | copilot-instructions.md, *.instructions.md |
| Explicit trigger | /name | Prompt files; description-based selection |
| Manual-only switch | disable-model-invocation | Not in frontmatter |
| Tool pre-approval | allowed-tools | Not documented |
| Subagent execution | context: fork | Custom agents (*.agent.md) |
| Skill management | /skills, live reload | gh skill |
| Body length guidance | Under 500 lines | Under 500 lines |
Further reading
Frequently asked questions
Does GitHub Copilot support Claude skills?
Yes. Copilot implements the same Agent Skills specification and reads project skills from .claude/skills as well as .github/skills and .agents/skills. A skill written for Claude Code loads in Copilot unchanged, as long as it uses spec fields. Claude-only frontmatter is ignored.
Where do GitHub Copilot skills go?
Project skills go in .github/skills, .claude/skills, or .agents/skills in the repository. Personal skills go in ~/.copilot/skills or ~/.agents/skills. Copilot loads them across the CLI, the cloud coding agent, code review, VS Code and JetBrains agent mode, and Visual Studio.
What is the difference between Copilot skills and copilot-instructions.md?
copilot-instructions.md and .instructions.md files are always-on context, injected on every request (optionally scoped by applyTo globs). Skills load only when Copilot matches your task to the skill's description. Constraints go in instructions; procedures go in skills.
Which Copilot surfaces use skills?
The Copilot cloud coding agent, Copilot code review, the GitHub Copilot CLI, the Copilot app, agent mode in Visual Studio Code, agent mode in JetBrains IDEs, and Visual Studio. Skills committed to the repo are available to all of them.
Can I install skills into Copilot from the command line?
Yes. GitHub ships gh skill commands in the GitHub CLI, and the SkillMD CLI installs any registry skill into Copilot's directory with skillmd add owner/name -a github-copilot.