Agent Skills Across Claude, Copilot, Codex and Cursor

A Claude skill is a folder in the open Agent Skills format, and Codex, GitHub Copilot, Cursor and Gemini CLI read the same format. What differs is where each tool looks and which frontmatter it honours. Here is how to keep one copy of a skill that every assistant on your team can load.

6 min read

Yes, Claude skills can be used with Codex, and with GitHub Copilot, Cursor, Gemini CLI and a long list of other agents. A skill is a folder with a SKILL.md file in the Agent Skills format, which Anthropic developed and released as an open standard, and those tools all read that format. Two things differ between them: where each one looks for skill folders, and which frontmatter fields it acts on. Codex reads .agents/skills/ and not .claude/skills/; Claude Code reads .claude/skills/ and not .agents/skills/. So keep one copy of each skill in .agents/skills/, link it into .claude/skills/, and limit the frontmatter to the fields the standard defines. The same folder then loads everywhere.

This page is about moving skills between tools. How to write one, from an empty folder to a description that triggers, is in how to create a Claude skill.

The shared format, in one paragraph

The Agent Skills specification (opens in a new tab) defines a directory containing SKILL.md: YAML frontmatter, then Markdown instructions, with optional scripts/, references/ and assets/ beside it. Two fields are required. name is at most 64 characters of lowercase letters, numbers and hyphens, and must match the folder’s name; description is at most 1,024 characters and says what the skill does and when to use it. Four are optional: license, compatibility, metadata and allowed-tools, the last marked experimental. Agents load skills progressively: only the name and description at start-up, the body when a task matches, and bundled files only when the instructions call for them.

Where each tool looks

  • Claude Code: .claude/skills/<name>/ in the project and ~/.claude/skills/<name>/ for you, plus nested folders, plugins and managed settings. Anthropic’s Claude Code skills documentation (opens in a new tab) lists no .agents/skills/ location, but says a skill entry can be a symlink to a folder elsewhere.
  • Claude apps and the API: no folder at all. You zip the skill and upload it, and the upload accepts only the six standard fields.
  • Codex: .agents/skills/ in the current folder, its parents and the repository root, ~/.agents/skills/ for you, /etc/codex/skills for administrators, and built-in skills. OpenAI’s guide to building skills (opens in a new tab) names no .claude/skills/ location.
  • GitHub Copilot: .github/skills/, .claude/skills/ or .agents/skills/ in the project, and ~/.copilot/skills/ or ~/.agents/skills/ for you. GitHub’s page about agent skills (opens in a new tab) lists the cloud agent, code review, the CLI, the Copilot app and agent mode in VS Code and JetBrains IDEs.
  • Cursor: .cursor/skills/ and .agents/skills/, their home-directory equivalents, and for compatibility .claude/skills/ and .codex/skills/, according to Cursor’s skills page (opens in a new tab).
  • Gemini CLI: .gemini/skills/ or .agents/skills/ in the workspace and the same under your home directory, where .agents/skills/ wins if both hold the same skill. Gemini CLI’s skills page (opens in a new tab) also covers skills bundled in extensions.
  • Others: the agentskills.io showcase lists dozens more, including OpenCode, Kiro, Amp and OpenHands. Goose recommends .agents/skills/ and also reads .claude/skills/; the Junie CLI reads .junie/skills/ and .agents/skills/. Check each one’s page for its folders.

Read down the list and .agents/skills/ is the one folder that Codex, Copilot, Cursor and Gemini CLI all read. Claude Code is the exception, and it follows symlinks.

One skill that works everywhere

One copy, linked for Claude Code
.agents/skills/
  bug-report/
    SKILL.md
    template.md
.claude/skills/
  bug-report -> ../../.agents/skills/bug-report

# macOS and Linux, from the repository root:
mkdir -p .claude/skills
ln -s ../../.agents/skills/bug-report .claude/skills/bug-report
.agents/skills/bug-report/SKILL.md
---
name: bug-report
description: Writes up a bug as a task. Use when filing, triaging or reporting a bug.
license: MIT
metadata:
  owner: platform-team
  version: "1.2"
---

1. Title: what is wrong, in the user's words.
2. Steps to reproduce, expected, actual, and file:line where it goes wrong.
3. Fill in template.md and show it before filing anything.

Link each skill folder, not the whole .claude/skills/ directory, since Claude Code’s documentation describes links at the skill level. On Windows, git checks symbolic links out as small text files unless core.symlinks is enabled, so a Windows-heavy team may prefer a short script that copies .agents/skills/ into .claude/skills/ and a check in CI that the two match. Either way there is one source to edit.

Where they differ: frontmatter

  • Claude Code accepts many extra fields, such as disable-model-invocation, user-invocable, when_to_use, paths, context, model and hooks. The Claude apps, the API and Anthropic’s packaging script reject any field outside the standard six with an “unexpected key” error.
  • Cursor documents paths to scope a skill to certain files, disable-model-invocation to make it a slash command only, and icon and color for its badges.
  • Codex keeps its extras out of SKILL.md altogether, in an optional agents/openai.yaml; setting allow_implicit_invocation: false there stops Codex choosing the skill by itself.
  • Copilot in VS Code honours disable-model-invocation and user-invocable, as covered in Copilot agents vs skills.
  • allowed-tools is experimental in the standard, and support varies between agents. Do not rely on it to grant or limit anything outside Claude Code.

Few tools document what they do with a field they do not know. The one documented failure is the Claude apps, where an extra field stops the upload. The safe rule is the strict one: the six standard fields in the shared copy, and anything tool-specific in that tool’s own file or settings.

Where they differ: loading and calling

  • Calling one by name: /bug-report in Claude Code, Copilot and Cursor; $bug-report or the /skills picker in Codex; @ in ChatGPT.
  • Automatic loading: all of them match your request against the description. Gemini CLI adds a step, asking you to approve before the skill’s body and folder are loaded.
  • Description length: the standard allows 1,024 characters, but Anthropic’s help article on creating custom skills gives 200 as the maximum for the Claude apps, and Claude Code cuts each listing entry at 1,536. Write one sentence under 200 characters and it fits everywhere.
  • Body features: substitutions such as ${CLAUDE_SKILL_DIR} and Claude Code’s dynamic context injection work only in Claude Code. In a shared skill, refer to bundled files by relative path, as the standard recommends.

Rules for a skill that travels

  1. Name the folder and the name field the same, in lowercase with hyphens.
  2. Six standard fields only in the shared copy. Put tool-specific settings in that tool’s own place.
  3. A description under 200 characters that says what and when, main use first.
  4. Relative paths to bundled files, one level deep from SKILL.md, and a body under 500 lines.
  5. Scripts in a language every teammate’s machine has, with clear error messages, because each agent runs them in its own shell.
  6. Test it in each tool you use: one prompt that should trigger it and one that should not.

Sharing skills across a team

  • In the repository: commit .agents/skills/ and the links or copies. Everyone who clones gets every skill, and changes are reviewed like code.
  • Across repositories: Claude Code and Codex both package skills in plugins. Gemini CLI installs a skill from a git repository with gemini skills install <url>, and Codex has a $skill-installer for curated skills.
  • In the Claude apps: upload the zipped folder. On Team and Enterprise plans a skill can be shared with colleagues or published to the organisation.
  • Before installing anyone else’s: read every file. A skill can tell an agent to run its scripts, in whichever tool loads it.

Skills that work on a board

A skill describes how a job is done; it is the wrong place to keep the list of jobs. The bug-report skill above is most useful when its last step files the task somewhere everyone can see. With fenbs connected over MCP in each tool, the same skill can say “search the board with fenbs_search, then file with fenbs_create_item, kind bug”, and it works in Claude Code, Codex, Copilot and Cursor alike. The skill is shared, but permission is not: each assistant’s connection has its own scopes, the board checks every call against them and your role, and the history records which assistant filed what.

Related

Build a skill from scratch: how to create a Claude skill. Skills or an MCP server: MCP vs Claude skills. Connect the board in each tool: Claude Code, Codex CLI, GitHub Copilot and Cursor. Instruction files, the other thing tools share: AGENTS.md examples.

Questions people ask.

Can Claude skills be used with Codex?

Yes. Codex reads the same SKILL.md format. It looks in .agents/skills in the repository and in your home directory, not in .claude/skills, so move or link the skill folder there. Keep the frontmatter to the standard fields and call it with $skill-name or let Codex choose it.

Can Claude skills be used with Cursor?

Yes, without moving anything. Cursor reads .cursor/skills and .agents/skills, and for compatibility also .claude/skills and .codex/skills, in the project and in your home directory.

Does GitHub Copilot support Claude skills?

Yes. Copilot reads project skills from .github/skills, .claude/skills or .agents/skills and personal skills from ~/.copilot/skills or ~/.agents/skills, in the cloud agent, code review, the CLI, the Copilot app and agent mode in VS Code and JetBrains IDEs.

Where should I put a skill so every agent finds it?

In .agents/skills, which Codex, Copilot, Cursor and Gemini CLI all read, with a symbolic link or a copy of each skill folder in .claude/skills for Claude Code, which reads only its own folders.

Start with one thing.

There is nothing to set up first. Write one line and you’ve started.