本页目录37
- `plugin.json` 唯一必填字段为 `name`(kebab-case),manifest 本身可完全省略,Claude Code 自动发现默认位置的组件
- Agent frontmatter 不支持 `hooks`、`mcpServers`、`permissionMode`(安全限制);`isolation` 唯一有效值为 `worktree`
- 三个内置环境变量:`${CLAUDE_PLUGIN_ROOT}`(安装目录绝对路径)、`${CLAUDE_PLUGIN_DATA}`(持久数据目录)、`CLAUDE_PLUGIN_OPTION_<KEY>`(用户配置导出给子进程)
- marketplace 安装的插件缓存于 `~/.claude/plugins/cache`,孤立版本 7 天后自动删除;Glob/Grep 工具不搜索孤立目录
- `skills` 字段追加到默认目录;`commands/agents/outputStyles` 等替换默认目录;`hooks/mcpServers/lspServers` 各有独立合并规则
- CLI 提供 init/install/uninstall/prune/enable/disable/update/list/details/validate 共 10 个子命令,`plugin prune` 需 v2.1.121+
本文是对官方参考页的中文整理,完整与最新内容以原文为准:https://code.claude.com/docs/en/plugins-reference
概述
Plugin(插件) 是一个自包含的组件目录,用于扩展 Claude Code 功能。支持的组件类型:Skills(技能)、Agents(子代理)、Hooks(钩子)、MCP 服务器、LSP 服务器、Monitors(监控器)、Output Styles(输出样式)。
插件组件参考
Skills(技能)
| 项目 | 说明 |
|---|---|
| 默认目录 | skills/ 或 commands/;或插件根目录的单个 SKILL.md |
| 文件格式 | Skills 是含 SKILL.md 的目录;commands 是简单 markdown 文件 |
| 自动发现 | 安装时自动发现;Claude 可根据任务上下文自动调用 |
| 单技能布局 | 根目录有 SKILL.md 且无 skills/ 子目录时,自动作为单技能插件加载(需 v2.1.142+) |
SKILL.md frontmatter 字段:
| 字段 | 说明 |
|---|---|
name | 技能调用名称;省略时回退到安装目录名(marketplace 安装会是版本字符串,建议显式设置) |
目录结构示例:
skills/
├── pdf-processor/
│ ├── SKILL.md
│ ├── reference.md(可选)
│ └── scripts/(可选)
└── code-reviewer/
└── SKILL.md
Agents(子代理)
| 项目 | 说明 |
|---|---|
| 默认目录 | agents/ |
| 文件格式 | Markdown 文件,含 YAML frontmatter |
Agent frontmatter 支持字段(所有字段均为可选):
| 字段 | 类型 | 说明 |
|---|---|---|
name | string | 代理名称 |
description | string | 描述及 Claude 何时调用它 |
model | string | 使用的模型(如 sonnet) |
effort | string | 推理努力级别(如 medium) |
maxTurns | number | 最大轮次(如 20) |
tools | string | 允许使用的工具列表 |
disallowedTools | string | 禁止使用的工具(如 Write, Edit) |
skills | string | 代理可使用的技能 |
memory | — | 记忆配置 |
background | — | 后台运行设置 |
isolation | string | 隔离方式,唯一有效值为 worktree |
安全限制:插件级 Agent 不支持
hooks、mcpServers、permissionMode字段。
Hooks(钩子)
| 项目 | 说明 |
|---|---|
| 默认位置 | hooks/hooks.json,或内联于 plugin.json |
| 文件格式 | JSON,含事件匹配器与动作 |
Hook 类型:
| 类型 | 说明 |
|---|---|
command | 执行 shell 命令或脚本 |
http | 将事件 JSON 以 POST 请求发送至 URL |
mcp_tool | 调用 MCP 服务器上的工具 |
prompt | 使用 LLM 评估提示(使用 $ARGUMENTS 占位符) |
agent | 运行带工具的代理验证器,用于复杂验证任务 |
Hook 事件(与用户自定义 Hook 事件相同):
| 事件名 | 触发时机 |
|---|---|
SessionStart | 会话开始或恢复时 |
Setup | 使用 --init-only 或 -p 模式下 --init/--maintenance 时(CI/脚本一次性准备) |
UserPromptSubmit | 提交 prompt 时,Claude 处理之前 |
UserPromptExpansion | 用户键入命令展开为 prompt 时,可阻止展开 |
PreToolUse | 工具调用执行之前,可阻止 |
PermissionRequest | 出现权限对话框时 |
PermissionDenied | 工具调用被自动模式分类器拒绝时;返回 {retry: true} 可让模型重试 |
PostToolUse | 工具调用成功后 |
PostToolUseFailure | 工具调用失败后 |
PostToolBatch | 一批并行工具调用全部完成后,下次模型调用之前 |
Notification | Claude Code 发送通知时 |
MessageDisplay | 显示助手消息文本时 |
SubagentStart | 子代理启动时 |
SubagentStop | 子代理结束时 |
MCP 服务器
| 项目 | 说明 |
|---|---|
| 默认位置 | .mcp.json,或内联于 plugin.json |
| 格式 | 标准 MCP 服务器配置 |
| 自动启动 | 插件启用时自动启动 |
配置对象常用字段:
| 字段 | 说明 |
|---|---|
command | 服务器可执行文件路径(支持 ${CLAUDE_PLUGIN_ROOT} 变量替换) |
args | 命令行参数数组 |
env | 环境变量对象 |
cwd | 服务器工作目录 |
LSP 服务器
| 项目 | 说明 |
|---|---|
| 默认位置 | .lsp.json,或内联于 plugin.json |
| 格式 | JSON,映射语言服务器名称到配置对象 |
LSP 必填字段:
| 字段 | 说明 |
|---|---|
command | LSP 可执行文件(必须在 PATH 中) |
extensionToLanguage | 文件扩展名 → 语言标识符的映射对象(如 {".go": "go"}) |
LSP 可选字段:
| 字段 | 说明 | 默认值 |
|---|---|---|
args | 命令行参数 | — |
transport | 通信传输协议 | stdio |
env | 环境变量 | — |
initializationOptions | 初始化时传入服务器的选项 | — |
settings | 通过 workspace/didChangeConfiguration 传递的设置 | — |
workspaceFolder | 服务器工作区目录路径 | — |
startupTimeout | 等待服务器启动的最长时间(毫秒) | — |
maxRestarts | 放弃前的最大重启次数 | — |
diagnostics | 编辑后是否将诊断推入 Claude 上下文 | true |
注意: LSP 插件不包含语言服务器本体,需用户自行安装对应二进制文件。若出现
Executable not found in $PATH,检查/plugin错误标签页。
官方 marketplace 可用 LSP 插件:
| 插件名 | 语言服务器 | 安装命令 |
|---|---|---|
pyright-lsp | Pyright(Python) | pip install pyright 或 npm install -g pyright |
typescript-lsp | TypeScript Language Server | npm install -g typescript-language-server typescript |
rust-analyzer-lsp | rust-analyzer | 参见 rust-analyzer 官方安装文档 |
Monitors(监控器)
| 项目 | 说明 |
|---|---|
| 默认位置 | monitors.json(通过 manifest experimental.monitors 字段引用) |
| 功能 | 插件启用时自动启动的后台监控器 |
| 状态 | 实验性功能 |
Output Styles(输出样式)
| 项目 | 说明 |
|---|---|
| 默认目录 | output-styles/ |
| manifest 字段 | outputStyles |
| 功能 | 插件启用时自动应用;文件名格式为 output-styles/<name>.md |
插件 manifest 模式(plugin.json)
文件位置: .claude-plugin/plugin.json(整个 manifest 为可选)
省略 manifest 时,Claude Code 从默认位置自动发现组件,并从目录名派生插件名。
完整 schema 示例
{
"name": "plugin-name",
"displayName": "Plugin Name",
"version": "1.2.0",
"description": "Brief plugin description",
"author": {
"name": "Author Name",
"email": "author@example.com",
"url": "https://github.com/author"
},
"homepage": "https://docs.example.com/plugin",
"repository": "https://github.com/author/plugin",
"license": "MIT",
"keywords": ["keyword1", "keyword2"],
"skills": "./custom/skills/",
"commands": ["./custom/commands/special.md"],
"agents": ["./custom/agents/reviewer.md"],
"hooks": "./config/hooks.json",
"mcpServers": "./mcp-config.json",
"outputStyles": "./styles/",
"lspServers": "./.lsp.json",
"experimental": {
"themes": "./themes/",
"monitors": "./monitors.json"
},
"dependencies": [
"helper-lib",
{ "name": "secrets-vault", "version": "~2.1.0" }
]
}
必填字段
| 字段 | 类型 | 说明 | 示例 |
|---|---|---|---|
name | string | 唯一标识符(kebab-case,不含空格),用于组件命名空间 | deployment-tools |
组件命名空间示例:插件 plugin-dev 下的 agent agent-creator 在 UI 中显示为 plugin-dev:agent-creator。
元数据字段
| 字段 | 类型 | 说明 |
|---|---|---|
$schema | string | JSON Schema URL,供编辑器自动补全和验证(Claude Code 加载时忽略) |
displayName | string | 界面显示名称,可含空格和任意大小写(需 v2.1.143+);省略时回退到 name |
version | string | 语义版本号;省略时回退到 git commit SHA |
description | string | 简短描述 |
author | object | 作者信息,子字段:name、email、url |
homepage | string | 文档或主页 URL |
repository | string | 代码仓库 URL |
license | string | 许可证标识符(如 MIT) |
keywords | array | 字符串数组 |
组件路径字段
| 字段 | 类型 | 路径行为 | 说明 |
|---|---|---|---|
skills | string/array | 追加到默认 skills/ | 额外技能目录(始终扫描默认目录) |
commands | string/array | 替换默认 commands/ | 自定义 commands 路径 |
agents | string/array | 替换默认 agents/ | 自定义 agents 路径 |
hooks | string | 独立合并规则 | 自定义 hooks 配置路径 |
mcpServers | string | 独立合并规则 | 自定义 MCP 配置路径 |
lspServers | string | 独立合并规则 | 自定义 LSP 配置路径 |
outputStyles | string/array | 替换默认 | 自定义输出样式目录 |
experimental.themes | string | 替换默认 | 自定义主题目录(实验性) |
experimental.monitors | string | 替换默认 | 自定义 monitors 配置(实验性) |
所有路径须相对于插件根目录,以
./开头。可指定为单值字符串或字符串数组。若要保留默认目录并追加,需显式列出默认路径。
dependencies 字段
数组,每项可以是:
- 字符串形式:
"helper-lib" - 对象形式:
{ "name": "secrets-vault", "version": "~2.1.0" }
手动安装的插件不会被 plugin prune 移除;只有作为依赖自动安装的才会被清理。
userConfig 字段
让用户通过配置对话框填写插件选项。键名须为合法标识符。
| 子字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
type | 是 | string | string、number、boolean、directory、file 之一 |
title | 是 | string | 配置对话框中显示的标签 |
description | 是 | string | 字段下方显示的帮助文本 |
sensitive | 否 | boolean | true 时屏蔽输入并存入系统密钥链(而非 settings.json),有约 2 KB 总限制 |
required | 否 | boolean | true 时,字段为空则验证失败 |
default | 否 | — | 用户未填写时的默认值 |
multiple | 否 | boolean | 仅 string 类型,允许字符串数组 |
min / max | 否 | number | 仅 number 类型的值范围 |
访问方式:
| 使用场景 | 访问形式 |
|---|---|
| MCP/LSP 配置、hook 命令、monitor 命令中的变量替换 | ${user_config.KEY} |
| 子进程环境变量 | CLAUDE_PLUGIN_OPTION_<KEY> |
| 非敏感值的存储位置 | settings.json 下 pluginConfigs[<plugin-id>].options |
| 敏感值的存储位置 | 系统密钥链或 ~/.claude/.credentials.json |
channels 字段
声明注入对话的消息频道,需绑定插件提供的 MCP 服务器。
| 子字段 | 必填 | 说明 |
|---|---|---|
server | 是 | 必须匹配插件 mcpServers 中的某个键 |
userConfig | 否 | 与顶层 userConfig 字段相同的 schema(可按频道配置 bot token 等) |
关于未识别字段
- 无法识别的顶层字段:
claude plugin validate报告为警告(非错误),插件仍可加载 - 字段类型错误:报告为错误,导致加载失败
- 字段名偏差 1-2 字符时,给出可能的正确字段名提示
--strict标志:将警告升级为错误,建议在 CI 中使用- Claude Code 忽略不认识的顶层字段,因此
plugin.json可兼容 VS Code/Cursor 扩展 manifest、npmpackage.json、MCPB/DXT bundle manifest 等生态
环境变量
在 skill/agent 内容、hook 命令、monitor 命令及 MCP/LSP 服务器配置中均可使用:
| 变量 | 说明 |
|---|---|
${CLAUDE_PLUGIN_ROOT} | 插件安装目录的绝对路径,用于引用脚本和二进制文件 |
${CLAUDE_PLUGIN_DATA} | 插件持久化数据目录(卸载时随最后一个安装范围一同删除) |
CLAUDE_PLUGIN_OPTION_<KEY> | userConfig 中各选项的值,以环境变量形式导出给 hook 进程和服务器子进程 |
CLI 命令参考
所有命令以 claude plugin 为前缀;交互式会话中对应 /plugin <subcommand>。
plugin init
初始化插件脚手架。
| 参数/选项 | 说明 |
|---|---|
<name> | 插件目录名 |
--with <组件...> | 附加模板:skills、hooks、agents、mcp、lsp、output-style、channel |
--force | 覆盖已有脚手架 |
-h, --help | 显示帮助 |
plugin install
从 marketplace 安装插件。参数 <plugin> 格式:plugin-name 或 plugin-name@marketplace-name
| 选项 | 说明 | 默认值 |
|---|---|---|
-s, --scope <scope> | user(全局)、project(写入 .claude/settings.json 的 enabledPlugins,团队共享)、local(gitignore) | user |
-h, --help | 显示帮助 | — |
plugin uninstall
别名: remove、rm
| 选项 | 说明 | 默认值 |
|---|---|---|
-s, --scope <scope> | user、project、local | user |
--keep-data | 保留插件的 ${CLAUDE_PLUGIN_DATA} 目录 | — |
--prune | 同时移除不再被依赖的自动安装依赖 | — |
-y, --yes | 跳过 --prune 确认提示(非 TTY 时必需) | — |
-h, --help | 显示帮助 | — |
plugin prune
移除不再被任何已安装插件依赖的自动安装依赖。别名: autoremove(需 v2.1.121+)
| 选项 | 说明 | 默认值 |
|---|---|---|
-s, --scope <scope> | user、project、local | user |
--dry-run | 仅列出将被移除内容,不实际删除 | — |
-y, --yes | 跳过确认提示(非 TTY 时必需) | — |
-h, --help | 显示帮助 | — |
plugin enable / plugin disable
启用或禁用已安装插件。启用时会同步启用其声明的依赖。
| 选项 | 说明 | 默认值 |
|---|---|---|
-s, --scope <scope> | user、project、local | — |
-h, --help | 显示帮助 | — |
plugin update
更新插件到最新版本。
| 选项 | 说明 | 默认值 |
|---|---|---|
-s, --scope <scope> | user、project、local、managed | user |
-h, --help | 显示帮助 | — |
plugin list
列出已安装插件(版本、来源 marketplace、启用状态)。
| 选项 | 说明 |
|---|---|
--json | 以 JSON 格式输出 |
--available | 包含 marketplace 可用插件(需配合 --json) |
-h, --help | 显示帮助 |
交互式会话中可用
/plugin list;支持--enabled/--disabled过滤和ls简写。
plugin details
显示插件的组件清单和预计 token 消耗。
claude plugin details <name>
输出按 Skills、Agents、Hooks、MCP servers、LSP servers 分组,提供两类 token 估算:
| 指标 | 说明 |
|---|---|
| Always-on | 每次会话固定增加的 token(列表描述、技能名等) |
| On-invoke | 组件触发时消耗的 token(按组件单独列出,非插件总量) |
plugin validate
验证插件目录配置。
claude plugin validate <path> [--strict]
| 选项 | 说明 |
|---|---|
--strict | 将警告作为错误处理,建议在 CI 中使用 |
-h, --help | 显示帮助 |
插件目录结构
标准布局
my-plugin/
├── .claude-plugin/
│ └── plugin.json ← manifest(可选)
├── skills/
│ └── my-skill/
│ └── SKILL.md
├── commands/
│ └── my-command.md
├── agents/
│ └── my-agent.md
├── hooks/
│ └── hooks.json
├── .mcp.json
├── .lsp.json
├── output-styles/
│ └── my-style.md
└── SKILL.md ← 单技能插件可直接放根目录
默认文件位置参考
| 组件 | 默认位置 |
|---|---|
| Manifest | .claude-plugin/plugin.json |
| Skills | skills/(含子目录) |
| Commands | commands/ |
| Agents | agents/ |
| Hooks | hooks/hooks.json |
| MCP 服务器 | .mcp.json |
| LSP 服务器 | .lsp.json |
| Output Styles | output-styles/ |
| Monitors(实验性) | monitors.json |
| 持久数据目录 | ${CLAUDE_PLUGIN_DATA} |
插件缓存与文件解析
缓存机制
| 项目 | 说明 |
|---|---|
| 缓存位置 | ~/.claude/plugins/cache |
| 版本隔离 | 每个安装版本独立目录 |
| 孤立版本删除 | 更新/卸载后标记为孤立,7 天后自动删除 |
| 搜索排除 | Glob/Grep 工具跳过孤立版本目录 |
仅 marketplace 安装的插件才被复制到缓存;通过
--plugin-dir或--plugin-url安装的插件原地使用。
路径限制
已安装插件不能引用插件目录之外的文件(../ 路径遍历无效,外部文件未被复制进缓存)。
符号链接处理规则
| 符号链接目标位置 | 处理方式 |
|---|---|
| 插件自身目录内 | 保留为相对符号链接(目标随插件一同复制) |
| 同一 marketplace 中其他插件 | 解引用,将目标内容复制进缓存(可共享 skills 等资产) |
| marketplace 之外 | 跳过(安全限制,防止引入系统路径等任意文件) |
使用
--plugin-dir或本地路径安装的插件:仅保留指向自身目录内的符号链接,其余跳过。
路径字段行为规则汇总
| 字段 | 行为 |
|---|---|
commands、agents、outputStyles、experimental.themes、experimental.monitors | 替换默认目录;若要保留默认并追加,需显式列出默认路径 |
skills | 追加到默认 skills/ 目录,始终扫描默认目录(marketplace 根目录源例外) |
hooks、mcpServers、lspServers | 各有独立合并规则,参见对应章节 |