Documentation Index
Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt
Use this file to discover all available pages before exploring further.
Этот справочник содержит полные технические спецификации для системы плагинов Claude Code, включая схемы компонентов, команды CLI и инструменты разработки.
Плагин — это самостоятельный каталог компонентов, который расширяет Claude Code пользовательской функциональностью. Компоненты плагина включают skills, agents, hooks, MCP servers, LSP servers и monitors.
Справочник компонентов плагина
Skills
Плагины добавляют skills в Claude Code, создавая сочетания клавиш /name, которые вы или Claude можете вызвать.
Расположение: каталог skills/ или commands/ в корне плагина
Формат файла: Skills — это каталоги с SKILL.md; команды — это простые файлы markdown
Структура skill:
skills/
├── pdf-processor/
│ ├── SKILL.md
│ ├── reference.md (опционально)
│ └── scripts/ (опционально)
└── code-reviewer/
└── SKILL.md
Поведение интеграции:
- Skills и команды автоматически обнаруживаются при установке плагина
- Claude может вызывать их автоматически на основе контекста задачи
- Skills могут включать вспомогательные файлы рядом с SKILL.md
Для полной информации смотрите Skills.
Agents
Плагины могут предоставлять специализированные subagents для конкретных задач, которые Claude может вызывать автоматически при необходимости.
Расположение: каталог agents/ в корне плагина
Формат файла: Файлы markdown, описывающие возможности агента
Структура агента:
---
name: agent-name
description: Что специализирует этот агент и когда Claude должен его вызвать
model: sonnet
effort: medium
maxTurns: 20
disallowedTools: Write, Edit
---
Подробное системное приглашение для агента, описывающее его роль, опыт и поведение.
Плагины agents поддерживают поля frontmatter name, description, model, effort, maxTurns, tools, disallowedTools, skills, memory, background и isolation. Единственное допустимое значение isolation — это "worktree". По соображениям безопасности hooks, mcpServers и permissionMode не поддерживаются для agents, поставляемых с плагинами.
Точки интеграции:
- Агенты появляются в интерфейсе
/agents
- Claude может вызывать агентов автоматически на основе контекста задачи
- Агенты могут быть вызваны вручную пользователями
- Плагины agents работают наряду со встроенными agents Claude
Для полной информации смотрите Subagents.
Hooks
Плагины могут предоставлять обработчики событий, которые автоматически реагируют на события Claude Code.
Расположение: hooks/hooks.json в корне плагина или встроенный в plugin.json
Формат: Конфигурация JSON с сопоставителями событий и действиями
Конфигурация hook:
{
"hooks": {
"PostToolUse": [
{
"matcher": "Write|Edit",
"hooks": [
{
"type": "command",
"command": "\"${CLAUDE_PLUGIN_ROOT}\"/scripts/format-code.sh"
}
]
}
]
}
}
Плагины hooks реагируют на те же события жизненного цикла, что и определённые пользователем hooks:
| Event | When it fires |
|---|
SessionStart | When a session begins or resumes |
Setup | When you start Claude Code with --init-only, or with --init or --maintenance in -p mode. For one-time preparation in CI or scripts |
UserPromptSubmit | When you submit a prompt, before Claude processes it |
UserPromptExpansion | When a user-typed command expands into a prompt, before it reaches Claude. Can block the expansion |
PreToolUse | Before a tool call executes. Can block it |
PermissionRequest | When a permission dialog appears |
PermissionDenied | When a tool call is denied by the auto mode classifier. Return {retry: true} to tell the model it may retry the denied tool call |
PostToolUse | After a tool call succeeds |
PostToolUseFailure | After a tool call fails |
PostToolBatch | After a full batch of parallel tool calls resolves, before the next model call |
Notification | When Claude Code sends a notification |
SubagentStart | When a subagent is spawned |
SubagentStop | When a subagent finishes |
TaskCreated | When a task is being created via TaskCreate |
TaskCompleted | When a task is being marked as completed |
Stop | When Claude finishes responding |
StopFailure | When the turn ends due to an API error. Output and exit code are ignored |
TeammateIdle | When an agent team teammate is about to go idle |
InstructionsLoaded | When a CLAUDE.md or .claude/rules/*.md file is loaded into context. Fires at session start and when files are lazily loaded during a session |
ConfigChange | When a configuration file changes during a session |
CwdChanged | When the working directory changes, for example when Claude executes a cd command. Useful for reactive environment management with tools like direnv |
FileChanged | When a watched file changes on disk. The matcher field specifies which filenames to watch |
WorktreeCreate | When a worktree is being created via --worktree or isolation: "worktree". Replaces default git behavior |
WorktreeRemove | When a worktree is being removed, either at session exit or when a subagent finishes |
PreCompact | Before context compaction |
PostCompact | After context compaction completes |
Elicitation | When an MCP server requests user input during a tool call |
ElicitationResult | After a user responds to an MCP elicitation, before the response is sent back to the server |
SessionEnd | When a session terminates |
Типы hook:
command: выполнение команд оболочки или скриптов
http: отправка JSON события как POST запроса на URL
mcp_tool: вызов инструмента на настроенном MCP server
prompt: оценка приглашения с помощью LLM (использует заполнитель $ARGUMENTS для контекста)
agent: запуск проверки агента с инструментами для сложных задач проверки
MCP servers
Плагины могут включать серверы Model Context Protocol (MCP) для подключения Claude Code к внешним инструментам и сервисам.
Расположение: .mcp.json в корне плагина или встроенный в plugin.json
Формат: Стандартная конфигурация сервера MCP
Конфигурация сервера MCP:
{
"mcpServers": {
"plugin-database": {
"command": "${CLAUDE_PLUGIN_ROOT}/servers/db-server",
"args": ["--config", "${CLAUDE_PLUGIN_ROOT}/config.json"],
"env": {
"DB_PATH": "${CLAUDE_PLUGIN_ROOT}/data"
}
},
"plugin-api-client": {
"command": "npx",
"args": ["@company/mcp-server", "--plugin-mode"],
"cwd": "${CLAUDE_PLUGIN_ROOT}"
}
}
}
Поведение интеграции:
- Серверы MCP плагина запускаются автоматически при включении плагина
- Серверы отображаются как стандартные инструменты MCP в наборе инструментов Claude
- Возможности сервера беспрепятственно интегрируются с существующими инструментами Claude
- Серверы плагина можно настраивать независимо от серверов MCP пользователя
LSP servers
Ищете способ использовать плагины LSP? Установите их из официального маркетплейса: найдите “lsp” на вкладке Discover в /plugin. Этот раздел документирует, как создавать плагины LSP для языков, не охватываемых официальным маркетплейсом.
Плагины могут предоставлять серверы Language Server Protocol (LSP) для предоставления Claude интеллектуальной информации о коде в реальном времени при работе с вашей кодовой базой.
Интеграция LSP предоставляет:
- Мгновенная диагностика: Claude видит ошибки и предупреждения сразу после каждого редактирования
- Навигация по коду: переход к определению, поиск ссылок и информация при наведении
- Осведомлённость о языке: информация о типах и документация для символов кода
Расположение: .lsp.json в корне плагина или встроенный в plugin.json
Формат: Конфигурация JSON, сопоставляющая имена языковых серверов с их конфигурациями
Формат файла .lsp.json:
{
"go": {
"command": "gopls",
"args": ["serve"],
"extensionToLanguage": {
".go": "go"
}
}
}
Встроенный в plugin.json:
{
"name": "my-plugin",
"lspServers": {
"go": {
"command": "gopls",
"args": ["serve"],
"extensionToLanguage": {
".go": "go"
}
}
}
}
Обязательные поля:
| Поле | Описание |
|---|
command | Двоичный файл LSP для выполнения (должен быть в PATH) |
extensionToLanguage | Сопоставляет расширения файлов с идентификаторами языков |
Опциональные поля:
| Поле | Описание |
|---|
args | Аргументы командной строки для сервера LSP |
transport | Транспорт связи: stdio (по умолчанию) или socket |
env | Переменные окружения для установки при запуске сервера |
initializationOptions | Опции, передаваемые серверу при инициализации |
settings | Параметры, передаваемые через workspace/didChangeConfiguration |
workspaceFolder | Путь папки рабочей области для сервера |
startupTimeout | Максимальное время ожидания запуска сервера (миллисекунды) |
shutdownTimeout | Максимальное время ожидания корректного завершения (миллисекунды) |
restartOnCrash | Следует ли автоматически перезапустить сервер при сбое |
maxRestarts | Максимальное количество попыток перезапуска перед отказом |
Вы должны установить двоичный файл языкового сервера отдельно. Плагины LSP настраивают способ подключения Claude Code к языковому серверу, но они не включают сам сервер. Если вы видите Executable not found in $PATH на вкладке Errors в /plugin, установите требуемый двоичный файл для вашего языка.
Доступные плагины LSP:
| Плагин | Языковой сервер | Команда установки |
|---|
pyright-lsp | Pyright (Python) | pip install pyright или npm install -g pyright |
typescript-lsp | TypeScript Language Server | npm install -g typescript-language-server typescript |
rust-analyzer-lsp | rust-analyzer | Смотрите установку rust-analyzer |
Сначала установите языковой сервер, затем установите плагин из маркетплейса.
Monitors
Плагины могут объявлять фоновые monitors, которые Claude Code автоматически запускает при активации плагина. Каждый monitor запускает команду оболочки на протяжении всего сеанса и доставляет каждую строку stdout Claude как уведомление, чтобы Claude мог реагировать на записи журнала, изменения статуса или опрашиваемые события без необходимости просить запустить наблюдение.
Плагины monitors используют тот же механизм, что и инструмент Monitor, и разделяют его ограничения доступности. Они работают только в интерактивных сеансах CLI, работают без песочницы на том же уровне доверия, что и hooks, и пропускаются на хостах, где инструмент Monitor недоступен.
Плагины monitors требуют Claude Code v2.1.105 или позже.
Расположение: monitors/monitors.json в корне плагина или встроенный в plugin.json
Формат: Массив JSON записей monitor
Следующий monitors/monitors.json отслеживает конечную точку статуса развёртывания и локальный журнал ошибок:
[
{
"name": "deploy-status",
"command": "\"${CLAUDE_PLUGIN_ROOT}\"/scripts/poll-deploy.sh ${user_config.api_endpoint}",
"description": "Deployment status changes"
},
{
"name": "error-log",
"command": "tail -F ./logs/error.log",
"description": "Application error log",
"when": "on-skill-invoke:debug"
}
]
Для объявления monitors встроенным образом установите experimental.monitors в plugin.json на тот же массив. Для загрузки из пути, отличного от пути по умолчанию, установите experimental.monitors на строку относительного пути, такую как "./config/monitors.json". Monitors — это экспериментальный компонент.
Обязательные поля:
| Поле | Описание |
|---|
name | Идентификатор, уникальный в пределах плагина. Предотвращает дублирование процессов при перезагрузке плагина или повторном вызове skill |
command | Команда оболочки, запускаемая как постоянный фоновый процесс в рабочем каталоге сеанса |
description | Краткое резюме того, что отслеживается. Показывается в панели задач и в резюме уведомлений |
Опциональные поля:
| Поле | Описание |
|---|
when | Управляет тем, когда запускается monitor. "always" запускает его при запуске сеанса и при перезагрузке плагина и является значением по умолчанию. "on-skill-invoke:<skill-name>" запускает его в первый раз, когда именованный skill в этом плагине отправляется |
Значение command поддерживает те же подстановки переменных, что и конфигурации серверов MCP и LSP: ${CLAUDE_PLUGIN_ROOT}, ${CLAUDE_PLUGIN_DATA}, ${CLAUDE_PROJECT_DIR}, ${user_config.*} и любой ${ENV_VAR} из окружения. Добавьте префикс команды с cd "${CLAUDE_PLUGIN_ROOT}" && , если скрипт должен работать из собственного каталога плагина.
Отключение плагина в середине сеанса не останавливает monitors, которые уже работают. Они останавливаются при завершении сеанса.
Themes
Плагины могут поставлять цветовые темы, которые появляются в /theme наряду со встроенными предустановками и локальными темами пользователя. Тема — это JSON файл в themes/ с предустановкой base и разреженной картой переопределений overrides цветовых токенов. Themes — это экспериментальный компонент.
{
"name": "Dracula",
"base": "dark",
"overrides": {
"claude": "#bd93f9",
"error": "#ff5555",
"success": "#50fa7b"
}
}
Выбор темы плагина сохраняет custom:<plugin-name>:<slug> в конфигурации пользователя. Темы плагина доступны только для чтения; нажатие Ctrl+E на одной из них в /theme копирует её в ~/.claude/themes/, чтобы пользователь мог редактировать копию.
Области установки плагина
При установке плагина вы выбираете область, которая определяет, где плагин доступен и кто ещё может его использовать:
| Область | Файл параметров | Вариант использования |
|---|
user | ~/.claude/settings.json | Личные плагины, доступные во всех проектах (по умолчанию) |
project | .claude/settings.json | Плагины команды, общие через контроль версий |
local | .claude/settings.local.json | Плагины, специфичные для проекта, игнорируемые git |
managed | Управляемые параметры | Управляемые плагины (только для чтения, только обновление) |
Плагины используют ту же систему областей, что и другие конфигурации Claude Code. Для инструкций по установке и флагов области смотрите Установка плагинов. Для полного объяснения областей смотрите Области конфигурации.
Схема манифеста плагина
Файл .claude-plugin/plugin.json определяет метаданные и конфигурацию вашего плагина. Этот раздел документирует все поддерживаемые поля и опции.
Манифест опционален. Если он опущен, Claude Code автоматически обнаруживает компоненты в местоположениях по умолчанию и выводит имя плагина из имени каталога. Используйте манифест, когда вам нужно предоставить метаданные или пользовательские пути компонентов.
Полная схема
{
"name": "plugin-name",
"version": "1.2.0",
"description": "Brief plugin description",
"author": {
"name": "Author Name",
"email": "author@example.com",
"url": "https://github.com/author"
},
"homepage": "https://docs.example.com/plugin",
"repository": "https://github.com/author/plugin",
"license": "MIT",
"keywords": ["keyword1", "keyword2"],
"skills": "./custom/skills/",
"commands": ["./custom/commands/special.md"],
"agents": ["./custom/agents/reviewer.md"],
"hooks": "./config/hooks.json",
"mcpServers": "./mcp-config.json",
"outputStyles": "./styles/",
"lspServers": "./.lsp.json",
"experimental": {
"themes": "./themes/",
"monitors": "./monitors.json"
},
"dependencies": [
"helper-lib",
{ "name": "secrets-vault", "version": "~2.1.0" }
]
}
Обязательные поля
Если вы включаете манифест, name — единственное обязательное поле.
| Поле | Тип | Описание | Пример |
|---|
name | string | Уникальный идентификатор (kebab-case, без пробелов) | "deployment-tools" |
Это имя используется для пространства имён компонентов. Например, в пользовательском интерфейсе агент agent-creator для плагина с именем plugin-dev будет отображаться как plugin-dev:agent-creator.
Поля метаданных
| Поле | Тип | Описание | Пример |
|---|
$schema | string | URL JSON Schema для автодополнения и валидации редактора. Claude Code игнорирует это поле при загрузке. | "https://json.schemastore.org/claude-code-plugin-manifest.json" |
version | string | Опционально. Семантическая версия. Установка этого параметра закрепляет плагин на этой строке версии, поэтому пользователи получают обновления только при её изменении. Если опущено, Claude Code использует SHA коммита git, поэтому каждый коммит рассматривается как новая версия. Если также установлено в записи маркетплейса, plugin.json имеет приоритет. Смотрите Управление версиями. | "2.1.0" |
description | string | Краткое объяснение назначения плагина | "Deployment automation tools" |
author | object | Информация об авторе | {"name": "Dev Team", "email": "dev@company.com"} |
homepage | string | URL документации | "https://docs.example.com" |
repository | string | URL исходного кода | "https://github.com/user/plugin" |
license | string | Идентификатор лицензии | "MIT", "Apache-2.0" |
keywords | array | Теги обнаружения | ["deployment", "ci-cd"] |
Поля пути компонента
| Поле | Тип | Описание | Пример |
|---|
skills | string|array | Пользовательские каталоги skills, содержащие <name>/SKILL.md (в дополнение к по умолчанию skills/) | "./custom/skills/" |
commands | string|array | Пользовательские плоские файлы .md skill или каталоги (заменяет по умолчанию commands/) | "./custom/cmd.md" или ["./cmd1.md"] |
agents | string|array | Пользовательские файлы агентов (заменяет по умолчанию agents/) | "./custom/agents/reviewer.md" |
hooks | string|array|object | Пути конфигурации hooks или встроенная конфигурация | "./my-extra-hooks.json" |
mcpServers | string|array|object | Пути конфигурации MCP или встроенная конфигурация | "./my-extra-mcp-config.json" |
outputStyles | string|array | Пользовательские файлы/каталоги стилей вывода (заменяет по умолчанию output-styles/) | "./styles/" |
lspServers | string|array|object | Конфигурации Language Server Protocol для интеллектуальной информации о коде (переход к определению, поиск ссылок и т. д.) | "./.lsp.json" |
experimental.themes | string|array | Файлы/каталоги цветовых тем (заменяет по умолчанию themes/). Смотрите Themes | "./themes/" |
experimental.monitors | string|array | Конфигурации фонового Monitor, которые запускаются автоматически при активации плагина. Смотрите Monitors | "./monitors.json" |
userConfig | object | Значения, настраиваемые пользователем, запрашиваемые при включении. Смотрите Конфигурация пользователя | Смотрите ниже |
channels | array | Объявления каналов для внедрения сообщений (стиль Telegram, Slack, Discord). Смотрите Каналы | Смотрите ниже |
dependencies | array | Другие плагины, которые требует этот плагин, опционально с ограничениями версии semver. Смотрите Ограничение версий зависимостей плагина | [{ "name": "secrets-vault", "version": "~2.1.0" }] |
Экспериментальные компоненты
Компоненты под ключом experimental, themes и monitors, имеют схему манифеста, которая может измениться между выпусками во время их стабилизации. Место, где вы их объявляете, — это отдельная миграция: верхний уровень всё ещё работает, claude plugin validate выдаёт предупреждение, и будущий выпуск потребует experimental.*.
Конфигурация пользователя
Поле userConfig объявляет значения, которые Claude Code запрашивает у пользователя при включении плагина. Используйте это вместо требования пользователям вручную редактировать settings.json.
{
"userConfig": {
"api_endpoint": {
"type": "string",
"title": "API endpoint",
"description": "Your team's API endpoint"
},
"api_token": {
"type": "string",
"title": "API token",
"description": "API authentication token",
"sensitive": true
}
}
}
Ключи должны быть допустимыми идентификаторами. Каждое значение поддерживает эти поля:
| Поле | Обязательно | Описание |
|---|
type | Да | Одно из string, number, boolean, directory или file |
title | Да | Метка, показываемая в диалоге конфигурации |
description | Да | Справочный текст, показываемый под полем |
sensitive | Нет | Если true, скрывает ввод и сохраняет значение в защищённом хранилище вместо settings.json |
required | Нет | Если true, проверка не пройдёт, когда поле пусто |
default | Нет | Значение, используемое, когда пользователь ничего не предоставляет |
multiple | Нет | Для типа string, разрешить массив строк |
min / max | Нет | Границы для типа number |
Каждое значение доступно для подстановки как ${user_config.KEY} в конфигурациях серверов MCP и LSP, командах hooks и командах monitors. Нечувствительные значения также могут быть подставлены в содержимое skills и agents. Все значения экспортируются в подпроцессы плагина как переменные окружения CLAUDE_PLUGIN_OPTION_<KEY>.
Нечувствительные значения хранятся в settings.json под pluginConfigs[<plugin-id>].options. Чувствительные значения переходят в системный keychain (или ~/.claude/.credentials.json, где keychain недоступен). Хранилище keychain общее с OAuth токенами и имеет приблизительный лимит 2 КБ, поэтому держите чувствительные значения небольшими.
Каналы
Поле channels позволяет плагину объявить один или несколько каналов сообщений, которые внедряют содержимое в разговор. Каждый канал привязывается к серверу MCP, который предоставляет плагин.
{
"channels": [
{
"server": "telegram",
"userConfig": {
"bot_token": {
"type": "string",
"title": "Bot token",
"description": "Telegram bot token",
"sensitive": true
},
"owner_id": {
"type": "string",
"title": "Owner ID",
"description": "Your Telegram user ID"
}
}
}
]
}
Поле server обязательно и должно соответствовать ключу в mcpServers плагина. Опциональный userConfig для каждого канала использует ту же схему, что и поле верхнего уровня, позволяя плагину запрашивать токены ботов или ID владельцев при включении плагина.
Правила поведения пути
Замена ли пользовательский путь или расширяет каталог по умолчанию плагина, зависит от поля:
- Заменяет по умолчанию:
commands, agents, outputStyles, experimental.themes, experimental.monitors. Например, когда манифест указывает commands, каталог по умолчанию commands/ не сканируется. Чтобы сохранить по умолчанию и добавить больше, перечислите его явно: "commands": ["./commands/", "./extras/"]
- Добавляет к по умолчанию:
skills. Каталог по умолчанию skills/ всегда сканируется, и каталоги, перечисленные в skills, загружаются вместе с ним
- Собственные правила слияния: hooks, MCP servers и LSP servers. Смотрите каждый раздел для того, как несколько источников объединяются
Когда плагин имеет как папку по умолчанию, так и соответствующий ключ манифеста, Claude Code v2.1.140 и более поздние версии отмечают игнорируемую папку в /doctor, claude plugin list и представлении деталей /plugin. Плагин всё ещё загружается с использованием путей манифеста. Предупреждение не показывается, когда ключ манифеста указывает на папку по умолчанию, например "commands": ["./commands/deploy.md"], потому что папка явно адресуется в этом случае.
Для всех полей пути:
- Все пути должны быть относительны к корню плагина и начинаться с
./
- Компоненты из пользовательских путей используют те же правила именования и пространства имён
- Несколько путей можно указать как массивы
- Когда путь skill указывает на каталог, который содержит
SKILL.md напрямую, например "skills": ["./"], указывающий на корень плагина, поле frontmatter name в SKILL.md определяет имя вызова skill. Это обеспечивает стабильное имя независимо от каталога установки. Если name не установлен в frontmatter, в качестве резервного варианта используется имя каталога.
Примеры путей:
{
"commands": [
"./specialized/deploy.md",
"./utilities/batch-process.md"
],
"agents": [
"./custom-agents/reviewer.md",
"./custom-agents/tester.md"
]
}
Переменные окружения
Claude Code предоставляет три переменные для ссылки на пути. Обе подставляются встроенно везде, где они появляются в содержимом skills, содержимом agents, командах hooks, командах monitors и конфигурациях серверов MCP или LSP. Обе также экспортируются как переменные окружения в процессы hooks и подпроцессы серверов MCP или LSP.
${CLAUDE_PLUGIN_ROOT}: абсолютный путь к каталогу установки вашего плагина. Используйте это для ссылки на скрипты, двоичные файлы и файлы конфигурации, поставляемые с плагином. В командах hooks используйте форму exec с args, чтобы путь передавался как один аргумент без кавычек. В hooks в форме shell и командах monitors оборачивайте его в двойные кавычки, как в "${CLAUDE_PLUGIN_ROOT}". Этот путь изменяется при обновлении плагина. Каталог предыдущей версии остаётся на диске примерно семь дней после обновления перед очисткой, но рассматривайте его как временный и не записывайте состояние здесь.
Когда плагин обновляется во время сеанса, команды hooks, monitors, серверы MCP и серверы LSP продолжают использовать путь предыдущей версии. Запустите /reload-plugins для переключения hooks, серверов MCP и серверов LSP на новый путь; monitors требуют перезагрузки сеанса.
${CLAUDE_PLUGIN_DATA}: постоянный каталог для состояния плагина, который сохраняется при обновлениях. Используйте это для установленных зависимостей, таких как node_modules или виртуальные окружения Python, сгенерированный код, кэши и любые другие файлы, которые должны сохраняться между версиями плагина. Каталог создаётся автоматически при первом обращении к этой переменной.
${CLAUDE_PROJECT_DIR}: корень проекта. Это тот же каталог, который hooks получают в своей переменной CLAUDE_PROJECT_DIR. Используйте это для ссылки на скрипты или файлы конфигурации, локальные для проекта. Оборачивайте в кавычки для обработки путей с пробелами, например "${CLAUDE_PROJECT_DIR}/scripts/server.sh". Серверы MCP также могут вызывать запрос MCP roots/list, который возвращает каталог, из которого был запущен Claude Code.
{
"hooks": {
"PostToolUse": [
{
"hooks": [
{
"type": "command",
"command": "\"${CLAUDE_PLUGIN_ROOT}\"/scripts/process.sh"
}
]
}
]
}
}
Каталог постоянных данных
Каталог ${CLAUDE_PLUGIN_DATA} разрешается в ~/.claude/plugins/data/{id}/, где {id} — это идентификатор плагина с символами вне a-z, A-Z, 0-9, _ и -, заменённые на -. Для плагина, установленного как formatter@my-marketplace, каталог — это ~/.claude/plugins/data/formatter-my-marketplace/.
Распространённое использование — установка языковых зависимостей один раз и их повторное использование в сеансах и обновлениях плагина. Поскольку каталог данных пережидает любую отдельную версию плагина, проверка только существования каталога не может обнаружить, когда обновление изменяет манифест зависимостей плагина. Рекомендуемый паттерн сравнивает поставляемый манифест с копией в каталоге данных и переустанавливает при различиях.
Этот hook SessionStart устанавливает node_modules при первом запуске и снова всякий раз, когда обновление плагина включает изменённый package.json:
{
"hooks": {
"SessionStart": [
{
"hooks": [
{
"type": "command",
"command": "diff -q \"${CLAUDE_PLUGIN_ROOT}/package.json\" \"${CLAUDE_PLUGIN_DATA}/package.json\" >/dev/null 2>&1 || (cd \"${CLAUDE_PLUGIN_DATA}\" && cp \"${CLAUDE_PLUGIN_ROOT}/package.json\" . && npm install) || rm -f \"${CLAUDE_PLUGIN_DATA}/package.json\""
}
]
}
]
}
}
diff выходит с ненулевым кодом, когда сохранённая копия отсутствует или отличается от поставляемой, охватывая как первый запуск, так и обновления, изменяющие зависимости. Если npm install не удаётся, завершающий rm удаляет скопированный манифест, чтобы следующий сеанс повторил попытку.
Скрипты, поставляемые в ${CLAUDE_PLUGIN_ROOT}, затем могут работать с сохранённым node_modules:
{
"mcpServers": {
"routines": {
"command": "node",
"args": ["${CLAUDE_PLUGIN_ROOT}/server.js"],
"env": {
"NODE_PATH": "${CLAUDE_PLUGIN_DATA}/node_modules"
}
}
}
}
Каталог данных удаляется автоматически при удалении плагина из последней области, где он установлен. Интерфейс /plugin показывает размер каталога и запрашивает перед удалением. CLI удаляет по умолчанию; передайте --keep-data для сохранения.
Кэширование плагина и разрешение файлов
Плагины указываются одним из двух способов:
- Через
claude --plugin-dir или claude --plugin-url, на время сеанса.
- Через маркетплейс, установленный для будущих сеансов.
В целях безопасности и проверки Claude Code копирует плагины маркетплейса в локальный кэш плагина пользователя (~/.claude/plugins/cache) вместо использования их на месте. Понимание этого поведения важно при разработке плагинов, которые ссылаются на внешние файлы.
Каждая установленная версия — это отдельный каталог в кэше. Когда вы обновляете или удаляете плагин, предыдущий каталог версии помечается как сиротский и удаляется автоматически через 7 дней. Период отсрочки позволяет одновременным сеансам Claude Code, которые уже загрузили старую версию, продолжать работу без ошибок.
Инструменты Glob и Grep Claude пропускают сиротские каталоги версий при поиске, поэтому результаты файлов не включают устаревший код плагина.
Ограничения обхода пути
Установленные плагины не могут ссылаться на файлы вне их каталога. Пути, которые выходят за пределы корня плагина (такие как ../shared-utils), не будут работать после установки, потому что эти внешние файлы не копируются в кэш.
Совместное использование файлов в маркетплейсе с помощью символических ссылок
Если вашему плагину нужно совместно использовать файлы с другими частями того же маркетплейса, вы можете создать символические ссылки внутри каталога вашего плагина. То, как символическая ссылка обрабатывается при копировании плагина в кэш, зависит от того, где разрешается её цель:
- В собственном каталоге плагина: символическая ссылка сохраняется как относительная символическая ссылка в кэше, поэтому она продолжает разрешаться к скопированной цели во время выполнения.
- В другом месте в том же маркетплейсе: символическая ссылка разыменовывается. Содержимое цели копируется в кэш на её место. Это позволяет каталогу
skills/ мета-плагина ссылаться на навыки, определённые другими плагинами в маркетплейсе.
- Вне маркетплейса: символическая ссылка пропускается в целях безопасности. Это предотвращает извлечение плагинами произвольных файлов хоста, таких как системные пути, в кэш.
Для плагинов, установленных с помощью --plugin-dir или из локального пути, сохраняются только символические ссылки, которые разрешаются в собственном каталоге плагина. Все остальные пропускаются.
Следующая команда создаёт ссылку из плагина маркетплейса на общий навык, определённый соседним плагином. В Windows используйте mklink /D из командной строки с повышенными привилегиями или включите режим разработчика:
ln -s ../../shared-plugin/skills/foo ./skills/foo
Это обеспечивает гибкость при сохранении преимуществ безопасности системы кэширования.
Структура каталога плагина
Стандартная раскладка плагина
Полный плагин следует этой структуре:
enterprise-plugin/
├── .claude-plugin/ # Каталог метаданных (опционально)
│ └── plugin.json # манифест плагина
├── skills/ # Skills
│ ├── code-reviewer/
│ │ └── SKILL.md
│ └── pdf-processor/
│ ├── SKILL.md
│ └── scripts/
├── commands/ # Skills как плоские файлы .md
│ ├── status.md
│ └── logs.md
├── agents/ # Определения subagent
│ ├── security-reviewer.md
│ ├── performance-tester.md
│ └── compliance-checker.md
├── output-styles/ # Определения стиля вывода
│ └── terse.md
├── themes/ # Определения цветовой темы
│ └── dracula.json
├── monitors/ # Конфигурации фонового monitor
│ └── monitors.json
├── hooks/ # Конфигурации hook
│ ├── hooks.json # Основная конфигурация hook
│ └── security-hooks.json # Дополнительные hooks
├── bin/ # Исполняемые файлы плагина, добавленные в PATH
│ └── my-tool # Вызываемый как голая команда в инструменте Bash
├── settings.json # Параметры по умолчанию для плагина
├── .mcp.json # Определения сервера MCP
├── .lsp.json # Конфигурации сервера LSP
├── scripts/ # Скрипты hook и утилиты
│ ├── security-scan.sh
│ ├── format-code.py
│ └── deploy.js
├── LICENSE # Файл лицензии
└── CHANGELOG.md # История версий
Каталог .claude-plugin/ содержит файл plugin.json. Все остальные каталоги (commands/, agents/, skills/, output-styles/, themes/, monitors/, hooks/) должны быть в корне плагина, а не внутри .claude-plugin/.
Файл CLAUDE.md в корне плагина не загружается как контекст проекта. Плагины предоставляют контекст через skills, agents и hooks, а не через CLAUDE.md. Чтобы отправить инструкции, которые загружаются в контекст Claude, поместите их в skill.
Справочник местоположений файлов
| Компонент | Местоположение по умолчанию | Назначение |
|---|
| Манифест | .claude-plugin/plugin.json | Метаданные и конфигурация плагина (опционально) |
| Skills | skills/ | Skills со структурой <name>/SKILL.md |
| Commands | commands/ | Skills как плоские файлы Markdown. Используйте skills/ для новых плагинов |
| Agents | agents/ | Файлы Subagent Markdown |
| Output styles | output-styles/ | Определения стиля вывода |
| Themes | themes/ | Определения цветовой темы |
| Hooks | hooks/hooks.json | Конфигурация hook |
| MCP servers | .mcp.json | Определения сервера MCP |
| LSP servers | .lsp.json | Конфигурации языкового сервера |
| Monitors | monitors/monitors.json | Конфигурации фонового monitor |
| Executables | bin/ | Исполняемые файлы, добавленные в PATH инструмента Bash. Файлы здесь вызываются как голые команды в любом вызове инструмента Bash, пока плагин включен |
| Settings | settings.json | Конфигурация по умолчанию, применяемая при включении плагина. В настоящее время поддерживаются только ключи agent и subagentStatusLine |
Справочник команд CLI
Claude Code предоставляет команды CLI для неинтерактивного управления плагинами, полезные для написания скриптов и автоматизации.
plugin install
Установите плагин из доступных маркетплейсов.
claude plugin install <plugin> [options]
Аргументы:
<plugin>: Имя плагина или plugin-name@marketplace-name для конкретного маркетплейса
Опции:
| Опция | Описание | По умолчанию |
|---|
-s, --scope <scope> | Область установки: user, project или local | user |
-h, --help | Отобразить справку для команды | |
Область определяет, в какой файл параметров добавляется установленный плагин. Например, --scope project записывает в enabledPlugins в .claude/settings.json, делая плагин доступным для всех, кто клонирует репозиторий проекта.
Примеры:
# Установить в область пользователя (по умолчанию)
claude plugin install formatter@my-marketplace
# Установить в область проекта (общее с командой)
claude plugin install formatter@my-marketplace --scope project
# Установить в локальную область (игнорируется git)
claude plugin install formatter@my-marketplace --scope local
plugin uninstall
Удалите установленный плагин.
claude plugin uninstall <plugin> [options]
Аргументы:
<plugin>: Имя плагина или plugin-name@marketplace-name
Опции:
| Опция | Описание | По умолчанию |
|---|
-s, --scope <scope> | Удалить из области: user, project или local | user |
--keep-data | Сохранить каталог постоянных данных плагина | |
--prune | Также удалить автоматически установленные зависимости, которые не требуются другим плагинам. См. plugin prune | |
-y, --yes | Пропустить подтверждение --prune. Требуется, когда stdin не является TTY | |
-h, --help | Отобразить справку для команды | |
Псевдонимы: remove, rm
По умолчанию удаление из последней оставшейся области также удаляет каталог ${CLAUDE_PLUGIN_DATA} плагина. Используйте --keep-data для сохранения, например при переустановке после тестирования новой версии.
plugin prune
Удалите автоматически установленные зависимости плагинов, которые больше не требуются ни одному установленному плагину. Зависимости, которые Claude Code подтянул для удовлетворения поля dependencies другого плагина, удаляются; плагины, которые вы установили напрямую, никогда не затрагиваются.
claude plugin prune [options]
Опции:
| Опция | Описание | По умолчанию |
|---|
-s, --scope <scope> | Очистить в области: user, project или local | user |
--dry-run | Список того, что будет удалено, без фактического удаления | |
-y, --yes | Пропустить подтверждение. Требуется, когда stdin не является TTY | |
-h, --help | Отобразить справку для команды | |
Псевдонимы: autoremove
Команда выводит список потерянных зависимостей и запрашивает подтверждение перед их удалением. Чтобы удалить плагин и очистить его зависимости в один шаг, запустите claude plugin uninstall <plugin> --prune.
claude plugin prune требует Claude Code v2.1.121 или более поздней версии.
plugin enable
Включите отключённый плагин.
claude plugin enable <plugin> [options]
Аргументы:
<plugin>: Имя плагина или plugin-name@marketplace-name
Опции:
| Опция | Описание | По умолчанию |
|---|
-s, --scope <scope> | Область для включения: user, project или local | user |
-h, --help | Отобразить справку для команды | |
plugin disable
Отключите плагин без его удаления.
claude plugin disable <plugin> [options]
Аргументы:
<plugin>: Имя плагина или plugin-name@marketplace-name
Опции:
| Опция | Описание | По умолчанию |
|---|
-s, --scope <scope> | Область для отключения: user, project или local | user |
-h, --help | Отобразить справку для команды | |
plugin update
Обновите плагин до последней версии.
claude plugin update <plugin> [options]
Аргументы:
<plugin>: Имя плагина или plugin-name@marketplace-name
Опции:
| Опция | Описание | По умолчанию |
|---|
-s, --scope <scope> | Область для обновления: user, project, local или managed | user |
-h, --help | Отобразить справку для команды | |
plugin list
Список установленных плагинов с их версией, источником маркетплейса и статусом включения.
claude plugin list [options]
Опции:
| Опция | Описание | По умолчанию |
|---|
--json | Вывести как JSON | |
--available | Включить доступные плагины из маркетплейсов. Требует --json | |
-h, --help | Отобразить справку для команды | |
plugin details
Показать инвентарь компонентов плагина и прогнозируемую стоимость в токенах. Вывод содержит список всех компонентов, которые вносит плагин, сгруппированных как Skills (навыки и команды), Agents, Hooks и MCP серверы, вместе с оценкой того, сколько токенов он добавляет к каждой сессии.
claude plugin details <name>
Аргументы:
<name>: Имя плагина или plugin-name@marketplace-name
Опции:
| Опция | Описание | По умолчанию |
|---|
-h, --help | Отобразить справку для команды | |
Вывод показывает две цифры стоимости для каждого компонента:
- Always-on: токены, добавляемые к каждой сессии текстом описания плагина, такие как описания навыков, описания агентов и имена команд, независимо от того, срабатывает ли какой-либо компонент.
- On-invoke: токены, которые стоит компонент при срабатывании. Показано для каждого компонента отдельно, а не как итог плагина, потому что типичная сессия вызывает только подмножество компонентов.
Этот пример показывает, как выглядит вывод для плагина с двумя навыками:
security-guidance 1.2.0
Real-time security analysis for Claude Code sessions
Source: security-guidance@claude-code-marketplace
Component inventory
Skills (2) scan-dependencies, review-changes
Agents (0)
Hooks (1) (harness-only — no model context cost)
MCP servers (0)
Projected token cost
Always-on: ~180 tok added to every session
Per-component (rounded)
component always-on on-invoke
scan-dependencies ~100 ~2400
review-changes ~80 ~1800
On-invoke cost is paid each time a skill or agent fires.
Token counts are estimates and may differ from actual usage.
Итог always-on вычисляется через API count_tokens для вашей активной модели. Числа для каждого компонента пропорционально масштабируются от этого итога. Если API недоступен, команда переходит на оценку на основе количества символов.
plugin tag
Создайте тег выпуска git для плагина в текущем каталоге. Запустите из папки плагина. См. Теги выпусков плагинов.
claude plugin tag [options]
Опции:
| Опция | Описание | По умолчанию |
|---|
--push | Отправить тег на удалённый репозиторий после его создания | |
--dry-run | Вывести, что будет помечено тегом, без создания самого тега | |
-f, --force | Создать тег даже если рабочее дерево грязное или тег уже существует | |
-h, --help | Отобразить справку для команды | |
Инструменты отладки и разработки
Команды отладки
Используйте claude --debug для просмотра деталей загрузки плагина:
Это показывает:
- Какие плагины загружаются
- Любые ошибки в манифестах плагинов
- Регистрацию skill, agent и hook
- Инициализацию сервера MCP
Распространённые проблемы
| Проблема | Причина | Решение |
|---|
| Плагин не загружается | Неверный plugin.json | Запустите claude plugin validate или /plugin validate для проверки plugin.json, frontmatter skill/agent/command и hooks/hooks.json на синтаксис и ошибки схемы |
| Skills не отображаются | Неправильная структура каталога | Убедитесь, что skills/ или commands/ находится в корне плагина, а не в .claude-plugin/ |
| Hooks не срабатывают | Скрипт не исполняемый | Запустите chmod +x script.sh |
| Сервер MCP не работает | Отсутствует ${CLAUDE_PLUGIN_ROOT} | Используйте переменную для всех путей плагина |
| Ошибки пути | Используются абсолютные пути | Все пути должны быть относительными и начинаться с ./ |
LSP Executable not found in $PATH | Языковой сервер не установлен | Установите двоичный файл (например, npm install -g typescript-language-server typescript) |
Примеры сообщений об ошибках
Ошибки проверки манифеста:
Invalid JSON syntax: Unexpected token } in JSON at position 142: проверьте наличие пропущенных запятых, лишних запятых или неквотированных строк
Plugin has an invalid manifest file at .claude-plugin/plugin.json. Validation errors: name: Required: отсутствует обязательное поле
Plugin has a corrupt manifest file at .claude-plugin/plugin.json. JSON parse error: ...: ошибка синтаксиса JSON
Ошибки загрузки плагина:
Warning: No commands found in plugin my-plugin custom directory: ./cmds. Expected .md files or SKILL.md in subdirectories.: путь команды существует, но не содержит действительных файлов команд
Plugin directory not found at path: ./plugins/my-plugin. Check that the marketplace entry has the correct path.: путь source в marketplace.json указывает на несуществующий каталог
Plugin my-plugin has conflicting manifests: both plugin.json and marketplace entry specify components.: удалите дублирующиеся определения компонентов или удалите strict: false в записи маркетплейса
Устранение неполадок Hook
Скрипт hook не выполняется:
- Проверьте, что скрипт исполняемый:
chmod +x ./scripts/your-script.sh
- Проверьте строку shebang: Первая строка должна быть
#!/bin/bash или #!/usr/bin/env bash
- Проверьте, что путь использует
${CLAUDE_PLUGIN_ROOT}: "command": "\"${CLAUDE_PLUGIN_ROOT}\"/scripts/your-script.sh"
- Протестируйте скрипт вручную:
./scripts/your-script.sh
Hook не срабатывает на ожидаемых событиях:
- Проверьте, что имя события правильное (чувствительно к регистру):
PostToolUse, а не postToolUse
- Проверьте, что шаблон сопоставления соответствует вашим инструментам:
"matcher": "Write|Edit" для операций с файлами
- Подтвердите, что тип hook действителен:
command, http, mcp_tool, prompt или agent
Устранение неполадок сервера MCP
Сервер не запускается:
- Проверьте, что команда существует и исполняемая
- Проверьте, что все пути используют переменную
${CLAUDE_PLUGIN_ROOT}
- Проверьте журналы сервера MCP:
claude --debug показывает ошибки инициализации
- Протестируйте сервер вручную вне Claude Code
Инструменты сервера не отображаются:
- Убедитесь, что сервер правильно настроен в
.mcp.json или plugin.json
- Проверьте, что сервер правильно реализует протокол MCP
- Проверьте наличие тайм-аутов соединения в выводе отладки
Ошибки структуры каталога
Симптомы: Плагин загружается, но компоненты (skills, agents, hooks) отсутствуют.
Правильная структура: Компоненты должны быть в корне плагина, а не внутри .claude-plugin/. Только plugin.json должен быть в .claude-plugin/.
my-plugin/
├── .claude-plugin/
│ └── plugin.json ← Только манифест здесь
├── commands/ ← На уровне корня
├── agents/ ← На уровне корня
└── hooks/ ← На уровне корня
Если ваши компоненты находятся внутри .claude-plugin/, переместите их в корень плагина.
Контрольный список отладки:
- Запустите
claude --debug и ищите сообщения “loading plugin”
- Проверьте, что каждый каталог компонента указан в выводе отладки
- Проверьте, что разрешения файлов позволяют читать файлы плагина
Справочник по распространению и версионированию
Управление версиями
Claude Code использует версию плагина в качестве ключа кэша, который определяет, доступно ли обновление. Когда вы запускаете /plugin update или срабатывает автоматическое обновление, Claude Code вычисляет текущую версию и пропускает обновление, если она совпадает с уже установленной.
Версия определяется из первого из следующих параметров, который установлен:
- Поле
version в plugin.json плагина
- Поле
version в записи плагина на маркетплейсе в marketplace.json
- SHA коммита git источника плагина для источников
github, url, git-subdir и relative-path в маркетплейсе, размещённом на git
unknown для источников npm или локальных каталогов, не находящихся в репозитории git
Это дает вам два способа версионирования плагина:
| Подход | Как | Поведение обновления | Лучше всего для |
|---|
| Явная версия | Установите "version": "2.1.0" в plugin.json | Пользователи получают обновления только когда вы обновляете это поле. Отправка новых коммитов без обновления не имеет эффекта, и /plugin update сообщает “already at the latest version”. | Опубликованные плагины со стабильными циклами выпуска |
| Версия коммита SHA | Опустите version из plugin.json и записи маркетплейса | Пользователи получают обновления при каждом новом коммите в источник git плагина | Внутренние или командные плагины в активной разработке |
Если вы установите version в plugin.json, вы должны обновлять его каждый раз, когда хотите, чтобы пользователи получили изменения. Отправка новых коммитов недостаточна, потому что Claude Code видит ту же строку версии и сохраняет кэшированную копию. Если вы быстро итерируете, оставьте version неустановленным, чтобы вместо этого использовалась SHA коммита git.
Если вы используете явные версии, следуйте семантическому версионированию (MAJOR.MINOR.PATCH): обновляйте MAJOR для критических изменений, MINOR для новых функций, PATCH для исправлений ошибок. Документируйте изменения в CHANGELOG.md.
Смотрите также
- Плагины - Учебные материалы и практическое использование
- Маркетплейсы плагинов - Создание и управление маркетплейсами
- Skills - Детали разработки skills
- Subagents - Конфигурация и возможности агентов
- Hooks - Обработка событий и автоматизация
- MCP - Интеграция внешних инструментов
- Параметры - Опции конфигурации для плагинов