Agent Skills Compatibility: Which Agents Support SKILL.md
Forty-six products appear on the standard's client list. That list tells you a vendor said yes; it doesn't tell you where skills live, how they're invoked, or which field silently breaks your skill. This separates the three.
Published
AgentSkills.site editorial
The short answer: a SKILL.md using only the portable core runs across a wide range of agents unchanged. The portable core is name, description, the markdown body, and the scripts/ / references/ / assets/ convention.
Everything past that is where compatibility becomes a real question — and where a list of product names stops helping.
What "support" is being claimed
The Agent Skills client showcase listed 46 products as of 16 August 2026. That is a showcase, not a conformance suite: it records that a vendor says it supports the format. It does not test behaviour, and neither have we.
So every claim on this page carries one of four levels:
| Level | Meaning |
|---|---|
| Verified | We read the runtime's own documentation or source and can cite specifics |
| Documented | The vendor documents skill support; we have not examined it in depth |
| Listed | Appears on the showcase; behaviour unexamined by us |
| Not established | No claim made |
We hold Verified evidence for five runtimes. For the other forty-one we will not invent behaviour, and you should be sceptical of anyone who does.
The five we can speak to in detail
All rows below are Verified — read from each runtime's documentation or source, with the full working in each cluster.
| Claude Code | Codex | Cursor | OpenClaw | Hermes Agent | |
|---|---|---|---|---|---|
| Personal root | ~/.claude/skills/ |
$HOME/.agents/skills |
~/.cursor/skills/, ~/.agents/skills/ |
~/.agents/skills, <state-dir>/skills |
~/.hermes/skills/ |
| Project root | .claude/skills/ |
.agents/skills up the project chain |
.cursor/skills/, .agents/skills/ |
<workspace>/skills, <workspace>/.agents/skills |
via external_dirs |
| Reads other runtimes' roots | No | No | Yes — .claude/skills/, .codex/skills/ and home equivalents |
No, by explicit decision | Only if you configure it |
| Explicit invocation | /skill-name |
$skill-name; @ in ChatGPT |
/skill-name |
$name in a message, /name as a command |
/skill-name |
| Turn off automatic use | disable-model-invocation |
allow_implicit_invocation: false |
disable-model-invocation |
disable-model-invocation |
— |
| Index budget | ~1% of context | 2% or 8,000 chars | Not published | ~97 chars/skill, configurable ceiling | Not published |
| Name collisions | Precedence chain | Both appear, unmerged | Not documented | Highest-priority root wins | Not documented |
| Import from another agent | — | — | /migrate-to-skills (rules and commands) |
openclaw migrate claude, openclaw migrate codex |
— |
| Runtime-only frontmatter | context: fork |
agents/openai.yaml |
paths |
metadata.openclaw.*, command-dispatch |
metadata.hermes.* |
Detail per runtime: Claude Code · Codex · Cursor · OpenClaw · Hermes Agent
The rest of the ecosystem
The showcase spans far more than coding agents — IDEs and editors (VS Code, GitHub Copilot, JetBrains' Junie, Kiro, Roo Code, TRAE), terminal agents (Gemini CLI, OpenCode, Goose, Amp, Factory, Mistral's Vibe), data platforms (Databricks Genie Code, Snowflake Cortex Code), frameworks (Spring AI, Laravel Boost, fast-agent), and vertical products in healthcare and infrastructure.
For all of these our level is Listed, or at best Documented where the vendor publishes a skills page. We have not examined their roots, invocation, budgets or collision behaviour, and this page will not guess at them. If you need certainty for one of these, the vendor's own skills documentation — linked from the showcase — is the place to go.
That gap is honest rather than lazy: verifying a runtime properly means reading its documentation and often its source, which is what produced the five columns above.
Where portability actually breaks
This is the part a name list can't give you.
One field breaks a skill outright
Cursor's paths field scopes a skill to matching files. Add it to a skill running in Claude Code and the skill becomes completely undiscoverable — missing from autocomplete, unlisted, and returning Unknown skill on direct invocation. Removing the single line restores it.
This is a public issue read to its resolution, covered in full in agent skills not working. It is the clearest demonstration on this site of why "both support Agent Skills" is not the same as "this skill works in both."
Runtime-only fields don't travel
Most degrade quietly — an unrecognised field is ignored, and the skill runs with less nuance than intended:
| Field | Home runtime | Elsewhere |
|---|---|---|
metadata.openclaw.requires |
OpenClaw | Ignored — the skill loses its dependency gating and appears even where it can't run |
agents/openai.yaml |
Codex | Ignored — invocation policy and MCP dependencies are lost |
context: fork |
Claude Code | Ignored — the skill runs inline rather than as a subagent |
metadata.hermes.requires_toolsets |
Hermes Agent | Ignored — conditional activation is lost |
paths |
Cursor | Breaks discovery in Claude Code; ignored elsewhere |
allowed-tools is in the spec and still unreliable
The specification marks it experimental, with support that "may vary between agent implementations." It's the field people reach for to constrain a skill, which makes its unevenness the most consequential caveat in the format. Don't build a trust model on it.
Description length advice contradicts itself across runtimes
The specification permits 1,024 characters. OpenClaw's own authoring guidance asks for one line under 160. Practical reports from Claude Code users running many skills suggest keeping under 200. All three are right for their runtime, because each has a different index budget — and a description written for the tightest constraint is safe everywhere.
Hosted runtimes have no filesystem at all
Not every runtime answers "where do skills live" with a path. Hosted products scope skills to a workspace with upload and export instead of directories, which changes installation, sharing and versioning entirely. Portability there means exporting an archive, not copying a folder.
The one location that travels
The bottom-up convention worth knowing: .agents/skills is read natively by Codex, Cursor and OpenClaw. A skill kept there is available in all three with no copying, no symlink, and no migration.
Cursor goes further and reads Claude Code's and Codex's directories too, which means a skill written for Claude Code is already available in Cursor with nothing to do. That is the single most useful compatibility fact in the ecosystem and it appears in almost no third-party coverage.
Two caveats. Symlinking .agents/skills to a shared library breaks discovery in Codex and Claude Code — copy instead. And OpenClaw deliberately does not read Codex's ~/.codex/skills, offering openclaw migrate codex instead.
Writing for portability
If you want one file to work in as many places as possible:
- Use only
name,description, and the body. Everything else is a compatibility question. - Write the description for the tightest budget — one line, under about 160 characters, trigger-focused.
- Keep
SKILL.mdshort and push detail intoreferences/. The 500-line guidance is a portability rule as much as a context one. - Put runtime-specific behaviour in
metadata, namespaced, where it will be ignored rather than misread. - Never add
pathsto a skill you intend to share. - Treat
allowed-toolsas advisory, not as a control. - Store it in
.agents/skillsif you use more than one of Codex, Cursor or OpenClaw.
SKILL.md, the format covers the field set in full; where to find agent skills covers distributing it once it's written.
Caveats
- Nothing here is a conformance test. We have not run any runtime, installed any skill, or reproduced any behaviour. Every Verified row is read from documentation or source; every other row says so.
- The 46-client figure is the showcase's listing count on 16 August 2026, not a count of implementations we checked.
- Budgets, roots and field sets are the fastest-moving facts on this site. Where a runtime publishes no figure, this page says so rather than estimating.
- Absence from the Verified set means we haven't examined a runtime — not that it works badly.
Sources
- Agent Skills — client showcase and specification
- Runtime documentation: Claude Code, Codex, Cursor, OpenClaw, Hermes Agent
anthropics/claude-code#49835 — thepathsdiscovery failureopenai/codex#11314 — symlinked skill roots
The implementations behind this matrix
- SKILL.md: The Agent Skill File FormatThe portable core these runtimes all implement, field by field.
- Agent Skills Not WorkingThe verified issue behind the paths trap, and other portability failures.
- Cursor Skills: The Practical GuideThe only runtime here that reads two other agents’ skill directories.
- OpenClaw Skills: The Practical GuideSix roots, dependency gating, and a documented per-skill prompt cost.