How skills work in AI editors
A skill is a folder with a SKILL.md file (YAML frontmatter with a name and description, then instructions) plus optional scripts and references. Claude Code, Cursor and Windsurf all support this open Agent Skills format. The agent sees each skill's name and description, loads the full instructions when a task matches, and you can also call a skill by name.
What differs is where each tool looks. That's the only thing you need to get right:
| Tool | Global folders | Project folders | Reads Claude Code skills? |
|---|---|---|---|
| Claude Code | ~/.claude/skills/ | .claude/skills/ | Yes (native) |
| Cursor | ~/.cursor/skills/, ~/.agents/skills/ | .cursor/skills/, .agents/skills/ | Yes: also loads ~/.claude/skills/ and .claude/skills/ for compatibility |
| Windsurf (Devin Desktop) | ~/.codeium/windsurf/skills/, ~/.config/devin/skills/, ~/.agents/skills/ | .devin/skills/, .windsurf/skills/, .agents/skills/ | Only if Claude Code config reading is enabled |
Install skills for all three
The skills CLI (npx skills) installs a skill into the right folder for each agent you pick. With -g it installs for your user instead of the current project.
# One skill, globally, for Claude Code, Cursor and Windsurf
npx skills add anthropics/skills --skill frontend-design -g -a claude-code -a cursor -a windsurf
# Or let the CLI ask which agents to target
npx skills add anthropics/skills --skill webapp-testing -g
Already have skills in ~/.claude/skills/? Cursor picks them up as they are. For Windsurf, either enable Claude Code config reading or reinstall them with -a windsurf. The CLI symlinks by default, so there's one copy on disk and updates reach every agent.
Use skills in Cursor
Cursor discovers skills at startup. In Agent chat the agent uses a skill when it's relevant to your request; to call one yourself, type / and search for the skill name. A skill invoked this way applies to that message.
/frontend-design build a settings page with a dark mode toggle
To keep a skill active for a whole session, Cursor lets you use it as a Custom Mode. If a skill should only run when you ask, set disable-model-invocation: true in its frontmatter.
Use skills in Windsurf (Devin Desktop)
Cascade invokes a skill automatically when your request matches its description. To activate one explicitly, type @ followed by the skill name in the Cascade input:
@frontend-design redesign this component to match our design system
Slash commands in Windsurf belong to Workflows, not skills, so /skill-name won't find a skill there.
Skills that work well in editors
Skills that act on the open file and produce code fit editors best. A few real ones to start with:
- frontend-design (anthropics/skills): distinctive, production-grade UI instead of generic layouts.
- webapp-testing (anthropics/skills): test local web apps with Playwright.
- mcp-builder (anthropics/skills): guidance for building MCP servers.
- find-skills (vercel-labs/skills): ask the agent to find and install skills for a task.
Browse more in the skills directory.
Troubleshooting
A skill doesn't show up
- Check where it's installed. npx skills list -g lists global skills; npx skills ls -a cursor filters by agent.
- Check the folder for that editor (table above). A common case: the skill is in ~/.claude/skills/, which Windsurf ignores unless Claude Code config reading is on.
- Check the structure. Each skill needs its own folder with SKILL.md directly inside, and frontmatter with name and description.
- Restart the editor. Cursor discovers skills at startup.
# Global skills, all agents
npx skills list -g
# Look at the folders directly
ls ~/.claude/skills/ ~/.cursor/skills/ ~/.codeium/windsurf/skills/
The skill loads but isn't followed
- Make the description specific: it's what the agent uses to decide when the skill applies.
- Call the skill explicitly (/ in Cursor, @ in Windsurf) at the start of a fresh chat.
- Update it: npx skills update skill-name.
FAQ
Does Cursor read my Claude Code skills?
Yes. Cursor loads skills from .cursor/skills/ and .agents/skills/, and for compatibility also from Claude's folders: .claude/skills/ in the project and ~/.claude/skills/ globally.
Does Windsurf read ~/.claude/skills?
Only if Claude Code config reading is enabled. Otherwise Windsurf (now Devin Desktop) reads ~/.codeium/windsurf/skills/, ~/.config/devin/skills/ and ~/.agents/skills/, plus .windsurf/skills/, .devin/skills/ and .agents/skills/ in the workspace.
How do I invoke a skill in each editor?
Both editors use a skill automatically when your request matches its description. To call one explicitly: in Cursor type / in Agent chat and pick it; in Windsurf type @skill-name in Cascade. In Claude Code it's /skill-name.
How do I update skills used in editors?
Run npx skills update for everything, or npx skills update skill-name for one. Add -g to update only global skills.