Claude Code Skills and Plugins
Skills are folders with a SKILL.md. Plugins bundle skills, agents and hooks for sharing. Install one from a marketplace, then write your own.
On this page4 sections
Two related features, often confused. A Skill is a folder with a SKILL.md file that
Claude loads when the task matches its description. A Plugin is a shareable bundle of
skills, agents, hooks, MCP servers and LSP servers, distributed through a marketplace.
1. Install a plugin
Claude Code registers the official Anthropic marketplace on first interactive launch:
/plugin install github@claude-plugins-official
What it does: installs a plugin by name@marketplace, then asks for a scope — user (all
your projects), project (added to .claude/settings.json for collaborators), or local.
To browse or add another catalog:
/plugin marketplace add anthropics/claude-code
What it does: registers a marketplace from a GitHub owner/repo, a git URL, or a local
path. /plugin on its own opens the manager with Discover, Installed, Marketplaces and
Errors tabs.
2. See what you have
/skills
What it does: lists every skill available, from your own folders and from plugins. Plugin
skills are namespaced, so commit-commands gives you /commit-commands:commit.
3. Write a skill
Skills live in ~/.claude/skills/<name>/SKILL.md (personal) or .claude/skills/<name>/SKILL.md
(project). The folder name becomes the command.
---
name: changelog
description: Draft a changelog entry from the staged diff. Use when preparing a release.
disable-model-invocation: true
allowed-tools: Bash(git diff *) Bash(git log *)
---
## Staged changes
!`git diff --cached --stat`
Write one Keep a Changelog entry for the changes above. Group by Added, Changed, Fixed.
What it does: description is what Claude reads to decide when to auto-invoke;
disable-model-invocation: true restricts it to manual /changelog; allowed-tools
pre-approves those tools for that turn only. The !`command` syntax runs a shell
command before Claude sees the file and inserts the output.
4. Wrap it as a plugin
Add a manifest at the plugin root — only plugin.json goes inside .claude-plugin/;
skills/, agents/ and hooks/ sit beside it.
{
"name": "release-tools",
"description": "Changelog and release helpers",
"version": "1.0.0"
}
What it does: names the plugin and its skill namespace, so the skill above becomes
/release-tools:changelog.
claude --plugin-dir ./release-tools
What it does: loads the plugin for one session without installing it — the development
loop. On Windows use the same flag with a Windows path. After editing, run
/reload-plugins instead of restarting.
Next: create a slash command or define a subagent.