Introduction to Agent Skills
Agent Skills are folders holding a SKILL.md file (a name, a description, and instructions) that Claude Code, Codex, and Cursor load on demand. The agent lists every skill’s name and description in each session and reads the body only when a task matches. A skill arrives as a portable copy from npx skills add or inside a plugin.
On Monday you explained the release checklist to the agent. On Tuesday a fresh session merged without the changelog step, and your teammate on Codex never had it. This page is for developers and tech leads who want that knowledge written once and pinned for every agent.
What is a skill, and how is it different from MCP and plugins?
Section titled “What is a skill, and how is it different from MCP and plugins?”A skill is instructions, not a live connection: it holds no credentials or server of its own. Anything it fetches goes through bundled scripts or commands the agent runs with its own permissions. The format is an open standard (since 2025-12-18): a skill-name/SKILL.md folder whose frontmatter name is at most 64 characters and whose description is at most 1,024. The specification’s showcase listed 46 compatible clients on 2026-09-26.
---name: release-checklistdescription: Use when preparing a release or merging to main. Runs the changelog, version bump and smoke-test steps in order.---1. Update CHANGELOG.md from merged PR titles since the last tag.2. Bump the version with `npm version minor --no-git-tag-version`.3. Run `npm run smoke` and paste the last 20 lines of output before you say "done".The description decides when the skill fires, so write it as a trigger condition; until then the skill costs a few dozen tokens.
| Layer | What it gives the agent | Choose it when |
|---|---|---|
| Skill | A procedure or convention | The agent should follow a practice: TDD, a release checklist |
| MCP server | Live tools and data | The agent must read or change external state: PRs, tickets, a database |
| Plugin | A bundle of skills, commands, subagents, hooks, and MCP servers | You want a vendor’s skills and tools wired together, or a hook that starts a method |
For the decision guide across all six layers, see how skills, MCP, plugins, and frameworks fit together.
Where does each agent read skills, and how do you call one?
Section titled “Where does each agent read skills, and how do you call one?”The agents read different directories, so the skills CLI writes one canonical copy in .agents/skills/ and symlinks it into .claude/skills/ for Claude Code.
| Claude Code | Codex | Cursor | |
|---|---|---|---|
| Project skills | .claude/skills/<name>/, also in parent directories | .agents/skills/<name>/, from the working directory up to the repo root | .agents/skills/, .cursor/skills/, .claude/skills/, and .codex/skills/ |
| Personal skills | ~/.claude/skills/ | ~/.agents/skills/ per OpenAI’s docs; npx skills add -g writes ~/.codex/skills/ | ~/.cursor/skills/, ~/.agents/skills/ (plus the .claude/.codex compatibility paths) |
| Invoke by name | /<name>; plugin skills are /<plugin>:<skill> | $<name>; /skills lists them | Name it in the prompt |
| Built in | /code-review, /simplify, /verify, /run, /batch, /loop (turn off with disableBundledSkills) | skill-creator, skill-installer, plugin-creator | /loop |
Checked on 2026-09-26 against the Claude Code 2.1.283 docs and the codex-cli 0.157.1 binary. The Codex personal directory and every Cursor path come from vendor documentation (secondary, not re-checked on 2026-09-26).
Install one skill both ways: plugin or portable copy?
Section titled “Install one skill both ways: plugin or portable copy?”Anthropic’s frontend-design ships both as a plugin in claude-plugins-official and as a folder in anthropics/skills. On 2026-09-26 the plugin showed 1,134,112 installs on the Claude Marketplace directory (claude.com/plugins), and the portable copy 923,303 on skills.sh (secondary: LinklyAI/best-skills snapshot, 2026-09-26).
Plugin route (terminal):
claude plugin install frontend-design@claude-plugins-official --scope projectclaude plugin details frontend-design # component list and always-on token costInvoke it as /frontend-design:frontend-design; --scope project records it in .claude/settings.json for the team. claude plugin details frontend-design reported about 78 always-on tokens on 2026-09-26.
Portable route (terminal):
npx skills add anthropics/skills --skill frontend-design -a claude-codeInvoke it as /frontend-design. Pick one route, or you get two copies.
Portable route (terminal):
npx skills add anthropics/skills --skill frontend-design -a codexThe files land in .agents/skills/frontend-design/. Invoke with $frontend-design, or type /skills to confirm Codex sees it. For Codex plugins (codex plugin add, not install, in 0.157.1), see plugins and marketplaces.
Portable route (terminal):
npx skills add anthropics/skills --skill frontend-design -a cursorThe files land in .agents/skills/frontend-design/. Cursor installs plugins from Agent chat with /add-plugin <name>, per Cursor’s plugin repository (not run in a Cursor binary).
Choose the plugin when the method depends on a hook, command, or MCP server: the portable Superpowers copy has no session-start hook, so its workflow does not start on its own. Choose the portable copy when the team uses more than one agent; it pins to a commit in skills-lock.json.
From “I need X” to a pinned team install
Section titled “From “I need X” to a pinned team install”-
Search for candidates and prefer the canonical owner, because copycat repos reuse popular names:
npx skills find changelog. -
Read before installing the
SKILL.mdand every bundled script, because skills run with the agent’s full permissions.Terminal window npx skills add anthropics/skills --listnpx skills use anthropics/skills@frontend-design # prints the prompt, installs nothing -
Pin to a commit by installing at the hash that
git ls-remoteprints, for all three agents at once.Terminal window git ls-remote https://github.com/anthropics/skills HEADnpx skills add anthropics/skills#COMMIT_SHA --skill frontend-design -a claude-code -a codex -a cursor -y -
Commit and review
.agents/skills/,.claude/skills/, andskills-lock.jsonin one pull request, with a code owner on the skills directories. -
Prove it works with an acceptance prompt in each agent, and move the pin only by rerunning step 3 (
npx skills updatekeeps the recordedref).
How do you know a skill is doing its job without reading every diff?
Section titled “How do you know a skill is doing its job without reading every diff?”- It loads.
/skillsin Codex,/contextin Claude Code, or the first prompt above shows it. - It fires on the right task. Ask the agent to run it and mark each numbered instruction done, skipped, or not applicable, beside the diff and test output.
- It has not drifted. The skill folders and
skills-lock.jsonchange only in a reviewed pull request; a CI step that runsnpx -y skills@1.7.0 experimental_installand thengit diff --exit-code -- .agents/skills skills-lock.jsonfails when someone hand-edits a committed skill, or when an unpinned or branch-pinned source has moved upstream. - Plugins can carry evals.
claude plugin evalruns a plugin’s eval suite against a no-plugin baseline.
To write your own skill with evals, see building and publishing your own skills.
When skills do not load, do not fire, or fire twice
Section titled “When skills do not load, do not fire, or fire twice”The skill never fires. Rewrite the description as “Use when…” with the words people actually type, then check it with the first prompt.
The skill appears twice. Keep one route: claude plugin uninstall <plugin> or npx skills remove <skill>.
/code-review runs the wrong thing. Claude Code’s built-in skill owns the bare name; Anthropic’s plugin runs as /code-review:code-review.
Two skills contradict each other. Use Dr. Skill to find colliding descriptions, then remove one.
For global installs, lockfile restores, and updates, see installing, sharing, and pinning skills.