iiuniversitet.ruЦентр обучения нейросетямОткрыть каталог

Структура и заготовка плагина Claude Code

Объясняет, как устроены каталоги плагина, манифест plugin.json, автообнаружение команд, агентов, скиллов, хуков и MCP-серверов.

СкиллAnthropicClaudeApache-2.0Нужен терминалПроверка не требуется
Что делает
Объясняет, как устроены каталоги плагина, манифест plugin.json, автообнаружение команд, агентов, скиллов, хуков и MCP-серверов.
Когда брать
Когда нужно создать новый плагин Claude Code, разложить компоненты по папкам или настроить plugin.json и переносимые пути.
Когда не брать
Если нужно написать отдельный компонент (агента, команду, хук) — для этого есть профильные скиллы плагина plugin-dev.
Пример запроса
Создай заготовку плагина с одной командой, одним скиллом и манифестом.
Нужно подключить
Claude Code

Входит в плагин plugin-dev. В Cowork и Claude Code можно поставить плагин целиком.

Как включить

  1. Скачайте архив и распакуйте его.
  2. Положите папку plugin-structure в ~/.claude/skills/.
  3. Откройте Claude Code и опишите задачу своими словами: Claude подхватит скилл по описанию.

Текст

---
name: plugin-structure
description: Этот скилл следует использовать, когда пользователь просит «создать плагин», «сделать заготовку плагина», «разобраться в структуре плагина», «организовать компоненты плагина», «настроить plugin.json», «использовать ${CLAUDE_PLUGIN_ROOT}», «добавить команды/агентов/скиллы/хуки», «настроить автообнаружение» или нуждается в рекомендациях по раскладке каталогов плагина, настройке манифеста, организации компонентов, правилам именования файлов и лучшим практикам архитектуры плагинов Claude Code.
version: 0.1.0
---

Структура плагина для Claude Code

Обзор

Плагины Claude Code следуют стандартизованной структуре каталогов с автоматическим обнаружением компонентов. Понимание этой структуры позволяет создавать хорошо организованные, удобные в поддержке плагины, которые без сбоев работают с Claude Code.

Ключевые понятия:

  • Общепринятая раскладка каталогов для автоматического обнаружения
  • Конфигурация на основе манифеста в .claude-plugin/plugin.json
  • Организация по компонентам (команды, агенты, скиллы, хуки)
  • Переносимые ссылки на пути через ${CLAUDE_PLUGIN_ROOT}
  • Явная и автоматически обнаруживаемая загрузка компонентов

Структура каталогов

Каждый плагин Claude Code следует такой схеме организации:

plugin-name/
├── .claude-plugin/
│   └── plugin.json          # Обязательно: манифест плагина
├── commands/                 # Слэш-команды (файлы .md)
├── agents/                   # Определения субагентов (файлы .md)
├── skills/                   # Скиллы агента (подкаталоги)
│   └── skill-name/
│       └── SKILL.md         # Обязателен для каждого скилла
├── hooks/
│   └── hooks.json           # Конфигурация обработчиков событий
├── .mcp.json                # Определения MCP-серверов
└── scripts/                 # Вспомогательные скрипты и утилиты

Критические правила:

  1. Расположение манифеста: манифест plugin.json ОБЯЗАН находиться в каталоге .claude-plugin/
  2. Расположение компонентов: все каталоги компонентов (commands, agents, skills, hooks) ОБЯЗАНЫ лежать в корне плагина, а НЕ внутри .claude-plugin/
  3. Необязательные компоненты: создавай каталоги только для тех компонентов, которые плагин действительно использует
  4. Правило именования: используй kebab-case для всех имён каталогов и файлов

Манифест плагина (plugin.json)

Манифест определяет метаданные и конфигурацию плагина. Расположен в .claude-plugin/plugin.json:

Обязательные поля

{
  "name": "plugin-name"
}

Требования к имени:

  • Используй формат kebab-case (строчные буквы с дефисами)
  • Должно быть уникальным среди установленных плагинов
  • Без пробелов и специальных символов
  • Пример: code-review-assistant, test-runner, api-docs

Рекомендуемые метаданные

{
  "name": "plugin-name",
  "version": "1.0.0",
  "description": "Brief explanation of plugin purpose",
  "author": {
    "name": "Author Name",
    "email": "author@example.com",
    "url": "https://example.com"
  },
  "homepage": "https://docs.example.com",
  "repository": "https://github.com/user/plugin-name",
  "license": "MIT",
  "keywords": ["testing", "automation", "ci-cd"]
}

Формат версии: следуй семантическому версионированию (MAJOR.MINOR.PATCH) Ключевые слова: используются для поиска и категоризации плагина

Настройка путей к компонентам

Задай собственные пути для компонентов (дополняют каталоги по умолчанию):

{
  "name": "plugin-name",
  "commands": "./custom-commands",
  "agents": ["./agents", "./specialized-agents"],
  "hooks": "./config/hooks.json",
  "mcpServers": "./.mcp.json"
}

Важно: собственные пути дополняют значения по умолчанию, а не заменяют их. Компоненты и из каталогов по умолчанию, и из собственных путей будут загружены.

Правила для путей:

  • Должны быть относительными к корню плагина
  • Должны начинаться с ./
  • Абсолютные пути использовать нельзя
  • Для нескольких расположений поддерживаются массивы

Организация компонентов

Команды

Расположение: каталог commands/ Формат: файлы Markdown с YAML-шапкой Автообнаружение: все файлы .md в commands/ загружаются автоматически

Пример структуры:

commands/
├── review.md        # команда /review
├── test.md          # команда /test
└── deploy.md        # команда /deploy

Формат файла:

---
name: command-name
description: Описание команды
---

Инструкции по выполнению команды...

Использование: команды встраиваются как родные слэш-команды Claude Code

Агенты

Расположение: каталог agents/ Формат: файлы Markdown с YAML-шапкой Автообнаружение: все файлы .md в agents/ загружаются автоматически

Пример структуры:

agents/
├── code-reviewer.md
├── test-generator.md
└── refactorer.md

Формат файла:

---
description: Роль и экспертиза агента
capabilities:
  - Конкретная задача 1
  - Конкретная задача 2
---

Подробные инструкции и знания агента...

Использование: пользователи могут вызывать агентов вручную, либо Claude Code выбирает их автоматически по контексту задачи

Скиллы

Расположение: каталог skills/ с подкаталогом на каждый скилл Формат: каждый скилл в своём каталоге с файлом SKILL.md Автообнаружение: все файлы SKILL.md в подкаталогах скиллов загружаются автоматически

Пример структуры:

skills/
├── api-testing/
│   ├── SKILL.md
│   ├── scripts/
│   │   └── test-runner.py
│   └── references/
│       └── api-spec.md
└── database-migrations/
    ├── SKILL.md
    └── examples/
        └── migration-template.sql

Формат SKILL.md:

---
name: Название скилла
description: Когда использовать этот скилл
version: 1.0.0
---

Инструкции и указания скилла...

Вспомогательные файлы: скиллы могут включать скрипты, справочные материалы, примеры или ресурсы в подкаталогах

Использование: Claude Code самостоятельно включает скиллы, когда контекст задачи подходит под описание

Хуки

Расположение: hooks/hooks.json или прямо в plugin.json Формат: JSON-конфигурация, определяющая обработчики событий Регистрация: хуки регистрируются автоматически при включении плагина

Пример структуры:

hooks/
├── hooks.json           # Конфигурация хуков
└── scripts/
    ├── validate.sh      # Скрипт хука
    └── check-style.sh   # Скрипт хука

Формат конфигурации:

{
  "PreToolUse": [{
    "matcher": "Write|Edit",
    "hooks": [{
      "type": "command",
      "command": "bash ${CLAUDE_PLUGIN_ROOT}/hooks/scripts/validate.sh",
      "timeout": 30
    }]
  }]
}

Доступные события: PreToolUse, PostToolUse, Stop, SubagentStop, SessionStart, SessionEnd, UserPromptSubmit, PreCompact, Notification

Использование: хуки выполняются автоматически в ответ на события Claude Code

MCP-серверы

Расположение: .mcp.json в корне плагина или прямо в plugin.json Формат: JSON-конфигурация для определений MCP-серверов Автозапуск: серверы запускаются автоматически при включении плагина

Пример формата:

{
  "mcpServers": {
    "server-name": {
      "command": "node",
      "args": ["${CLAUDE_PLUGIN_ROOT}/servers/server.js"],
      "env": {
        "API_KEY": "${API_KEY}"
      }
    }
  }
}

Использование: MCP-серверы без сбоев встраиваются в систему инструментов Claude Code

Переносимые ссылки на пути

${CLAUDE_PLUGIN_ROOT}

Используй переменную окружения ${CLAUDE_PLUGIN_ROOT} для всех ссылок на пути внутри плагина:

{
  "command": "bash ${CLAUDE_PLUGIN_ROOT}/scripts/run.sh"
}

Почему это важно: плагины устанавливаются в разные места в зависимости от:

  • Способа установки пользователем (маркетплейс, локально, npm)
  • Соглашений операционной системы
  • Предпочтений пользователя

Где использовать:

  • Пути команд хуков
  • Аргументы команд MCP-серверов
  • Ссылки на запуск скриптов
  • Пути к файлам ресурсов

Никогда не используй:

  • Жёстко заданные абсолютные пути (/Users/name/plugins/...)
  • Относительные пути от рабочего каталога (./scripts/... в командах)
  • Сокращения домашнего каталога (~/plugins/...)

Правила разрешения путей

В JSON-полях манифеста (хуки, MCP-серверы):

"command": "${CLAUDE_PLUGIN_ROOT}/scripts/tool.sh"

В файлах компонентов (команды, агенты, скиллы):

Скрипты лежат здесь: ${CLAUDE_PLUGIN_ROOT}/scripts/helper.py

В выполняемых скриптах:

#!/bin/bash
# ${CLAUDE_PLUGIN_ROOT} available as environment variable
source "${CLAUDE_PLUGIN_ROOT}/lib/common.sh"

Соглашения об именовании файлов

Файлы компонентов

Команды: используй файлы .md в kebab-case

  • code-review.md → /code-review
  • run-tests.md → /run-tests
  • api-docs.md → /api-docs

Агенты: используй файлы .md в kebab-case, описывающие роль

  • test-generator.md
  • code-reviewer.md
  • performance-analyzer.md

Скиллы: используй имена каталогов в kebab-case

  • api-testing/
  • database-migrations/
  • error-handling/

Вспомогательные файлы

Скрипты: используй описательные имена в kebab-case с подходящими расширениями

  • validate-input.sh
  • generate-report.py
  • process-data.js

Документация: используй markdown-файлы в kebab-case

  • api-reference.md
  • migration-guide.md
  • best-practices.md

Конфигурация: используй стандартные имена

  • hooks.json
  • .mcp.json
  • plugin.json

Механизм автообнаружения

Claude Code автоматически обнаруживает и загружает компоненты:

  1. Манифест плагина: читает .claude-plugin/plugin.json при включении плагина
  2. Команды: просматривает каталог commands/ на файлы .md
  3. Агенты: просматривает каталог agents/ на файлы .md
  4. Скиллы: просматривает skills/ на подкаталоги с SKILL.md
  5. Хуки: загружает конфигурацию из hooks/hooks.json или манифеста
  6. MCP-серверы: загружает конфигурацию из .mcp.json или манифеста

Когда происходит обнаружение:

  • Установка плагина: компоненты регистрируются в Claude Code
  • Включение плагина: компоненты становятся доступны для использования
  • Перезапуск не нужен: изменения вступают в силу в следующей сессии Claude Code

Поведение переопределения: собственные пути в plugin.json дополняют (а не заменяют) каталоги по умолчанию

Лучшие практики

Организация

  1. Логическая группировка: объединяй связанные компоненты
  2. Храни вместе команды, агентов и скиллы, связанные с тестированием
  3. Создавай в scripts/ подкаталоги для разных целей
  1. Минимальный манифест: держи plugin.json компактным
  2. Указывай собственные пути только при необходимости
  3. Полагайся на автообнаружение для стандартных раскладок
  4. Встраиваемую конфигурацию используй только в простых случаях
  1. Документация: добавляй файлы README
  2. Корень плагина: общее назначение и использование
  3. Каталоги компонентов: конкретные указания
  4. Каталоги скриптов: использование и требования

Именование

  1. Единообразие: используй единообразные имена у всех компонентов
  2. Если команда называется test-runner, связанного агента назови test-runner-agent
  3. Имена каталогов скиллов должны соответствовать их назначению
  1. Ясность: используй описательные имена, указывающие на назначение
  2. Хорошо: api-integration-testing/, code-quality-checker.md
  3. Избегай: utils/, misc.md, temp.sh
  1. Длина: соблюдай баланс между краткостью и ясностью
  2. Команды: 2–3 слова (review-pr, run-ci)
  3. Агенты: чётко описывай роль (code-reviewer, test-generator)
  4. Скиллы: по теме (error-handling, api-design)

Переносимость

  1. Всегда используй ${CLAUDE_PLUGIN_ROOT}: никогда не прописывай пути жёстко
  2. Проверяй на нескольких системах: проверь на macOS, Linux, Windows
  3. Документируй зависимости: перечисли необходимые инструменты и версии
  4. Избегай системно-специфичных возможностей: используй переносимые конструкции bash/Python

Сопровождение

  1. Версионируй последовательно: обновляй версию в plugin.json при выпусках
  2. Выводи из обращения аккуратно: заранее чётко помечай старые компоненты перед удалением
  3. Документируй ломающие изменения: отмечай изменения, затрагивающие существующих пользователей
  4. Тщательно проверяй: убедись, что после изменений все компоненты работают

Типовые схемы

Минимальный плагин

Одна команда без зависимостей:

my-plugin/
├── .claude-plugin/
│   └── plugin.json    # Только поле name
└── commands/
    └── hello.md       # Единственная команда

Полнофункциональный плагин

Полный плагин со всеми типами компонентов:

my-plugin/
├── .claude-plugin/
│   └── plugin.json
├── commands/          # Команды для пользователя
├── agents/            # Специализированные субагенты
├── skills/            # Автоматически активирующиеся скиллы
├── hooks/             # Обработчики событий
│   ├── hooks.json
│   └── scripts/
├── .mcp.json          # Внешние интеграции
└── scripts/           # Общие утилиты

Плагин только со скиллами

Плагин, содержащий только скиллы:

my-plugin/
├── .claude-plugin/
│   └── plugin.json
└── skills/
    ├── skill-one/
    │   └── SKILL.md
    └── skill-two/
        └── SKILL.md

Устранение неполадок

Компонент не загружается:

  • Проверь, что файл лежит в правильном каталоге и имеет правильное расширение
  • Проверь синтаксис YAML-шапки (команды, агенты, скиллы)
  • Убедись, что у скилла есть SKILL.md (а не README.md или другое имя)
  • Убедись, что плагин включён в настройках Claude Code

Ошибки разрешения путей:

  • Замени все жёстко заданные пути на ${CLAUDE_PLUGIN_ROOT}
  • Проверь, что пути в манифесте относительные и начинаются с ./
  • Проверь, что указанные файлы существуют по указанным путям
  • Проверь через echo $CLAUDE_PLUGIN_ROOT в скриптах хуков

Автообнаружение не работает:

  • Убедись, что каталоги лежат в корне плагина (а не в .claude-plugin/)
  • Проверь, что имена файлов соответствуют соглашениям (kebab-case, правильные расширения)
  • Проверь, что собственные пути в манифесте верны
  • Перезапусти Claude Code, чтобы перезагрузить конфигурацию плагина

Конфликты между плагинами:

  • Используй уникальные описательные имена компонентов
  • При необходимости добавляй к командам пространство имён с названием плагина
  • Задокументируй возможные конфликты в README плагина
  • Подумай о префиксах команд для связанной функциональности

Подробные примеры и продвинутые схемы см. в файлах каталогов references/ и examples/.

Перевод: iiuniversitet. Оригинал: https://github.com/anthropics/claude-plugins-official/tree/main/plugins/plugin-dev/skills/plugin-structure, лицензия Apache-2.0. Изменения: перевод на русский язык.

Оригинал на английском
---
name: plugin-structure
description: This skill should be used when the user asks to "create a plugin", "scaffold a plugin", "understand plugin structure", "organize plugin components", "set up plugin.json", "use ${CLAUDE_PLUGIN_ROOT}", "add commands/agents/skills/hooks", "configure auto-discovery", or needs guidance on plugin directory layout, manifest configuration, component organization, file naming conventions, or Claude Code plugin architecture best practices.
version: 0.1.0
---

# Plugin Structure for Claude Code

## Overview

Claude Code plugins follow a standardized directory structure with automatic component discovery. Understanding this structure enables creating well-organized, maintainable plugins that integrate seamlessly with Claude Code.

**Key concepts:**
- Conventional directory layout for automatic discovery
- Manifest-driven configuration in `.claude-plugin/plugin.json`
- Component-based organization (commands, agents, skills, hooks)
- Portable path references using `${CLAUDE_PLUGIN_ROOT}`
- Explicit vs. auto-discovered component loading

## Directory Structure

Every Claude Code plugin follows this organizational pattern:

```
plugin-name/
├── .claude-plugin/
│   └── plugin.json          # Required: Plugin manifest
├── commands/                 # Slash commands (.md files)
├── agents/                   # Subagent definitions (.md files)
├── skills/                   # Agent skills (subdirectories)
│   └── skill-name/
│       └── SKILL.md         # Required for each skill
├── hooks/
│   └── hooks.json           # Event handler configuration
├── .mcp.json                # MCP server definitions
└── scripts/                 # Helper scripts and utilities
```

**Critical rules:**

1. **Manifest location**: The `plugin.json` manifest MUST be in `.claude-plugin/` directory
2. **Component locations**: All component directories (commands, agents, skills, hooks) MUST be at plugin root level, NOT nested inside `.claude-plugin/`
3. **Optional components**: Only create directories for components the plugin actually uses
4. **Naming convention**: Use kebab-case for all directory and file names

## Plugin Manifest (plugin.json)

The manifest defines plugin metadata and configuration. Located at `.claude-plugin/plugin.json`:

### Required Fields

```json
{
  "name": "plugin-name"
}
```

**Name requirements:**
- Use kebab-case format (lowercase with hyphens)
- Must be unique across installed plugins
- No spaces or special characters
- Example: `code-review-assistant`, `test-runner`, `api-docs`

### Recommended Metadata

```json
{
  "name": "plugin-name",
  "version": "1.0.0",
  "description": "Brief explanation of plugin purpose",
  "author": {
    "name": "Author Name",
    "email": "author@example.com",
    "url": "https://example.com"
  },
  "homepage": "https://docs.example.com",
  "repository": "https://github.com/user/plugin-name",
  "license": "MIT",
  "keywords": ["testing", "automation", "ci-cd"]
}
```

**Version format**: Follow semantic versioning (MAJOR.MINOR.PATCH)
**Keywords**: Use for plugin discovery and categorization

### Component Path Configuration

Specify custom paths for components (supplements default directories):

```json
{
  "name": "plugin-name",
  "commands": "./custom-commands",
  "agents": ["./agents", "./specialized-agents"],
  "hooks": "./config/hooks.json",
  "mcpServers": "./.mcp.json"
}
```

**Important**: Custom paths supplement defaults—they don't replace them. Components in both default directories and custom paths will load.

**Path rules:**
- Must be relative to plugin root
- Must start with `./`
- Cannot use absolute paths
- Support arrays for multiple locations

## Component Organization

### Commands

**Location**: `commands/` directory
**Format**: Markdown files with YAML frontmatter
**Auto-discovery**: All `.md` files in `commands/` load automatically

**Example structure**:
```
commands/
├── review.md        # /review command
├── test.md          # /test command
└── deploy.md        # /deploy command
```

**File format**:
```markdown
---
name: command-name
description: Command description
---

Command implementation instructions...
```

**Usage**: Commands integrate as native slash commands in Claude Code

### Agents

**Location**: `agents/` directory
**Format**: Markdown files with YAML frontmatter
**Auto-discovery**: All `.md` files in `agents/` load automatically

**Example structure**:
```
agents/
├── code-reviewer.md
├── test-generator.md
└── refactorer.md
```

**File format**:
```markdown
---
description: Agent role and expertise
capabilities:
  - Specific task 1
  - Specific task 2
---

Detailed agent instructions and knowledge...
```

**Usage**: Users can invoke agents manually, or Claude Code selects them automatically based on task context

### Skills

**Location**: `skills/` directory with subdirectories per skill
**Format**: Each skill in its own directory with `SKILL.md` file
**Auto-discovery**: All `SKILL.md` files in skill subdirectories load automatically

**Example structure**:
```
skills/
├── api-testing/
│   ├── SKILL.md
│   ├── scripts/
│   │   └── test-runner.py
│   └── references/
│       └── api-spec.md
└── database-migrations/
    ├── SKILL.md
    └── examples/
        └── migration-template.sql
```

**SKILL.md format**:
```markdown
---
name: Skill Name
description: When to use this skill
version: 1.0.0
---

Skill instructions and guidance...
```

**Supporting files**: Skills can include scripts, references, examples, or assets in subdirectories

**Usage**: Claude Code autonomously activates skills based on task context matching the description

### Hooks

**Location**: `hooks/hooks.json` or inline in `plugin.json`
**Format**: JSON configuration defining event handlers
**Registration**: Hooks register automatically when plugin enables

**Example structure**:
```
hooks/
├── hooks.json           # Hook configuration
└── scripts/
    ├── validate.sh      # Hook script
    └── check-style.sh   # Hook script
```

**Configuration format**:
```json
{
  "PreToolUse": [{
    "matcher": "Write|Edit",
    "hooks": [{
      "type": "command",
      "command": "bash ${CLAUDE_PLUGIN_ROOT}/hooks/scripts/validate.sh",
      "timeout": 30
    }]
  }]
}
```

**Available events**: PreToolUse, PostToolUse, Stop, SubagentStop, SessionStart, SessionEnd, UserPromptSubmit, PreCompact, Notification

**Usage**: Hooks execute automatically in response to Claude Code events

### MCP Servers

**Location**: `.mcp.json` at plugin root or inline in `plugin.json`
**Format**: JSON configuration for MCP server definitions
**Auto-start**: Servers start automatically when plugin enables

**Example format**:
```json
{
  "mcpServers": {
    "server-name": {
      "command": "node",
      "args": ["${CLAUDE_PLUGIN_ROOT}/servers/server.js"],
      "env": {
        "API_KEY": "${API_KEY}"
      }
    }
  }
}
```

**Usage**: MCP servers integrate seamlessly with Claude Code's tool system

## Portable Path References

### ${CLAUDE_PLUGIN_ROOT}

Use `${CLAUDE_PLUGIN_ROOT}` environment variable for all intra-plugin path references:

```json
{
  "command": "bash ${CLAUDE_PLUGIN_ROOT}/scripts/run.sh"
}
```

**Why it matters**: Plugins install in different locations depending on:
- User installation method (marketplace, local, npm)
- Operating system conventions
- User preferences

**Where to use it**:
- Hook command paths
- MCP server command arguments
- Script execution references
- Resource file paths

**Never use**:
- Hardcoded absolute paths (`/Users/name/plugins/...`)
- Relative paths from working directory (`./scripts/...` in commands)
- Home directory shortcuts (`~/plugins/...`)

### Path Resolution Rules

**In manifest JSON fields** (hooks, MCP servers):
```json
"command": "${CLAUDE_PLUGIN_ROOT}/scripts/tool.sh"
```

**In component files** (commands, agents, skills):
```markdown
Reference scripts at: ${CLAUDE_PLUGIN_ROOT}/scripts/helper.py
```

**In executed scripts**:
```bash
#!/bin/bash
# ${CLAUDE_PLUGIN_ROOT} available as environment variable
source "${CLAUDE_PLUGIN_ROOT}/lib/common.sh"
```

## File Naming Conventions

### Component Files

**Commands**: Use kebab-case `.md` files
- `code-review.md` → `/code-review`
- `run-tests.md` → `/run-tests`
- `api-docs.md` → `/api-docs`

**Agents**: Use kebab-case `.md` files describing role
- `test-generator.md`
- `code-reviewer.md`
- `performance-analyzer.md`

**Skills**: Use kebab-case directory names
- `api-testing/`
- `database-migrations/`
- `error-handling/`

### Supporting Files

**Scripts**: Use descriptive kebab-case names with appropriate extensions
- `validate-input.sh`
- `generate-report.py`
- `process-data.js`

**Documentation**: Use kebab-case markdown files
- `api-reference.md`
- `migration-guide.md`
- `best-practices.md`

**Configuration**: Use standard names
- `hooks.json`
- `.mcp.json`
- `plugin.json`

## Auto-Discovery Mechanism

Claude Code automatically discovers and loads components:

1. **Plugin manifest**: Reads `.claude-plugin/plugin.json` when plugin enables
2. **Commands**: Scans `commands/` directory for `.md` files
3. **Agents**: Scans `agents/` directory for `.md` files
4. **Skills**: Scans `skills/` for subdirectories containing `SKILL.md`
5. **Hooks**: Loads configuration from `hooks/hooks.json` or manifest
6. **MCP servers**: Loads configuration from `.mcp.json` or manifest

**Discovery timing**:
- Plugin installation: Components register with Claude Code
- Plugin enable: Components become available for use
- No restart required: Changes take effect on next Claude Code session

**Override behavior**: Custom paths in `plugin.json` supplement (not replace) default directories

## Best Practices

### Organization

1. **Logical grouping**: Group related components together
   - Put test-related commands, agents, and skills together
   - Create subdirectories in `scripts/` for different purposes

2. **Minimal manifest**: Keep `plugin.json` lean
   - Only specify custom paths when necessary
   - Rely on auto-discovery for standard layouts
   - Use inline configuration only for simple cases

3. **Documentation**: Include README files
   - Plugin root: Overall purpose and usage
   - Component directories: Specific guidance
   - Script directories: Usage and requirements

### Naming

1. **Consistency**: Use consistent naming across components
   - If command is `test-runner`, name related agent `test-runner-agent`
   - Match skill directory names to their purpose

2. **Clarity**: Use descriptive names that indicate purpose
   - Good: `api-integration-testing/`, `code-quality-checker.md`
   - Avoid: `utils/`, `misc.md`, `temp.sh`

3. **Length**: Balance brevity with clarity
   - Commands: 2-3 words (`review-pr`, `run-ci`)
   - Agents: Describe role clearly (`code-reviewer`, `test-generator`)
   - Skills: Topic-focused (`error-handling`, `api-design`)

### Portability

1. **Always use ${CLAUDE_PLUGIN_ROOT}**: Never hardcode paths
2. **Test on multiple systems**: Verify on macOS, Linux, Windows
3. **Document dependencies**: List required tools and versions
4. **Avoid system-specific features**: Use portable bash/Python constructs

### Maintenance

1. **Version consistently**: Update version in plugin.json for releases
2. **Deprecate gracefully**: Mark old components clearly before removal
3. **Document breaking changes**: Note changes affecting existing users
4. **Test thoroughly**: Verify all components work after changes

## Common Patterns

### Minimal Plugin

Single command with no dependencies:
```
my-plugin/
├── .claude-plugin/
│   └── plugin.json    # Just name field
└── commands/
    └── hello.md       # Single command
```

### Full-Featured Plugin

Complete plugin with all component types:
```
my-plugin/
├── .claude-plugin/
│   └── plugin.json
├── commands/          # User-facing commands
├── agents/            # Specialized subagents
├── skills/            # Auto-activating skills
├── hooks/             # Event handlers
│   ├── hooks.json
│   └── scripts/
├── .mcp.json          # External integrations
└── scripts/           # Shared utilities
```

### Skill-Focused Plugin

Plugin providing only skills:
```
my-plugin/
├── .claude-plugin/
│   └── plugin.json
└── skills/
    ├── skill-one/
    │   └── SKILL.md
    └── skill-two/
        └── SKILL.md
```

## Troubleshooting

**Component not loading**:
- Verify file is in correct directory with correct extension
- Check YAML frontmatter syntax (commands, agents, skills)
- Ensure skill has `SKILL.md` (not `README.md` or other name)
- Confirm plugin is enabled in Claude Code settings

**Path resolution errors**:
- Replace all hardcoded paths with `${CLAUDE_PLUGIN_ROOT}`
- Verify paths are relative and start with `./` in manifest
- Check that referenced files exist at specified paths
- Test with `echo $CLAUDE_PLUGIN_ROOT` in hook scripts

**Auto-discovery not working**:
- Confirm directories are at plugin root (not in `.claude-plugin/`)
- Check file naming follows conventions (kebab-case, correct extensions)
- Verify custom paths in manifest are correct
- Restart Claude Code to reload plugin configuration

**Conflicts between plugins**:
- Use unique, descriptive component names
- Namespace commands with plugin name if needed
- Document potential conflicts in plugin README
- Consider command prefixes for related functionality

---

For detailed examples and advanced patterns, see files in `references/` and `examples/` directories.

Источник: anthropics/claude-plugins-official / plugin-dev / plugin-structure ↗. Ссылка проверена 2026-10-10.