Key takeaways
- Anthropic gave Agent Skills to the Agentic AI Foundation on 22 October 2026. The file format didn’t change.
- Codex, Cursor, Copilot, VS Code and Gemini CLI read .agents/skills. Claude Code reads .claude/skills.
- Uploads to claude.ai and the Claude API reject any front-matter field outside the specification’s six.
- Put the main use case first, because Claude Code and Codex shorten descriptions when many skills are installed.
- Test triggering with about 20 prompts, half of them near-misses, and run each three times.
Agent skills are folders that teach an AI agent a specific task. Each one holds a SKILL.md file, with a name and a description in YAML front matter and instructions below, plus any scripts, templates or reference files the task needs. The agent reads only the name and description when a session starts, and loads the rest when a request matches. On 22 October 2026 Anthropic donated Agent Skills, the open standard behind the format, to the Agentic AI Foundation (AAIF) at the Linux Foundation. Anthropic says more than 70 agent platforms have integrated it, including ChatGPT, Cursor, GitHub Copilot and VS Code.1
The donation moved the name, the GitHub organisation and the agentskills.io domain to a vendor-neutral foundation and left the file format alone, so existing skills keep working. What still differs between agents is where each one looks for skills and which extra fields it accepts. A skill that keeps to the specification’s six front-matter fields and lives in .agents/skills/, with a link from .claude/skills/ for Claude Code, fits what every product in this post documents.
This post covers the format, the donation, where nine products load skills, how to write and test a portable skill, and when MCP or AGENTS.md fits better. Sources are the specification, vendor documentation and announcements published on or before 28 October 2026, and we haven’t tested these products ourselves.
What goes in a SKILL.md file
The specification on agentskills.io defines a skill as a folder with at least a SKILL.md file, which holds YAML front matter and then Markdown instructions in any shape. Two front-matter fields are required and four are optional.2
| Field | Required | What the specification says |
|---|---|---|
name |
Yes | Up to 64 lowercase letters, digits and hyphens, with no leading, trailing or double hyphen. Must match the folder name |
description |
Yes | Up to 1,024 characters on what the skill does and when to use it |
license |
No | A licence name or a bundled licence file |
compatibility |
No | Up to 500 characters on environment needs |
metadata |
No | String keys and values for anything else |
allowed-tools |
No | Experimental. Tools the skill may use without asking |
Optional scripts/, references/ and assets/ folders hold code the agent can run, documents it reads on demand, and templates or data files. A skill folder may hold other files as well.2
Agents load a skill in stages, which the specification calls progressive disclosure. At startup they read only name and description, about 100 tokens a skill, so the description is all an agent has to go on when it decides whether to load one.23 When a request matches, the agent reads the whole SKILL.md body, which the specification suggests keeping under 5,000 tokens and 500 lines. Other files load only when the instructions send the agent to them.2
What changed when Agent Skills moved to the Agentic AI Foundation
Anthropic launched skills in Claude on 16 October 2025 and published Agent Skills as an open standard on 18 December 2025.45 On 22 October 2026 the AAIF announced it as one of four new projects, which took the foundation to 10 hosted projects. The AAIF launched on 9 December 2025 with MCP, goose and AGENTS.md, and A2A has joined since.67
The foundation now holds the Agent Skills name and logo, the agentskills GitHub organisation and the agentskills.io domain. Engineers from Anthropic, Google, OpenAI and other companies will maintain the standard as individuals, with David Soria Parra and Mahesh Murag as lead maintainers. Nobody has to join the AAIF to use the standard or contribute to it.1
Anthropic also says 1 million skills have been published and nearly 280 million installed. These are Anthropic’s figures, and its post doesn’t say how it counts an install.1
The format itself didn’t change. The specification file in the project’s GitHub repository last changed on 4 August 2026, when two wording clarifications were merged, and the repository had no commits between 9 August and 28 October.8 The specification has no version number either. Anthropic says it has proposed a roadmap that starts with versioned releases, a formal proposal process and security guidance for people who write and install skills, and it asks for feedback on proposed changes in the project’s Discord.1 Until then, the contributing guide sends proposals to GitHub Discussions.9
Where Claude, Codex, Cursor, Copilot and Gemini CLI load skills
The specification defines what goes inside a skill folder and leaves the folder’s location to each product.10 This table pulls each vendor’s documentation together as of 28 October 2026. “Not stated” means the documentation doesn’t say.
| Platform | Where skills live | Reads .agents/skills/ |
How a skill is picked | Notable extras or limits |
|---|---|---|---|---|
| Claude Code | .claude/skills/, including parent and nested folders; ~/.claude/skills/; managed settings; plugins; claude.ai sync |
Not stated | Matches description and when_to_use, or /skill-name |
disable-model-invocation, context: fork, ! shell lines; skill list defaults to 1% of context, 1,536 characters a skill |
| Claude apps (claude.ai) | ZIP uploaded per user; Team and Enterprise owners can provision skills for everyone | No, skills are uploaded | Claude decides from the request | Specification fields only, or the upload fails; no “claude” or “anthropic” in names |
| Claude API | Uploaded through /v1/skills, shared across the workspace |
No, skills are uploaded | Up to 20 named in a request; Claude decides which to load | No network access or package installs; uploads under 30 MB; specification fields only |
| OpenAI Codex | .agents/skills/ from the working folder up to the repo root; ~/.agents/skills/; /etc/codex/skills |
Yes, its only project folder | Matches description, or $skill-name |
agents/openai.yaml for invocation policy and MCP dependencies; skill list defaults to 2% of context |
| ChatGPT | Desktop app; skills inside plugins also on web and mobile | Not stated | Matches description, or an @ mention |
@skill-creator drafts skills; workspace sharing where settings allow |
| Cursor | .agents/skills/ or .cursor/skills/, nested ones scoped to their folder; the same two under ~/; Claude’s and Codex’s folders |
Yes | The agent decides, or /skill-name |
paths, disable-model-invocation; only ~/.cursor/skills/ syncs to Cloud Agents |
| GitHub Copilot (cloud agent, code review, CLI, app) | .github/skills, .claude/skills or .agents/skills; ~/.copilot/skills or ~/.agents/skills |
Yes | From the prompt and description; /skill-name in the CLI |
allowed-tools, such as shell; gh skill installs and pins skills (preview) |
| VS Code with Copilot | .github/skills/, .claude/skills/ or .agents/skills/; ~/.copilot/skills/, ~/.claude/skills/ or ~/.agents/skills/ |
Yes | Matches description, or the / menu |
user-invocable, disable-model-invocation, experimental context: fork; invalid names fail silently |
| Gemini CLI | .gemini/skills/ or .agents/skills/; the same two under ~/; extensions |
Yes, ahead of .gemini/skills/ |
Calls activate_skill on a match, then asks you to approve |
Workspace skills beat user skills; the trust dialog lists a project’s skills |
Sources are each vendor’s documentation.111213141516171819202122
Codex, Cursor, Copilot, VS Code and Gemini CLI all read .agents/skills/ in a project and ~/.agents/skills/ in the home folder. Claude Code’s documentation doesn’t mention .agents/skills/. Cursor, Copilot and VS Code also read a project’s .claude/skills/, but Codex and Gemini CLI don’t list it, so no single folder reaches every agent.
For claude.ai, the table follows Anthropic’s help centre, updated on 23 October 2026, although Anthropic’s developer docs still call claude.ai skills per user.1213
How to create an agent skill that works across agents
- Use only the specification’s fields. Uploads to claude.ai and the Skills API reject any other field with a hard error, and so does skills-ref, the reference validator.1123 Claude Code ignores fields it doesn’t recognise without a warning, so a misspelt one fails quietly there.11
- Give the folder and the skill the same name. The specification requires it, and VS Code skips a skill with an invalid name without reporting an error.220 The Claude apps and API also reserve “claude” and “anthropic”.13
- Write the description as a trigger. Say what the skill does and when to use it, in a user’s words, and name close cases it shouldn’t handle.3 Put the main use case first. By default, Claude Code cuts each entry at 1,536 characters and drops descriptions when its list passes 1% of the context window, and Codex shortens them past 2%.1115
- Keep the YAML plain. Leave out angle brackets, since the Claude API rejects XML tags in a description. Quote a description that contains a colon followed by a space. That is invalid YAML, and Claude Code then loads the skill with no description, so Claude can’t match it.131011
- Keep SKILL.md short. Stay under 500 lines and move detail into
references/, with a line saying when to read each file.224 After compacting a conversation, Claude Code keeps only the first 5,000 tokens of each loaded skill, so put the important rules first.11 - Use paths relative to the skill folder, such as
scripts/check_entry.py, with forward slashes.220 Leave out features only Claude Code supports, such as placeholders like${CLAUDE_SKILL_DIR}and!command lines, which Anthropic says don’t run in the Claude apps or API.11 - Write scripts that need nothing installed. The Claude API allows no network access or package installs, so use the Python standard library or plain shell.13 Agents run scripts in non-interactive shells, so a script must never prompt. Give it
--help, clear errors and JSON output, and declare any packages inline, with PEP 723 for Python.25
Here is a skill written to those rules. It drafts a changelog entry in a team’s format and checks it with a script that uses only Python’s standard library.
.agents/skills/changelog-entry/
├── SKILL.md
├── scripts/
│ └── check_entry.py
└── references/
└── breaking-changes.md
.claude/skills/changelog-entry -> ../../.agents/skills/changelog-entry
---
name: changelog-entry
description: Writes and checks a CHANGELOG.md entry for the current change in this team's format. Use when the user asks for a changelog or release-note line, or is finishing a pull request that changes what users see, even if they don't mention the changelog. Not for release announcements or blog posts.
license: Apache-2.0
metadata:
owner: platform-team
version: "1.0"
---
# Changelog entry
1. Read the diff and pick one section for the change: Added, Changed, Fixed,
Removed or Security.
2. Add one bullet under `## Unreleased` in CHANGELOG.md at the repository root.
Describe what users will notice. End with the pull request number, as in (#123).
3. Run `python3 scripts/check_entry.py <path to CHANGELOG.md>`. It prints JSON and
exits non-zero if a rule is broken. Fix the entry and run it again until it passes.
4. If the change breaks an API or a config format, read
`references/breaking-changes.md` before you write the bullet.
## Gotchas
- Never edit the section of a version that has already shipped.
- One bullet per pull request, even when the change touches several areas.
Claude Code doesn’t list .agents/skills/, so the tree’s last line links the folder into .claude/skills/ with ln -s ../../.agents/skills/changelog-entry .claude/skills/changelog-entry. Claude Code’s docs allow a symlinked skill folder.11 Cursor, Copilot and VS Code read both folders, and none of them says how it treats the same skill found in both, so check their skill lists after adding the link. A Windows clone with core.symlinks off gets a small text file in place of the link, and Claude Code won’t find the skill.26 Windows teams can keep a copy instead, with a CI check that the two match.
Keep vendor-only fields out of the shared SKILL.md
Products add fields of their own and don’t agree on names. Claude Code, Cursor and VS Code read disable-model-invocation: true to stop the agent choosing a skill by itself. Codex skills set the same switch with allow_implicit_invocation: false in a separate agents/openai.yaml file.11162015 Any vendor field in SKILL.md breaks uploads to the Claude apps and API, and fails skills-ref.1123
Where a product allows it, set the behaviour outside SKILL.md. Codex reads this sidecar file, and the specification permits extra files in a skill folder.152
# agents/openai.yaml, read by Codex
policy:
allow_implicit_invocation: false
In Claude Code, the skillOverrides setting can hide a skill from Claude without editing it.11 Cursor and VS Code document only the front-matter field, so strip it before uploading the skill to claude.ai.
allowed-tools is in the specification but marked experimental, and its values differ by product. Claude Code takes permission rules such as Bash(python3 *), and Copilot takes tool names such as shell.21118 GitHub warns that pre-approving shell or bash can let an attacker-controlled skill or a prompt injection run commands without asking.18 We’d leave the field out of shared skills and grant tools in each product’s own permission settings.
Agent skills vs MCP vs AGENTS.md: which to use when
GitHub recommends custom instructions for simple guidance that applies to almost every task, and skills for detailed instructions an agent needs only sometimes.18 Anthropic says MCP connects Claude to data and skills teach Claude what to do with it.27
| Use | For | When it loads | Example |
|---|---|---|---|
| AGENTS.md or CLAUDE.md | Facts and rules nearly every task needs | Every session | Test commands |
| A skill | A procedure, template or script some tasks need | Name and description always, the rest on a match | Cutting a release |
| An MCP server | Live data or actions in another system, usually behind a login | Tool definitions while connected | Searching a ticket tracker |
| A subagent, or a skill run as one | Long work the main conversation doesn’t need to see | On demand, in a separate context | Reviewing a large diff |
| A hook or CI check | A rule that must hold every time | On every matching event | Blocking edits to applied migrations |
A skill can also tell the agent which MCP tools to call, as GitHub’s example skill does with the GitHub MCP server.18 Claude Code, and VS Code in an experimental mode, can run a skill as a subagent with context: fork.1120 Claude Code’s troubleshooting guide moves a rule that must hold every time into a hook, which runs on its event whether or not Claude is still following the skill.11 Our post on AGENTS.md vs CLAUDE.md covers which instruction file each coding agent reads.
Review third-party skills like any other dependency
A skill can carry scripts, and its Markdown tells the agent what to run, so a skill from outside your team is code. Anthropic says to use skills only from trusted sources and to audit every bundled file. GitHub says skills are not verified by GitHub and may contain prompt injections, hidden instructions or malicious scripts.1318 When Snyk scanned 3,984 skills from ClawHub and skills.sh in February 2026, it confirmed 76 as malicious and found at least one critical-level issue in 534, or 13.4%.28
Our post on agent config files that run code covers skills alongside hooks and MCP config, with a CODEOWNERS block and a CI check. That block doesn’t list .agents/, so add it once your skills live there.
- Pin what you install.
gh skill install, a public preview that needs GitHub CLI 2.90.0 or later, can pin a skill to a tag or commit, andgh skill previewshows its files before anything is installed.18 - Keep shell out of
allowed-toolsfor any skill you didn’t write. - Use the gates products offer, such as Gemini CLI’s approval prompt before a skill activates, and Claude Enterprise’s scanning of skills uploaded in claude.ai.2113
How to test a skill before your team relies on it
Test whether the agent loads the skill for the right requests, and separately whether the work is better with it than without. Claude Code’s docs make the same split and ask for a fresh session per run, because context left over from writing the skill hides gaps in it.11 The steps below follow the agentskills.io guides. They are advice, and we haven’t run them for this post.
- Check that it parses and shows up. Run
skills-ref validate, which its README calls a demonstration library, orgh skill publish --dry-run. Both check the skill against the specification.2318 Then confirm each agent lists the skill, for example by asking Claude Code “What skills are available?”, or with/skillsin Codex and/skills listin Copilot CLI and Gemini CLI.11151921 - Measure triggering. Write about 20 realistic prompts, 8 to 10 that should load the skill and 8 to 10 near-misses that share its keywords but need something else. Run each three times. A prompt passes when its trigger rate is on the right side of 0.5. Tune the description on about 60% of the prompts, check it on the other 40%, and expect around five rounds. Use requests that need the skill, because agents tend to skip skills for one-step tasks they can do alone.3
- Measure the output. Start with two or three test cases. Run each with and without the skill in clean sessions, add checkable assertions once you’ve seen the first outputs, and weigh the gain against the extra tokens and time.29 Anthropic’s skill-creator plugin automates this loop in Claude Code.11
- Repeat for each agent and each change. Each product picks skills in its own way, so a trigger rate measured in one may not hold in another. Test in every agent the team uses, and again when the description, the model or the agent version changes.
Checklist for writing and rolling out a skill
- Pick a task the team already does well, and write the skill from a real run and its corrections.24
- Limit the front matter to
nameanddescription, pluslicenseormetadataif needed. The name matches the folder and avoids “claude” and “anthropic”. The description says what, when and when not. - Keep the body under 500 lines, with gotchas near the top and detail in
references/. - Write scripts that use the standard library, never prompt and print JSON.
- Store the skill in
.agents/skills/<name>/and link it from.claude/skills/<name>, or keep a checked copy on Windows. - Move vendor-only behaviour into
agents/openai.yamlorskillOverrides. - Validate in CI with skills-ref or
gh skill publish --dry-run, and give.agents/and.claude/skills/code owners. - Test triggering and output on every agent the team uses, with about 20 prompts at three runs each and two or three output cases.
- Read third-party skills file by file, pin them and keep shell out of
allowed-tools. - Re-run the tests when the description, the model or the agent version changes.
-
Anthropic, “Donating Agent Skills to the Agentic AI Foundation”, 22 October 2026, https://www.anthropic.com/news/donating-agent-skills-to-the-agentic-ai-foundation ↩↩↩↩
-
Agent Skills, “Specification”, https://agentskills.io/specification ↩↩↩↩↩↩↩↩↩
-
Agent Skills, “Optimizing skill descriptions”, https://agentskills.io/skill-creation/optimizing-descriptions ↩↩↩
-
Anthropic, “Introducing Agent Skills”, 16 October 2025, https://claude.com/blog/skills ↩
-
Anthropic, “Skills for organizations, partners, the ecosystem”, 18 December 2025, https://claude.com/resources/articles/organization-skills-and-directory ↩
-
Linux Foundation, “Agentic AI Foundation Announces Four New Projects: Agent Skills, Open Responses, OpenEnv, and OpenSandbox”, 22 October 2026, https://www.linuxfoundation.org/press/agentic-ai-foundation-announces-four-new-projects-agent-skills-open-responses-openenv-and-opensandbox ↩
-
Linux Foundation, “Linux Foundation Announces the Formation of the Agentic AI Foundation”, 9 December 2025, https://www.linuxfoundation.org/press/linux-foundation-announces-the-formation-of-the-agentic-ai-foundation ↩
-
agentskills/agentskills on GitHub, commit history of docs/specification.mdx, https://github.com/agentskills/agentskills/commits/main/docs/specification.mdx ↩
-
agentskills/agentskills on GitHub, “Contributing to Agent Skills”, https://github.com/agentskills/agentskills/blob/main/CONTRIBUTING.md ↩
-
Agent Skills, “How to add skills support to your agent”, https://agentskills.io/client-implementation/adding-skills-support ↩↩
-
Anthropic, “Extend Claude with skills”, Claude Code docs, https://code.claude.com/docs/en/skills ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩
-
Anthropic, “Use skills in Claude”, Claude Help Center, updated 23 October 2026, https://support.claude.com/en/articles/12512180-use-skills-in-claude ↩↩
-
Anthropic, “Agent Skills”, Claude Developer Platform docs, https://platform.claude.com/docs/en/agents-and-tools/agent-skills/overview ↩↩↩↩↩↩↩
-
Anthropic, “Using Agent Skills with the API”, Claude Developer Platform docs, https://platform.claude.com/docs/en/build-with-claude/skills-guide ↩
-
OpenAI, “Build skills”, https://learn.chatgpt.com/docs/build-skills, and “Skills & Plugins”, https://learn.chatgpt.com/docs/skills-and-plugins, ChatGPT and Codex docs ↩↩↩↩↩
-
Cursor docs, “Agent Skills”, https://cursor.com/docs/skills ↩↩
-
GitHub Docs, “Agent skills”, https://docs.github.com/en/copilot/concepts/customizations/agent-skills ↩
-
GitHub Docs, “Adding agent skills for GitHub Copilot”, https://docs.github.com/en/copilot/how-tos/copilot-on-github/customize-copilot/customize-cloud-agent/add-skills ↩↩↩↩↩↩↩↩
-
GitHub Docs, “Adding agent skills for GitHub Copilot CLI”, https://docs.github.com/en/copilot/how-tos/copilot-cli/customize-copilot/add-skills ↩↩
-
Visual Studio Code docs, “Use Agent Skills in VS Code”, 28 October 2026, https://code.visualstudio.com/docs/agent-customization/agent-skills ↩↩↩↩↩
-
Gemini CLI docs, “Agent Skills”, https://geminicli.com/docs/cli/skills/ ↩↩↩
-
Gemini CLI docs, “Trusted Folders”, https://geminicli.com/docs/cli/trusted-folders/ ↩
-
agentskills/agentskills on GitHub, skills-ref README and validator, https://github.com/agentskills/agentskills/tree/main/skills-ref ↩↩↩
-
Agent Skills, “Best practices for skill creators”, https://agentskills.io/skill-creation/best-practices ↩↩
-
Agent Skills, “Using scripts in skills”, https://agentskills.io/skill-creation/using-scripts ↩
-
Git documentation, “git-config”, entry for core.symlinks, https://git-scm.com/docs/git-config ↩
-
Anthropic, “Skills explained: How Skills compares to prompts, Projects, MCP, and subagents”, 5 March 2026, https://claude.com/blog/skills-explained ↩
-
Snyk, “Snyk Finds Prompt Injection in 36%, 1467 Malicious Payloads in a ToxicSkills Study of Agent Skills Supply Chain Compromise”, 5 February 2026, https://snyk.io/blog/toxicskills-malicious-ai-agent-skills-clawhub ↩
-
Agent Skills, “Evaluating skill output quality”, https://agentskills.io/skill-creation/evaluating-skills ↩
Frequently asked questions
What are agent skills?
Agent skills are folders that teach an AI agent a specific task. Each has a SKILL.md file with a name, a description and instructions, plus optional scripts, reference files and templates. The agent reads only the name and description at the start and loads the rest when a request matches.
How do I create an agent skill?
Make a folder named after the skill, such as .agents/skills/changelog-entry, and add a SKILL.md with name and description in YAML front matter, followed by the instructions. Use the folder name as the skill name, say what the skill does and when to use it, then test it with prompts that should and shouldn’t load it.
What is the difference between agent skills and MCP?
An MCP server gives an agent tools and live data, such as a ticket tracker behind a login. A skill is a set of instructions and files the agent reads when a task needs them, such as how your team triages tickets. Anthropic describes MCP as connectivity and skills as procedural knowledge, and the two are often used together.
Do Claude skills work in Codex, Cursor and Copilot?
Yes, if the skill uses only the specification’s front-matter fields and sits where each tool looks. Cursor, Copilot and VS Code read a project’s .claude/skills folder, but Codex and Gemini CLI look in .agents/skills, and Claude Code-only features such as ! command lines aren’t part of the standard.
Who owns the Agent Skills standard?
Since 22 October 2026, the Agentic AI Foundation at the Linux Foundation, which also hosts MCP and AGENTS.md. Anthropic donated the name, logo, GitHub organisation and agentskills.io domain, and engineers from Anthropic, Google, OpenAI and other companies maintain the standard as individuals.
Are agent skills safe to install?
Only after you have read every file in them. A skill can carry scripts and tell the agent which commands to run, and in February 2026 Snyk confirmed malicious payloads in 76 of 3,984 skills it scanned from two public registries. Pin the versions you install and don’t pre-approve shell access.
Building something like this?
9io is a small team of senior engineers with a fractional CTO. We work by the hour, and plans start at $5,000. Send us a note about your product. The reply comes from the person who'd do the work.