Plugin - это переносимый набор компонентов: skills, агенты, hooks, MCP-серверы, LSP-серверы, monitors и часть настроек, упакованные вместе. Выбор между standalone .claude и плагином прост по критерию переносимости: для одного репозитория достаточно обычного .claude, а плагин нужен, когда компонент надо версионировать, устанавливать и обновлять сразу в нескольких проектах или командах. Плагин превращает разрозненную кастомизацию в распространяемый продукт с версией.
Структура плагина имеет одну важную тонкость. Каталоги компонентов - skills, agents, hooks, scripts, monitors, а также .mcp.json и .lsp.json - лежат в корне плагина, а не внутри .claude-plugin: там находится только манифест plugin.json, задающий идентичность, метаданные и опциональные пути компонентов. Полезно один раз увидеть эту раскладку. Для стабильных ссылок внутри установленной версии используют переменную CLAUDE_PLUGIN_ROOT, а не текущий рабочий каталог.
Локальная разработка плагина проста и предсказуема. Флаг --plugin-dir подключает каталог (или ZIP), а после правки компонентов вызывают /reload-plugins; --plugin-url загружает доверенный архив на сессию. Ошибки смотрят на вкладке Errors в /plugin и через claude --debug. Локальный --plugin-dir обычно имеет приоритет над копией из marketplace - кроме managed forced-состояния, когда организация жёстко задаёт версию. Это удобно для итеративной разработки: правишь и сразу перезагружаешь.
Marketplace - это индекс плагинов, а не гарантия качества каждого набора. Команда /plugin даёт discover, install, enable, disable и update, а CLI claude plugin удобен для автоматизации. Администратор может ограничить известные marketplaces и принудительно включать или выключать плагины. Ключевое правило воспроизводимости - закреплять версию или commit там, где стабильность важнее автоматического обновления. Наличие плагина в marketplace не означает, что кто-то проверил его безопасность.
LSP добавляет языковой интеллект. Файл .lsp.json связывает исполняемый language server с расширениями файлов, но сам бинарник (gopls, языковой сервер и подобные) пользователь ставит сам. После правок LSP даёт диагностику, переход к определению, поиск ссылок и информацию о типах. Полезно один раз увидеть такую привязку. Для распространённых языков документация советует готовые marketplace-плагины, а свой .lsp.json нужен лишь для языка, которого нет в готовых.
Остальные компоненты плагина - monitors, themes и channels - несут и пользу, и риск. Monitor запускает фоновую команду и передаёт каждую её строку stdout как уведомление Claude; но её вывод - недоверенный ввод, поэтому ограничивают источник, частоту и retention. Themes меняют вид терминала, но не permissions. Channels позволяют внешнему источнику присылать сообщения в сессию - это удобный вход событий и одновременно граница prompt injection, о которой нельзя забывать.
У настроек плагина есть предел, который важно знать. Корневой settings.json плагина в текущей документации поддерживает лишь ограниченный набор ключей по умолчанию; не рассчитывайте, что произвольный settings-ключ из плагина будет применён. Это защита: плагин не должен молча менять произвольную политику вашей среды. Всё, что действительно влияет на поведение, - hooks, MCP, агенты - остаётся видимым и проверяемым, а не спрятанным в общий settings.
Перед выпуском плагина проходят чек-лист, потому что плагин - это исполняемый код, который поедет к другим. Полезно один раз собрать его; ниже он и приведён. Ключевые пункты - корректные идентичность и версия, все пути через CLAUDE_PLUGIN_ROOT, timeout и негативные тесты у hooks, отсутствие секретов и незакреплённого удалённого кода, и README, честно описывающий permissions, поток данных и способ удаления. Типичный провал - выпустить плагин с абсолютными путями или без документации о том, что он делает с вашими правами.
# Release checklist плагина
[ ] manifest identity и version корректны
[ ] все пути через CLAUDE_PLUGIN_ROOT
[ ] команды/скрипты работают без user shell profile
[ ] hooks имеют timeout и негативные тесты
[ ] MCP/LSP зависимости задокументированы
[ ] нет secrets, абсолютных путей и unpinned remote code
[ ] /reload-plugins, /plugin Errors и --debug чисты
[ ] README: permissions, data flow, install, update, removemy-plugin/
├── .claude-plugin/
│ └── plugin.json # только манифест
├── skills/ # компоненты - в КОРНЕ плагина
│ └── review/SKILL.md
├── agents/
├── hooks/
│ └── hooks.json
├── .mcp.json
├── .lsp.json
├── monitors/
├── settings.json # ограниченный набор ключей
└── README.md
# пути внутри - через CLAUDE_PLUGIN_ROOT