Skip to content

Skills: Distribution

Channel Audience How Updates
Personal folder You ~/.claude/skills/<name>/ (Claude Code + Cursor) or ~/.cursor/skills/<name>/ Edit in place
Project repo Everyone who clones the repo Commit .claude/skills/<name>/, .cursor/skills/<name>/, or .agents/skills/<name>/ Through PRs
Shared skills repo Team / org A dedicated git repo; people clone or symlink it into their personal folder git pull
Plugin Team / org / public Package the skills (plus optional agents, MCP config, and hooks) as a Claude Code plugin or Cursor plugin, and publish to a marketplace Plugin versioning
Claude.ai / Desktop Individuals or org members on Claude apps ZIP the skill folder (with the folder at the root of the ZIP) → Settings → Capabilities → Upload Re-upload
Claude API Your applications Upload via the Skills API, then reference it by skill_id in Messages API requests that use the code execution tool Versioned by the API
  • The folder name equals name
  • No secrets, personal paths, or machine-specific absolute paths
  • Dependencies are listed in SKILL.md, or in compatibility in the frontmatter
  • There’s a version and changelog (for example metadata: { version: "1.2.0" }, plus CHANGELOG.md)
  • There’s a short README section or announcement with 2–3 example prompts
  • A license is declared if you share it outside your org (license: in the frontmatter)
  • npm run qa passes

To support Claude Code, Cursor, and Claude.ai with one source:

  1. Keep the canonical copy in a git repo under skills/<name>/.
  2. Claude Code + Cursor (project): place or symlink it at .claude/skills/<name>/, which both hosts read.
  3. Claude.ai: a small script zips each skills/<name>/ folder for upload.
  4. Use only portable frontmatter (name, description, license, metadata, disable-model-invocation) unless you’ve checked the matrix.
  5. Hosted environments (the API and Claude.ai) may not allow runtime package installs, so scripts there should use only pre-installed libraries.
  • To share one skill between hosts, you can use a directory junction instead of copying: New-Item -ItemType Junction -Path "$HOME\.cursor\skills\my-skill" -Target "C:\Projects\skills-repo\skills\my-skill" Since Cursor already reads ~/.claude/skills, this is usually unnecessary.
  • Inside skills, keep paths forward-slashed.
  • Use semantic versioning: major when the output format or behaviour changes incompatibly, minor for new capabilities, patch for wording fixes.
  • Re-run the eval set before bumping the version.
  • Record notable changes in DECISIONS.md or the skill’s CHANGELOG.md.
  • Deprecate a skill by adding a line at the top of its body pointing to the replacement, then remove it one release later.
  • Assign an owner for every shared skill.
  • Require review for changes to scripts/, the same as for any other code.
  • Audit third-party skills before adding them to a shared repo or plugin.
  • Hold a quarterly review to retire skills the models no longer need.