Do Agent Skills work outside Claude Code?

Stacks of standard shipping containers at a port, one format moving between ship, rail, and road
Image: Stacks shipping containers Port Barcelona · CC0

The question comes up as soon as someone finds a skill they want and is not using the tool it was written for. It has a satisfying answer: mostly yes, with an asterisk that is about plumbing rather than substance.

The format is deliberately boring

A skill is a directory containing a SKILL.md file. That file is Markdown with a small YAML block naming the skill and describing when it applies.

migration-conventions/
└── SKILL.md

There is no binary, no manifest schema, no registry, no API version. Nothing in it is proprietary or even particularly clever. That is precisely why it travels: any agent that decides to read a folder of Markdown can support the format, and several do. Claude Code popularised the convention; it does not own it.

So when people ask whether skills are “locked in”, the format is not the lock. The discovery mechanism is.

What actually differs between tools

Every coding agent has arrived at some version of the same idea — persistent project-specific instructions the model reads without you pasting them. They differ in three places:

Where it looks. One tool reads ~/.claude/skills/ and .claude/skills/. Another reads a rules directory. Another reads a single instructions file at the repository root. This is the main friction, and it is a cp command.

How it decides to load. The SKILL.md model is on-demand: the agent holds each skill’s name and description, matches your request against them, and pulls in the body only when it looks relevant. Some tools instead load their instruction file always. That difference matters more than it sounds — a description tuned to be a precise trigger is doing nothing useful in a tool that loads everything unconditionally, and twenty always-loaded skills is a context budget problem that twenty on-demand skills is not.

What extras it supports. Slash commands, hooks, subagents, plugin manifests, MCP server configuration. These are genuinely tool-specific. A skill that is purely instructions is portable; a plugin bundling hooks and an MCP server is not.

What transfers and what does not

Part of a skillPortable?
Conventions, rules, decisions in the bodyYes — this is the substance
Code examples and anti-patternsYes
name / description frontmatterUsually, as metadata; the matching behaviour varies
References to bundled files (reference.md)Usually, if you copy the whole folder
Bundled scriptsYes, if the agent can run commands
Slash-command definitionsNo
Hook configurationNo
MCP server wiringNo — separate mechanism, see skills vs MCP vs plugins
Plugin manifests / marketplace metadataNo

The pattern: judgement is portable, plumbing is not. Which is a good deal, because judgement is the part that took you an afternoon to write down and the plumbing is the part that took you four lines.

Moving a skill to another tool

The practical procedure is short.

  1. Take the body, not the folder. Open SKILL.md and separate the instructions from anything naming a specific tool surface.
  2. Put it where that tool looks. Its documentation names one directory or file. If the tool supports several instruction files, one per skill keeps them reviewable; if it supports only one, append under a clear heading.
  3. Reconsider the trigger. In an always-loaded tool, the description is documentation rather than a matcher, and length now costs you on every request. Trim aggressively.
  4. Drop the plumbing. Delete the hook config and the slash commands rather than leaving instructions the tool cannot act on — stale directions are worse than absent ones, because the model may try to follow them.
  5. Test with a realistic request. Same check as anywhere: phrase a task the way you normally would and see whether the behaviour changed.

Fifteen minutes for a skill you did not have to write. The authoring guide covers the reverse direction — writing a body that was portable to begin with.

Most skills never say

Here is what the catalog looks like on this question. Across the skills we index, only about one in fifteen names more than one agent, and over eight in ten name none at all.

That is not a compatibility finding. It is an authoring habit. People write against the tool open on their desk, and it does not occur to them to mention which one — a skill full of Python testing conventions works fine in four agents and advertises support for zero. The gap between “declared” and “actually portable” is enormous, and it runs almost entirely in your favour.

Two consequences worth acting on:

As a consumer, do not filter on declared compatibility alone. A skill that mentions only Claude Code is very often a plain instructions skill that will work wherever you put it. Read the body and judge whether it names any tool surface — that is the real test. Our alternatives pages collect skills by declared compatibility, which is a useful starting shortlist rather than an exhaustive one.

As an author, say it. One line of frontmatter makes your skill findable by everyone who does filter:

compatibility: [claude-code, cursor, codex]

If the body contains nothing tool-specific, that line is honest and it roughly quadruples the audience that can discover the work.

Writing for more than one tool

If you expect your skill to be used across agents, a few choices make it hold up.

Keep the body tool-neutral. Write “run the test suite”, not “use the /test command”. The former works everywhere; the latter breaks in three places out of four.

Separate the plumbing visibly. Put anything tool-specific under its own heading, or in its own file, so a reader porting the skill knows exactly what to discard:

api-conventions/
├── SKILL.md              ← portable: the conventions
├── claude-code.md        ← hooks and slash commands
└── examples/handler.ts

Do not assume a permission model. One agent asks before running a command; another runs it. Instructions written on the assumption of a confirmation prompt behave differently where there is none — which is also a safety consideration, covered in vetting a skill before you install it.

Keep it short. Portable also means it might be loaded unconditionally somewhere. A tight 80-line skill survives that; a 400-line one becomes somebody’s context problem.

The bottom line

Skills are portable because they are unglamorous — a folder, a Markdown file, and some frontmatter. Nothing about the substance of a good skill is tied to one vendor, and the part that is tied to one vendor is usually four lines you can delete.

Which means a skill library is a fairly durable investment. If you switch agents next year, the conventions you wrote down move with you; the wiring gets redone in an afternoon.

Browse by the tool you actually use:

Frequently asked questions

Can I use a Claude Code skill in Cursor?
The instructions transfer, because a skill is Markdown. What does not transfer automatically is the discovery mechanism — each tool looks in its own location and uses its own convention for loading context. In practice you copy the body into the place that tool reads, and most of the value comes across intact.
Is SKILL.md an open standard?
It is an open format rather than a governed standard: a folder containing SKILL.md, with name and description in YAML frontmatter. Nothing about it is proprietary, which is why other agents can and do read it, but there is no specification body guaranteeing identical behaviour between tools.
Which parts of a skill are tool-specific?
Anything naming a tool surface — slash commands, hook configuration, MCP server wiring, plugin manifests, and instructions that assume a particular permission model. The conventions, decisions, and examples in the body are portable; the plumbing around them usually is not.
How many published skills declare multi-tool support?
A small minority. Across the skills we index, roughly one in fifteen names more than one agent, and over eight in ten name none at all — not because they are incompatible, but because authors write against the tool in front of them and never think to say so.
Should I write one portable skill or one per tool?
Write one portable body and keep the tool-specific plumbing at the edges, in clearly separated sections or separate files. Duplicating a whole skill per tool means maintaining several copies of a convention that will change.
agent-skillscursorcodexcopilotcompatibility

Integrations skills to try

All integrations skills →

Harvest every `ponytail:` comment in the codebase into a debt ledger, so the deliberate shortcuts and deferrals ponytail leaves behind get tracked instead of rotting into "later means never". Use when the user says "ponytail debt", "/ponytail-debt", "what did ponytail defer", "list the shortcuts", "ponytail ledger", or "what did we mark to do later". One-shot report, changes nothing.

105k DietrichGebert MIT

Show ponytail's measured impact as a compact scoreboard: less code, less cost, more speed, from the benchmark medians. One-shot display, not a persistent mode, and not a per-repo number. Trigger: /ponytail-gain, "ponytail gain", "what does ponytail save", "show ponytail impact", "ponytail scoreboard".

105k DietrichGebert MIT

Quick-reference card for all ponytail modes, skills, and commands. One-shot display, not a persistent mode. Trigger: /ponytail-help, "ponytail help", "what ponytail commands", "how do I use ponytail".

105k DietrichGebert MIT

Code review focused exclusively on over-engineering. Finds what to delete: reinvented standard library, unneeded dependencies, speculative abstractions, dead flexibility. One line per finding: location, what to cut, what replaces it. Use when the user says "review for over-engineering", "what can we delete", "is this over-engineered", "simplify review", or invokes /ponytail-review. Complements correctness-focused review, this one only hunts complexity.

105k DietrichGebert MIT

Cluster a GitHub issue backlog by root cause into a small set of plan-master issues, redirect children with a standardized comment, and bundle architectural-fix PRs that close clusters atomically. Use when an issue tracker has accumulated dozens of reports that share underlying defects, when asked to triage / consolidate / cluster / dedupe issues, when asked to build a plan series or roadmap from open issues, or when routing a new incoming bug into an existing plan.

91k thedotmack Apache-2.0

Automated semantic versioning and release workflow for Claude Code plugins. Handles version increments across package.json, marketplace.json, plugin.json manifests, build verification, git tagging, GitHub releases, and changelog generation. NPM publishing (so `npx claude-mem@X.Y.Z` resolves) is handed off to the human maintainer, who raised npm security.

91k thedotmack Apache-2.0