# The Agent Skills Standard: One SKILL.md for Every AI Tool

> Agent Skills became an open standard in December 2025. Which tools read SKILL.md today — Copilot, Cursor, VS Code, Gemini CLI, Codex — and how to write portable skills.

Anthropic released the Agent Skills format as an open standard on December 18, 2025, and adoption has been sweeping: the official showcase lists 40+ clients, including GitHub Copilot, VS Code, Cursor, Gemini CLI — and OpenAI's Codex. A .agents/skills directory in your repo is emerging as the cross-tool convention: one SKILL.md, every agent your team runs.

The most consequential thing about Claude Skills isn't a feature — it's that the format escaped. Anthropic shipped skills in October 2025, then published the format as an **open standard** on December 18, 2025 (agentskills.io, spec on GitHub). Seven months later, the official client showcase lists **44 tools** that read SKILL.md, including every major coding agent — and, remarkably, OpenAI's own. A procedure you write once now runs in whatever agent each teammate happens to use.

## What the standard actually specifies

The spec is deliberately small. A skill is a directory with a `SKILL.md`:

- **Identity frontmatter** — `name` (lowercase, hyphens, matches the folder) and `description` (what it does + when to use it), plus optional `license`, `metadata`, and `compatibility`.
- **The body** — Markdown instructions the agent follows once the skill loads.
- **Progressive disclosure** — clients load name/description at startup, the body on trigger, and bundled files (scripts, references) only when the instructions reach for them.

That's the portable core. Everything else you may know from Claude Code — [`allowed-tools`, `context: fork`, `model`, skill-scoped hooks](/guides/skills/skill-md-reference) — is a **client extension**: legal under the spec (unknown fields are ignored), but not behavior you can count on elsewhere.

## Who reads SKILL.md today

Verified against each vendor's own docs (July 2026):

| Tool | Where it loads skills from |
|---|---|
| **Claude Code** | `.claude/skills/` (project), `~/.claude/skills/` (personal), plugins, managed |
| **GitHub Copilot** | `.github/skills`, `.claude/skills`, `.agents/skills`; personal `~/.copilot/skills`, `~/.agents/skills` — across the cloud agent, code review, Copilot CLI, and agent mode in VS Code/JetBrains |
| **VS Code** | Workspace `.github/skills/`, `.claude/skills/`, `.agents/skills/`; user `~/.copilot/skills`, `~/.claude/skills`, `~/.agents/skills` |
| **Cursor** | `.agents/skills/`, `.cursor/skills/` (+ home equivalents) — and reads `.claude/skills/` and `.codex/skills/` for compatibility |
| **Gemini CLI** | User `~/.gemini/skills/` (alias `~/.agents/skills/`), workspace `.gemini/skills/` (alias `.agents/skills/`), with a consent prompt on activation |
| **OpenAI Codex** | `.agents/skills` (scanned up to repo root), `~/.agents/skills`, admin `/etc/codex/skills` — its docs cite the open standard explicitly |

Beyond those: Goose, OpenHands, Letta, JetBrains Junie, Spring AI, Amp, OpenCode, Roo Code, Qodo, Tabnine, and enough others that "40+ tools" is now simply accurate.

Two patterns jump out of that table. First, **`.agents/skills/` is the neutral ground** — the one directory nearly everyone reads. Second, **`.claude/skills/` travels**: Copilot, VS Code, and Cursor read it directly, so a repo already set up for Claude Code is, for most teams, already set up for everything else.

## What this means for a team

The strategic shift: skills stop being tool configuration and become **team infrastructure**, like `.editorconfig` or CI. One concrete playbook:

1. **Keep skills in the repo, once.** Either stay in `.claude/skills/` (widely read for compatibility) or move to `.agents/skills/` as the tool-neutral home. Don't maintain per-tool copies.
2. **Let each engineer bring their own agent.** The migration-writer procedure fires whether a teammate runs Claude Code, Cursor, or Codex — conventions stop depending on tool monoculture.
3. **Review skills like the shared code they now are.** A SKILL.md in the repo changes behavior for *every* agent in the building — the [security checklist](/guides/ai-safety/are-claude-skills-safe) applies with interest.

## Writing portably

A few rules keep a skill working across clients:

- **Encode the procedure, not the tool.** "Run `git diff --staged` and summarize by intent" ports; "use the Grep tool with these parameters" doesn't. Name commands and outcomes, not a specific client's tool surface.
- **Treat execution fields as progressive enhancement.** `allowed-tools` reducing friction in Claude Code is great; a skill that's *unsafe or wrong* without it isn't portable. Same for `context: fork` — the procedure should still make sense inline.
- **Keep bundled scripts boring.** POSIX shell or stdlib Python, relative paths, no assumptions about the host beyond "can run a script" — the lowest common denominator across 44 sandboxes is low.
- **Test the description against strangers.** Different clients route with different prompting around your description; the trigger-first two-sentence shape ([the craft guide](/guides/skills/claude-code-skills-best-practices)) is what survives contact with all of them.

Skills from the [AgentsCamp library](/skills) follow these rules — the bodies are command-and-outcome procedures, which is why they carry across tools with light or no editing. And if you're deciding what this means versus the walled-garden alternative, the [Custom GPTs comparison](/guides/comparisons/claude-skills-vs-custom-gpts) is the natural next read.

---

_Source: https://agentscamp.com/guides/skills/agent-skills-open-standard — Guide on AgentsCamp._
