Platforms · 8 min read

Use Agent Skills Outside Claude Code: Codex, Cursor, Gemini CLI, GitHub Copilot, and OpenCode

Which agents read SKILL.md under the Agent Skills open standard, the folders Codex, Cursor, Gemini CLI, Copilot, and OpenCode scan, and what stays portable.

SKILL.md is not a Claude-only format. It follows the Agent Skills open standard, which Anthropic originally developed and released openly, and a skill folder written for Claude Code can also be read by OpenAI Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode, and many other agents. The standard defines the file format, not a folder location, so each tool scans its own directories. The one folder every tool in this guide reads except Claude Code is .agents/skills/, which leads to a simple setup: keep skills there and symlink them into .claude/skills/.

This guide lists what each tool reads and from where, what stays portable, and how to run one skills folder across all of them.

What does the open standard define?

The specification covers a folder with a SKILL.md, optional scripts/, references/, and assets/ directories, and six frontmatter fields:

FieldRequiredNotes
nameYes1 to 64 characters, lowercase letters, digits, single hyphens; must match the folder name
descriptionYesUp to 1,024 characters; says what the skill does and when to use it
licenseNoLicense name or a pointer to a bundled file
compatibilityNoUp to 500 characters of environment requirements
metadataNoMap of string keys to string values
allowed-toolsNoSpace-separated pre-approved tools; experimental, support varies

It also describes progressive disclosure: agents load only name and description at startup, read the full body when a task matches, and open bundled files only when needed. The SKILL.md format reference covers each field in more detail, including the extra fields Claude Code adds.

Which tools read SKILL.md, and from where?

Every path below comes from the vendor’s own documentation, checked on 2026-10-20.

ToolReads SKILL.md?Personal folderProject folderSource
Claude CodeYes~/.claude/skills/.claude/skills/, plus nested and --add-dircode.claude.com
OpenAI CodexYes~/.agents/skills/ (admin: /etc/codex/skills).agents/skills/ in each folder from the working directory up to the repo rootCodex skills
CursorYes~/.agents/skills/, ~/.cursor/skills/, ~/.claude/skills/, ~/.codex/skills/.agents/skills/, .cursor/skills/, .claude/skills/, .codex/skills/Cursor docs
Gemini CLIYes~/.gemini/skills/ or ~/.agents/skills/.gemini/skills/ or .agents/skills/Gemini CLI docs
GitHub Copilot (cloud agent, code review, CLI, app)Yes~/.copilot/skills/, ~/.agents/skills/.github/skills/, .claude/skills/, .agents/skills/GitHub Docs
VS Code (Copilot agent mode)Yes~/.copilot/skills/, ~/.claude/skills/, ~/.agents/skills/.github/skills/, .claude/skills/, .agents/skills/VS Code docs
OpenCodeYes~/.config/opencode/skills/, ~/.claude/skills/, ~/.agents/skills/.opencode/skills/, .claude/skills/, .agents/skills/opencode.ai

Two patterns stand out. Cursor, Copilot, VS Code, and OpenCode read .claude/skills/ directly, so a repository that already has Claude Code project skills works in those tools as is. Codex and Gemini CLI do not document reading .claude/skills/, but every tool except Claude Code reads .agents/skills/.

The agentskills.io client showcase lists many more adopters, including JetBrains Junie, Amp, Goose, Roo Code, Kiro, Factory, and OpenHands. Their folder conventions are not covered here; check each one’s linked docs.

Tool-specific notes

  • Codex follows symlinked skill folders. You invoke a skill explicitly with $skill-name or the /skills command, or let Codex pick it from the description. An optional agents/openai.yaml file inside the skill holds Codex settings such as policy.allow_implicit_invocation. If two skills share a name, Codex does not merge them, and both can appear.
  • Cursor also scans nested skills folders anywhere in the repo, scoped to files under that folder. It supports paths and disable-model-invocation in frontmatter, and /skill-name invokes a skill for one message. ~/.agents/skills/ is not copied to Cloud Agents, remote SSH sessions, or self-hosted workers, so use project skills when the agent runs remotely.
  • Gemini CLI gives workspace skills priority over user skills, and within each tier .agents/skills/ wins over .gemini/skills/. It asks permission before activating a skill. You can install from Git with gemini skills install <url> or link a local folder with /skills link <path>.
  • GitHub Copilot documents name, description, license, and allowed-tools, and chooses skills from the description. The GitHub CLI (2.90.0 or later, in public preview) adds gh skill install, gh skill update, and related commands.
  • VS Code additionally supports argument-hint, user-invocable, disable-model-invocation, and an experimental context: fork.
  • OpenCode recognizes name, description, license, compatibility, and metadata, and puts its own options inside metadata. It walks up from the current directory to the git worktree root, and permission.skill in opencode.json allows, denies, or asks per skill name.

What stays portable, and what is Claude-specific?

Anything the open standard defines travels well. Anything Claude Code adds may be ignored, handled differently, or supported by only some tools.

Part of a skillPortable?
name, descriptionYes, everywhere
license, compatibility, metadataYes, as defined by the spec
Markdown bodyYes
scripts/, references/, assets/ with relative pathsYes, if the agent can run the script’s language
allowed-toolsKey is standard but experimental; tool names differ per agent
disable-model-invocationClaude Code, Cursor, VS Code; not documented by Codex, Gemini CLI, or OpenCode
pathsClaude Code and Cursor
context, user-invocable, argument-hintClaude Code and VS Code
when_to_use, model, effort, agent, hooks, shell, argumentsClaude Code only
$ARGUMENTS, ${CLAUDE_SKILL_DIR}, !`command`Claude Code only

A few details are easy to miss:

  • Unknown keys. Claude Code ignores frontmatter keys it does not recognize, while claude.ai and the Claude API reject them (see Skills on claude.ai and the API). The other tools’ docs do not say how they treat unknown keys, so stay within the spec fields when portability matters.
  • Tool names in allowed-tools and the body. Bash(git log:*) is Claude Code syntax. Copilot documents its own tool names and warns against pre-approving shell access. In the body, write “run git log” rather than “use the Bash tool.”
  • Body substitutions. Other tools do not document $ARGUMENTS, ${CLAUDE_SKILL_DIR}, or !`command` lines, so expect them to arrive as literal text. Reference scripts by relative path (scripts/check.py), as the spec recommends.
  • Manual-only skills. Each tool has its own switch for “only run when I ask”: disable-model-invocation: true in Claude Code, Cursor, and VS Code; policy.allow_implicit_invocation: false in Codex’s agents/openai.yaml; opencode/autoinvoke: "false" under metadata in OpenCode. Gemini CLI and Copilot do not document one.

A frontmatter block that every tool here can read:

---
name: release-notes
description: Drafts user-facing release notes from merged pull requests since the last tag. Use when preparing a release, writing a changelog, or when asked what changed since the last version.
license: MIT
compatibility: "Requires git. The GitHub CLI (gh) is optional for PR titles."
metadata:
  version: "1.2.0"
---

How do I keep one skills folder working across tools?

Project skills

Make .agents/skills/ the real location and symlink each skill into .claude/skills/ for Claude Code. Claude Code reads SKILL.md from a symlink’s target, and Codex follows symlinked skill folders.

mkdir -p .agents/skills .claude/skills
git mv .claude/skills/release-notes .agents/skills/release-notes
ln -s ../../.agents/skills/release-notes .claude/skills/release-notes
git add .agents/skills .claude/skills
git commit -m "Share release-notes skill across agents"

The link target is relative, so it works in every clone. To link every skill at once:

for dir in .agents/skills/*/; do
  name=$(basename "$dir")
  ln -sfn "../../.agents/skills/$name" ".claude/skills/$name"
done

The result:

repo/
├── .agents/skills/
│   ├── release-notes/
│   │   ├── SKILL.md
│   │   └── scripts/collect_prs.sh
│   └── migration-review/
│       └── SKILL.md
└── .claude/skills/
    ├── release-notes -> ../../.agents/skills/release-notes
    └── migration-review -> ../../.agents/skills/migration-review

If your team uses only Claude Code, Cursor, Copilot, and OpenCode, you can skip this and keep everything in .claude/skills/, since all four read it. The symlinks matter once Codex or Gemini CLI is involved.

Personal skills

The same pattern works in your home folder. ~/.agents/skills/ is read by Codex, Cursor, Gemini CLI, Copilot, and OpenCode:

mkdir -p ~/.agents/skills ~/.claude/skills
mv ~/.claude/skills/commit-craft ~/.agents/skills/commit-craft
ln -s ~/.agents/skills/commit-craft ~/.claude/skills/commit-craft

Skills from this directory install into ~/.claude/skills/ or .claude/skills/ by default. Move them as shown above if you want other agents to see them. For choosing between personal and project scope, see Personal vs project skills.

Caveats

  • Duplicates. Cursor, Copilot, VS Code, and OpenCode read both .claude/skills/ and .agents/skills/, so the symlink setup can expose the same skill twice. Claude Code loads a symlinked skill once, but the other tools do not document how they handle a repeated name. Check each tool’s skill list after setting up links.
  • Windows. Git checks out symlinks as small text files unless symlink support is enabled (core.symlinks) and the OS allows creating them. If teammates are on Windows, test a fresh clone, or copy folders in a build step instead.
  • Scripts. A skill whose script calls gh, psql, or a Python package works only where that program is installed and the agent is allowed to run it. Say so in compatibility.
  • Behavior differs. The same description can trigger more or less often in different agents, because each model and harness decides relevance its own way. Test trigger phrases in each tool you support.
  • Security. A skill can tell any of these agents to run code. Review third-party skills before installing them, whichever tool you use; the skill safety guide lists what to check.

Validate a skill against the spec with the reference tool before sharing it:

skills-ref validate .agents/skills/release-notes

Support changes quickly; check each tool’s docs

Folder lists and supported fields change often. Before you rely on a path, confirm it in the official page:

Next steps

Frequently asked questions

Can I use Claude Code skills in Cursor without changing anything?

Usually, yes. Cursor loads .claude/skills in the project and ~/.claude/skills in your home folder, alongside its own .cursor/skills and .agents/skills. Fields Cursor does not document, such as context or allowed-tools, and Claude Code body features like $ARGUMENTS will not behave as they do in Claude Code.

Which folder do Codex and Gemini CLI read?

Codex reads .agents/skills from your working directory up to the repository root, plus ~/.agents/skills and /etc/codex/skills. Gemini CLI reads .gemini/skills or .agents/skills in the workspace and ~/.gemini/skills or ~/.agents/skills for the user. Neither documents reading .claude/skills.

Does Claude Code read .agents/skills?

Not according to its documentation, which lists only .claude/skills locations, plugins, and managed settings. To share one folder, keep skills in .agents/skills and symlink each one into .claude/skills. Claude Code follows symlinked skill folders.

Is allowed-tools portable between agents?

The key is in the open standard but marked experimental, and tool names differ by agent. Claude Code expects names like Read or Bash(git log:*), while GitHub Copilot documents its own tool names. Treat allowed-tools values as agent-specific.

esc