Создание и распространение marketplace плагинов
Создавайте и размещайте marketplace плагинов для распространения расширений Claude Code по командам и сообществам.
plugin marketplace — это каталог, который позволяет вам распространять плагины другим пользователям. Marketplace обеспечивают централизованное обнаружение, отслеживание версий, автоматические обновления и поддержку нескольких типов источников, включая репозитории Git и локальные пути. Это руководство показывает, как создать собственный marketplace для совместного использования плагинов с вашей командой или сообществом.
Ищете способ установить плагины из существующего marketplace? См. Обнаружение и установка готовых плагинов.
Обзор
Создание и распространение marketplace включает:
- Создание плагинов: создайте один или несколько плагинов с skills, агентами, hooks, MCP servers или LSP servers. Это руководство предполагает, что у вас уже есть плагины для распространения; см. Создание плагинов для получения подробной информации о том, как их создавать.
- Создание файла marketplace: определите
marketplace.json, который перечисляет ваши плагины и где их найти. См. Создание файла marketplace. - Размещение marketplace: отправьте на GitHub, GitLab или другой хост Git. См. Размещение и распространение marketplace.
- Совместное использование с пользователями: пользователи добавляют ваш marketplace с помощью
/plugin marketplace addи устанавливают отдельные плагины. См. Обнаружение и установка плагинов.
После того как ваш marketplace будет запущен, вы можете обновить его, отправив изменения в ваш репозиторий. Пользователи обновляют свою локальную копию с помощью /plugin marketplace update.
Пошаговое руководство: создание локального marketplace
Этот пример создает marketplace с одним плагином: skill quality-review для проверки кода. Вы создадите структуру каталогов, добавите skill, создадите манифест плагина и каталог marketplace, а затем установите и протестируете его.
Создание структуры каталогов
mkdir -p my-marketplace/.claude-plugin
mkdir -p my-marketplace/plugins/quality-review-plugin/.claude-plugin
mkdir -p my-marketplace/plugins/quality-review-plugin/skills/quality-review
Создание skill
Создайте файл SKILL.md, который определяет, что делает skill quality-review.
---
description: Review code for bugs, security, and performance
---
Review the code I've selected or the recent changes for:
- Potential bugs or edge cases
- Security concerns
- Performance issues
- Readability improvements
Be concise and actionable.
Создание манифеста плагина
Создайте файл plugin.json, который описывает плагин. Манифест находится в каталоге .claude-plugin/.
{
"name": "quality-review-plugin",
"description": "Adds a quality-review skill for quick code reviews",
"version": "1.0.0",
"author": {
"name": "Your Name"
}
}
Установка version означает, что пользователи получают обновления только при изменении этого поля, поэтому увеличивайте его при каждом выпуске. Плагин с command source не закреплен этим полем. Также не закреплен плагин, загруженный на месте из marketplace, добавленного как локальный каталог. Если вы опустите version, версия берется из следующего источника в управлении версиями.
Создание файла marketplace
Создайте каталог marketplace, который перечисляет ваш плагин.
{
"name": "my-plugins",
"owner": {
"name": "Your Name"
},
"plugins": [
{
"name": "quality-review-plugin",
"source": "./plugins/quality-review-plugin",
"description": "Adds a quality-review skill for quick code reviews"
}
]
}
Добавление и установка
Из каталога, содержащего my-marketplace, запустите Claude Code и выполните следующие команды. Команда установки открывает представление сведений о плагине, где вы выбираете область установки для подтверждения установки. Проверьте сводку установки: если она сообщает Run /reload-plugins to activate., см. Применение изменений плагина без перезагрузки.
/plugin marketplace add ./my-marketplace
/plugin install quality-review-plugin@my-plugins
Попробуйте
Выберите некоторый код в редакторе и запустите ваш новый skill. Skills плагинов имеют пространство имен с именем плагина.
/quality-review-plugin:quality-review
Чтобы узнать больше о том, что могут делать плагины, включая hooks, agents, MCP servers и LSP servers, см. Plugins.
Как устанавливаются плагины: когда пользователи устанавливают плагин, Claude Code копирует каталог плагина в место кэша, если только плагин не загружается на месте. command source в режиме link загружается на месте, как и relative path source в marketplace, добавленном из локального каталога. Скопированные плагины не могут ссылаться на файлы вне их каталога, используя пути вроде ../shared-utils, потому что эти файлы не будут скопированы.
Если вам нужно совместно использовать файлы между плагинами, используйте symlinks. Подробнее см. Plugin caching and file resolution.
Создание файла marketplace
Создайте .claude-plugin/marketplace.json в корне вашего репозитория. Этот файл определяет имя вашего marketplace, информацию о владельце и список плагинов с их источниками.
Каждая запись плагина требует как минимум name и source, который указывает Claude Code, откуда его получить. См. полную схему ниже для всех доступных полей.
{
"name": "company-tools",
"owner": {
"name": "DevTools Team",
"email": "devtools@example.com"
},
"plugins": [
{
"name": "code-formatter",
"source": "./plugins/formatter",
"description": "Автоматическое форматирование кода при сохранении",
"version": "2.1.0",
"author": {
"name": "DevTools Team"
}
},
{
"name": "deployment-tools",
"source": {
"source": "github",
"repo": "company/deploy-plugin"
},
"description": "Инструменты автоматизации развертывания"
}
]
}
Схема marketplace
Обязательные поля
| Поле | Тип | Описание | Пример |
|---|---|---|---|
name |
string | Идентификатор marketplace в kebab-case, без пробелов, управляющих символов или символов двунаправленного форматирования. Это общедоступное поле: пользователи видят его при установке плагинов (например, /plugin install my-tool@your-marketplace). Каждый пользователь может зарегистрировать только один marketplace с одним именем: добавление второго marketplace с тем же именем заменяет первый. Чтобы опубликовать несколько плагинов под одним именем marketplace, перечислите их все в одном файле marketplace.json. |
"acme-tools" |
owner |
object | Информация о сопровождающем marketplace. См. Поля владельца | |
plugins |
array | Список доступных плагинов | См. Записи плагинов |
Зарезервированные имена: следующие имена marketplace зарезервированы для официального использования Anthropic и не могут использоваться сторонними marketplace: claude-code-marketplace, claude-code-plugins, claude-plugins-official, claude-plugins-community, claude-community, anthropic-marketplace, anthropic-plugins, agent-skills, anthropic-agent-skills, knowledge-work-plugins, life-sciences, claude-for-legal, claude-for-financial-services, financial-services-plugins, first-party-plugins, claude-tag-plugins, healthcare. Имена, которые выдают себя за официальные marketplace, такие как official-claude-plugins или anthropic-plugins-v2, также заблокированы. Резервирование этих имен предотвращает представление стороннего marketplace как источника, опубликованного Anthropic.
Claude Code повторно проверяет зарезервированные имена каждый раз при загрузке marketplace, а не только при добавлении. Marketplace, зарегистрированный под одним из этих имен до того, как имя было зарезервировано, перестает загружаться и сообщает, что он зарегистрирован из ненадежного источника. Удалите этот marketplace и добавьте его снова из официального источника Anthropic. Сторонний marketplace, затронутый вновь зарезервированным именем, загружается снова, как только вы добавите его под другим именем. До версии v2.1.205 first-party-plugins и healthcare не были зарезервированы, и marketplace, уже зарегистрированный под зарезервированным именем, продолжал загружаться. До версии v2.1.265 claude-tag-plugins не был зарезервирован.
Вы также не можете назвать marketplace npm, pip, uv, cargo, github или gh в любом регистре. Эта проверка требует Claude Code v2.1.275 или позже.
Поля владельца
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
name |
string | Да | Имя сопровождающего или команды |
email |
string | Нет | Контактный адрес электронной почты сопровождающего |
url |
string | Нет | Веб-сайт, профиль GitHub или URL организации |
Дополнительные поля
| Поле | Тип | Описание |
|---|---|---|
$schema |
string | URL JSON Schema для автодополнения редактора и валидации. Claude Code игнорирует это поле при загрузке. |
description |
string | Краткое описание marketplace |
version |
string | Версия манифеста marketplace |
metadata.pluginRoot |
string | Каталог, в котором Claude Code разрешает имена источников плагинов без пути. См. Относительные пути. Требуется Claude Code v2.1.239 или позже. |
allowCrossMarketplaceDependenciesOn |
array | Другие marketplace, на которые плагины в этом marketplace могут зависеть. Зависимости от marketplace, не указанного здесь, блокируются при установке. См. Зависимость от плагина из другого marketplace. |
renames |
object | Карта от прежнего имени плагина name к его текущему имени или к null, если плагин был удален. Позволяет существующим пользователям автоматически мигрировать при переименовании или удалении записи в plugins. См. Переименование или удаление плагина. Требуется Claude Code v2.1.193 или позже. |
description и version также принимаются в metadata для обратной совместимости.
Записи плагинов
Каждая запись плагина в массиве plugins описывает плагин и место его размещения. Вы можете включить любое поле из схемы манифеста плагина, такое как description, version, author, commands и hooks, плюс эти поля, специфичные для marketplace: source, category, tags, strict, relevance, headers и headersHelper.
Обязательные поля
| Поле | Тип | Описание |
|---|---|---|
name |
string | Идентификатор плагина в kebab-case без пробелов, управляющих символов или символов двунаправленного форматирования. Это открытое поле: пользователи видят его при установке (например, /plugin install my-plugin@marketplace). |
source |
string|object | Откуда получить плагин (см. Источники плагинов ниже) |
Необязательные поля плагина
Стандартные поля метаданных:
| Поле | Тип | Описание |
|---|---|---|
displayName |
string | Удобочитаемое имя, отображаемое в интерфейсе. Когда ни запись, ни plugin.json плагина не устанавливают его, пользователи видят name плагина. Может содержать пробелы и любой регистр. Не используется для пространства имён или поиска. |
description |
string | Краткое описание плагина |
version |
string | Версия плагина. Если установлена (здесь или в plugin.json), плагин закреплён на эту строку и пользователи получают обновления только при её изменении. Плагин с источником command не закреплён ни одним из этих полей. Также не закреплён плагин, загруженный на месте из marketplace, добавленного как локальный каталог. Если версия не установлена ни в одном месте, она берётся из следующего источника в управлении версиями. |
author |
object | Информация об авторе плагина (name обязательно; email и url необязательны) |
homepage |
string | Домашняя страница плагина или URL документации |
repository |
string | URL репозитория исходного кода |
license |
string | Идентификатор лицензии SPDX (например, MIT, Apache-2.0) |
keywords |
array | Теги для обнаружения и категоризации плагина |
metadata |
object | Свободный объект для ваших собственных полей, таких как данные о правах или каталога. Claude Code его не читает. До версии v2.1.222 claude plugin validate сообщал ключ как нераспознанное поле. |
category |
string | Категория плагина для организации |
tags |
array | Теги для поиска |
strict |
boolean | Контролирует, является ли plugin.json авторитетом для определений компонентов (по умолчанию: true). См. Строгий режим ниже. |
relevance |
object | Сигналы, которые говорят Claude Code, когда предложить этот плагин пользователям. Действует только для marketplace, которые администратор добавляет в список разрешённых в управляемых параметрах. См. Рекомендовать плагины для вашей организации. |
defaultEnabled |
boolean | Включен ли плагин после установки (по умолчанию: true). Установите значение false, чтобы установить плагин отключённым до тех пор, пока пользователь не согласится. Имеет приоритет над тем же полем в plugin.json плагина. См. Включение по умолчанию. |
И запись, и собственный plugin.json плагина могут устанавливать поля отображения displayName, description, author, homepage, repository, license и keywords. В списках плагинов и деталях до и после установки:
- Для поля, которое вы установили в записи, пользователи видят значение записи, даже если
plugin.jsonустанавливает другое значение. - Для поля, которое запись оставляет неустановленным, пользователи видят значение из
plugin.json.
До установки Claude Code может читать plugin.json только для записей с источником относительного пути, чьи файлы плагина находятся внутри самого marketplace. Для записи с любым другим типом источника пользователи видят только собственные поля записи до установки плагина.
Поля конфигурации компонентов:
| Поле | Тип | Описание |
|---|---|---|
skills |
string|array | Пользовательские пути к каталогам skills, содержащим <name>/SKILL.md |
commands |
string|array | Пользовательские пути к плоским файлам .md skills или каталогам |
agents |
string|array | Пользовательские пути к файлам агентов |
hooks |
string|object | Конфигурация пользовательских hooks или путь к файлу hooks |
mcpServers |
string|object | Конфигурации MCP сервера или путь к конфигурации MCP |
lspServers |
string|object | Конфигурации LSP сервера или путь к конфигурации LSP |
Поля аутентификации архива:
Установите их, когда запись имеет источник archive на сервере, требующем учётные данные.
| Поле | Тип | Описание |
|---|---|---|
headers |
object | HTTP заголовки, которые Claude Code отправляет при загрузке архива этой записи. Переопределяет заголовки marketplace с тем же именем. Требует Claude Code v2.1.238 или позже. |
headersHelper |
string | Команда, которая выводит HTTP заголовки для загрузки архива этой записи как один JSON объект, для учётных данных, которые истекают. См. Аутентификация загрузок архива. Запись также должна установить "strict": false. Требует Claude Code v2.1.238 или позже. |
Источники плагинов
Источники плагинов указывают Claude Code, откуда получить каждый отдельный плагин, указанный в вашем marketplace. Они устанавливаются в поле source каждой записи плагина в marketplace.json.
Claude Code копирует каждый установленный плагин в локальный кэш плагинов с версией в ~/.claude/plugins/cache, за исключением случаев, когда плагин загружается на месте. command источник в режиме link загружается на месте, как и относительный путь источника из marketplace, добавленного из локального каталога. Claude Code также устанавливает подходящие зависимости пакетов Node.js плагина в кэшированную копию. См. Plugin caching and file resolution для того, как плагин, загруженный на месте из marketplace локального каталога, получает ваши правки.
| Источник | Тип | Поля | Примечания |
|---|---|---|---|
| Относительный путь | string (например, "./my-plugin") |
none | Локальный каталог в репозитории marketplace. Должен начинаться с ./, если вы не напишете простое имя под metadata.pluginRoot. Claude Code разрешает путь относительно корня marketplace, а не каталога .claude-plugin/ |
github |
object | repo, ref?, sha? |
|
url |
object | url, ref?, sha? |
Источник URL Git |
git-subdir |
object | url, path, ref?, sha? |
Подкаталог в репозитории Git. Клонирует разреженно, чтобы минимизировать пропускную способность для монорепозиториев |
npm |
object | package, version?, registry? |
npm пакет, загруженный с вашим npm клиентом и распакованный без запуска скриптов установки |
archive |
object | url, sha256? |
ZIP-архив, загруженный через HTTPS. Работает без git или npm на машине пользователя. Требует Claude Code v2.1.224 или позже |
command |
object | command, timeout?, mode? |
Каталог плагина, созданный путем запуска локальной команды, переустанавливается один раз за сеанс для получения изменений. Требует Claude Code v2.1.229 или позже |
Источники marketplace и источники плагинов: Это разные концепции, которые контролируют разные вещи.
- Источник marketplace: откуда получить сам каталог
marketplace.json. Устанавливается, когда пользователи запускают/plugin marketplace addили в параметрахextraKnownMarketplaces. Источники marketplace на основе Git поддерживаютref(ветка/тег), но неsha. - Источник плагина: откуда получить отдельный плагин, указанный в marketplace. Устанавливается в поле
sourceкаждой записи плагина внутриmarketplace.json. Источники плагинов на основе Git поддерживают какref(ветка/тег), так иsha(точный коммит).
Например, marketplace, размещенный в acme-corp/plugin-catalog (источник marketplace), может перечислять плагин, полученный из acme-corp/code-formatter (источник плагина). Источник marketplace и источник плагина указывают на разные репозитории и закреплены независимо.
Типы источников на основе Git ниже — это github, url и git-subdir. Когда оба ref и sha установлены на любом из них, sha является эффективным закреплением. Claude Code получает и проверяет закрепленный коммит напрямую.
На большинстве хостов Git, включая GitHub, GitLab и Bitbucket, это означает, что установка успешна даже если ветка или тег, названные ref, были удалены выше по течению, при условии, что коммит все еще доступен из репозитория. Некоторые серверы, такие как AWS CodeCommit, не поддерживают получение коммитов по SHA. На этих серверах ref все еще должен существовать и закрепленный коммит должен быть доступен из него.
Если вы распространяете плагины через Organization settings > Plugins, разрешены только некоторые типы источников. См. Распространение через параметры организации.
Относительные пути
Для плагинов в одном репозитории используйте путь, начинающийся с ./:
{
"name": "my-plugin",
"source": "./plugins/my-plugin"
}
Пути разрешаются относительно корня marketplace, который является каталогом, содержащим .claude-plugin/. Источник ./plugins/my-plugin поэтому указывает на <repo>/plugins/my-plugin, даже если marketplace.json находится в <repo>/.claude-plugin/marketplace.json. Не используйте ../ для ссылки на пути вне корня marketplace. На macOS и Linux Claude Code отказывает запись пути с обратной косой чертой где-либо после начального ./, поэтому пишите разделители как / на каждой платформе.
Простое имя — это одно имя каталога без /, например "formatter". Чтобы писать простые имена вместо путей ./, установите metadata.pluginRoot на каталог, в котором они разрешаются. С "pluginRoot": "./plugins", Claude Code разрешает "source": "formatter" на ./plugins/formatter. Требует Claude Code v2.1.239 или позже.
metadata.pluginRoot должен быть относительным путем внутри marketplace. Claude Code игнорирует его для источника, который уже начинается с ./. Источник, содержащий /, например team-a/formatter, не является простым именем и все еще нуждается в префиксе ./, даже когда установлен metadata.pluginRoot.
Claude Code разрешает относительные пути относительно локальной копии marketplace, поэтому они работают, когда пользователи добавляют ваш marketplace из источника Git или локального каталога. Если пользователи добавляют ваш marketplace через прямой URL к файлу marketplace.json, относительные пути не будут разрешены, потому что загружается только этот файл. Для распространения на основе URL используйте вместо этого любой другой источник плагина. См. Устранение неполадок для получения подробной информации.
Репозитории GitHub
{
"name": "github-plugin",
"source": {
"source": "github",
"repo": "owner/plugin-repo"
}
}
Вы можете закрепить определенную ветку, тег или коммит:
{
"name": "github-plugin",
"source": {
"source": "github",
"repo": "owner/plugin-repo",
"ref": "v2.0.0",
"sha": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"
}
}
| Поле | Тип | Описание |
|---|---|---|
repo |
string | Обязательно. Репозиторий GitHub в формате owner/repo |
ref |
string | Опционально. Ветка или тег Git (по умолчанию ветка по умолчанию репозитория) |
sha |
string | Опционально. Полный 40-символьный SHA коммита Git для закрепления на точной версии |
Репозитории Git
{
"name": "git-plugin",
"source": {
"source": "url",
"url": "https://gitlab.com/team/plugin.git"
}
}
Вы можете закрепить определенную ветку, тег или коммит:
{
"name": "git-plugin",
"source": {
"source": "url",
"url": "https://gitlab.com/team/plugin.git",
"ref": "main",
"sha": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"
}
}
| Поле | Тип | Описание |
|---|---|---|
url |
string | Обязательно. Полный URL репозитория Git (https:// или git@). Суффикс .git опционален, поэтому URL Azure DevOps и AWS CodeCommit без суффикса работают |
ref |
string | Опционально. Ветка или тег Git (по умолчанию ветка по умолчанию репозитория) |
sha |
string | Опционально. Полный 40-символьный SHA коммита Git для закрепления на точной версии |
Подкаталоги Git
Используйте git-subdir для указания плагина, который находится в подкаталоге репозитория Git. Claude Code использует разреженный, частичный клон для получения только подкаталога, минимизируя пропускную способность для больших монорепозиториев.
{
"name": "my-plugin",
"source": {
"source": "git-subdir",
"url": "https://github.com/acme-corp/monorepo.git",
"path": "tools/claude-plugin"
}
}
Вы можете закрепить определенную ветку, тег или коммит:
{
"name": "my-plugin",
"source": {
"source": "git-subdir",
"url": "https://github.com/acme-corp/monorepo.git",
"path": "tools/claude-plugin",
"ref": "v2.0.0",
"sha": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"
}
}
Поле url также принимает сокращение GitHub (owner/repo) или SSH URL (git@github.com:owner/repo.git).
| Поле | Тип | Описание |
|---|---|---|
url |
string | Обязательно. URL репозитория Git, сокращение GitHub owner/repo или SSH URL |
path |
string | Обязательно. Путь подкаталога в репозитории, содержащий плагин (например, "tools/claude-plugin") |
ref |
string | Опционально. Ветка или тег Git (по умолчанию ветка по умолчанию репозитория) |
sha |
string | Опционально. Полный 40-символьный SHA коммита Git для закрепления на точной версии |
Пакеты npm
Источник npm может назвать любой пакет в общедоступном реестре npm или в частном реестре, который размещает ваша команда. Claude Code разрешает пакет с вашим npm клиентом, загружает tarball и распаковывает его в кэш плагинов.
Скрипты установки пакета, такие как preinstall или postinstall, никогда не запускаются, и его зависимости не устанавливаются во время загрузки.
Если пакет поставляет поддерживаемый файл блокировки рядом с его package.json, Claude Code устанавливает эти зависимости пакетов Node.js в отдельном шаге, также с отключенными скриптами. В противном случае опубликуйте плагин со всем, что ему нужно, уже встроенным. MCP сервер, которому нужны другие пакеты, может запуститься через npx, который устанавливает их при первом запуске.
{
"name": "my-npm-plugin",
"source": {
"source": "npm",
"package": "@acme/claude-plugin"
}
}
Чтобы закрепить определенную версию, добавьте поле version:
{
"name": "my-npm-plugin",
"source": {
"source": "npm",
"package": "@acme/claude-plugin",
"version": "2.1.0"
}
}
Для установки из частного или внутреннего реестра добавьте поле registry:
{
"name": "my-npm-plugin",
"source": {
"source": "npm",
"package": "@acme/claude-plugin",
"version": "^2.0.0",
"registry": "https://npm.example.com"
}
}
| Поле | Тип | Описание |
|---|---|---|
package |
string | Обязательно. Имя пакета или область пакета (например, @org/plugin) |
version |
string | Опционально. Версия или диапазон версий (например, 2.1.0, ^2.0.0, ~1.5.0) |
registry |
string | Опционально. Пользовательский URL реестра npm. По умолчанию системный реестр npm (обычно npmjs.org) |
ZIP-архивы
Используйте archive для распространения плагина как ZIP-файла, который Claude Code загружает через HTTPS, поэтому установки работают без git или npm на машине пользователя. Разместите файл на любом статическом файловом сервере или хранилище артефактов, например в корзине S3, в универсальном хранилище Artifactory или nginx. Требует Claude Code v2.1.224 или позже. На версиях v2.1.120 через v2.1.223 установка плагина не удается с This plugin uses a source type your Claude Code version does not support. Update Claude Code and try again.; на более старых версиях marketplace, содержащий запись archive, полностью не загружается.
Эта запись устанавливает плагин из ZIP-файла на сервере артефактов:
{
"name": "my-plugin",
"source": {
"source": "archive",
"url": "https://artifacts.example.com/claude-plugins/my-plugin-2.1.0.zip"
}
}
Когда вы создаете ZIP-файл, вы можете заархивировать содержимое плагина напрямую или заархивировать саму папку плагина. Claude Code ищет .claude-plugin/ в верхней части архива, затем внутри одной папки верхнего уровня, поэтому оба макета устанавливаются:
my-plugin.zip my-plugin.zip
├── .claude-plugin/ └── my-plugin/
│ └── plugin.json ├── .claude-plugin/
└── commands/ │ └── plugin.json
└── commands/
Claude Code не ищет глубже одной папки, поэтому плагин, вложенный дальше, не устанавливается. Claude Code отказывает архивам размером более 256 МиБ.
Чтобы закрепить точный файл, добавьте поле sha256 с дайджестом архива:
{
"name": "my-plugin",
"source": {
"source": "archive",
"url": "https://artifacts.example.com/claude-plugins/my-plugin-2.1.0.zip",
"sha256": "6bfa50e3d2e00c052b46abe51fff89346ac803e45771f76dcf6df1ab74cca5e1"
}
}
Если загруженный файл не совпадает с закреплением, Claude Code отказывает установку и сообщает Plugin archive integrity check failed.
Источники архивов принимают эти поля:
| Поле | Тип | Описание |
|---|---|---|
url |
string | Обязательно. HTTPS URL ZIP-архива. Claude Code отклоняет http:// URL, а также loopback, link-local и cloud-metadata хосты. Каждый переход перенаправления должен удовлетворять тем же правилам, или Claude Code отказывает загрузку |
sha256 |
string | Опционально. SHA-256 дайджест архива как 64 шестнадцатеричных символа, прописные или строчные. Claude Code проверяет каждую загрузку против него и отказывает установку при несовпадении |
Дайджест sha256 также служит версией плагина, когда ни plugin.json, ни запись marketplace не объявляют версию. См. Управление версиями. Если вы объявляете version, эта строка версии является сигналом обновления, поэтому после изменения ZIP-файла и его дайджеста также увеличьте версию, или пользователи сохранят кэшированную копию.
Аутентификация загрузок архивов
Чтобы аутентифицировать загрузку архива, например загрузку из частного реестра, установите HTTP-заголовки, которые Claude Code отправляет с ней. Установите headers на источник url marketplace, который вы зарегистрировали, например запись extraKnownMarketplaces. На Claude Code v2.1.238 или позже вы можете установить его на запись плагина вместо этого, рядом с source.
Если значение, которое вы поместили бы в headers, недолговечно, например токен, который ваш реестр создает по запросу, установите вместо этого команду headersHelper в том же месте. Claude Code запускает команду и отправляет объект JSON, который она печатает, как заголовки этого места. Требует Claude Code v2.1.238 или позже.
Место, которое вы выбираете, определяет, какие загрузки получают заголовки и когда Claude Code запускает команду:
| Место | Загрузки, которые получают заголовки | Когда Claude Code запускает headersHelper, установленный там |
|---|---|---|
Источник url marketplace |
Загрузки архивов на происхождении URL marketplace, означающие одну и ту же схему, хост и порт | Перед каждой выборкой marketplace.json marketplace и перед каждой загрузкой архива на этом происхождении. Claude Code повторно использует вывод одного запуска до 60 секунд |
| Запись плагина | Только загрузка этой записи | Только когда пользователь устанавливает или обновляет этот один плагин отдельно и принимает команду |
Где оба места устанавливают заголовок с одним и тем же именем, Claude Code отправляет значение записи. В одном месте заголовок, который печатает команда, переопределяет заголовок с одним и тем же именем, указанный в headers.
Добавьте headersHelper к записи плагина
Эта запись устанавливает headersHelper рядом с source. Она также устанавливает "strict": false, что Claude Code требует от записи marketplace.json, которая устанавливает headersHelper. С "strict": false, запись marketplace является полным определением плагина, поэтому пользователь может просмотреть, что содержит плагин, перед принятием команды:
{
"name": "my-plugin",
"description": "Formatting commands for internal services",
"strict": false,
"commands": "./commands",
"source": {
"source": "archive",
"url": "https://registry.example.com/plugins/my-plugin-2.1.0.zip"
},
"headersHelper": "/opt/bin/mint-registry-token.sh"
}
Чтобы проверить запись, запустите claude plugin install my-plugin@your-marketplace. Claude Code показывает вам команду и URL архива и загружает ZIP-файл после того, как вы примете.
До v2.1.238 Claude Code загружал архив записи без её headers или headersHelper, поэтому установка, которая полагалась на них, не удавалась с HTTP 401 while downloading plugin archive from, за которым следует URL, с кодом состояния реестра вместо 401.
Напишите команду headersHelper
Независимо от того, устанавливаете ли вы headersHelper на источник url marketplace или на запись плагина, напишите команду, чтобы она соответствовала этим требованиям:
- Текст команды: максимум 500 символов печатного ASCII, без прогонов из четырех или более пробелов.
- Вывод: печать одного объекта JSON имен заголовков и строковых значений на stdout, затем выход 0 в течение 10 секунд.
- Shell и рабочий каталог: Claude Code запускает команду через
shилиcmd.exeна Windows из каталога конфигурации,~/.claudeилиCLAUDE_CONFIG_DIR. Дайте абсолютный путь или команду наPATH, потому что относительный путь разрешается относительно этого каталога, а не проекта пользователя. - Переменные, которые Claude Code удаляет: из окружения команды, установленной в записи
marketplace.jsonили в.claude/settings.jsonили.claude/settings.local.jsonпроекта, Claude Code удаляет каждую переменную, имя которой содержит слово, такое какTOKEN,SECRET,KEYилиAUTH, включаяANTHROPIC_API_KEY. Claude Code не применяет это удаление к команде, установленной в пользовательских параметрах, файле--settingsили управляемых параметрах. - Переменные, которые Claude Code устанавливает:
CLAUDE_CODE_MARKETPLACE_URLиCLAUDE_CODE_MARKETPLACE_NAMEдля команды источникаurl, иCLAUDE_CODE_PLUGIN_NAMEиCLAUDE_CODE_PLUGIN_ARCHIVE_URLдля команды записи.CLAUDE_CODE_MARKETPLACE_NAMEне установлена при первой выборке после того, как пользователь добавит marketplace по URL, потому что эта выборка — это то, что предоставляет имя.
Команда, которая создает токен носителя, печатает объект, подобный этому:
{"Authorization": "Bearer eyJhbGciOiJSUzI1NiJ9"}
Когда Claude Code пропускает команду headersHelper или отбрасывает её вывод
Claude Code не запускает команду headersHelper или отбрасывает заголовки, которые пришли из headers или из вывода команды, в этих ситуациях:
- Команда не удается: если команда выходит с ненулевым кодом, работает более 10 секунд или печатает что-либо, кроме объекта JSON строковых значений, Claude Code не выполняет выборку или загрузку, для которой она запустила команду.
- URL marketplace не начинается с
https://: Claude Code не запускает команду этого источникаurlи отправляет только заголовки, указанные в его полеheaders. - Перенаправление покидает происхождение: когда загрузка перенаправляется с происхождения URL архива, Claude Code отбрасывает значения
headersи вывод команды как источникаurlmarketplace, так и записи плагина. - Запись устанавливает заголовок маршрутизации или идентификации: Claude Code отбрасывает имена маршрутизации запросов и идентификации клиента, такие как
Host,CookieиX-Forwarded-*изheadersзаписи и вывода команды, и сохраняет имена аутентификации, такие какAuthorization. Claude Code фильтрует каждую записьmarketplace.jsonтаким образом, и встроенную запись параметров в зависимости от того, какой файл её объявляет. - Команда установлена в параметрах каталога
--add-dir: Claude Code игнорирует её, на источникеurlи на встроенной записи плагина одинаково, и отправляет толькоheadersэтого файла. - Управляемые параметры блокируют команду: установка
disableCommandPluginSourcesнаtrueблокирует командыheadersHelper, иallowManagedHooksOnlyтакже блокирует их, еслиdisableCommandPluginSourcesявно неfalse. При любом блокировании Claude Code все еще запускает команду для marketplace, который сами управляемые параметры объявляют.
Как пользователи принимают команду headersHelper
Пользователь принимает команду записи плагина каждый раз, когда устанавливает или обновляет этот один плагин отдельно, из собственного представления плагина в /plugin или с claude plugin install или claude plugin update. Claude Code показывает команду и URL архива и запускает команду только после того, как пользователь примет.
В неинтерактивной оболочке передайте --yes для принятия команды. Чтобы принять только команду, которую предыдущий запуск --json отобразил, передайте --accept-command с sha256, который запуск сообщил.
Claude Code запускает только команду, которую он показал, для URL архива, который он показал. Если команда записи или URL архива изменились между тем, Claude Code отказывает установку или обновление. Изменение только в строке запроса не считается.
Установки и обновления, которые отказывают команде вместо запроса
При любой операции, отличной от установки или обновления одного плагина, Claude Code не запускает команду записи и не загружает её архив, поэтому плагин остается в установленной версии или остается неустановленным. То, что видит пользователь, зависит от операции:
- Установка нескольких плагинов одновременно, из предложения плагина или как зависимость другого плагина: Claude Code отказывает плагину, который имеет команду, и указывает пользователю на собственное представление этого плагина в
/plugin. Другие плагины в массовой установке все еще устанавливаются. Плагин, который зависит от отказанного плагина, не устанавливается, пока пользователь не установит отказанный плагин отдельно. - Фоновое автообновление или запуск сеанса для плагина, архив которого никогда не был загружен: Claude Code перечисляет плагин на вкладке
/pluginErrors, чтобы пользователь знал, что нужно установить или обновить его вручную. Автообновление, которое находит запись, по-прежнему объявляет установленную версию, не перечисляет ничего.
Когда запускается команда headersHelper источника marketplace `url`
headersHelper источника url marketplace объявляется в файле параметров, например в записи extraKnownMarketplaces, а не в каталоге, который публикует marketplace, поэтому Claude Code не просит пользователя принять её при каждой установке или обновлении. Файл параметров, который её объявляет, определяет, когда Claude Code её запускает:
| Файл параметров | Когда Claude Code запускает команду |
|---|---|
Пользовательские параметры, файл --settings или управляемый файл параметров на машине |
Без запроса, включая во время фонового обновления marketplace |
.claude/settings.json или .claude/settings.local.json проекта |
Только после того, как пользователь примет диалог доверия рабочей области для этой папки. Сеанс -p или SDK не считается принятием, и ни доверие, предоставленное родительской папке |
| Управляемые параметры сервера | Только после того, как пользователь одобрит доставленные параметры в диалоге одобрения безопасности |
В сеансе -p или SDK Claude Code не может показать диалог одобрения безопасности. Он применяет другие доставленные параметры, но выборка marketplace и любая загрузка архива, которая нуждается в команде, не удается, пока пользователь не одобрит в интерактивном сеансе.
Для встроенной записи плагина в одном из этих файлов Claude Code требует того же доверия папки или одобрения параметров, что и для команды уровня marketplace в этом файле, и пользователь также принимает команду записи при каждой установке или обновлении.
Источники команд
Используйте command, когда локально установленный инструмент создает каталог плагина, например IDE, который отображает свой плагин для выбранной в данный момент цепочки инструментов. Claude Code запускает команду, когда пользователь устанавливает плагин, и переустанавливает её в фоне один раз за сеанс, поэтому ваши пользователи получают изменённый вывод инструмента без переустановки. Требует Claude Code v2.1.229 или позже. На v2.1.120 через v2.1.228 установка плагина не удается с This plugin uses a source type your Claude Code version does not support. Update Claude Code and try again., и на более старых версиях весь marketplace не загружается.
Эта запись устанавливает плагин из любого каталога, который печатает инструмент:
{
"name": "my-plugin",
"source": {
"source": "command",
"command": "my-tool claude-plugin-path"
}
}
Claude Code запускает команду через оболочку платформы, sh на macOS и Linux или cmd.exe на Windows, из домашнего каталога пользователя. Команда должна печать ровно одну строку на stdout и выход с кодом 0. Эта строка — абсолютный путь каталога, который содержит полный плагин к моменту выхода команды, и путь может изменяться между запусками.
Claude Code останавливает команду, которая работает дольше, чем timeout секунд, и установка или обновление не удается. Claude Code также отказывает печатанному пути в этих случаях, и установка или обновление не удается таким же образом:
- Каталог не имеет содержимого плагина на его верхнем уровне, например каталога
.claude-plugin/или каталогаskills/,commands/,agents/илиhooks/ - Каталог — это тот, в котором был запущен Claude Code, или один из его родителей
- На Windows путь — это путь UNC
Источники команд принимают эти поля:
| Поле | Тип | Описание |
|---|---|---|
command |
string | Обязательно. Команда оболочки, которая печатает абсолютный путь каталога плагина как одну строку на stdout и выходит 0. Должна быть печатным ASCII, максимум 500 символов, без прогонов из четырех или более пробелов, чтобы пользователи могли просмотреть всю команду, которую их просят принять |
timeout |
number | Опционально. Целое число секунд для ожидания команды перед отказом (по умолчанию: 60, максимум: 600) |
mode |
string | Опционально. "copy" (по умолчанию) копирует печатанный каталог в кэш плагинов. "link" использует печатанный каталог на месте. См. Режим копирования и режим link |
Режим копирования и режим link
С "mode": "copy" по умолчанию Claude Code копирует печатанный каталог в кэш плагинов с версией и выводит версию плагина из хеша содержимого каталога. Ваш инструмент может удалить или переписать каталог после выхода команды, и переустановка, которая создает идентичное содержимое, считается актуальной. Claude Code отказывает установку каталога размером более 256 МиБ или содержащего более 20 000 записей.
Установите "mode": "link" для больших каталогов плагинов, которые не должны копироваться, например для отображаемого экспорта SDK. Claude Code заполняет запись кэша плагина ссылкой на каждую запись верхнего уровня печатанного каталога и использует файлы на месте, поэтому ничего не копируется, содержимое файлов не хешируется, и ограничения размера не применяются. Установка не удается, если запись верхнего уровня — это символическая ссылка, которая указывает вне печатанного каталога. Claude Code также пропускает установку зависимостей пакета Node.js для плагина в режиме link, поэтому печатайте каталог, который уже содержит любые node_modules, которые нужны плагину.
Сохраняйте печатанный каталог на месте столько, сколько плагин остается установленным, потому что Claude Code загружает плагин через эти ссылки при каждом запуске. Claude Code выводит версию плагина из реального пути печатанного каталога и его записей верхнего уровня, а не файлов внутри, поэтому печатайте другой путь для сигнала нового содержимого. В сеансе, запущенном в печатанном каталоге или где-либо ниже, Claude Code вообще не загружает плагин.
Claude Code не поддерживает режим link на Windows и отказывает установку плагина в режиме link там. Объявите "mode": "copy" вместо этого.
Как пользователи принимают команду
Claude Code запускает вашу команду на машине пользователя, поэтому она привязывает каждый запуск к явному принятию пользователем:
- Когда пользователи устанавливают плагин из его экрана деталей в
/pluginили устанавливают или обновляют его сclaude plugin installилиclaude plugin updateв интерактивном терминале, Claude Code сначала показывает им точную строку команды и записывает принятую команду для этой установки.claude plugin update, который может продолжаться при принятии той же команды, не показывает ничего. - В неинтерактивной оболочке, например в скрипте подготовки, передайте
--yesвclaude plugin installилиclaude plugin updateдля принятия команды, которую она печатает. Чтобы принять только команду, которую предыдущий запуск--jsonотобразил, передайте--accept-commandсsha256, который запуск сообщил. - Каждый другой путь запускает только команду, которую пользователь уже принял. Это включает обновления, запущенные из
/plugin, и фоновые запуски, описанные в Когда Claude Code переустанавливает команду. Когда ничего не было принято, Claude Code отказывает запустить команду и говорит пользователю, как её просмотреть. Claude Code никогда не устанавливает плагин с источником команды как зависимость другого плагина, поэтому пользователи устанавливают его сами в первую очередь. - Если вы измените
commandзаписи или переключите еёmode, пользователи сохраняют версию, которую они уже имеют, и Claude Code останавливает переустановку команды. В интерактивных сеансах вкладка/pluginErrors показывает новую команду, пока пользователь не просмотрит и не примет её, запустивclaude plugin update <plugin>@<marketplace>.
Администраторы могут блокировать источники команд во всей организации с помощью управляемого параметра disableCommandPluginSources. Если организация устанавливает allowManagedHooksOnly, Claude Code блокирует источники команд по умолчанию.
Когда Claude Code переустанавливает команду
Печатанный каталог отражает состояние инструмента на момент запуска команды, поэтому Claude Code запускает команду снова в эти моменты:
- Каждый раз, когда пользователь устанавливает или обновляет плагин
- Один раз за сеанс для каждого включённого плагина с источником команды, в фоне, вскоре после запуска сеанса. Этот запуск не проходит через автообновление marketplace, поэтому не зависит от параметра автообновления marketplace
- При запуске или на
/reload-plugins, когда установленная версия включённого плагина отсутствует в кэше плагинов
Claude Code пропускает два фоновых запуска, когда пользователь устанавливает CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC. Явные установки и обновления все еще запускают команду с этой переменной установленной.
Когда хешированный вывод команды изменился, Claude Code устанавливает результат как новую версию и перезагружает его в работающем интерактивном сеансе, переключая те же компоненты, которые переключает /reload-plugins. Пользователь видит уведомление, что плагин был перезагружен. Если переустановка на месте аннулирует кэш подсказок сеанса, Claude Code вместо этого предлагает пользователю запустить /reload-plugins, который предупреждает о стоимости кэша и применяется при переустановке с --force.
Расширенные записи плагинов
Этот пример показывает запись плагина, использующую множество дополнительных полей, включая пользовательские пути для команд, агентов, hooks и MCP servers:
{
"name": "enterprise-tools",
"source": {
"source": "github",
"repo": "company/enterprise-plugin"
},
"description": "Инструменты автоматизации корпоративного рабочего процесса",
"version": "2.1.0",
"author": {
"name": "Enterprise Team",
"email": "enterprise@example.com"
},
"homepage": "https://docs.example.com/plugins/enterprise-tools",
"repository": "https://github.com/company/enterprise-plugin",
"license": "MIT",
"keywords": ["enterprise", "workflow", "automation"],
"category": "productivity",
"commands": [
"./commands/core/",
"./commands/enterprise/",
"./commands/experimental/preview.md"
],
"agents": ["./agents/security-reviewer.md", "./agents/compliance-checker.md"],
"hooks": {
"PostToolUse": [
{
"matcher": "Write|Edit",
"hooks": [
{
"type": "command",
"command": "${CLAUDE_PLUGIN_ROOT}/scripts/validate.sh"
}
]
}
]
},
"mcpServers": {
"enterprise-db": {
"command": "${CLAUDE_PLUGIN_ROOT}/servers/db-server",
"args": ["--config", "${CLAUDE_PLUGIN_ROOT}/config.json"]
}
},
"strict": false
}
Ключевые моменты, на которые следует обратить внимание:
commandsиagents: вы можете указать несколько каталогов или отдельные файлы. Пути относительны к корню плагина и должны оставаться внутри него.- Claude Code отказывает путь, который разрешается вне каталога плагина, например
./../shared.md, с ошибкойpath escapes plugin directory, и все еще загружает плагин без этого компонента
- Claude Code отказывает путь, который разрешается вне каталога плагина, например
${CLAUDE_PLUGIN_ROOT}: используйте эту переменную в командах hooks и конфигурациях MCP server для ссылки на файлы в каталоге установки плагина.- См. таблицу подстановки для того, какие поля конфигурации подставляют её для каждого типа сервера
- Для зависимостей или состояния, которое должно сохраняться при обновлениях плагина, используйте
${CLAUDE_PLUGIN_DATA}вместо этого
strict: false: поскольку это установлено на false, плагину не нужен собственныйplugin.json. Запись marketplace определяет все. См. Strict mode ниже.
По умолчанию skills плагина загружаются из каталога skills/ в его source. Пути, указанные в поле skills, добавляются к этому сканированию:
"skills": ["./skills/", "./extra-skills/"]
Когда несколько записей плагинов совместно используют один каталог skills/ в корне marketplace (source: "./"), вместо этого указывайте конкретные подкаталоги, чтобы каждая запись загружала только свои собственные skills:
"source": "./",
"skills": ["./skills/code-review", "./skills/docs"]
С источником в корне marketplace указанные пути являются полным набором для этой записи, и другие каталоги в общем каталоге skills/ не загружаются. Указание самого ./skills/ или корня плагина сохраняет полное сканирование. Если ни один из указанных путей не существует, вместо этого запускается сканирование по умолчанию.
Strict mode
Поле strict контролирует, является ли plugin.json авторитетом для определений компонентов (skills, агенты, hooks, MCP servers, стили вывода).
| Значение | Поведение |
|---|---|
true (по умолчанию) |
plugin.json является авторитетом. Запись marketplace может дополнить его дополнительными компонентами, и оба источника объединяются. |
false |
Запись marketplace является полным определением. Если плагин также имеет plugin.json, который объявляет компоненты, это конфликт и плагин не загружается. |
Когда использовать каждый режим:
strict: true: плагин имеет собственныйplugin.jsonи управляет своими компонентами. Запись marketplace может добавить дополнительные skills или hooks сверху. Это значение по умолчанию и работает для большинства плагинов.strict: false: оператор marketplace хочет полный контроль. Репозиторий плагина предоставляет необработанные файлы, и запись marketplace определяет, какие из этих файлов открыты как skills, агенты, hooks и т. д. Полезно, когда оператор marketplace переструктурирует или курирует компоненты плагина иначе, чем предполагал автор плагина.
Размещение и распространение marketplace
Когда пользователи добавляют marketplace, размещенный в репозитории Git, или устанавливают плагин на основе Git из его списка, Claude Code клонирует этот репозиторий marketplace или плагина на машину пользователя. Клон никогда не загружает содержимое Git LFS, поэтому файлы, отслеживаемые LFS, поступают как файлы-указатели. Держите файлы, которые нужны вашим плагинам, вне LFS.
Размещение на GitHub (рекомендуется)
GitHub обеспечивает рекомендуемый способ размещения и распространения marketplace:
- Создание репозитория: установите новый репозиторий для вашего marketplace
- Добавление файла marketplace: создайте
.claude-plugin/marketplace.jsonс определениями ваших плагинов - Совместное использование с командами: пользователи добавляют ваш marketplace с помощью
/plugin marketplace add owner/repo
Преимущества: встроенное управление версиями, отслеживание проблем и функции совместной работы команды.
Размещение на других сервисах Git
Любой сервис хостинга Git работает, например GitLab, Bitbucket и самостоятельно размещаемые серверы. Пользователи добавляют с полным URL репозитория:
/plugin marketplace add https://gitlab.com/company/plugins.git
Частные репозитории
Claude Code поддерживает установку плагинов из частных репозиториев. Если вы распространяете ваш marketplace через Organization settings > Plugins вместо этого, ваши учетные данные Git не задействованы: организационная синхронизация читает репозиторий marketplace через подключение вашей организации GitHub или GitLab на claude.ai. См. Распространение через параметры организации для информации о том, какие источники плагинов могут быть частными.
Команды, которые вы запускаете
Когда вы запускаете /plugin marketplace add, /plugin install, /plugin update или /plugin marketplace update, Claude Code использует ваши существующие помощники учетных данных Git, поэтому доступ HTTPS через gh auth login, macOS Keychain или git-credential-store работает так же, как в вашем терминале. Доступ SSH работает, пока хост уже находится в вашем файле known_hosts и ключ загружен в ssh-agent, так как Claude Code подавляет интерактивные подсказки SSH для отпечатка хоста и пароля ключа. Сокращение GitHub owner/repo по умолчанию клонирует через SSH; установите CLAUDE_CODE_PLUGIN_PREFER_HTTPS=1, чтобы вместо этого клонировать их через HTTPS.
Фоновые автоматические обновления
Фоновое обновление проверяет удаленное хранилище marketplace на предмет новых коммитов с помощью ваших настроенных помощников учетных данных Git, так же как команды, которые вы запускаете. Для удаленных SSH ключ, загруженный в ssh-agent, аутентифицирует проверку. Claude Code запускает проверку неинтерактивно: он отключает подсказки терминала Git и программы askpass, а также указывает помощникам учетных данных не выводить подсказки. Возможность проверки аутентифицироваться в частном репозитории через HTTPS зависит от вашего помощника:
- Помощник, который может предоставить сохраненные учетные данные без подсказки, аутентифицирует проверку. Git Credential Manager, помощник macOS Keychain и
git-credential-storeработают таким образом, как только они содержат учетные данные для хоста. - Помощник, который должен вас попросить, не может ответить в фоновом режиме. Обновление не удается молча, и существующий checkout остается на месте, поэтому ваши плагины продолжают работать из последнего синхронизированного состояния. Запустите
/plugin marketplace update <name>, чтобы обновить marketplace с вашими учетными данными.
Когда проверка находит checkout в актуальном состоянии, Claude Code оставляет его как есть. Когда проверка находит новые коммиты или не удается, потому что не может достичь или аутентифицироваться на удаленном хранилище, Claude Code клонирует marketplace снова и заменяет новый клон. Если этот клон не удается, существующий checkout остается на месте. Повторное клонирование может истечь на больших репозиториях.
Два параметра делают частные marketplace предсказуемыми:
- Установите
CLAUDE_CODE_PLUGIN_KEEP_MARKETPLACE_ON_FAILURE=1, чтобы сохранить существующий checkout без попытки повторного клонирования, когда фоновая проверка не может достичь или аутентифицироваться на удаленном хранилище. Ваши плагины продолжают работать из последнего синхронизированного состояния, и ручные обновления с/plugin marketplace updateпо-прежнему аутентифицируются с вашими учетными данными. - Настройте помощника учетных данных Git, например с помощью
gh auth setup-gitдля GitHub, чтобы фоновая проверка и повторное клонирование могли аутентифицироваться без подсказок.
Установка токена поставщика, такого как GITHUB_TOKEN, в вашей среде не включает фоновую аутентификацию сама по себе. Токены вступают в силу только через настроенного помощника учетных данных, например помощника CLI gh, который читает GH_TOKEN и GITHUB_TOKEN.
В средах CI/CD настройте помощника учетных данных Git перед установкой плагинов из частных репозиториев. На GitHub Actions экспортируйте токен с доступом для чтения к репозиторию marketplace как GH_TOKEN, затем запустите gh auth setup-git. Токен рабочего процесса по умолчанию может получить доступ только к репозиторию самого рабочего процесса, поэтому частный marketplace в другом репозитории требует личного токена доступа или токена приложения.
Распространение через параметры организации
Если вы распространяете плагины через Organization settings > Plugins в плане Team или Enterprise, применяются эти правила источника:
- На github.com и gitlab.com репозиторий marketplace должен быть частным или внутренним. Организационная синхронизация читает репозиторий через подключение, которое соответствует его хосту:
- github.com: Claude GitHub App
- Ваш хост GitHub Enterprise Server: GitHub Enterprise App вашей организации
- gitlab.com или ваш самостоятельно управляемый экземпляр GitLab: токен доступа в конфигурации GitLab вашей организации для этого хоста
- Каждый источник плагина должен быть типа
github,urlилиgit-subdir, или относительный путь, который начинается с./. Если вы перечисляете плагин по простому имени подmetadata.pluginRoot, организационная синхронизация отклоняет его как неподдерживаемый источник, поэтому напишите путь полностью, например./plugins/deploy-tools. - Источник плагина может быть частным в трех случаях:
- Источник github.com, который совместно использует владельца репозитория marketplace
- Источник на хосте GitHub Enterprise вашей организации с установленным GHE App на репозитории
- Источник
urlилиgit-subdirна том же хосте GitLab, что и репозиторий marketplace. На gitlab.com источник также должен находиться под той же группой верхнего уровня или пространством имен пользователя, что и репозиторий marketplace.
- Любой другой источник плагина должен быть общедоступным репозиторием на github.com, gitlab.com или bitbucket.org, который организационная синхронизация получает без учетных данных. Организационная синхронизация отклоняет источники плагинов на хостах, которые эти правила не охватывают.
См. Manage plugins for your organization для рабочего процесса администратора.
Чтобы включить частные плагины, поместите папки плагинов внутри репозитория marketplace и ссылайтесь на них с помощью относительного пути. Организационная синхронизация упаковывает каждый плагин во время распространения, поэтому пользователи никогда не нуждаются в доступе к отдельному репозиторию источника.
Например, эта запись плагина marketplace.json ссылается на плагин, который вы зафиксировали в plugins/deploy-tools в репозитории marketplace:
{
"name": "deploy-tools",
"source": "./plugins/deploy-tools"
}
Синхронизация marketplace, размещенного на GitLab
Чтобы синхронизировать marketplace с gitlab.com или самостоятельно управляемого экземпляра GitLab, Owner сначала добавляет конфигурацию GitLab для этого хоста в Organization settings > Claude Code. Конфигурации GitLab находятся в публичной бета-версии и применяются только к синхронизации marketplace плагинов. Добавление одной не делает репозитории GitLab доступными в облачных сеансах. См. Manage plugins for your organization для шагов настройки.
Когда вы добавляете marketplace, введите HTTPS URL проекта, например https://gitlab.example.com/platform/claude-plugins. Проекты в вложенных подгруппах работают. Организационная синхронизация читает ветку по умолчанию проекта. Если вы включите Sync automatically, только push в ветку по умолчанию запускают синхронизацию.
Держите исполняемые файлы вне каталога bin верхнего уровня
Не включайте каталог bin/ верхнего уровня в любой плагин, который вы распространяете через параметры организации. claude.ai отклоняет плагин, который имеет его, независимо от того, поступает ли плагин через синхронизацию marketplace или прямую загрузку:
- Синхронизация marketplace: организационная синхронизация отклоняет этот плагин и синхронизирует остальную часть marketplace. Сообщение об ошибке начинается с
Plugin contains a top-level bin/ directory. - Прямая загрузка: если вы загружаете плагин в Organization settings > Plugins вместо этого, claude.ai отклоняет загрузку с тем же сообщением.
Держите исполняемые файлы в другом каталоге, например scripts/, и ссылайтесь на них как ${CLAUDE_PLUGIN_ROOT}/scripts/<name> из ваших skills, hooks или MCP server configs.
Требование marketplace для вашей команды
Вы можете настроить ваш репозиторий так, чтобы Claude Code добавлял ваш marketplace для членов команды один раз, когда они доверяют папке проекта, без отдельного запроса. Добавьте ваш marketplace в .claude/settings.json:
{
"extraKnownMarketplaces": {
"company-tools": {
"source": {
"source": "github",
"repo": "your-org/claude-plugins"
}
}
}
}
Вы также можете указать, какие плагины должны быть включены по умолчанию:
{
"enabledPlugins": {
"code-formatter@company-tools": true,
"deployment-tools@company-tools": true
}
}
Для полных параметров конфигурации см. Plugin settings.
Если вы используете локальный источник directory или file с относительным путем, путь разрешается относительно основного checkout вашего репозитория. Когда вы запускаете Claude Code из git worktree, путь все еще указывает на основной checkout, поэтому все worktrees совместно используют одно и то же расположение marketplace. Состояние marketplace хранится один раз для каждого пользователя в ~/.claude/plugins/known_marketplaces.json, а не для каждого проекта.
Предварительное заполнение плагинов для контейнеров
Для образов контейнеров и сред CI вы можете предварительно заполнить каталог плагинов во время сборки, чтобы Claude Code запускался с уже доступными marketplace и плагинами, без клонирования во время выполнения. Установите переменную окружения CLAUDE_CODE_PLUGIN_SEED_DIR на этот каталог.
Чтобы наслоить несколько каталогов seed, разделите пути с : на Unix или ; на Windows. Claude Code ищет каждый каталог по порядку и использует первый seed, содержащий данный marketplace или кэш плагина.
Каталог seed отражает структуру ~/.claude/plugins:
$CLAUDE_CODE_PLUGIN_SEED_DIR/
known_marketplaces.json
marketplaces/<name>/...
cache/<marketplace>/<plugin>/<version>/...
Чтобы построить каталог seed, запустите Claude Code один раз во время сборки образа, установите нужные вам плагины, затем скопируйте полученный каталог ~/.claude/plugins в ваш образ и укажите CLAUDE_CODE_PLUGIN_SEED_DIR на него.
Чтобы пропустить шаг копирования, установите CLAUDE_CODE_PLUGIN_CACHE_DIR на путь целевого seed во время сборки, чтобы плагины устанавливались непосредственно туда:
CLAUDE_CODE_PLUGIN_CACHE_DIR=/opt/claude-seed claude plugin marketplace add your-org/plugins
CLAUDE_CODE_PLUGIN_CACHE_DIR=/opt/claude-seed claude plugin install my-tool@your-plugins
Затем установите CLAUDE_CODE_PLUGIN_SEED_DIR=/opt/claude-seed в среде выполнения вашего контейнера, чтобы Claude Code читал из seed при запуске.
При запуске Claude Code регистрирует marketplace, найденные в known_marketplaces.json seed, в основную конфигурацию и использует кэши плагинов, найденные под cache/, на месте без повторного клонирования. Это работает как в интерактивном режиме, так и в неинтерактивном режиме с флагом -p.
Детали поведения:
- Только для чтения: Claude Code никогда не записывает в каталог seed.
- Автоматические обновления отключены: seed marketplace не автоматически обновляются.
- Записи seed имеют приоритет: marketplace, объявленные в seed, перезаписывают любые совпадающие записи в конфигурации пользователя при каждом запуске. Чтобы отказаться от seed плагина, используйте
/plugin disableвместо удаления marketplace. - Разрешение пути: Claude Code находит содержимое marketplace, проверяя
$CLAUDE_CODE_PLUGIN_SEED_DIR/marketplaces/<name>/во время выполнения, а не доверяя путям, хранящимся внутри JSON seed. Это означает, что seed работает правильно, даже если он смонтирован по другому пути, чем где он был построен. - Мутация заблокирована: запуск
/plugin marketplace removeили/plugin marketplace updateпротив seed-управляемого marketplace не удается с указанием попросить вашего администратора обновить образ seed. - Компонуется с параметрами: если
extraKnownMarketplacesилиenabledPluginsобъявляют marketplace, который уже существует в seed, Claude Code использует копию seed вместо клонирования.
Ограничения управляемого marketplace
Для организаций, требующих строгого контроля над источниками плагинов, администраторы могут ограничить, какие marketplace плагинов пользователи могут добавлять, используя параметр strictKnownMarketplaces в управляемых параметрах. Чтобы также отклонить флаги CLI, которые загружают плагины, агентов и MCP серверы для одного запуска, объедините его с disableSideloadFlags. Чтобы разрешить список, какие marketplace плагинов могут появляться как предложения контекстной установки, установите pluginSuggestionMarketplaces.
strictKnownMarketplaces совпадает с marketplace, из которого поступает плагин, а не с записями внутри него, поэтому пользователи все еще могут установить плагин с источником command из разрешенного marketplace. Чтобы также заблокировать источники команд, установите disableCommandPluginSources.
Когда strictKnownMarketplaces настроен в управляемых параметрах, поведение ограничения зависит от значения:
| Значение | Поведение |
|---|---|
| Не определено (по умолчанию) | Нет ограничений. Пользователи могут добавлять любой marketplace |
Пустой массив [] |
Полная блокировка. Блокирует каждый источник marketplace, включая официальный marketplace Anthropic |
| Список источников | Список разрешений применяется. Пользователи могут добавлять только marketplace, которые совпадают с записью |
Общие конфигурации
Отключение всех добавлений marketplace, включая официальный marketplace Anthropic:
{
"strictKnownMarketplaces": []
}
Claude Code загружает плагины синхронизированные с claude.ai из вашей учетной записи, а не из marketplace, поэтому эта блокировка их не охватывает. Чтобы остановить их также, установите syncClaudeAiPlugins на false в управляемых параметрах или отключите Skills для вашей организации на claude.ai.
Разрешение только официального marketplace Anthropic. Сопоставление для записи одного репозитория является точным, поэтому эта запись не охватывает варианты ref или path одного и того же репозитория:
{
"strictKnownMarketplaces": [
{
"source": "github",
"repo": "anthropics/claude-plugins-official"
}
]
}
С этой записью Claude Code сохраняет уже зарегистрированный официальный marketplace доступным и, на свежей машине, регистрирует marketplace автоматически при первом запуске Claude Code в интерактивном режиме.
Автоматическая регистрация не охватывает каждую машину. Она наиболее часто пропускает:
- Неинтерактивные среды, которые запускаются перед первым интерактивным запуском машины.
- Машины, где Claude Code уже запускался в интерактивном режиме под политикой, которая заблокировала marketplace, например блокировка пустого массива. Claude Code записывает заблокированную попытку и не повторяет попытку после изменения политики.
На этих машинах добавьте marketplace в extraKnownMarketplaces в том же managed-settings.json, чтобы Claude Code регистрировал его автоматически, или запустите claude plugin marketplace add anthropics/claude-plugins-official.
Разрешение только определенных marketplace:
{
"strictKnownMarketplaces": [
{
"source": "github",
"repo": "acme-corp/approved-plugins"
},
{
"source": "github",
"repo": "acme-corp/security-tools",
"ref": "v2.0"
},
{
"source": "url",
"url": "https://plugins.example.com/marketplace.json"
}
]
}
Разрешение каждого репозитория marketplace под организацией GitHub с записью owner-wildcard. Owner wildcards требуют Claude Code v2.1.223 или позже.
{
"strictKnownMarketplaces": [
{
"source": "github",
"repo": "acme-corp/*"
}
]
}
Разрешение всех marketplace с внутреннего сервера Git с использованием сопоставления шаблонов регулярных выражений на хосте. Это рекомендуемый подход для GitHub Enterprise Server или самостоятельно размещаемых экземпляров GitLab:
{
"strictKnownMarketplaces": [
{
"source": "hostPattern",
"hostPattern": "^github\\.example\\.com$"
}
]
}
Разрешение marketplace на основе файловой системы из определенного каталога с использованием сопоставления шаблонов регулярных выражений на пути:
{
"strictKnownMarketplaces": [
{
"source": "pathPattern",
"pathPattern": "^/opt/approved/"
}
]
}
Используйте ".*" как pathPattern для разрешения любого пути файловой системы при одновременном контроле сетевых источников с помощью hostPattern.
strictKnownMarketplaces ограничивает то, что пользователи могут добавлять, но не регистрирует marketplace самостоятельно. Чтобы сделать разрешенный marketplace доступным для пользователей автоматически, добавьте его в extraKnownMarketplaces в том же managed-settings.json.
Официальный marketplace Anthropic — это единственный, который Claude Code регистрирует самостоятельно, и только когда список разрешений позволяет это. Автоматическая регистрация также пропускает некоторые машины, такие как неинтерактивные среды и машины, где более ранняя политика заблокировала его. Чтобы охватить эти машины, добавьте официальный marketplace в extraKnownMarketplaces также. Для двух параметров рядом см. справку strictKnownMarketplaces.
Как работают ограничения
Ограничения проверяются перед любой сетевой или файловой операцией. Проверка выполняется при добавлении marketplace и при установке, обновлении, обновлении и автоматическом обновлении плагина. Если marketplace был добавлен до настройки политики и его источник больше не совпадает со списком разрешений, Claude Code отказывает в установке или обновлении плагинов из него. То же самое применяется к blockedMarketplaces.
Где две списки применяются, зависит от того, где вы их установили:
- Консоль администратора claude.ai: Claude Code применяет оба списка в сеансах, которые читают управляемые параметры сервера. claude.ai также проверяет их, когда кто-либо в вашей организации добавляет новый marketplace из репозитория Git на claude.ai или из Customize в приложении Claude Desktop вне его вкладки Code. Это охватывает marketplace, который член добавляет для своей собственной учетной записи, и тот, который добавляется для всей организации под Organization settings > Plugins. claude.ai отказывает репозиторию, который список разрешений не допускает или который список блокировки называет. Он не переопроверяет marketplace, который был добавлен в любом месте до установки списков, и он не проверяет загруженные плагины.
- Файл управляемых параметров, политика уровня ОС или другой управляемый источник: Claude Code применяет оба списка там, где он читает этот источник. claude.ai не читает его.
Чтобы заблокировать каждый репозиторий marketplace под владельцем GitHub, используйте форму owner-wildcard в записи blockedMarketplaces: { "source": "github", "repo": "untrusted-org/*" }. Требуется Claude Code v2.1.223 или позже. Для правил сопоставления, которые отличаются между списком блокировки и списком разрешений, см. Owner wildcards.
Когда пользователь добавляет URL репозитория https://, который Claude Code клонирует, а не получает, например простой URL репозитория github.com или gitlab.com, Claude Code также проверяет его против записей url в blockedMarketplaces. Claude Code блокирует добавление, если запись называет тот же URL. В этом сравнении Claude Code игнорирует суффикс .git и любой ref, который пользователь добавляет после #. Требуется Claude Code v2.1.232 или позже. До v2.1.232 Claude Code совпадал с записью url только против URL, который он получал как размещенный файл marketplace.json.
Список разрешений использует точное сопоставление для большинства типов источников, кроме записей owner-wildcard github. Чтобы marketplace был разрешен, все указанные поля должны совпадать:
- Для источников GitHub:
repoобязателен, либо называя один репозиторий, либо используя форму owner-wildcardowner/*для охвата каждого репозитория под этим владельцем. Для того, как записи wildcard совпадают, включая правила регистра, см. Owner wildcards. Для записей одного репозиторияrefдолжен совпадать точно или отсутствовать в обоих источниках marketplace и записи списка разрешений, и то же правило применяется кpath - Для источников URL: полный URL должен совпадать точно
- Для источников
hostPattern: хост marketplace сопоставляется с шаблоном регулярного выражения - Для источников
pathPattern: путь файловой системы marketplace сопоставляется с шаблоном регулярного выражения
Точное сопоставление списка разрешений рассматривает URL, которые отличаются только конечной косой чертой, суффиксом .git или схемой ssh:// и https:// как разные значения. Если marketplace вашей организации можно клонировать более чем одной формой URL, предпочтите запись hostPattern буквальному URL, чтобы формы https://, ssh:// и user@host:path все совпадали.
Marketplace размещенный на claude.ai сопоставляется по хосту: запись hostPattern, которая совпадает с claude.ai, управляет им в strictKnownMarketplaces и в blockedMarketplaces. В списке разрешений такая запись не допускает личные загрузки claude.ai члена. Требуется Claude Code v2.1.273 или позже.
Поскольку strictKnownMarketplaces установлен в управляемых параметрах, отдельные пользователи и конфигурации проекта не могут переопределить эти ограничения.
Для полных деталей конфигурации, включая все поддерживаемые типы источников и сравнение с extraKnownMarketplaces, см. справку strictKnownMarketplaces.
Разрешение версий и каналы выпуска
Версии плагинов определяют пути кэша и обнаружение обновлений: если разрешенная версия совпадает с тем, что уже есть у пользователя, /plugin update и автоматическое обновление пропускают плагин. Для источников на основе Git, если вы опустите version, Claude Code использует разрешенный SHA коммита источника, поэтому пользователи получают обновление всякий раз, когда этот коммит изменяется; это самая простая установка для внутренних или активно разрабатываемых плагинов. См. Version management для полного порядка разрешения, включая источники archive.
Установка version закрепляет плагин для каждого типа источника, кроме command, чья версия всегда включает хеш того, что произвела команда. Плагин загруженный на месте из marketplace, добавленного как локальный каталог, также не закреплен. Если вы объявляете "version": "1.0.0" в plugin.json и отправляете новые коммиты без изменения этой строки, существующие пользователи этих источников сохраняют кэшированную копию, потому что Claude Code видит ту же версию. Увеличивайте поле при каждом выпуске или опустите его, чтобы вернуться к разрешенной версии.
Избегайте установки version одновременно в plugin.json и в записи marketplace. Значение plugin.json всегда побеждает молча, поэтому устаревшая версия манифеста может скрыть версию, которую вы установили в marketplace.json.
Установка каналов выпуска
Для поддержки каналов выпуска "stable" и "latest" для ваших плагинов вы можете установить два marketplace, которые указывают на разные refs или SHAs одного репозитория. Затем вы можете дать каждой группе пользователей свой собственный marketplace через управляемые параметры одним из двух способов:
- Развертывание отдельных endpoint-managed settings, таких как файл управляемых параметров или профиль MDM, для устройств каждой группы. Как Claude Code объединяет управляемые источники говорит, применяется ли файл или профиль для каждой группы на устройстве, которое также имеет источник на уровне организации.
- Определение одной Claude apps gateway policy для каждой группы. Шлюз применяет первую политику, чье правило соответствия подходит пользователю, поэтому упорядочьте политики так, чтобы каждый пользователь достигал политики своей группы. Политика группы
extraKnownMarketplacesзаменяет карту политики catch-all, а не объединяется с ней, поэтому перечислите каждый marketplace, который группе нужен в политике группы, а не только ее marketplace канала.
Управляемые параметры сервера из консоли администратора применяются к каждому пользователю в вашей организации, поэтому они не могут нести назначение для каждой группы.
Каждый канал должен разрешаться в другую версию. Если вы используете явные версии, plugin.json должен объявлять другую version в каждом закрепленном ref. Если вы опустите version, различные SHA коммитов уже различают каналы. Если два refs разрешаются в одну и ту же строку версии, Claude Code рассматривает их как идентичные и пропускает обновление.
Пример
{
"name": "stable-tools",
"plugins": [
{
"name": "code-formatter",
"source": {
"source": "github",
"repo": "acme-corp/code-formatter",
"ref": "stable"
}
}
]
}
{
"name": "latest-tools",
"plugins": [
{
"name": "code-formatter",
"source": {
"source": "github",
"repo": "acme-corp/code-formatter",
"ref": "latest"
}
}
]
}
Назначение каналов группам пользователей
Назначьте каждый marketplace соответствующей группе пользователей через управляемые параметры для каждой группы или политику шлюза, описанные в разделе Установка каналов выпуска. Например, стабильная группа получает:
{
"extraKnownMarketplaces": {
"stable-tools": {
"source": {
"source": "github",
"repo": "acme-corp/stable-tools"
}
}
}
}
Группа ранних доступов получает вместо этого latest-tools:
{
"extraKnownMarketplaces": {
"latest-tools": {
"source": {
"source": "github",
"repo": "acme-corp/latest-tools"
}
}
}
}
Закрепление версий зависимостей плагинов
Плагин может ограничить свои зависимости диапазоном semver, чтобы обновления зависимости не нарушили зависимый плагин. См. Ограничение версий зависимостей плагинов для соглашения о тегах Git {plugin-name}--v{version}, синтаксиса диапазона и того, как несколько ограничений на одну и ту же зависимость объединяются.
Переименование или удаление плагина
name плагина является его стабильным идентификатором. Пользователи ссылаются на него в enabledPlugins, pluginConfigs и командах /plugin install, поэтому изменение его нарушает каждую существующую установку. Чтобы изменить метку, отображаемую в пользовательском интерфейсе, без нарушения установок, установите displayName и оставьте name неизменным.
Если вы должны изменить name плагина или удалить плагин из массива plugins, добавьте запись renames верхнего уровня, чтобы существующие пользователи мигрировали вместо того, чтобы видеть ошибку plugin-not-found. Автоматическая миграция требует Claude Code v2.1.193 или позже. Сопоставьте каждое бывшее имя с его текущим именем или с null, если плагин больше не существует. Следующий пример переименовывает formatter в code-formatter и записывает, что legacy-linter был удален:
{
"name": "acme-tools",
"owner": { "name": "Acme" },
"plugins": [
{ "name": "code-formatter", "source": "./plugins/code-formatter" }
],
"renames": {
"formatter": "code-formatter",
"legacy-linter": null
}
}
Когда пользователь запускает Claude Code со старым именем все еще в своих параметрах, Claude Code следует карте renames:
- Если запись указывает на новое имя, Claude Code загружает плагин под его новым именем и показывает однострочное уведомление, такое как
Renamed to "code-formatter" in the "acme-tools" marketplace. Затем он переписывает старый ключ на новый ключ в областях параметров пользователя, проекта и локальных параметров для обоихenabledPluginsиpluginConfigs, поэтому уведомление появляется один раз. - Для записи
nullClaude Code удаляет старый ключ и уведомление сообщает, что плагин был удален из marketplace. - Если переименованный плагин использует удаленный источник, такой как
githubилиnpm, Claude Code сообщаетplugin-cache-missпосле переименования и пользователь должен запустить/plugin installодин раз, чтобы получить его под новым именем.
Рассматривайте renames как историю только для добавления: сохраняйте старые записи на месте даже после того, как вы ожидаете, что каждый пользователь мигрировал. Claude Code следует цепочкам, поэтому если вы позже переименуете code-formatter в formatter-pro, добавьте вторую запись вместо редактирования первой. Пользователь, который все еще имеет оригинальный formatter включенным, затем разрешается через обе записи в formatter-pro.
Запустите claude plugin validate . после редактирования карты; он отклоняет любую запись, цепочка которой образует цикл или не заканчивается на null или имя, указанное в plugins.
Управляемые и политические параметры доступны только для чтения для Claude Code, поэтому плагины, включенные там, не могут быть переписаны автоматически. Переименованный плагин все еще загружается каждый сеанс, но уведомление о переименовании повторяется до тех пор, пока администратор не обновит enabledPlugins в файле управляемых параметров, чтобы использовать новое имя. То же самое применяется к плагинам, включенным через другие источники только для чтения, такие как --add-dir.
Более ранние версии Claude Code игнорируют поле renames и сообщают plugin-not-found для старого имени.
Валидация и тестирование
Протестируйте ваш marketplace перед совместным использованием. Валидация проверяет структуру файлов; чтобы протестировать, изменяет ли плагин поведение Claude на реалистичных запросах, запустите его набор eval с помощью claude plugin eval перед публикацией новой версии.
Из вашего каталога marketplace проверьте синтаксис JSON:
claude plugin validate .
Или из Claude Code:
/plugin validate .
Добавьте marketplace для тестирования:
/plugin marketplace add ./path/to/marketplace
Установите тестовый плагин, чтобы проверить, что все работает:
/plugin install test-plugin@marketplace-name
Для полного диапазона рабочих процессов тестирования плагинов см. Тестирование ваших плагинов локально. Для технического устранения неполадок см. Справка плагинов.
Управление marketplace из CLI
Claude Code предоставляет неинтерактивные подкоманды claude plugin marketplace для написания скриптов и автоматизации. Они эквивалентны командам /plugin marketplace, доступным в интерактивном сеансе.
Plugin marketplace add
Добавьте marketplace из репозитория GitHub, URL Git, удаленного URL или локального пути.
claude plugin marketplace add <source> [options]
Аргументы:
<source>: Сокращение GitHubowner/repo, URL Git, удаленный URL к файлуmarketplace.jsonили путь локального каталога. Чтобы закрепить на ветке или теге, добавьте@refк сокращению GitHub или#refк URL Git
URL должен включать свою схему. Начиная с Claude Code v2.1.196, хост, введенный без схемы, такой как gitlab.example.com/team/plugins, отклоняется как недействительное сокращение owner/repo, и ошибка указывает вам добавить https:// или использовать ./ для локального пути. Более ранние версии неправильно интерпретировали его как путь репозитория GitHub и не удаются при клонировании с ошибкой GitHub not-found.
Параметры:
| Параметр | Описание | По умолчанию |
|---|---|---|
--scope <scope> |
Где объявить marketplace: user, project или local. См. Области установки плагинов |
user |
--sparse <paths...> |
Ограничить checkout определенными каталогами через git sparse-checkout. Полезно для монорепозиториев | |
--claudeai |
Прочитайте аргумент как имя marketplace, размещенного на claude.ai, вместо источника. Требует Claude Code v2.1.273 или более поздней версии |
Добавьте marketplace из GitHub, используя сокращение owner/repo:
claude plugin marketplace add acme-corp/claude-plugins
Закрепите на определенной ветке или теге с помощью @ref:
claude plugin marketplace add acme-corp/claude-plugins@v2.0
Добавьте из URL Git на хосте, отличном от GitHub:
claude plugin marketplace add https://gitlab.example.com/team/plugins.git
Добавьте из удаленного URL, который служит файлом marketplace.json напрямую:
claude plugin marketplace add https://example.com/marketplace.json
Добавьте из локального каталога для тестирования:
claude plugin marketplace add ./my-marketplace
Объявите marketplace в области проекта, чтобы он был общим с вашей командой через .claude/settings.json:
claude plugin marketplace add acme-corp/claude-plugins --scope project
Для монорепозитория ограничьте checkout каталогами, содержащими содержимое плагина:
claude plugin marketplace add acme-corp/monorepo --sparse .claude-plugin plugins
Добавьте marketplace, размещенный на claude.ai, по имени, напечатанному в разделе From claude.ai: команды claude plugin marketplace list:
claude plugin marketplace add --claudeai claudeai-organization-library
С помощью --claudeai команда отклоняет --scope и --sparse. Marketplace размещен для вашей учетной записи, а не объявлен в файле параметров, поэтому вы не можете поделиться им через .claude/settings.json проекта.
Plugin marketplace list
Перечислите все настроенные marketplace.
claude plugin marketplace list [options]
Параметры:
| Параметр | Описание |
|---|---|
--json |
Вывести как JSON |
С помощью --json каждая запись включает name, source, поле installLocation с локальным путем кэша, где хранится marketplace, и поля, специфичные для источника: repo для источников GitHub, url для источников Git и URL, а также path для локальных источников. Источники GitHub и Git также включают поле ref, когда marketplace был добавлен с закрепленной веткой или тегом.
Добавленный marketplace claude.ai не имеет локального клона, поэтому его запись содержит его идентификаторы claude.ai, marketplaceId и organizationUuid, вместо installLocation.
В сеансах терминала, где плагины синхронизируются из вашей учетной записи claude.ai, текстовый список заканчивается разделом From claude.ai:, в котором указано, что claude.ai перечисляет для вашей учетной записи помимо добавленных вами marketplace. Чтобы добавить один из них, см. Добавить из claude.ai. Вывод --json охватывает только настроенные marketplace и не включает этот раздел. Требует Claude Code v2.1.273 или более поздней версии.
Plugin marketplace remove
Удалите настроенный marketplace. Также принимается псевдоним rm.
claude plugin marketplace remove <name> [options]
Аргументы:
<name>: имя marketplace для удаления, как показано вclaude plugin marketplace list. Этоnameизmarketplace.json, а не источник, который вы передали вadd
Параметры:
| Параметр | Описание | По умолчанию |
|---|---|---|
--scope <scope> |
Ограничить удаление одной областью параметров: user, project или local. См. Области установки плагинов. Если опущено, объявление удаляется из каждой редактируемой области. Если указано, удаляется только объявление этой области; общее состояние, кэш и установленные данные плагина сохраняются, когда marketplace все еще объявлен в другой области |
(все области) |
Удаление marketplace из его последней оставшейся области также удаляет все плагины, которые вы установили из него. Чтобы обновить marketplace без потери установленных плагинов, используйте claude plugin marketplace update вместо этого.
Plugin marketplace update
Обновите marketplace из их источников, чтобы получить новые плагины и изменения версий. Marketplace, добавленный с веткой или тегом ref, обновляется до последнего коммита этого ref, а не до ветки по умолчанию репозитория.
claude plugin marketplace update [name]
Аргументы:
[name]: имя marketplace для обновления, как показано вclaude plugin marketplace list. Обновляет все marketplace, если опущено
Оба remove и update не удаются при запуске против seed-управляемого marketplace, который доступен только для чтения. При обновлении всех marketplace записи, управляемые seed, пропускаются, и другие marketplace все еще обновляются. Чтобы изменить плагины, предоставленные seed, попросите вашего администратора обновить образ seed. См. Предварительное заполнение плагинов для контейнеров.
Устранение неполадок
Marketplace не загружается
Симптомы: Не удается добавить marketplace или увидеть плагины из него
Решения:
- Проверьте, что URL marketplace доступен
- Убедитесь, что
.claude-plugin/marketplace.jsonсуществует по указанному пути - Убедитесь, что синтаксис JSON действителен, используя
claude plugin validate .или/plugin validate .из каталога marketplace. Чтобы проверить frontmatter skill, agent и command, см. Валидация плагина или каталога без манифеста - Для частных репозиториев подтвердите, что у вас есть разрешения доступа
Ошибки валидации marketplace
Запустите claude plugin validate . или /plugin validate . из каталога вашего marketplace, чтобы проверить наличие проблем. Когда валидатор указывает на каталог marketplace, он проверяет marketplace.json на ошибки схемы, дублирующиеся имена плагинов и обход пути источника. Для каждой записи, чей source является локальным путем, он также валидирует собственный plugin.json этого плагина и предупреждает, когда version записи не совпадает с версией в plugin.json. Проблемы, найденные в plugin.json плагина, имеют префикс с индексом записи в форме plugins[2] plugin.json →.
Начиная с Claude Code v2.1.196, проверка для каждой записи также:
- включает плагины, чей
sourceявляется. - запускается, когда
marketplace.jsonнаходится вне каталога.claude-plugin, разрешая источники относительно собственного каталога файла - сообщает о проблемах каждой записи даже когда другая часть файла имеет ошибки схемы
Более ранние версии пропускают плагины в корне marketplace и спускаются только из .claude-plugin/marketplace.json.
Из каталога marketplace Claude Code не открывает файлы skill, agent, command или hook плагинов. Чтобы найти ошибки в этих файлах, см. Валидация плагина или каталога без манифеста. В таблице ниже перечислены наиболее распространенные ошибки из каталога marketplace с причиной и решением для каждой:
| Ошибка | Причина | Решение |
|---|---|---|
No manifest found in directory. Expected .claude-plugin/marketplace.json or .claude-plugin/plugin.json |
Каталог, который вы назвали, не имеет .claude-plugin/marketplace.json или plugin.json, и нет файлов skill, agent или command для проверки |
Запустите из корня marketplace или создайте .claude-plugin/marketplace.json с обязательными полями |
Invalid JSON syntax: Unexpected token... |
Ошибка синтаксиса JSON в marketplace.json | Проверьте отсутствующие запятые, лишние запятые или неквотированные строки |
Duplicate plugin name "x" found in marketplace |
Два плагина имеют одно имя | Дайте каждому плагину уникальное значение name |
plugins[0].source: Path contains ".." |
Путь источника содержит .. |
Используйте пути относительно корня marketplace без ... См. Относительные пути |
Marketplace name cannot contain control or bidirectional-formatting characters |
Имя marketplace содержит символ Unicode двунаправленного форматирования или управляющий символ, такой как escape или новая строка | Удалите символ из имени. До v2.1.247 эти символы выдавали ошибку Marketplace name impersonates an official Anthropic/Claude marketplace |
Plugin name cannot contain control or bidirectional-formatting characters |
Имя плагина name содержит символ Unicode двунаправленного форматирования или управляющий символ, такой как escape или новая строка |
Удалите символ из имени. До v2.1.247 Claude Code не запускал эту проверку |
Предупреждения (не блокирующие):
Marketplace has no plugins defined: добавьте хотя бы один плагин в массивpluginsNo marketplace description provided: добавьте описание верхнего уровняdescription, чтобы помочь пользователям понять ваш marketplacePlugin name "x" is not kebab-case: переименуйте в строчные буквы, цифры и дефисы только (например,my-plugin). Claude Code принимает другие формы, но синхронизация marketplace claude.ai их отклоняет.Marketplace name "x" is reserved in Claude Desktop: marketplace названorg,org-provisionedилиunknown, в любом регистре. Claude Code принимает эти имена, но синхронизация управляемого marketplace Claude Desktop отклоняет весь marketplace. Переименуйте marketplace. До v2.1.221claude plugin validateне запускал эту проверку.Marketplace name "x" is not accepted by Claude DesktopилиPlugin name "x" is not accepted by Claude Desktop: Claude Desktop принимает имена длиной до 128 символов, состоящие из букв, цифр,.,_и-, начинающиеся с буквы или цифры. Claude Code принимает другие формы, но синхронизация управляемого marketplace Claude Desktop отклоняет marketplace, чье имя не проходит проверку, и молча удаляет запись плагина, чье имя не проходит. Переименуйте marketplace или плагин. До v2.1.221claude plugin validateне запускал эти проверки.
Валидация плагина или каталога без манифеста
Чтобы найти файлы skill, agent и command, чей frontmatter не парсится, запустите claude plugin validate и назовите каталог, который их содержит. Claude Code не смотрит вне каталога, который вы назвали. Каждый запуск, кроме одного, для плагина, который имеет plugin.json, требует Claude Code v2.1.233 или позже.
Выберите каталог для назначения
Claude Code проверяет разные файлы в зависимости от того, какой каталог вы назовете. Найдите то, что вы хотите проверить в первом столбце, и запустите команду из этой строки:
| Для проверки | Запустите | Claude Code проверяет |
|---|---|---|
Плагин, который имеет plugin.json |
claude plugin validate ./plugins/my-plugin |
plugin.json, hooks/hooks.json и каталоги skills, agents и commands в корне плагина |
Один каталог skills, agents или commands, такой как плагин, который еще не имеет plugin.json |
claude plugin validate .claude/skills, ~/.claude/agents или ./my-plugin/agents |
Каждый файл skill, agent или command в этом каталоге |
Папка, чей skill является его корневым SKILL.md |
claude plugin validate ./skills, назвав каталог skills, который содержит папку |
Корневой SKILL.md каждой папки. Содержащий каталог должен быть назван skills; папка под другим именем, такая как plugins/, не имеет запуска, который проверяет его корневой SKILL.md |
| Три каталога проекта одновременно | claude plugin validate .claude или корень проекта, когда он не имеет манифеста .claude-plugin/ |
.claude/skills, .claude/agents и .claude/commands |
| Ваши каталоги уровня пользователя | claude plugin validate ~/.claude |
~/.claude/skills, ~/.claude/agents и ~/.claude/commands |
Проверка плагина, чей skill является его корневым `SKILL.md`
Когда вы запускаете claude plugin validate для каталога плагина, Claude Code не проверяет SKILL.md в корне плагина. Когда плагин находится в каталоге с именем skills, запустите команду дважды:
- Назовите этот каталог
skills, чтобы проверить корневойSKILL.mdплагина. - Назовите каталог плагина, чтобы проверить остальное.
Когда плагин находится под другим именем, такое как plugins/, запуск каталога skills недоступен, и ни один запуск не проверяет его корневой SKILL.md.
Проверка файлов за символическими ссылками
Когда вы запускаете claude plugin validate, Claude Code не следует символическим ссылкам внутри каталога, который вы назвали. То, что он делает, зависит от того, где находится ссылка:
- Связанный каталог
skills,agentsилиcommandsпод корнем плагина или.claude: Claude Code предупреждает, что ничего в нем не было прочитано. - Связанная запись внутри каталога
skills,agentsилиcommands: Claude Code пропускает ее и предупреждает, для каждого каталога, сколько записей оно пропустило, которые сессия загрузит. - Каталог
skills,agentsилиcommands, который вы назвали, сам является символической ссылкой, или его родительский каталог.claudeявляется: Claude Code сообщает об ошибке и ничего в нем не проверяет. Назовите реальный каталог вместо этого.
В двух случаях skills запуск проходит с предупреждениями. Чтобы проверить связанные файлы, запустите снова и назовите каталог, который их содержит напрямую:
- Плагин, чей каталог
skillsссылается на каталог skills соседнего плагина: назовите каталог соседнего плагина. - Связанная запись skill в
~/.claude/skillsили.claude/skills: Claude Code следует записи в сессии. Чтобы проверить ее, назовите каталог с именемskills, который содержит реальную папку.
Прочитайте результаты валидации
Чистый запуск заканчивается с Validation passed.
No manifest found in directory означает, что Claude Code не нашел plugin.json или marketplace.json там, и нет файла skill, agent или command в каталогах, которые он проверяет под ним. Назовите каталог skills, agents или commands, который содержит ваши файлы, вместо этого.
Две из ошибок, которые Claude Code сообщает из этих запусков, с исправлением для каждой:
YAML frontmatter failed to parse: ...: исправьте YAML в блоке frontmatter файла skill, agent или command. До тех пор, пока вы это не сделаете, сессия не читает поля frontmatter из файлаInvalid JSON syntax: ...наhooks/hooks.json: исправьте синтаксис JSON. До тех пор, пока вы это не сделаете, сессия загружает плагин без hooks в этом файле. Claude Code сообщает эту ошибку только в запуске плагина
В запуске плагина Claude Code также предупреждает о CLAUDE.md в корне плагина. Для путей, которые вы установили через поля пути компонента в plugin.json, Claude Code проверяет, что каждый путь существует, но не читает файлы там.
Ошибки установки плагина
Симптомы: Marketplace появляется, но установка плагина не удается
Решения:
- Проверьте, что URL источников плагинов доступны
- Убедитесь, что каталоги плагинов содержат необходимые файлы
- Для источников GitHub убедитесь, что репозитории являются общедоступными или у вас есть доступ
- Протестируйте источники плагинов вручную, клонируя/загружая их
- Если источник закрепляет как
ref, так иsha, удаленная ветвь или тег не блокируют установку на большинстве хостов git, включая GitHub, GitLab и Bitbucket. На серверах, которые не поддерживают получение коммитов по SHA, таких как AWS CodeCommit,refвсе еще должен существовать и закрепленный коммит должен быть достижим из него. Если установка все еще не удается, подтвердите, что закрепленный коммит все еще существует в репозитории
Ошибка аутентификации частного репозитория
Симптомы: Ошибки аутентификации при установке плагинов из частных репозиториев
Решения:
Для ручной установки и обновлений:
- Проверьте, что вы аутентифицированы у вашего поставщика Git (например, запустите
gh auth statusдля GitHub) - Проверьте, что ваш помощник учетных данных настроен:
git config --global credential.helper - Запустите
git ls-remote <marketplace-url>, чтобы проверить, может ли git аутентифицироваться самостоятельно. Если git запрашивает имя пользователя или пароль, сначала сохраните учетные данные: для GitHub через HTTPS запуститеgh auth setup-git, а для SSH удаленных хостов загрузите ваш ключ вssh-agent
Для фоновых автоматических обновлений:
- Фоновая проверка использует ваши настроенные помощники учетных данных Git, но никогда не запрашивает, поэтому ваш помощник должен иметь возможность ответить сохраненными учетными данными. SSH удаленные хосты с загруженным ключом в
ssh-agentтакже аутентифицируются - Если ваш помощник должен вас запросить, фоновое обновление не удается молча и существующий checkout остается на месте. Сначала войдите в ваш помощник, чтобы он содержал учетные данные для хоста. Для GitHub запустите
gh auth login, затемgh auth setup-git - Когда проверка находит новые коммиты или не может достичь или аутентифицироваться на удаленном хосте, Claude Code повторно клонирует marketplace с теми же учетными данными. Повторное клонирование может истечь по времени на больших репозиториях
- Установите
CLAUDE_CODE_PLUGIN_KEEP_MARKETPLACE_ON_FAILURE=1, чтобы сохранить существующий checkout без попытки повторного клонирования, когда фоновая проверка не может достичь или аутентифицироваться на удаленном хосте - Если повторное клонирование истекает по времени на большом репозитории, увеличьте лимит с помощью
CLAUDE_CODE_PLUGIN_GIT_TIMEOUT_MS - Или обновляйте частные marketplace вручную с помощью
/plugin marketplace update <name>, которая использует ваши учетные данные
До v2.1.280 фоновая проверка запускалась без ваших помощников учетных данных и не могла аутентифицироваться на частных репозиториях через HTTPS.
Обновления marketplace не работают в автономных средах
Симптомы: В автономной или изолированной среде фоновое обновление marketplace не может достичь удаленного хоста и Claude Code многократно пытается повторно клонировать, что не может успешно завершиться.
Причина: Фоновое обновление проверяет удаленный хост marketplace на наличие новых коммитов, и когда проверка не может достичь удаленного хоста, Claude Code пытается клонировать marketplace снова. В автономной среде клон не удается так же, и существующий checkout остается на месте. До v2.1.274 обновление запускало git pull в существующем checkout, перемещало checkout в сторону для повторного клонирования при сбое pull, и восстанавливало его впоследствии на основе наилучших усилий.
Обновление запускается в фоне после запуска, поэтому оно не задерживает запуск. Каждая сессия все еще повторяет неудачную попытку, и каждая операция Git может ждать 120-секундного таймаута.
Решение: Установите CLAUDE_CODE_PLUGIN_KEEP_MARKETPLACE_ON_FAILURE=1, чтобы пропустить попытку повторного клонирования и продолжить использование существующего checkout, когда проверка не может достичь удаленного хоста:
export CLAUDE_CODE_PLUGIN_KEEP_MARKETPLACE_ON_FAILURE=1
Для полностью автономных развертываний, где репозиторий никогда не будет доступен, используйте CLAUDE_CODE_PLUGIN_SEED_DIR для предварительного заполнения каталога плагинов во время сборки вместо этого.
Операции Git истекают по времени
Симптомы: Установка плагина или обновление marketplace не удается с ошибкой истечения времени, например Git clone timed out after 120s.
Причина: Claude Code использует 120-секундный таймаут для всех операций Git, включая клонирование репозиториев плагинов и повторное клонирование marketplace для его обновления. Большие репозитории или медленные сетевые соединения могут превысить этот лимит.
Решение: Увеличьте таймаут, используя переменную окружения CLAUDE_CODE_PLUGIN_GIT_TIMEOUT_MS. Значение указывается в миллисекундах:
export CLAUDE_CODE_PLUGIN_GIT_TIMEOUT_MS=300000 # 5 минут
Плагины с относительными путями не работают в marketplace на основе URL
Симптомы: Добавлен marketplace через URL, такой как https://example.com/marketplace.json, но плагины с источниками относительных путей, такие как "./plugins/my-plugin", не устанавливаются с ошибкой its marketplace entry path does not stay inside the marketplace directory. Уже установленные плагины не загружаются с ошибкой Plugin source path refused. Обе сообщения имеют запись справки об ошибке.
Причина: добавление marketplace на основе URL загружает только сам файл marketplace.json, и Claude Code не загружает файлы плагинов по относительному пути с этого сервера. Относительные пути в записи marketplace ссылаются на файлы на удаленном сервере, которые не были загружены.
Решения:
- Используйте внешние источники: измените записи плагинов на любой источник плагина, кроме относительного пути:
{ "name": "my-plugin", "source": { "source": "github", "repo": "owner/repo" } } - Используйте marketplace на основе Git: Разместите ваш marketplace в репозитории Git и добавьте его с URL Git. Marketplace на основе Git клонируют весь репозиторий, что делает относительные пути рабочими.
Файлы не найдены после установки
Симптомы: Плагин устанавливается, но ссылки на файлы не работают, особенно файлы вне каталога плагина
Причина: Claude Code копирует установленные плагины в каталог кэша, если только плагин не загружается на месте. command источник в режиме link загружается на месте, как и источник относительного пути в marketplace, добавленном из локального каталога. Пути, которые ссылаются на файлы вне скопированного каталога плагина (такие как ../shared-utils), не будут работать, потому что эти файлы не копируются.
Решения: См. Кэширование плагинов и разрешение файлов для обходных путей, включая символические ссылки и переструктурирование каталогов.
Для дополнительных инструментов отладки и распространенных проблем см. Инструменты отладки и разработки.
См. также
- Обнаружение и установка готовых плагинов - Установка плагинов из существующих marketplace
- Плагины - Создание собственных плагинов
- Справка плагинов - Полные технические спецификации и схемы
- Параметры плагинов - Параметры конфигурации плагинов
- Справка strictKnownMarketplaces - Ограничения управляемого marketplace