Marketplace 参考
marketplace.json 字段、插件条目和插件及 marketplace 源对象的完整参考,包括每个字段的有效位置。
marketplace.json 是定义插件 marketplace 的文件。它包含 marketplace 的名称、所有者和每个插件的一个条目。每个条目的插件源说明 Claude Code 从哪里获取该插件。
marketplace 源是一个单独的对象,说明 Claude Code 从哪里获取 marketplace 文件本身。你在设置中编写一个,或者当你运行 claude plugin marketplace add 时 Claude Code 会构建一个。
本参考适用于需要确切字段名称或值的 marketplace 维护者,以及需要了解哪些 source 值在 extraKnownMarketplaces、strictKnownMarketplaces 和 blockedMarketplaces 中有效的管理员。
这些情况在其他页面上有介绍:
- 构建或托管 marketplace:请参阅 创建 marketplace 和 托管和维护 marketplace
- 允许列表和阻止列表配方:请参阅 为你的组织管理插件
查找你正在编写或读取的内容的部分:
- marketplace 文件:顶级字段 和 插件条目
- 条目的
source:插件源 - 设置中的
source对象:Marketplace 源 - 来自
claude plugin validate <path>的输出:验证消息,它将每条消息映射到它命名的字段
Marketplace 文件
将 marketplace 文件保存在 marketplace 目录中的 .claude-plugin/marketplace.json。如果你将文件保存在存储库中的其他位置,用户必须在 extraKnownMarketplaces 中声明 marketplace,并在其源上设置 path,因为 claude plugin marketplace add 没有该选项。
包含 .claude-plugin/ 的目录称为 marketplace 根目录,每个相对插件源都从它解析,而不是从 .claude-plugin/。
每个用户为每个 name 注册一个 marketplace,因此用户不能同时注册两个同名的 marketplace。
Claude Code 忽略未知的顶级键或插件条目键,而不是拒绝它,因此拼写错误会静默加载。claude plugin validate 将每个未知键报告为警告。
保留名称
你不能给你的 marketplace 以下任何名称:
- 官方 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.com/anthropics/下的github或gitmarketplace 源,否则保留。 - 社区 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。 - 保留名称的另一种拼写:与保留名称仅在尾部点或用除下划线以外的符号代替连字符的名称,因此
claude.code.plugins计为claude-code-plugins。claude plugin validate接受这样的名称;添加 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中,如 仅在策略列表中有效的源值 下所述。 npm、pip、uv、cargo、github和gh:以任何大小写保留。此检查需要 Claude Code v2.1.275 或更高版本。- 以
claudeai-开头的名称:为托管在 claude.ai 上的 marketplace 保留。claude plugin marketplace add拒绝任何其他使用一个的 marketplace,错误为Cannot add marketplace "<name>": names starting with "claudeai-" are reserved for marketplaces hosted on claude.ai。
顶级字段
该表列出 Claude Code 从 marketplace.json 读取的每个键。name、owner 和 plugins 是必需的。
| 字段 | 类型 | 描述 |
|---|---|---|
name |
string | Marketplace 标识符。没有空格、控制字符或双向格式化字符,没有 / 或 \,没有 ..,不是 .。请参阅 保留名称。用户在安装插件时在 @ 后键入它 |
owner |
object | 维护者信息。name 是必需的;email 和 url 是可选的 |
plugins |
array | 插件条目。每个条目单独验证,因此一个无效条目不会导致 marketplace 失败 |
$schema |
string | JSON Schema URL 用于编辑器自动完成。在加载时忽略 |
description |
string | 向用户显示的 marketplace 描述。claude plugin validate 在缺少时警告 |
version |
string | Marketplace 清单版本 |
metadata.description、metadata.version |
string | description 和 version 的备用位置 |
metadata.pluginRoot |
string | 裸插件源名称解析的目录。请参阅 相对路径插件源。需要 Claude Code v2.1.239 或更高版本 |
forceRemoveDeletedPlugins |
boolean | 当为 true 时,从 plugins 中删除的插件会在用户的机器上卸载。请参阅 托管和维护 marketplace |
allowCrossMarketplaceDependenciesOn |
array of strings | 其插件可作为此 marketplace 插件的依赖项安装的 marketplace 名称。安装插件时,仅适用该插件自己的 marketplace 中的列表,用于其整个依赖链。请参阅 插件依赖项 |
renames |
object | 从前一个插件 name 映射到其当前名称,或映射到 null 以删除插件。需要 Claude Code v2.1.193 或更高版本。请参阅 托管和维护 marketplace |
插件条目
marketplace.json 的顶级 plugins 数组中的每个对象命名一个插件并说明从哪里获取它。name 和 source 是必需的。
条目也接受每个 plugin.json 字段,如 description、version、author、commands 和 hooks。有关这些字段何时适用,请参阅 条目如何与 plugin.json 结合。
该表列出条目自己的字段和清单字段,其含义在条目中改变。
| 字段 | 类型 | 描述 |
|---|---|---|
name |
string | 插件标识符,没有空格、控制字符或双向格式化字符。用户在安装时在 @ 前键入它,即使插件自己的 plugin.json 设置了不同的 name |
source |
string or object | 从哪里获取插件。请参阅 插件源 |
description |
string | 在 /plugin 列表和详情中显示 |
version |
string | 插件的版本字符串。当 plugin.json 也设置 version 时,plugin.json 优先,claude plugin validate 警告。请参阅 插件加载参考 |
category |
string | 用于组织目录的自由格式类别 |
tags |
array of strings | 用于搜索的自由格式标签 |
strict |
boolean | 默认 true。plugin.json 是否是插件组件的权威来源。请参阅 严格模式 |
relevance |
object | 告诉 Claude Code 何时建议插件的信号。请参阅 为你的组织推荐插件 |
dependencies |
array | 必须为此插件启用的插件。每个项是 "name"、"name@marketplace" 或对象。请参阅 插件依赖项 |
defaultEnabled |
boolean | 默认 true。当用户未在 enabledPlugins 中设置时,插件是否启动时启用。条目值优先于 plugin.json |
displayName |
string | 在 UI 中显示的人类可读名称。当条目和插件的 plugin.json 都未设置时,用户看到插件的 name |
metadata |
object | 用于你自己字段的自由格式对象。Claude Code 不读取它。需要 Claude Code v2.1.222 或更高版本 |
headers |
object | Claude Code 在下载此条目的 archive 时发送的 HTTP 标头。此处设置的标头替换 marketplace 源的 headers 中同名的标头。需要 Claude Code v2.1.238 或更高版本 |
headersHelper |
string | 打印此条目的 archive 下载标头的命令,作为一个 JSON 对象,用于过期的凭证。条目还必须设置 "strict": false。需要 Claude Code v2.1.238 或更高版本。请参阅 验证 archive 下载 |
条目如何与 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
将条目 hooks 写成内联对象,将 hook 事件名称映射到匹配器数组。如果你写文件路径或数组,claude plugin validate 会通过。这些 hooks 永远不会运行,Claude Code 为插件报告 not yet supported in a marketplace entry 错误。将基于文件的 hooks 放在插件自己的 hooks/hooks.json 或 plugin.json 中。
显示字段
条目和插件自己的 plugin.json 都可以设置显示字段 displayName、description、author、homepage、repository、license 和 keywords。用户在插件列表和详情中看到这些值,在安装前后:
- 对于你在条目上设置的字段,用户看到条目的值,即使
plugin.json设置了不同的值。 - 对于条目未设置的字段,用户看到
plugin.json值。
在安装前,Claude Code 只能为具有 相对路径源 的条目读取 plugin.json,其插件文件在 marketplace 内。对于具有任何其他源类型的条目,用户在安装插件之前只看到条目自己的字段。
严格模式
strict 决定当获取的插件具有自己的 plugin.json 且条目也声明任何 组件字段 时会发生什么:commands、agents、skills、hooks、outputStyles 或 themes。使用 strict: true(默认值),Claude Code 将条目的组件字段附加到 plugin.json,除了 hooks,其匹配器替换清单的每个事件。使用 strict: false,声明任何组件字段的条目是冲突,插件加载失败。该表显示 strict、plugin.json 和条目的组件字段的每个组合。
strict |
plugin.json |
条目组件字段 | 结果 |
|---|---|---|---|
| any | absent | any | 条目是清单 |
true,默认值 |
present | any | plugin.json 是权威。Claude Code 将条目的组件字段附加到它,除了 hooks,其匹配器 替换清单的每个事件 |
false |
present | none | plugin.json 是清单,与 true 相同 |
false |
present | one or more | 冲突。插件加载失败,错误为 Plugin <name> has conflicting manifests: both plugin.json and marketplace entry specify components |
Plugin sources
一个插件条目的 source 说明 Claude Code 从哪里获取该插件。它要么是一个相对路径字符串,要么是一个对象,其自身的 source 键命名类型,所以一个条目看起来像 "source": { "source": "github", "repo": "your-org/formatter" }。
该表列出了每种插件源类型及其字段。
| 类型 | 字段 | 说明 |
|---|---|---|
| 相对路径 | 字符串本身 | marketplace 内的一个目录,从 marketplace 根目录解析。必须以 ./ 开头,除非你在 metadata.pluginRoot 下写一个裸名。"." 本身表示根目录 |
github |
repo, ref, sha |
GitHub 仓库,格式为 owner/repo |
url |
url, ref, sha |
任何 git 仓库的 URL |
git-subdir |
url, path, ref, sha |
git 仓库的一个子目录,使用稀疏部分克隆获取 |
npm |
package, version, registry |
npm 包,使用你的 npm 客户端获取并解包,不运行安装脚本 |
archive |
url, sha256 |
HTTPS 上的 Zip 存档。需要 Claude Code v2.1.224 或更高版本 |
command |
command, timeout, mode |
由 Claude Code 在用户机器上运行的命令打印的目录。需要 Claude Code v2.1.229 或更高版本 |
名称 url 和 github 也是marketplace 源类型,其中 url 表示直接链接到 marketplace.json 文件而不是 git 仓库。git 仅作为 marketplace 源存在,npm 既作为 marketplace 源也作为插件源存在。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,这意味着即使上游的分支或标签已被删除,只要提交仍然可从仓库到达,安装就会成功。某些服务器(如 AWS CodeCommit)不支持按 SHA 获取提交。在这些服务器上,ref必须仍然存在,固定的提交必须可从它到达。
有关每种类型如何获取、缓存和版本化的信息,请参阅 Plugin loading reference。
Relative path plugin source
路径从 marketplace 根目录解析。./plugins/formatter 是 <root>/plugins/formatter,即使 marketplace 文件在 <root>/.claude-plugin/ 中。
包含 .. 的路径会验证失败。在 macOS 和 Linux 上,Claude Code 拒绝条目路径在前导 ./ 之后的任何地方包含反斜杠,所以用正斜杠写路径。
{ "name": "formatter", "source": "./plugins/formatter" }
相对路径仅在 Claude Code 拥有 marketplace 文件时才能解析,所以检查 marketplace 源类型:
github、git、file和directory:Claude Code 拥有 marketplace 的文件。url:Claude Code 仅获取marketplace.json,所以相对路径无法解析。给每个插件一个对象源,如github或git-subdir。settings:相对路径被直接拒绝。
Bare names under pluginRoot
裸名是一个没有 / 的单个目录名,如 "formatter"。要写裸名而不是 ./ 路径,设置 metadata.pluginRoot 为它们解析的目录。使用 "pluginRoot": "./plugins","source": "formatter" 解析为 ./plugins/formatter。需要 Claude Code v2.1.239 或更高版本。
metadata.pluginRoot 有这些限制:
- 它本身必须是 marketplace 内的相对路径。
- 它对已经以
./开头的源没有影响。 - 包含
/的源,如team-a/formatter,不是裸名,即使设置了metadata.pluginRoot也仍然需要./前缀。
github plugin source
repo 采用 owner/repo 格式。ref 和 sha 是可选的。
{
"name": "formatter",
"source": {
"source": "github",
"repo": "your-org/formatter",
"ref": "v2.0.0",
"sha": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"
}
}
url plugin source
url 是一个完整的 git URL:https://、http://、file:// 或 git@。不需要 .git 后缀,所以 Azure DevOps 和 AWS CodeCommit URL 可以按原样工作。此类型不采用 owner/repo 简写。
{
"name": "formatter",
"source": {
"source": "url",
"url": "https://gitlab.example.com/your-group/formatter.git",
"ref": "main"
}
}
git-subdir plugin source
url 接受完整的 git URL 或 GitHub owner/repo 简写。path 是保存插件的子目录,Claude Code 仅下载该子目录。
{
"name": "formatter",
"source": {
"source": "git-subdir",
"url": "https://github.com/your-org/monorepo.git",
"path": "tools/formatter"
}
}
npm plugin source
一个 npm 源采用这些字段:
package:一个包名,或一个作用域名,如@your-org/formatterversion:一个版本或范围registry:一个不在默认 registry 上的包的 registry URL
Claude Code 使用你的 npm 客户端获取包。包的安装脚本,如 preinstall 或 postinstall,永远不会运行,其依赖项在获取期间不会被安装。如果包在其 package.json 旁边有一个支持的 lockfile,Claude Code 在单独的步骤中安装这些 Node.js 包依赖项,也禁用脚本。
{
"name": "formatter",
"source": {
"source": "npm",
"package": "@your-org/formatter",
"version": "^2.0.0",
"registry": "https://npm.example.com"
}
}
archive plugin source
url 必须使用 https://,不能指向环回、链接本地或云元数据主机。
插件根可能在 zip 的顶部或下一个目录。
sha256 是存档的摘要,为 64 个十六进制字符,大写或小写。当你设置它时,Claude Code 拒绝不匹配的下载。
{
"name": "formatter",
"source": {
"source": "archive",
"url": "https://artifacts.example.com/formatter-2.0.0.zip",
"sha256": "6bfa50e3d2e00c052b46abe51fff89346ac803e45771f76dcf6df1ab74cca5e1"
}
}
command plugin source
当安装在用户机器上的工具生成插件目录时,使用 command 源,如一个为用户选择的工具链呈现其插件的 IDE。Claude Code 在用户安装或更新插件时运行该命令,并每个会话再运行一次,所以用户无需重新安装就能获得工具的更改输出。
一个 command 源采用这些字段:
command:一个 shell 命令,打印插件目录的绝对路径作为一行并退出 0。Claude Code 在运行前向用户显示整个字符串以供审查。将其写为可打印的 ASCII,最多 500 个字符,没有四个或更多空格的连续。timeout:从 1 到 600 的整数秒数。默认为 60。mode:copy(默认)或link。参见 Copy mode and link mode。
{
"name": "formatter",
"source": {
"source": "command",
"command": "my-tool claude-plugin-path",
"timeout": 120
}
}
有关用户如何接受命令的信息,请参阅 Install from your shell。有关你更改它后用户看到的内容,请参阅 Change the command of a command source。管理员使用 disableCommandPluginSources 关闭命令源。
What the command must do
编写命令以满足这些要求:
- Shell 和工作目录:Claude Code 通过
sh运行命令,或在 Windows 上通过cmd.exe,从用户的主目录。给出绝对路径或PATH上的命令。 - 输出:在 stdout 上打印恰好一行,插件目录的绝对路径,并在
timeout秒内退出 0。 - 目录内容:该目录在命令退出时保存完整的插件。路径可能因运行而异。
Output that fails the install or update
当命令退出非零、运行时间超过 timeout 或打印除一个绝对路径之外的任何内容时,安装或更新失败。当打印的目录是以下之一时,它也会失败:
- 没有插件内容:打印的目录在其顶级没有插件内容,如
.claude-plugin/目录或skills/、commands/、agents/或hooks/目录。 - 会话自己的目录:打印的目录是 Claude Code 启动的目录,或其父目录之一。
- 网络路径:在 Windows 上,打印的路径是 UNC 路径。
- 太大而无法复制:在复制模式下,目录大于 256 MiB 或有超过 20,000 个条目。
Copy mode and link mode
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 源 | 作为插件源 |
|---|---|---|
url |
直接链接到 marketplace.json 文件,字段为 url、headers 和 headersHelper |
要克隆的 git 存储库,字段为 url、ref 和 sha |
git |
要克隆的 git 存储库,字段为 url、ref、path 和 sparsePaths |
不存在 |
github |
GitHub 存储库,字段为 repo、ref、path 和 sparsePaths |
GitHub 存储库,字段为 repo、ref 和 sha,没有 path |
该表列出每个 marketplace 源类型及其字段、产生它的 claude plugin marketplace add 输入,以及它在三个设置键中的作用。
| 类型 | 字段 | marketplace add 输入 |
extraKnownMarketplaces |
strictKnownMarketplaces |
blockedMarketplaces |
|---|---|---|---|---|---|
url |
url、headers、headersHelper |
不匹配 git 形式的 http:// 或 https:// URL |
加载 | 允许相同的 URL | 阻止相同的 URL |
github |
repo、ref、path、sparsePaths |
owner/repo、owner/repo@ref 或 owner/repo#ref |
加载 | 允许相同的 repo、ref 和 path。repo 可能是 owner/* |
阻止相同的,以及到相同存储库的 git URL |
git |
url、ref、path、sparsePaths |
user@host:path URL,或以 .git 结尾、包含 /_git/ 或命名 github.com 或 gitlab.com 存储库的 https:// URL。#ref 固定 ref |
加载 | 允许相同的 URL、ref 和 path |
阻止相同的,以及相同 github.com 存储库的其他拼写 |
npm |
package |
未产生 | 加载失败:NPM marketplace sources not yet implemented |
解析但不匹配任何内容,因为没有任何内容注册 npm marketplace |
解析但不匹配任何内容 |
file |
path |
.json 文件的路径 |
加载 | 允许相同的路径 | 阻止相同的路径 |
directory |
path |
目录的路径 | 加载 | 允许相同的路径 | 阻止相同的路径 |
settings |
name、plugins、owner |
未产生 | 加载 | 允许具有相同 name 和相同 plugins 的条目 |
阻止相同的 name |
skills-dir |
none | 未产生 | 加载失败:Unsupported marketplace source type |
保持 skills-directory 插件 在设置允许列表时加载。请参阅 仅在策略列表中有效的源值 | 停止 skills-directory 插件加载 |
hostPattern |
hostPattern |
未产生 | 加载失败:Unsupported marketplace source type |
允许主机匹配的 github、git 和 url 源 |
阻止这些源 |
pathPattern |
pathPattern |
未产生 | 加载失败:Unsupported marketplace source type |
允许 path 匹配的 file 和 directory 源 |
阻止这些源 |
按类型的字段
该表列出每个具有默认值、约束或特定于其类型的含义的 marketplace 源字段。
| 字段 | 类型 | 描述 |
|---|---|---|
url |
url |
指向 marketplace.json 文件的链接。Claude Code 仅下载该文件,因此 marketplace 的插件不能使用 相对路径源 |
url |
git |
要克隆的 git 存储库 |
headers |
url |
Claude Code 随获取发送的 HTTP 标头映射,用于经过身份验证的主机 |
headersHelper |
url |
打印标头的命令,其值太短暂而无法在 headers 中列出。需要 Claude Code v2.1.238 或更高版本。请参阅 验证 archive 下载 |
repo |
github |
在 marketplace add 和 extraKnownMarketplaces 中,repo 必须命名一个存储库。marketplace add 拒绝 owner/* 作为无效的 owner/repo 简写;在 extraKnownMarketplaces 中 Claude Code 按字面意思取它,克隆失败 |
ref |
github、git |
分支或标签。默认为存储库的默认分支 |
path |
github、git |
marketplace 文件在存储库内的路径。默认为 .claude-plugin/marketplace.json |
path |
file |
marketplace 文件本身。Claude Code 就地读取它,并将上两级的目录作为 marketplace 根目录,因此将文件保持在 <root>/.claude-plugin/marketplace.json |
path |
directory |
marketplace 根目录,包含 .claude-plugin/marketplace.json 的目录 |
sparsePaths |
github、git |
用于稀疏检出的目录数组,如 [".claude-plugin", "plugins"]。claude plugin marketplace add --sparse 设置它 |
skipLfs |
github、git |
接受且无效果。请参阅 保持插件文件不在 Git LFS 中 |
name |
settings |
必须等于 extraKnownMarketplaces 键,不能是 保留名称 |
plugins |
settings |
内联目录,没有托管文件。每个项采用 name、source、description、version、strict、headers 和 headersHelper。将每个项的 source 写成对象类型,因为相对路径没有存储库来解析 |
仅在策略列表中有效的源值
hostPattern、pathPattern、skills-dir 和 repo 的 owner/* 形式仅在两个策略列表中有效,strictKnownMarketplaces 和 blockedMarketplaces:
hostPattern和pathPattern:Claude Code 在获取前针对源测试的正则表达式。skills-dir:不是源。如果你设置strictKnownMarketplaces,skills-directory 插件 停止加载,直到你将{"source": "skills-dir"}添加到该列表。owner/*:作为githubrepo值,匹配恰好该 GitHub 所有者下的每个存储库。需要 Claude Code v2.1.223 或更高版本。
有关匹配顺序、精确 ref 语义和配方,请参阅 为你的组织管理插件。
设置中的源对象
extraKnownMarketplaces 值是从 marketplace 名称到具有 source 的对象的映射。此条目从其 main 分支的 git 存储库注册 marketplace:
{
"extraKnownMarketplaces": {
"your-marketplace": {
"source": {
"source": "git",
"url": "https://git.example.com/your-org/your-marketplace.git",
"ref": "main"
}
}
}
}
strictKnownMarketplaces 和 blockedMarketplaces 是源对象的数组。此允许列表允许一个 GitHub 所有者和一个内部主机:
{
"strictKnownMarketplaces": [
{ "source": "github", "repo": "your-org/*" },
{ "source": "hostPattern", "hostPattern": "^git\\.example\\.com$" }
]
}
验证消息
claude plugin validate <path> 接受 marketplace 根目录或 marketplace 文件本身。它打印错误和警告。有关退出代码和 --strict,请参阅 plugin validate。
消息通过索引命名插件条目,写作 plugins.1.source 或 plugins[1].source。
以条目索引和 plugin.json → 为前缀的消息,例如 plugins[2] plugin.json →,涉及该插件自己的文件。claude plugin validate 报告错误 列出这些消息及其修复。
提及 Claude Desktop 标志名称的警告,这些名称 Claude Code 接受但 Claude Desktop 拒绝,因为 Claude Desktop 的名称规则更严格。
该表将 marketplace 级别的消息映射到每个消息所涉及的字段。
| 消息 | 级别 | 字段 |
|---|---|---|
Marketplace must have a name |
错误 | name 为空 |
Marketplace name cannot contain spaces. Use kebab-case (e.g., "my-marketplace") |
错误 | name |
Marketplace name cannot contain path separators (/ or \), ".." sequences, or be "." |
错误 | name |
Marketplace name impersonates an official Anthropic/Claude marketplace |
错误 | name。请参阅 Reserved names |
Marketplace name cannot contain control or bidirectional-formatting characters |
错误 | name 包含控制字符,例如转义或换行符,或 Unicode 双向格式化字符 |
Marketplace name "inline" is reserved for --plugin-dir session plugins, and the builtin, skills-dir, synced, claude-plugin-test, npm, pip, uv, cargo, github, and gh variants |
错误 | name |
Author name cannot be empty |
错误 | owner.name |
Plugin name cannot contain spaces. Use kebab-case (e.g., "my-plugin") |
错误 | plugins[i].name |
Plugin name cannot contain control or bidirectional-formatting characters |
错误 | plugins[i].name |
Duplicate plugin name "x" found in marketplace |
错误 | 两个条目共享一个 name |
plugins.i.source: Invalid input |
错误 | 该条目的 source 与任何类型都不匹配。请参阅 Invalid input on a source |
plugins[i].source: Path contains "..": <path> |
错误 | 转义 marketplace 根目录的相对 source |
source.source: 'unsupported' is a parse-time placeholder and cannot be authored |
错误 | plugins[i].source |
Plugin "x" sets headersHelper but is not "strict": false |
错误 | plugins[i].headersHelper,在 archive 条目上 |
chain does not resolve (<reason>) — target must be a name in plugins[], a key in renames, or null |
错误 | renames.<old> |
target "x" is not a valid plugin name (PluginIdSchema) |
错误 | renames.<old> |
Unknown field 'x'. Claude Code ignores it at load time. |
警告 | 顶级、metadata 下、条目中或条目的 relevance 下的命名键 |
Marketplace has no plugins defined |
警告 | plugins 为空 |
Plugin "x" sets headers/headersHelper, which only apply to "archive" sources; they have no effect on this entry. |
警告 | plugins[i].headers 或 plugins[i].headersHelper,在 source 不是 archive 的条目上 |
Plugin "x" fetches its archive with a headersHelper but sets no sha256 pin |
警告 | plugins[i].source.sha256 |
Header "x" is a request-routing/identity header that catalog entries may not set; Claude Code drops it at download time. |
警告 | plugins[i].headers.<name> |
Local source "x" is or traverses a symlink, so <path> was not read |
警告 | plugins[i].source |
No marketplace description provided. Adding a description helps users understand what this marketplace offers |
警告 | description |
Entry declares version "x" but <path>/plugin.json says "y". At install time, plugin.json wins |
警告 | plugins[i].version,在相对路径条目上 |
'relevance' must be an object containing topic and signals; got <type>. It will be ignored at load time. |
警告 | plugins[i].relevance |
'metadata' must be a free-form object; got <type>. It will be ignored at load time. |
警告 | plugins[i].metadata |
'experimental' must be an object containing component declarations; got <type>. It will be ignored at load time. |
警告 | plugins[i].experimental |
Marketplace name "x" is reserved in Claude Desktop |
警告 | name 是 org、org-provisioned 或 unknown。Claude Desktop 拒绝该 marketplace |
Marketplace name "x" is not accepted by Claude Desktop (letters, digits, ".", "_", "-"; must start alphanumeric; max 128 chars) |
警告 | name。Claude Desktop 拒绝该 marketplace |
Plugin name "x" is not accepted by Claude Desktop (letters, digits, ".", "_", "-"; must start alphanumeric; max 128 chars) |
警告 | plugins[i].name。Claude Desktop 删除该条目 |
Invalid input on a source
source 上的 Invalid input 意味着该对象与任何源类型都不匹配。检查这些原因:
- 不以
./开头的相对路径,除了"."或metadata.pluginRoot下的裸名称 - 包含
..的npmpackage - 不是 plugin sources 之一的
source类型 - 已知类型缺少必需字段或字段类型错误,例如没有
repo的github
验证未捕获的失败
claude plugin validate 不会报告每个失败。写作文件路径或数组的条目 hooks 通过验证,错误仅在插件加载时出现,如 Hooks in an entry 所述。获取 source 的错误也仅在安装后出现,不在验证中出现。
claude plugin list 显示加载失败的插件及其错误,Troubleshoot plugins 涵盖加载时字符串。
后续步骤
- 创建 marketplace:从这些字段构建 marketplace 并在本地安装
- 托管和维护 marketplace:放置文件的位置以及用户如何接收更改
- 插件清单参考:条目可以覆盖的
plugin.json字段 - 为你的组织管理插件:使用这些源值的允许列表和阻止列表配方