插件组件参考
本部分记录了插件可以提供的组件类型。Skills
插件向 Claude Code 添加 skills,创建可由您或 Claude 调用的/name 快捷方式。
位置:插件根目录中的 skills/ 或 commands/ 目录
文件格式:Skills 是包含 SKILL.md 的目录;commands 是简单的 markdown 文件
Skill 结构:
- 安装插件时会自动发现 Skills 和 commands
- Claude 可以根据任务上下文自动调用它们
- Skills 可以在 SKILL.md 旁边包含支持文件
Agents
插件可以为特定任务提供专门的 subagents,Claude 可以在适当时自动调用。 位置:插件根目录中的agents/ 目录
文件格式:描述代理功能的 Markdown 文件
Agent 结构:
- Agents 出现在
/agents界面中 - Claude 可以根据任务上下文自动调用 agents
- Agents 可以由用户手动调用
- 插件 agents 与内置 Claude agents 一起工作
Hooks
插件可以提供事件处理程序,自动响应 Claude Code 事件。 位置:插件根目录中的hooks/hooks.json,或在 plugin.json 中内联
格式:具有事件匹配器和操作的 JSON 配置
Hook 配置:
PreToolUse:Claude 使用任何工具之前PostToolUse:Claude 成功使用任何工具之后PostToolUseFailure:Claude 工具执行失败之后PermissionRequest:显示权限对话框时UserPromptSubmit:用户提交提示时Notification:Claude Code 发送通知时Stop:Claude 尝试停止时SubagentStart:启动 subagent 时SubagentStop:subagent 尝试停止时SessionStart:会话开始时SessionEnd:会话结束时PreCompact:压缩对话历史之前
command:执行 shell 命令或脚本prompt:使用 LLM 评估提示(使用$ARGUMENTS占位符表示上下文)agent:运行具有工具的代理验证器以完成复杂验证任务
MCP servers
插件可以捆绑 Model Context Protocol (MCP) 服务器,将 Claude Code 与外部工具和服务连接。 位置:插件根目录中的.mcp.json,或在 plugin.json 中内联
格式:标准 MCP 服务器配置
MCP 服务器配置:
- 启用插件时,插件 MCP 服务器会自动启动
- 服务器在 Claude 的工具包中显示为标准 MCP 工具
- 服务器功能与 Claude 的现有工具无缝集成
- 插件服务器可以独立于用户 MCP 服务器进行配置
LSP servers
插件可以提供 Language Server Protocol (LSP) 服务器,在处理代码库时为 Claude 提供实时代码智能。 LSP 集成提供:- 即时诊断:Claude 在每次编辑后立即看到错误和警告
- 代码导航:转到定义、查找引用和悬停信息
- 语言感知:代码符号的类型信息和文档
.lsp.json,或在 plugin.json 中内联
格式:将语言服务器名称映射到其配置的 JSON 配置
.lsp.json 文件格式:
plugin.json 中内联:
可选字段:
可用的 LSP 插件:
首先安装语言服务器,然后从市场安装插件。
插件安装范围
安装插件时,您选择一个范围,确定插件的可用位置和谁可以使用它:
插件使用与其他 Claude Code 配置相同的范围系统。有关安装说明和范围标志,请参阅安装插件。有关范围的完整说明,请参阅配置范围。
插件清单架构
.claude-plugin/plugin.json 文件定义了您的插件的元数据和配置。本部分记录了所有支持的字段和选项。
清单是可选的。如果省略,Claude Code 会自动发现默认位置中的组件,并从目录名称派生插件名称。当您需要提供元数据或自定义组件路径时,使用清单。
完整架构
必需字段
如果您包含清单,name 是唯一必需的字段。
此名称用于命名空间组件。例如,在 UI 中,名为
plugin-dev 的插件的 agent agent-creator 将显示为 plugin-dev:agent-creator。
元数据字段
组件路径字段
路径行为规则
重要:自定义路径补充默认目录 - 它们不替换默认目录。- 如果
commands/存在,除了自定义命令路径外,它也会被加载 - 所有路径必须相对于插件根目录,并以
./开头 - 来自自定义路径的命令使用相同的命名和命名空间规则
- 可以将多个路径指定为数组以获得灵活性
环境变量
${CLAUDE_PLUGIN_ROOT}:包含插件目录的绝对路径。在 hooks、MCP 服务器和脚本中使用此变量,以确保无论安装位置如何都能使用正确的路径。
插件缓存和文件解析
出于安全和验证目的,Claude Code 将插件复制到缓存目录,而不是就地使用它们。在开发引用外部文件的插件时,理解此行为很重要。插件缓存如何工作
插件通过以下两种方式之一指定:- 通过
claude --plugin-dir,在会话期间。 - 通过市场,安装到本地插件缓存。
source 字段。
源可以是以下五种类型之一:
- 相对路径:递归复制到插件缓存。例如,如果您的市场条目指定
"source": "./plugins/my-plugin",整个./plugins/my-plugin目录会被复制。 - npm - 从 npm 复制到插件缓存
- pip - 从 pip 复制到插件缓存
- url - 任何以 .git 结尾的 https:// URL
- github - 任何 owner/repo 简写
路径遍历限制
插件无法引用其复制目录结构之外的文件。遍历插件根目录之外的路径(例如../shared-utils)在安装后将不起作用,因为这些外部文件不会被复制到缓存。
使用外部依赖
如果您的插件需要访问其目录之外的文件,您有两个选项: 选项 1:使用符号链接 在插件目录中创建指向外部文件的符号链接。在复制过程中会遵守符号链接:指向插件逻辑根目录之外位置的符号链接在复制期间会被跟随。这在保持缓存系统安全优势的同时提供了灵活性。
插件目录结构
标准插件布局
完整的插件遵循此结构:文件位置参考
CLI 命令参考
Claude Code 提供了用于非交互式插件管理的 CLI 命令,对脚本和自动化很有用。plugin install
从可用市场安装插件。<plugin>:插件名称或plugin-name@marketplace-name用于特定市场
范围确定将安装的插件添加到哪个设置文件。例如,—scope project 写入
.claude/settings.json 中的 enabledPlugins,使插件对克隆项目存储库的每个人都可用。
示例:
plugin uninstall
删除已安装的插件。<plugin>:插件名称或plugin-name@marketplace-name
别名:
remove、rm
plugin enable
启用禁用的插件。<plugin>:插件名称或plugin-name@marketplace-name
plugin disable
禁用插件而不卸载它。<plugin>:插件名称或plugin-name@marketplace-name
plugin update
将插件更新到最新版本。<plugin>:插件名称或plugin-name@marketplace-name
调试和开发工具
调试命令
使用claude --debug(或 TUI 中的 /debug)查看插件加载详情:
这显示:
- 正在加载哪些插件
- 插件清单中的任何错误
- 命令、agent 和 hook 注册
- MCP 服务器初始化
常见问题
示例错误消息
清单验证错误:Invalid JSON syntax: Unexpected token } in JSON at position 142:检查缺少的逗号、多余的逗号或未引用的字符串Plugin has an invalid manifest file at .claude-plugin/plugin.json. Validation errors: name: Required:缺少必需字段Plugin has a corrupt manifest file at .claude-plugin/plugin.json. JSON parse error: ...:JSON 语法错误
Warning: No commands found in plugin my-plugin custom directory: ./cmds. Expected .md files or SKILL.md in subdirectories.:命令路径存在但不包含有效的命令文件Plugin directory not found at path: ./plugins/my-plugin. Check that the marketplace entry has the correct path.:市场条目中的source路径指向不存在的目录Plugin my-plugin has conflicting manifests: both plugin.json and marketplace entry specify components.:删除重复的组件定义或删除市场条目中的strict: false
Hook 故障排除
Hook 脚本未执行:- 检查脚本是否可执行:
chmod +x ./scripts/your-script.sh - 验证 shebang 行:第一行应该是
#!/bin/bash或#!/usr/bin/env bash - 检查路径是否使用
${CLAUDE_PLUGIN_ROOT}:"command": "${CLAUDE_PLUGIN_ROOT}/scripts/your-script.sh" - 手动测试脚本:
./scripts/your-script.sh
- 验证事件名称是否正确(区分大小写):
PostToolUse,而不是postToolUse - 检查匹配器模式是否与您的工具匹配:
"matcher": "Write|Edit"用于文件操作 - 确认 hook 类型有效:
command、prompt或agent
MCP 服务器故障排除
服务器未启动:- 检查命令是否存在且可执行
- 验证所有路径是否使用
${CLAUDE_PLUGIN_ROOT}变量 - 检查 MCP 服务器日志:
claude --debug显示初始化错误 - 在 Claude Code 外手动测试服务器
- 确保服务器在
.mcp.json或plugin.json中正确配置 - 验证服务器是否正确实现 MCP 协议
- 检查调试输出中的连接超时
目录结构错误
症状:插件加载但组件(命令、agents、hooks)缺失。 正确结构:组件必须在插件根目录,而不是在.claude-plugin/ 内。只有 plugin.json 属于 .claude-plugin/。
.claude-plugin/ 内,请将它们移到插件根目录。
调试清单:
- 运行
claude --debug并查找”loading plugin”消息 - 检查每个组件目录是否在调试输出中列出
- 验证文件权限允许读取插件文件
分发和版本管理参考
版本管理
遵循语义版本控制进行插件发布:MAJOR.MINOR.PATCH
- MAJOR:破坏性更改(不兼容的 API 更改)
- MINOR:新功能(向后兼容的添加)
- PATCH:错误修复(向后兼容的修复)
- 从
1.0.0开始进行第一个稳定版本 - 在分发更改之前更新
plugin.json中的版本 - 在
CHANGELOG.md文件中记录更改 - 使用预发布版本,如
2.0.0-beta.1进行测试