Перейти к основному содержанию
marketplace.json — это файл, который определяет marketplace плагинов. Он содержит имя marketplace, его владельца и одну запись для каждого плагина. Источник плагина каждой записи указывает, откуда Claude Code загружает этот плагин. Источник marketplace — это отдельный объект, который указывает, откуда Claude Code загружает сам файл marketplace. Вы пишете его в параметрах, или Claude Code создаёт его при запуске claude plugin marketplace add. Этот справочник предназначен для разработчиков marketplace, которым нужно точное имя или значение поля, и для администраторов, которым нужно знать, какие значения source действительны в extraKnownMarketplaces, strictKnownMarketplaces и blockedMarketplaces.
Эти случаи рассмотрены на других страницах:
Найдите раздел для того, что вы пишете или читаете:

Файл маркетплейса

Сохраните файл маркетплейса по пути .claude-plugin/marketplace.json в каталоге вашего маркетплейса. Если вы храните файл в другом месте репозитория, пользователям придётся объявить маркетплейс в extraKnownMarketplaces с указанием path в его источнике, поскольку у claude plugin marketplace add нет такой опции. Каталог, содержащий .claude-plugin/, называется корнем маркетплейса, и все относительные источники плагинов разрешаются относительно него, а не относительно .claude-plugin/. Каждый пользователь регистрирует один маркетплейс на одно значение name, поэтому у пользователя не может быть одновременно зарегистрировано два маркетплейса с одинаковым именем. Claude Code игнорирует неизвестный ключ верхнего уровня или ключ записи плагина, а не отклоняет его, поэтому опечатка загружается без каких-либо сообщений. claude plugin validate сообщает о каждом неизвестном ключе как о предупреждении.

Зарезервированные имена

Вы не можете дать своему маркетплейсу ни одно из следующих имён:
  • Имена официального marketplace: claude-code-marketplace, claude-code-plugins, claude-plugins-official, anthropic-marketplace, anthropic-plugins, agent-skills, anthropic-agent-skills, life-sciences, knowledge-work-plugins, claude-for-legal, claude-for-financial-services, financial-services-plugins, first-party-plugins и claude-tag-plugins. Зарезервированы, если только marketplace не поступает из источника github или git marketplace source под github.com/anthropics/.
  • Имена community marketplace: claude-community, claude-plugins-community и healthcare. Зарезервированы по тому же правилу, что и официальные имена.
  • Имена директории плагинов: anthropic-plugin-directory и claude-plugin-directory. Зарезервированы по тому же правилу, что и официальные имена.
  • Имена, выдающие себя за официальный marketplace: имена такие как official-claude-plugins или claude-plugins-v2, и любое имя, содержащее символ, отличный от ASCII. Ошибка: Marketplace name impersonates an official Anthropic/Claude marketplace. Управляющий символ или символ двунаправленного форматирования в имени также сообщает Marketplace name cannot contain control or bidirectional-formatting characters. Marketplace, уже зарегистрированный под таким именем, перестаёт загружаться, вместе с его плагинами.
  • Другое написание зарезервированного имени: имя, которое отличается от зарезервированного имени только конечной точкой, или символом, отличным от подчёркивания, вместо дефиса, поэтому claude.code.plugins считается claude-code-plugins. Добавление marketplace завершается ошибкой is another spelling of "<reserved>", a reserved marketplace name, и marketplace, уже зарегистрированный под одним, перестаёт загружаться. Эта проверка требует Claude Code v2.1.280 или позже.
  • Имена, которые Claude Code использует для плагинов, которые не поступают из marketplace: inline для плагинов, загруженных с --plugin-dir, builtin для встроенных плагинов, skills-dir для плагинов, автоматически загруженных из .claude/skills/, и synced для плагинов, синхронизированных с вашего аккаунта claude.ai. claude-plugin-test также зарезервирован. skills-dir также появляется как {"source": "skills-dir"} в strictKnownMarketplaces и blockedMarketplaces, описанные в разделе Source values valid only in policy lists.
  • npm, pip, uv, cargo, github и gh: зарезервированы в любом регистре. Эта проверка требует Claude Code v2.1.275 или позже.
  • Имена членов, которые есть у каждого объекта JavaScript: constructor, hasOwnProperty, isPrototypeOf, propertyIsEnumerable, toLocaleString, toString и valueOf. claude plugin marketplace add отклоняет маркетплейс, использующий одно из них, с ошибкой Claude Code reserves this name and cannot register a marketplace under it. Эта проверка требует Claude Code v2.1.296 или позже.
  • Имена, начинающиеся с claudeai-: зарезервированы для marketplace, размещённых на claude.ai. claude plugin marketplace add отказывает любому другому marketplace, который использует один с Cannot add marketplace "<name>": names starting with "claudeai-" are reserved for marketplaces hosted on claude.ai.
  • Папка загрузки зарегистрированного GitHub marketplace, <owner>-<repo>: Claude Code загружает marketplace, добавленный из источника github, например acme/x-tools, через папку с именем acme-x-tools, каким бы ни было собственное name этого marketplace. Пока этот marketplace зарегистрирован под именем, отличным от acme-x-tools, claude plugin marketplace add отказывает другому marketplace с именем acme-x-tools после его загрузки и сообщает Can't use the marketplace name "acme-x-tools". Эта проверка требует Claude Code v2.1.290 или позже.
Когда зарегистрированный маркетплейс перестаёт загружаться из-за того, что его имя имитирует официальное, claude plugin list и /plugin сообщают Claude Code refuses the marketplace name "<name>". Сообщение предлагает удалить маркетплейс. Удаление маркетплейса также деинсталлирует его плагины и стирает их данные, параметры и секреты. Для этого именованного сообщения об отказе требуется Claude Code v2.1.282 или новее. Если файл настроек объявляет маркетплейс встроенно, сообщение предлагает переименовать его запись, прежде чем удалять старое имя. Описание шагов см. в разделе Claude Code отклоняет имя маркетплейса. Сообщение перечисляет эти шаги в Claude Code v2.1.292 или новее.

Поля верхнего уровня

Таблица перечисляет каждый ключ, который Claude Code читает из marketplace.json. name, owner и plugins являются обязательными.

Записи плагинов

Каждый объект в массиве plugins верхнего уровня marketplace.json называет плагин и указывает, откуда его загружать. name и source являются обязательными. Помимо полей для списка в каталоге, запись также принимает каждое поле plugin.json, такое как description, version, author, commands и hooks. Для того, когда эти поля применяются, см. Как запись объединяется с plugin.json. Таблица перечисляет собственные поля записи и поля манифеста, чьё значение изменяется в записи.

Как запись объединяется с plugin.json

Поля записи применяются по-разному к загруженному плагину, который имеет свой собственный .claude-plugin/plugin.json, и к тому, который его не имеет:
  • Нет plugin.json: запись является манифестом независимо от strict. Применяется каждое поле манифеста, которое принимает запись, включая mcpServers, lspServers, userConfig и channels.
  • plugin.json присутствует: plugin.json является манифестом. Строгий режим решает, объединяются ли шесть полей компонентов записи, commands, agents, skills, hooks, outputStyles и themes, с ним или отклоняются как конфликт. Поля записи mcpServers, lspServers, userConfig и channels не применяются. Объявите их в plugin.json.

Хуки в записи

Напишите hooks записи как встроенный объект, который сопоставляет имена событий хуков с массивами matcher. Если вы напишете путь к файлу или массив вместо этого, claude plugin validate пройдёт. Эти хуки никогда не запускаются, и Claude Code сообщает об ошибке not yet supported in a marketplace entry для плагина. Поместите хуки на основе файлов в собственный hooks/hooks.json плагина или plugin.json.

Поля отображения

Как запись, так и собственный plugin.json плагина могут устанавливать поля отображения displayName, description, author, homepage, repository, license и keywords. Пользователи видят эти значения в списках и деталях плагинов до и после установки:
  • Для поля, которое вы устанавливаете в записи, пользователи видят значение записи, даже когда plugin.json устанавливает другое.
  • Для поля, которое запись оставляет неустановленным, пользователи видят значение plugin.json.
До установки Claude Code может читать plugin.json только для записей с источником с относительным путём, чьи файлы плагинов находятся внутри самого маркетплейса. Для записи с любым другим типом источника пользователи видят только собственные поля записи до установки плагина.

Строгий режим

strict решает, что происходит, когда загруженный плагин имеет свой собственный plugin.json и запись также объявляет любое из полей компонентов: commands, agents, skills, hooks, outputStyles или themes. При strict: true, по умолчанию, Claude Code добавляет поля компонентов записи к plugin.json, кроме hooks, чьи matcher заменяют matcher манифеста для каждого события. При strict: false запись, которая объявляет любое поле компонента, является конфликтом, и плагин не загружается. Таблица показывает каждую комбинацию strict, plugin.json и полей компонентов записи.

Источники плагинов

source записи плагина указывает, откуда Claude Code загружает этот плагин. Это либо строка относительного пути, либо объект, чей собственный ключ source называет тип, поэтому запись выглядит как "source": { "source": "github", "repo": "your-org/formatter" }. Таблица перечисляет каждый тип источника плагина и его поля. Имена url и github также являются типами источника marketplace, где url означает прямую ссылку на файл marketplace.json вместо git-репозитория. git существует только как источник marketplace, и npm существует как оба. git-subdir, archive и command существуют только как источники плагинов. Используйте относительный путь для плагина в подкаталоге самого репозитория marketplace. Используйте git-subdir для подкаталога какого-то другого репозитория. Источники github, url и git-subdir совместно используют поля ref и sha:
  • ref: ветка или тег. По умолчанию ветка репозитория по умолчанию.
  • sha: полный 40-символьный SHA коммита в нижнем регистре. Когда вы устанавливаете оба ref и sha, Claude Code проверяет sha. На большинстве git-хостов, включая GitHub, GitLab и Bitbucket, это означает, что установка успешна, даже если ветка или тег, названные ref, были удалены выше по течению, пока коммит всё ещё достижим из репозитория. Некоторые серверы, такие как AWS CodeCommit, не поддерживают загрузку коммитов по SHA. На этих серверах ref всё ещё должен существовать и закреплённый коммит должен быть достижим из него.
Для того, как каждый тип загружается, кэшируется и версионируется, см. Справочник загрузки плагинов.

Источник плагина с относительным путём

Путь разрешается от корня marketplace. ./plugins/formatter — это <root>/plugins/formatter, даже хотя файл marketplace находится в <root>/.claude-plugin/. Путь, содержащий .., не проходит валидацию. На macOS и Linux Claude Code отказывает в записи пути, содержащей обратную косую черту где-либо после начального ./, поэтому напишите путь с прямыми косыми чертами.
Относительный путь разрешается только, когда Claude Code имеет файлы marketplace, поэтому проверьте тип источника marketplace:
  • github, git, file и directory: Claude Code имеет файлы marketplace.
  • url: Claude Code загружает только marketplace.json, поэтому относительные пути не могут разрешаться. Дайте каждому плагину источник объекта вместо этого, такой как github или git-subdir.
  • settings: относительные пути отклоняются сразу.

Подмодули Git в репозитории маркетплейса

Когда Claude Code клонирует репозиторий маркетплейса, он загружает только те подмодули git, которые содержат файлы плагинов. Требует Claude Code v2.1.295 или позже. Более ранние версии загружают все подмодули, включая вложенные. Если в репозитории есть большой подмодуль, Claude Code может при его загрузке превысить таймаут клонирования. Для плагина в подкаталоге, таком как ./plugins/formatter, Claude Code загружает подмодуль в следующих случаях:
  • Плагин находится внутри подмодуля: подмодуль является каталогом плагина или каталогом выше него
  • Подмодуль находится внутри плагина: подмодуль находится где-либо внутри каталога плагина
  • Символическая ссылка указывает внутрь подмодуля: цель ссылки, закоммиченной в репозиторий, находится в подмодуле
Плагин в корне маркетплейса с "source": "./" получает либо все подмодули репозитория, либо ни одного. Claude Code загружает все подмодули, когда что-либо из следующего указывает на какой-либо подмодуль:
  • Каталог компонентов: каталог в корне, содержащий компоненты плагина, такой как skills/, hooks/ или bin/
  • Путь в конфигурации плагина: путь в записи плагина в маркетплейсе, в его plugin.json или в файле конфигурации, таком как .mcp.json или hooks/hooks.json
  • Символическая ссылка: ссылка, закоммиченная в репозиторий
  • Текст в файлах плагина: путь подмодуля, такой как vendor/tool, записанный в файле конфигурации или в файле внутри каталога компонентов
Если ничто из этого не указывает на подмодуль, Claude Code не загружает для этого плагина ни одного подмодуля. Репозиторий, который одновременно является проектом и плагином, часто содержит подмодули, используемые только сборкой проекта, и это правило их исключает. Claude Code также загружает все подмодули, когда не может определить, какие из них содержат файлы плагинов, например:
  • SKILL.md в корне: в этом случае весь репозиторий является каталогом одного скилла
  • Файл, который Claude Code не может прочитать: файл маркетплейса, один из файлов конфигурации плагина или .gitmodules
Если вы добавляете маркетплейс с --sparse или его источник задаёт sparsePaths, Claude Code извлекает только указанные там каталоги и не загружает ни одного подмодуля. Более ранние версии поступают так же. Чтобы исключить из клона подмодуль, который не используется вашими плагинами, см. Исключение неиспользуемых подмодулей из клона.

Имена без префикса под pluginRoot

Имя без префикса — это одно имя каталога без /, такое как "formatter". Чтобы писать имена без префикса вместо путей ./, установите metadata.pluginRoot на каталог, под которым они разрешаются. С "pluginRoot": "./plugins", "source": "formatter" разрешается в ./plugins/formatter. Требует Claude Code v2.1.239 или позже. metadata.pluginRoot имеет эти ограничения:
  • Он сам должен быть относительным путём внутри marketplace.
  • Он не влияет на источник, который уже начинается с ./.
  • Источник, содержащий /, такой как team-a/formatter, не является именем без префикса и всё ещё нуждается в префиксе ./, даже когда установлен metadata.pluginRoot.

Источник плагина github

repo принимает owner/repo. ref и sha опциональны.

Источник плагина url

url — это полный git URL: https://, http://, file:// или git@. Суффикс .git не требуется, поэтому URL Azure DevOps и AWS CodeCommit работают как написано. Этот тип не принимает сокращение owner/repo.

Источник плагина git-subdir

url принимает полный git URL или сокращение GitHub owner/repo. path — это подкаталог, который содержит плагин, и Claude Code извлекает только этот подкаталог. При использовании URL https или SSH Claude Code запрашивает у сервера частичный клон, поэтому с хоста, поддерживающего частичные клоны, плагин из большого монорепозитория устанавливается без загрузки остальной части репозитория.

Источник плагина npm

Источник npm принимает эти поля:
  • package: имя пакета в реестре, такое как @your-org/formatter, имя с добавленной версией, такое как @your-org/formatter@2.0.0, или ссылка https на tarball-файл пакета
  • version: версия, диапазон semver или dist-tag, используемые, когда package — это имя пакета без добавленной версии. Опустите его, чтобы загрузить latest
  • registry: URL реестра для пакета, который не находится в реестре по умолчанию
Claude Code загружает пакет с вашим npm-клиентом. Скрипты установки пакета, такие как preinstall или postinstall, никогда не запускаются, и его зависимости не устанавливаются во время загрузки. Если пакет имеет поддерживаемый файл блокировки рядом с его package.json, Claude Code устанавливает эти зависимости пакетов Node.js в отдельном шаге, также с отключёнными скриптами. Claude Code проверяет значение package перед любой загрузкой. Отклонённое значение приводит к сбою установки с сообщением, в котором указаны значение и причина. К отклоняемым значениям относятся:
  • Git-адрес, путь к папке или file:, или псевдоним npm:: используйте источник github, url или git-subdir для git-репозитория, относительный путь для папки в маркетплейсе и собственное имя пакета для псевдонима
  • Ссылка на tarball на github.com, gist.github.com, gitlab.com, bitbucket.org или git.sr.ht: отклоняется, даже если ссылка — это загрузка релиза GitHub, если только это не ссылка на npm-реестр GitLab под gitlab.com/api/v4/
  • Ссылка на tarball через http: отклоняется, если только она не указывает на собственный npm-реестр по умолчанию устанавливающего пользователя
URL registry должен использовать https, если только это не собственный npm-реестр по умолчанию устанавливающего пользователя. С любым другим реестром http установка завершается сбоем до того, как npm обратится к нему.

Источник плагина archive

url должен использовать https:// и не может указывать на хост обратной связи, локальной связи или облачных метаданных. Для размера, тайм-аута, перенаправления и ограничений на извлечение при загрузке см. Оставайтесь в пределах ограничений загрузки для размещённых файлов. Корень плагина может быть в верхней части zip или на один каталог ниже. sha256 — это дайджест архива как 64 шестнадцатеричных символа, прописные или строчные. Когда вы его устанавливаете, Claude Code отказывает в загрузке, которая не совпадает.

Источник плагина command

Используйте источник command, когда инструмент, установленный на машине пользователя, производит каталог плагина, такой как IDE, которая отображает свой плагин для цепочки инструментов, которую выбрал пользователь. Claude Code запускает команду, когда пользователь устанавливает или обновляет плагин, и снова один раз за сеанс, поэтому пользователи получают изменённый вывод инструмента без переустановки. Источник command принимает эти поля:
  • command: команда оболочки, которая выводит абсолютный путь каталога плагина как одну строку и выходит 0. Claude Code показывает пользователям всю строку для проверки перед её запуском. Напишите её как печатаемый ASCII, максимум 500 символов, без прогона из четырёх или более пробелов.
  • timeout: целое число секунд от 1 до 600. По умолчанию 60.
  • mode: copy, по умолчанию, или link. См. Режим копирования и режим ссылки.
Для того, как пользователи принимают команду, см. Установка из вашей оболочки. Для того, что пользователи видят после того, как вы её измените, см. Изменение команды источника command. Администраторы отключают источники command с disableCommandPluginSources.

Что должна делать команда

Напишите команду, чтобы соответствовать этим требованиям:
  • Оболочка и рабочий каталог: Claude Code запускает команду через sh или через cmd.exe на Windows из домашнего каталога пользователя. Дайте абсолютный путь или команду на PATH.
  • Вывод: выведите ровно одну строку на stdout, абсолютный путь каталога плагина, и выйдите 0 в течение timeout секунд.
  • Содержимое каталога: каталог содержит полный плагин к моменту выхода команды. Путь может отличаться от одного запуска к другому.

Вывод, который приводит к отказу установки или обновления

Установка или обновление не удаётся, когда команда выходит с ненулевым кодом, работает дольше timeout или выводит что-либо, кроме одного абсолютного пути. Это также не удаётся, когда выведённый каталог является одним из этих:
  • Нет содержимого плагина: выведённый каталог не имеет содержимого плагина на его верхнем уровне, такого как каталог .claude-plugin/ или каталог skills/, commands/, agents/ или hooks/.
  • Собственный каталог сеанса: выведённый каталог — это тот, в котором был запущен Claude Code, или один из его родителей.
  • Сетевой путь: на Windows выведённый путь — это путь UNC.
  • Слишком большой для копирования: в режиме копирования каталог больше 256 МиБ или имеет более 20 000 записей.
mode решает, копирует ли Claude Code выведённый каталог или использует его на месте:
  • copy: Claude Code копирует каталог в кэш плагина и выводит версию плагина из хэша скопированных файлов. Ваш инструмент может удалить или переписать каталог после выхода команды. Повторный запуск, который производит идентичные файлы, считается актуальным.
  • link: Claude Code заполняет запись кэша плагина ссылкой на каждую запись верхнего уровня выведённого каталога и загружает файлы на месте. Ничего не копируется, содержимое файлов не хэшируется, и ограничения размера не применяются. Используйте его для каталога, слишком большого для копирования, такого как экспорт отображённого SDK.
Плагин в режиме ссылки имеет эти требования:
  • Держите каталог на месте: Claude Code загружает плагин через ссылки при каждом запуске, поэтому выведённый каталог должен оставаться там, где он находится, пока плагин остаётся установленным.
  • Выведите другой путь, чтобы сигнализировать о новом содержимом: версия поступает из реального пути выведённого каталога и его записей верхнего уровня, а не из файлов внутри них.
  • Держите символические ссылки верхнего уровня внутри каталога: установка не удаётся, если запись верхнего уровня — это символическая ссылка, которая указывает вне выведённого каталога.
  • Включите node_modules: Claude Code пропускает установку зависимостей пакетов Node.js для плагина в режиме ссылки, поэтому выведите каталог, который уже содержит пакеты, которые нужны плагину.
  • Сеансы, запущенные внутри каталога: сеанс, запущенный в выведённом каталоге или где-либо ниже, не загружает плагин.
  • Не на Windows: Claude Code отказывает в установке плагина в режиме ссылки на Windows. Объявите "mode": "copy" там.

Источники Marketplace

Источник marketplace указывает, откуда Claude Code загружает marketplace.json. CLI создаёт один для вас при добавлении marketplace, и вы пишете один сами в параметрах:
  • claude plugin marketplace add: Claude Code создаёт источник из строки, которую вы передаёте.
  • extraKnownMarketplaces: вы пишете источник сами как объект source.
  • strictKnownMarketplaces и blockedMarketplaces: администраторы пишут источники в этих двух списках политик. strictKnownMarketplaces — это список разрешений, а blockedMarketplaces — это список запретов.
Имена типов url, git и github означают что-то другое в источнике marketplace, чем в источнике плагина: Таблица перечисляет каждый тип источника marketplace с его полями, вводом claude plugin marketplace add, который его производит, и что он делает в каждом из трёх ключей параметров.

Поля по типам

Таблица перечисляет каждое поле источника marketplace, которое имеет значение по умолчанию, ограничение или значение, специфичное для его типа.

Значения источников, действительные только в списках политик

hostPattern, pathPattern, skills-dir и форма owner/* из repo действительны только в двух списках политик, strictKnownMarketplaces и blockedMarketplaces:
  • hostPattern и pathPattern: регулярные выражения, которые Claude Code тестирует против источника перед загрузкой из него.
  • skills-dir: не источник. Если вы задаёте strictKnownMarketplaces без записи {"source": "skills-dir"}, плагины каталога skills перестают загружаться. Если вы блокируете любой тип кастомизации с помощью strictPluginOnlyCustomization, они перестают загружаться независимо от того, присутствует ли эта запись.
  • owner/*: как значение repo из github, совпадает с каждым репозиторием ровно под этим владельцем GitHub. Требует Claude Code v2.1.223 или позже.
Для порядка совпадения, точной семантики ref и рецептов см. Управление плагинами для вашей организации.

Объекты источников в параметрах

Значение extraKnownMarketplaces — это карта от имени marketplace к объекту с source. Эта запись регистрирует marketplace из git-репозитория в его ветке main:
strictKnownMarketplaces и blockedMarketplaces — это массивы объектов источников. Этот список разрешений допускает одного владельца GitHub и один внутренний хост:

Сообщения валидации

claude plugin validate <path> принимает корень маркетплейса или сам файл маркетплейса. Чтобы этот файл был проверен как маркетплейс, а не как манифест плагина, назовите его marketplace.json. Для кодов выхода и --strict см. plugin validate. Сообщение называет запись плагина по её индексу, написанному как plugins.1.source или plugins[1].source. Сообщение с префиксом индекса записи и plugin.json →, такое как plugins[2] plugin.json →, касается собственных файлов этого плагина. claude plugin validate сообщает об ошибках перечисляет эти сообщения с их исправлениями. Предупреждения, которые упоминают имена флагов Claude Desktop, которые Claude Desktop отклоняет. Таблица сопоставляет сообщения уровня marketplace с полем, которое каждое касается.

Неверный ввод на источнике

Invalid input на source означает, что объект не совпадал с типом источника. Проверьте эти причины:
  • npm package, содержащий ..
  • Тип source, который не является одним из источников плагинов
  • Известный тип с отсутствующим обязательным полем или неправильного типа, такой как github без repo
Относительный путь, который не начинается с ./, кроме "." или имени без префикса под metadata.pluginRoot, завершается ошибкой Invalid string: must start with "./". До v2.1.285 он выводил Invalid input, как и причины выше.

Сбои, которые валидация не ловит

claude plugin validate не сообщает о каждом сбое. Запись hooks, написанная как путь к файлу или массив, проходит валидацию, и ошибка появляется только при загрузке плагина, как описывает Hooks в записи. Ошибки загрузки source также появляются только после установки, а не при валидации. claude plugin list показывает плагин, который не загрузился, с его ошибкой, и Устранение неполадок плагинов охватывает строки загрузки.

Следующие шаги