# 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.

- Canonical: https://guides-ai.pages.dev/guides/claude-code-skills-and-plugins/
- Plate 03.09 · Topic: Claude Code commands (https://guides-ai.pages.dev/topics/commands/)
- Published: 06 Sept 2026 · 4 min read
- Source site: guides-ai — https://guides-ai.pages.dev/

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:

```text
/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:

```text
/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

```text
/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.

```markdown
---
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.

```json
{
  "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`.

```bash
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](/guides/create-claude-code-slash-command/) or
[define a subagent](/guides/claude-code-subagents/).
