AgentSkills.site

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:

  1. Use only name, description, and the body. Everything else is a compatibility question.
  2. Write the description for the tightest budget — one line, under about 160 characters, trigger-focused.
  3. Keep SKILL.md short and push detail into references/. The 500-line guidance is a portability rule as much as a context one.
  4. Put runtime-specific behaviour in metadata, namespaced, where it will be ignored rather than misread.
  5. Never add paths to a skill you intend to share.
  6. Treat allowed-tools as advisory, not as a control.
  7. Store it in .agents/skills if 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