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:
| Field | Required | Notes |
|---|---|---|
name | Yes | 1 to 64 characters, lowercase letters, digits, single hyphens; must match the folder name |
description | Yes | Up to 1,024 characters; says what the skill does and when to use it |
license | No | License name or a pointer to a bundled file |
compatibility | No | Up to 500 characters of environment requirements |
metadata | No | Map of string keys to string values |
allowed-tools | No | Space-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.
| Tool | Reads SKILL.md? | Personal folder | Project folder | Source |
|---|---|---|---|---|
| Claude Code | Yes | ~/.claude/skills/ | .claude/skills/, plus nested and --add-dir | code.claude.com |
| OpenAI Codex | Yes | ~/.agents/skills/ (admin: /etc/codex/skills) | .agents/skills/ in each folder from the working directory up to the repo root | Codex skills |
| Cursor | Yes | ~/.agents/skills/, ~/.cursor/skills/, ~/.claude/skills/, ~/.codex/skills/ | .agents/skills/, .cursor/skills/, .claude/skills/, .codex/skills/ | Cursor docs |
| Gemini CLI | Yes | ~/.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 |
| OpenCode | Yes | ~/.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-nameor the/skillscommand, or let Codex pick it from the description. An optionalagents/openai.yamlfile inside the skill holds Codex settings such aspolicy.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
pathsanddisable-model-invocationin frontmatter, and/skill-nameinvokes 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 withgemini skills install <url>or link a local folder with/skills link <path>. - GitHub Copilot documents
name,description,license, andallowed-tools, and chooses skills from the description. The GitHub CLI (2.90.0 or later, in public preview) addsgh skill install,gh skill update, and related commands. - VS Code additionally supports
argument-hint,user-invocable,disable-model-invocation, and an experimentalcontext: fork. - OpenCode recognizes
name,description,license,compatibility, andmetadata, and puts its own options insidemetadata. It walks up from the current directory to the git worktree root, andpermission.skillinopencode.jsonallows, 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 skill | Portable? |
|---|---|
name, description | Yes, everywhere |
license, compatibility, metadata | Yes, as defined by the spec |
| Markdown body | Yes |
scripts/, references/, assets/ with relative paths | Yes, if the agent can run the script’s language |
allowed-tools | Key is standard but experimental; tool names differ per agent |
disable-model-invocation | Claude Code, Cursor, VS Code; not documented by Codex, Gemini CLI, or OpenCode |
paths | Claude Code and Cursor |
context, user-invocable, argument-hint | Claude Code and VS Code |
when_to_use, model, effort, agent, hooks, shell, arguments | Claude 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-toolsand 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 “rungit 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: truein Claude Code, Cursor, and VS Code;policy.allow_implicit_invocation: falsein Codex’sagents/openai.yaml;opencode/autoinvoke: "false"undermetadatain 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 incompatibility. - 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:
- Agent Skills overview and specification
- Claude Code skills
- OpenAI Codex skills
- Cursor skills
- Gemini CLI skills and creating skills
- GitHub Copilot agent skills
- VS Code agent skills
- OpenCode skills
Next steps
- Write a skill that ports well from the start: Write your first Claude Code skill
- Every frontmatter field and which ones are standard: SKILL.md format reference
- Upload skills to claude.ai or the Claude API: Skills on claude.ai and the API
- Find skills to share across agents: Browse all skills
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.