插件参考¶
Claude Code 插件系统的完整技术规范,包含组件 schema、CLI 命令和开发工具。
安装插件见 Discover and install plugins。创建插件见 Plugins。分发插件见 Plugin marketplaces。
插件是一个自包含目录,用自定义功能扩展 Claude Code。组件包括 skills、agents、hooks、MCP 服务器、LSP 服务器和 monitors。
插件组件参考¶
Skills¶
位置: skills/ 或 commands/ 目录,或插件根目录的单个 SKILL.md
Skills 是含 SKILL.md 的目录;commands 是简单 markdown 文件。安装后自动发现,Claude 可根据任务上下文自动调用。Skills 可包含 SKILL.md 旁边的支持文件。
如果插件没有 skills/ 目录也没有 skills 清单字段,根目录的 SKILL.md 作为单一 skill 加载。用 frontmatter 的 name 字段控制调用名;没有它则回退到安装目录名。
在插件 skills 和 commands 中,布尔 frontmatter 字段(如 disable-model-invocation)接受 yes、no、on、off、1、0(任何大小写),以及 true 和 false。v2.1.218 之前仅识别 true 和 false。
详见 Skills。
Agents¶
位置: agents/ 目录
Markdown 文件描述 agent 能力:
---
name: agent-name
description: What this agent specializes in and when Claude should invoke it
model: sonnet
effort: medium
maxTurns: 20
disallowedTools: Write, Edit
---
Detailed system prompt for the agent describing its role, expertise, and behavior.
支持 name、description、model、effort、maxTurns、tools、disallowedTools、skills、memory、background、isolation frontmatter 字段。唯一有效的 isolation 值是 "worktree"。安全原因不支持 hooks、mcpServers、permissionMode。
集成要点:
- 启用后 agent 出现在 @-mention typeahead 中,名称为 my-plugin:code-reviewer
- Claude 可根据任务上下文自动调用
- 与内置 Claude agent 协同工作
详见 Subagents。
Hooks¶
位置: hooks/hooks.json 或内联在 plugin.json
响应 Claude Code 生命周期事件:
{
"hooks": {
"PostToolUse": [
{
"matcher": "Write|Edit",
"hooks": [
{
"type": "command",
"command": "\"${CLAUDE_PLUGIN_ROOT}\"/scripts/format-code.sh"
}
]
}
]
}
}
支持的事件:
| 事件 | 触发时机 |
|---|---|
SessionStart |
会话开始或恢复 |
Setup |
用 --init-only 启动,或 -p 模式下用 --init/--maintenance。用于 CI 或脚本中的一次性准备 |
UserPromptSubmit |
提交 prompt 前,Claude 处理前 |
UserPromptExpansion |
用户输入的命令展开为 prompt 时,到达 Claude 前。可阻止展开 |
PreToolUse |
工具调用执行前(可阻止) |
PermissionRequest |
工具调用需要权限决策时 |
PermissionDenied |
工具调用被 auto mode 分类器拒绝时。返回 {retry: true} 告知模型可重试 |
PostToolUse |
工具调用成功后 |
PostToolUseFailure |
工具调用失败后 |
PostToolBatch |
一批并行工具调用全部完成后,下次模型调用前 |
Notification |
Claude Code 发送通知时 |
MessageDisplay |
助手消息文本显示时 |
SubagentStart |
subagent 生成时 |
SubagentStop |
subagent 完成时 |
TaskCreated |
通过 TaskCreate 创建任务时 |
TaskCompleted |
任务被标记完成时 |
Stop |
Claude 完成响应时 |
StopFailure |
回合因 API 错误结束时。忽略输出和退出码 |
TeammateIdle |
agent team 队友即将空闲时 |
InstructionsLoaded |
CLAUDE.md 或 .claude/rules/*.md 文件加载到上下文时 |
ConfigChange |
会话中配置文件变更时 |
CwdChanged |
工作目录变更时(如 Claude 执行 cd)。适合用 direnv 等做响应式环境管理 |
FileChanged |
监视的文件磁盘变更时。matcher 字段指定监视的文件名 |
WorktreeCreate |
通过 --worktree、isolation: "worktree" 或后台会话创建 worktree 时 |
WorktreeRemove |
会话退出、subagent 完成或删除后台会话时移除 worktree |
PreCompact |
上下文压缩前 |
PostCompact |
上下文压缩完成后 |
Elicitation |
MCP 服务器在工具调用期间请求用户输入时 |
ElicitationResult |
用户回复 MCP elicitation 后,发送给服务器前 |
SessionEnd |
会话终止时 |
Hook 类型:
command:执行 shell 命令或脚本http:将事件 JSON 作为 POST 请求发送到 URLmcp_tool:调用配置的 MCP 服务器上的工具prompt:用 LLM 评估 prompt(用$ARGUMENTS占位符传上下文)agent:运行带工具的 agentic 验证器
针对插件自身捆绑 MCP 服务器的 hook 必须使用作用域名称。工具匹配器和 if 字段用 mcp__plugin_<plugin-name>_<server-name>__<tool>,mcp_tool hook 的 server 字段用 plugin:<plugin-name>:<server-name>。
MCP 服务器¶
位置: .mcp.json 或内联在 plugin.json
{
"mcpServers": {
"plugin-database": {
"command": "${CLAUDE_PLUGIN_ROOT}/servers/db-server",
"args": ["--config", "${CLAUDE_PLUGIN_ROOT}/config.json"],
"env": {
"DB_PATH": "${CLAUDE_PLUGIN_ROOT}/data"
}
}
}
}
- 插件启用时自动启动
- 作为标准 MCP 工具出现在 Claude 工具集中
- 可独立于用户 MCP 服务器配置
- 如果会话中
/reload-plugins,配置未变的服务器保持活跃连接
LSP 服务器¶
位置: .lsp.json 或内联在 plugin.json
提供实时代码智能:即时诊断(编辑后立即看到错误和警告)、代码导航(跳转定义、查找引用)、类型信息和文档。
安装 LSP 插件:在
/pluginDiscover 标签搜索 "lsp"。本节记录如何为官方市场未覆盖的语言创建 LSP 插件。
.lsp.json 格式:
{
"go": {
"command": "gopls",
"args": ["serve"],
"extensionToLanguage": {
".go": "go"
}
}
}
必填字段:
| 字段 | 描述 |
|---|---|
command |
要执行的 LSP 二进制文件(必须在 PATH 中) |
extensionToLanguage |
文件扩展名到语言标识符的映射 |
可选字段:
| 字段 | 描述 |
|---|---|
args |
LSP 服务器的命令行参数 |
transport |
通信传输:stdio(默认)或 socket |
env |
启动服务器时设置的环境变量 |
initializationOptions |
初始化期间传给服务器的选项 |
settings |
通过 workspace/didChangeConfiguration 传递的设置 |
workspaceFolder |
服务器的工作区文件夹路径 |
startupTimeout |
等待服务器启动的最大时间(毫秒) |
shutdownTimeout |
等待优雅关闭的最大时间(毫秒)。超时后 Claude Code 终止进程。未设置时无超时 |
restartOnCrash |
崩溃后是否重启。默认 true。设为 false 则崩溃后不重启 |
maxRestarts |
放弃前的最大重启次数 |
diagnostics |
编辑后是否推送诊断到 Claude 上下文(默认 true)。设为 false 保留代码导航但抑制自动诊断注入 |
restartOnCrash 和 shutdownTimeout 需 v2.1.205+。v2.1.205 之前,schema 接受这两个选项但设置任一会导致 Claude Code 跳过该 LSP 服务器。
同一扩展名的多个服务器:当多个启用的 LSP 服务器声明同一扩展名时,第一个注册的处理该扩展名的文件,其他不启动。/plugin 界面显示警告。
初始化失败的服务器:配置无效(如缺 command 或 extensionToLanguage)的服务器被跳过,其他服务器正常启动。用 claude --debug 查看跳过原因。
[!WARNING]
语言服务器二进制文件必须单独安装。 LSP 插件配置连接方式但不包含服务器本身。如果/pluginErrors 标签显示Executable not found in $PATH,安装对应语言的二进制文件。
可用 LSP 插件:
| 插件 | 语言服务器 | 安装命令 |
|---|---|---|
pyright-lsp |
Pyright (Python) | pip install pyright 或 npm install -g pyright |
typescript-lsp |
TypeScript LS | npm install -g typescript-language-server typescript |
rust-analyzer-lsp |
rust-analyzer | 见安装文档 |
Monitors¶
位置: monitors/monitors.json 或内联在 plugin.json
后台监视器,Claude Code 在插件活跃时自动启动。每个 monitor 运行一个 shell 命令作为会话生命周期内的持久进程,每行 stdout 作为通知传递给 Claude。
插件 monitor 使用与 Monitor 工具相同的机制,共享其可用性约束:仅在交互式 CLI 会话中运行,与 hooks 同等信任级别无沙箱运行。
[
{
"name": "deploy-status",
"command": "\"${CLAUDE_PLUGIN_ROOT}\"/scripts/poll-deploy.sh",
"description": "Deployment status changes"
},
{
"name": "error-log",
"command": "tail -F ./logs/error.log",
"description": "Application error log",
"when": "on-skill-invoke:debug"
}
]
必填字段:
| 字段 | 描述 |
|---|---|
name |
插件内唯一标识符。防止重载或技能再次调用时产生重复进程 |
command |
在会话工作目录中作为持久后台进程运行的 shell 命令 |
description |
监视内容的短摘要。显示在任务面板和通知摘要中 |
可选字段:
| 字段 | 描述 |
|---|---|
when |
控制何时启动。"always"(默认)在会话启动和插件重载时启动。"on-skill-invoke:<skill-name>" 在本插件中指定 skill 首次被调度时启动 |
command 支持路径替换 ${CLAUDE_PLUGIN_ROOT}、${CLAUDE_PLUGIN_DATA}、${CLAUDE_PROJECT_DIR}。monitor command 不能引用 ${user_config.*} 值——Claude Code 会拒绝并报错。v2.1.207 之前 monitor 命令会替换 ${user_config.*} 值。
会话中禁用插件时,已运行的 monitor 不会停止——会话结束时才停止。
Themes¶
位置: themes/ 目录
颜色主题,出现在 /theme 中。含 base 预设和稀疏的 overrides 颜色 token 映射。Themes 是实验组件。
{
"name": "Dracula",
"base": "dark",
"overrides": {
"claude": "#bd93f9",
"error": "#ff5555",
"success": "#50fa7b"
}
}
用户选择插件主题时,Claude Code 保存 custom:<plugin-name>:<slug>。插件主题只读:用户按 Ctrl+E 时复制到 ~/.claude/themes/ 供编辑。
安装作用域¶
| 作用域 | 设置文件 | 用例 |
|---|---|---|
user |
~/.claude/settings.json |
跨所有项目的个人插件(默认) |
project |
.claude/settings.json |
通过版本控制共享的团队插件 |
local |
.claude/settings.local.json |
项目特定、gitignored |
managed |
Managed settings | 只读,仅更新 |
详见 Install plugins 和 Configuration scopes。
Skills 目录插件¶
~/.claude/skills/ 或 <cwd>/.claude/skills/ 下含 .claude-plugin/plugin.json 的文件夹自动作为 <name>@skills-dir 加载,无需市场和安装步骤。用 plugin init 脚手架。
Skills 目录树支持三种不同的东西:
| 内容 | 性质 |
|---|---|
<skills-dir>/foo/SKILL.md(无清单) |
普通 skill,名为 foo |
<skills-dir>/foo/.claude-plugin/plugin.json |
插件 foo@skills-dir,可捆绑 skills、agents、hooks 等 |
<plugin>/skills/bar/SKILL.md |
插件内打包的 skill bar |
插件从哪里加载¶
| Skills 目录 | 作用域 | 加载条件 |
|---|---|---|
~/.claude/skills/ |
个人 | 在每个项目中加载 |
<cwd>/.claude/skills/ |
项目 | 接受工作区信任对话后才加载 |
项目作用域插件检入仓库。因内容来自仓库而非你,加载时受信任门控限制:
- MCP 服务器经过与项目 .mcp.json 相同的逐服务器批准
- LSP 服务器在信任工作区后才启动
- 后台 monitor 不加载
个人作用域插件无这些限制。
[!WARNING]
项目作用域@skills-dir插件仅从启动 Claude Code 的目录的.claude/skills/加载,不会像普通 skills 那样向上查找仓库根目录。从子目录启动会遗漏根目录的插件。从仓库根启动,或切换目录后运行/reload-plugins。
编辑、重载和禁用¶
skill 的 SKILL.md 修改立即生效。其他组件(hooks/、.mcp.json、agents/、output-styles/)需运行 /reload-plugins 或重启。详见 Live change detection。
禁用 skills-directory 插件(无需 uninstall):
claude plugin disable my-tool@skills-dir
plugin.json Schema¶
清单可选。省略时 Claude Code 自动发现默认位置的组件。需提供元数据或自定义组件路径时使用清单。
必填字段¶
仅 name(kebab-case,无空格)。
未识别字段¶
Claude Code 忽略未识别的顶层字段。你可以在 plugin.json 中保留其他生态的元数据(VS Code/Cursor 扩展清单、npm package.json、MCPB/DXT bundle 清单)。
claude plugin validate 将未识别字段报为警告(非错误)。如果字段与已知字段只差一两个字符,警告会建议可能的正确名称。传 --strict 将警告视为错误(适合 CI)。
元数据字段¶
| 字段 | 描述 |
|---|---|
name |
唯一标识符(kebab-case)。市场条目名称不同时,市场条目名用于 enabledPlugins 和 /plugin |
displayName |
UI 显示名(v2.1.143+)。可含空格和任何大小写 |
version |
语义版本。设置则锁定该版本;省略则用 git commit SHA |
description |
简述 |
author |
作者信息对象 |
homepage |
文档 URL |
repository |
源码 URL |
license |
许可证标识 |
keywords |
发现标签数组 |
defaultEnabled |
安装后是否默认启用(v2.1.154+)。默认 true |
Default Enablement¶
设置 defaultEnabled: false 可让插件安装后默认禁用。用户通过 claude plugin enable 或 /plugin 界面开启。适用于有成本或需用户主动选择的插件(如连接外部服务)。需 v2.1.154+。
优先级:用户设置 > 依赖要求 > defaultEnabled。
组件路径字段¶
| 字段 | 类型 | 替换还是扩展默认 |
|---|---|---|
skills |
string|array | 扩展(添加到默认 skills/ 扫描) |
commands |
string|array | 替换 |
agents |
string|array | 替换 |
workflows |
string|array | 替换 |
hooks |
string|array|object | 自有合并规则 |
mcpServers |
string|array|object | 自有合并规则 |
lspServers |
string|array|object | 自有合并规则 |
outputStyles |
string|array | 替换 |
experimental.themes |
string|array | 替换 |
experimental.monitors |
string|array | 替换 |
userConfig |
object | 用户可配置值 |
channels |
array | 消息注入的频道声明 |
dependencies |
array | 依赖的其他插件 |
实验组件¶
experimental 键下的组件(themes 和 monitors)的清单 schema 可能在稳定前跨版本变化。
路径行为规则¶
- 所有路径必须相对于插件根目录且以
./开头 - 可以数组形式指定多个路径
- skill 路径指向含
SKILL.md的目录时,frontmattername字段决定调用名
环境变量¶
| 变量 | 解析为 | 用途 |
|---|---|---|
${CLAUDE_PLUGIN_ROOT} |
插件安装目录绝对路径 | 插件捆绑的脚本、二进制文件和配置文件 |
${CLAUDE_PLUGIN_DATA} |
持久数据目录,跨更新存活 | 安装的依赖(如 node_modules)、生成代码、缓存 |
${CLAUDE_PROJECT_DIR} |
项目根目录 | 项目本地脚本和配置文件 |
三者都作为环境变量导出给 hook 进程和 MCP/LSP 服务器子进程。
${CLAUDE_PLUGIN_ROOT} 在插件更新时变化。更新后旧版目录保留约两周,但应视为临时的。
User Configuration¶
{
"userConfig": {
"api_endpoint": {
"type": "string",
"title": "API endpoint",
"description": "Your team's API endpoint"
},
"api_token": {
"type": "string",
"title": "API token",
"description": "API authentication token",
"sensitive": true
}
}
}
每个选项支持的字段:
| 字段 | 必填 | 描述 |
|---|---|---|
type |
是 | string、number、boolean、directory 或 file |
title |
是 | 配置对话框中显示的标签 |
description |
是 | 字段下方的帮助文本 |
sensitive |
否 | true 时掩码输入并存储到安全存储而非 settings.json |
required |
否 | true 时字段为空验证失败 |
default |
否 | 用户未提供时使用的值 |
multiple |
否 | string 类型时允许字符串数组 |
min / max |
否 | number 类型的边界 |
值可用 ${user_config.KEY} 在 MCP/LSP 配置和 hook 命令中替换。所有值导出为 CLAUDE_PLUGIN_OPTION_<KEY> 环境变量。
Shell 中运行的字段拒绝 ${user_config.*}(防注入),改用替代方式:
- Shell 形式 hook:用 exec 形式带 args,或从环境读 CLAUDE_PLUGIN_OPTION_<KEY>
- Monitor 命令:从配置文件读值
- MCP headersHelper:从配置文件读值
非敏感值存储在用户 settings.json 的 pluginConfigs 键下。敏感值存入 macOS Keychain 或 ~/.claude/.credentials.json。
pluginConfigs 仅从三个设置源读取:用户设置(~/.claude/settings.json)、--settings(CLI 标志或 SDK 内联设置)、managed settings。项目 .claude/settings.json 或 .claude/settings.local.json 中的条目被忽略(安全原因)。
Channels¶
channels 字段声明消息频道注入内容到对话。每个频道绑定插件提供的 MCP 服务器。
{
"channels": [
{
"server": "telegram",
"userConfig": {
"bot_token": {
"type": "string",
"title": "Bot token",
"sensitive": true
}
}
}
]
}
server 字段必填,必须匹配插件 mcpServers 中的键。
持久数据目录¶
${CLAUDE_PLUGIN_DATA} 解析为 ~/.claude/plugins/data/{id}/。常见用途是安装语言依赖一次后跨会话和更新复用。
推荐模式:比较捆绑清单与数据目录中的副本,不同时重新安装。示例 SessionStart hook:
{
"hooks": {
"SessionStart": [
{
"hooks": [
{
"type": "command",
"command": "diff -q \"${CLAUDE_PLUGIN_ROOT}/package.json\" \"${CLAUDE_PLUGIN_DATA}/package.json\" >/dev/null 2>&1 || (cd \"${CLAUDE_PLUGIN_DATA}\" && cp \"${CLAUDE_PLUGIN_ROOT}/package.json\" . && npm install) || rm -f \"${CLAUDE_PLUGIN_DATA}/package.json\""
}
]
}
]
}
}
卸载时数据目录自动删除。CLI 默认删除;传 --keep-data 保留。
插件目录结构¶
enterprise-plugin/
├── .claude-plugin/plugin.json # 清单(可选)
├── skills/ # Skills
├── commands/ # 扁平 .md 技能
├── agents/ # Subagent 定义
├── workflows/ # Workflow 脚本
├── output-styles/ # 输出样式
├── themes/ # 颜色主题
├── monitors/monitors.json # 后台监视器
├── hooks/hooks.json # Hook 配置
├── bin/ # 添加到 PATH 的可执行文件
├── settings.json # 插件默认设置
├── .mcp.json # MCP 服务器
├── .lsp.json # LSP 服务器
└── scripts/ # Hook 和工具脚本
[!WARNING]
.claude-plugin/目录仅放plugin.json。其他目录(commands/、agents/、skills/ 等)必须在插件根目录,不在.claude-plugin/内。
插件根目录的 CLAUDE.md 不作为项目上下文加载。插件通过 skills、agents 和 hooks 贡献上下文。
文件位置参考¶
| 组件 | 默认位置 | 用途 |
|---|---|---|
| 清单 | .claude-plugin/plugin.json |
插件元数据和配置(可选) |
| Skills | skills/ |
<name>/SKILL.md 结构 |
| Commands | commands/ |
扁平 Markdown 文件 |
| Agents | agents/ |
Subagent Markdown 文件 |
| Workflows | workflows/ |
Workflow 脚本 |
| Output styles | output-styles/ |
输出样式定义 |
| Themes | themes/ |
颜色主题 |
| Hooks | hooks/hooks.json |
Hook 配置 |
| MCP 服务器 | .mcp.json |
MCP 服务器定义 |
| LSP 服务器 | .lsp.json |
语言服务器配置 |
| Monitors | monitors/monitors.json |
后台监视器配置 |
| 可执行文件 | bin/ |
添加到 Bash 工具 PATH 的文件 |
| 设置 | settings.json |
启用时应用的默认配置。当前仅支持 agent 和 subagentStatusLine 键 |
CLI 命令参考¶
plugin init¶
脚手架新插件到 ~/.claude/skills/<name>/。下次会话自动作为 <name>@skills-dir 加载。
claude plugin init <name> [options]
| 选项 | 描述 | 默认 |
|---|---|---|
--description <text> |
清单描述 | |
--author <name> |
作者名 | git config user.name |
--author-email <email> |
作者邮箱 | git config user.email |
--with <components...> |
脚手架组件:skills、agents、hooks、mcp、lsp、output-style、channel |
|
-f, --force |
覆盖已有 .claude-plugin/ |
别名:new
plugin install¶
claude plugin install <plugin> [options]
| 选项 | 描述 | 默认 |
|---|---|---|
-s, --scope <scope> |
安装作用域:user、project、local |
user |
--config <key=value> |
设置清单中声明的 userConfig 选项。可重复 |
plugin uninstall¶
claude plugin uninstall <plugin> [options]
| 选项 | 描述 | 默认 |
|---|---|---|
-s, --scope <scope> |
卸载作用域 | user |
--keep-data |
保留持久数据目录 | |
--prune |
同时移除无其他插件需要的自动安装依赖 | |
-y, --yes |
跳过 --prune 确认 |
别名:remove、rm
[!NOTE]
不同市场的同名已安装插件,plugin-name@marketplace-name形式仅卸载指定市场的。v2.1.212 之前可能匹配不同市场的同名插件。
plugin prune¶
移除不再被任何已安装插件需要的自动安装依赖。需 v2.1.121+。
claude plugin prune [options]
| 选项 | 描述 | 默认 |
|---|---|---|
-s, --scope <scope> |
作用域 | user |
--dry-run |
预览 | |
-y, --yes |
跳过确认 |
别名:autoremove
plugin enable¶
claude plugin enable <plugin> [--scope <scope>]
如果插件声明了依赖,递归启用。
plugin disable¶
claude plugin disable [plugin] [options]
| 选项 | 描述 |
|---|---|
-a, --all |
禁用所有。不能与 --scope 组合 |
-s, --scope <scope> |
作用域 |
被依赖时拒绝,错误给出链式禁用命令。
plugin update¶
claude plugin update <plugin> [-s user|project|local|managed]
plugin list¶
claude plugin list [--json] [--available]
--available 需配合 --json 使用,包含市场中可用的插件。
会话内 /plugin list 打印类似列表(仅市场安装的插件)。接受 --enabled 或 --disabled 过滤。ls 是 list 的简写。
plugin details¶
显示插件组件清单和预计 token 开销。
claude plugin details <name>
输出列出 Skills、Agents、Hooks、MCP servers、LSP servers 分组的所有组件,以及 token 估算:
- Always-on:每次会话的固定开销
- On-invoke:组件触发时的开销
plugin tag¶
为插件创建发布 git tag。详见 Tag plugin releases。
claude plugin tag [path] [options]
| 选项 | 描述 | 默认 |
|---|---|---|
--push |
创建后推送到远程 | |
--dry-run |
预览 | |
-f, --force |
工作树脏或 tag 已存在时仍创建 | |
-m, --message <msg> |
Tag 注释消息。%s 占位版本号 |
|
--remote <name> |
--push 的目标远程 |
origin |
plugin validate¶
claude plugin validate <path> [--strict]
--strict 将警告视为错误。适合 CI 中捕获拼写错误或遗留字段。
缓存和文件解析¶
市场插件安装后复制到 ~/.claude/plugins/cache。每个版本独立目录。更新/卸载后旧版标记为孤立,14 天后自动清理。Glob/Grep 工具跳过孤立目录。
路径遍历限制: 安装的插件不能引用目录外的文件(../shared-utils 不会工作,外部文件不被复制)。
市场内用符号链接共享文件:
- 插件自身目录内:保留为相对 symlink
- 同一市场内其他位置:解引用,目标内容被复制
- 市场外:跳过(安全原因)
调试和开发工具¶
用 claude --debug 查看插件加载详情:加载了哪些插件、清单错误、技能/agent/hook 注册、MCP 服务器初始化。
常见问题¶
| 问题 | 原因 | 解决方案 |
|---|---|---|
| 插件未加载 | plugin.json 无效 |
运行 claude plugin validate ./my-plugin 检查 |
| Skills 不出现 | 目录结构错误 | 确保 skills/ 在插件根目录,不在 .claude-plugin/ 内 |
| Hooks 不触发 | 脚本不可执行 | chmod +x script.sh |
| MCP 服务器失败 | 缺少 ${CLAUDE_PLUGIN_ROOT} |
所有插件路径用变量 |
| 路径错误 | 使用了绝对路径 | 所有路径必须相对且以 ./ 开头 |
| LSP 找不到可执行文件 | 语言服务器未安装 | 安装二进制文件 |
版本管理¶
Claude Code 用插件版本作为缓存键判断是否有更新。版本从以下来源按序解析:
plugin.json的version字段marketplace.json中插件条目的version字段- 插件源的 git commit SHA
unknown(npm源或非 git 仓库的本地目录)
两种版本策略:
| 方式 | 更新行为 | 适合 |
|---|---|---|
显式版本(设置 "version": "2.1.0") |
仅 bump 版本时用户收到更新 | 有稳定发布周期的已发布插件 |
| Commit-SHA 版本(省略 version) | 每次新 commit 用户收到更新 | 活跃开发中的内部/团队插件 |
[!WARNING]
设置了version后,必须每次要让用户收到变更时 bump 它。仅推送新 commit 不够——Claude Code 看到同一版本字符串就保留缓存。快速迭代时不设version。
另见¶
- Plugins — 创建插件
- Plugin marketplaces — 分发插件
- Plugin dependencies — 版本约束
- Discover plugins — 安装插件
- Skills — 技能详解
- Sub-agents — subagent 详解
- Hooks — 事件处理和自动化
- MCP — 外部工具集成
- Settings — 插件配置选项