Skip to main content
想要安装插件?请参阅发现和安装插件。如需创建插件,请参阅插件。如需分发插件,请参阅插件市场
本参考提供了 Claude Code 插件系统的完整技术规范,包括组件架构、CLI 命令和开发工具。

插件组件参考

本部分记录了插件可以提供的组件类型。

Skills

插件向 Claude Code 添加 skills,创建可由您或 Claude 调用的 /name 快捷方式。 位置:插件根目录中的 skills/commands/ 目录 文件格式:Skills 是包含 SKILL.md 的目录;commands 是简单的 markdown 文件 Skill 结构
集成行为
  • 安装插件时会自动发现 Skills 和 commands
  • Claude 可以根据任务上下文自动调用它们
  • Skills 可以在 SKILL.md 旁边包含支持文件
有关完整详情,请参阅 Skills

Agents

插件可以为特定任务提供专门的 subagents,Claude 可以在适当时自动调用。 位置:插件根目录中的 agents/ 目录 文件格式:描述代理功能的 Markdown 文件 Agent 结构
集成点
  • Agents 出现在 /agents 界面中
  • Claude 可以根据任务上下文自动调用 agents
  • Agents 可以由用户手动调用
  • 插件 agents 与内置 Claude agents 一起工作
有关完整详情,请参阅 Subagents

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:压缩对话历史之前
Hook 类型
  • 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

想要使用 LSP 插件?从官方市场安装它们:在 /plugin 发现选项卡中搜索”lsp”。本部分记录如何为官方市场未涵盖的语言创建 LSP 插件。
插件可以提供 Language Server Protocol (LSP) 服务器,在处理代码库时为 Claude 提供实时代码智能。 LSP 集成提供:
  • 即时诊断:Claude 在每次编辑后立即看到错误和警告
  • 代码导航:转到定义、查找引用和悬停信息
  • 语言感知:代码符号的类型信息和文档
位置:插件根目录中的 .lsp.json,或在 plugin.json 中内联 格式:将语言服务器名称映射到其配置的 JSON 配置 .lsp.json 文件格式
plugin.json 中内联
必需字段: 可选字段:
您必须单独安装语言服务器二进制文件。 LSP 插件配置 Claude Code 如何连接到语言服务器,但它们不包括服务器本身。如果您在 /plugin 错误选项卡中看到 Executable not found in $PATH,请为您的语言安装所需的二进制文件。
可用的 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,在会话期间。
  • 通过市场,安装到本地插件缓存。
安装插件时,Claude Code 会定位其市场和该市场内插件的 source 字段。 源可以是以下五种类型之一:
  • 相对路径:递归复制到插件缓存。例如,如果您的市场条目指定 "source": "./plugins/my-plugin",整个 ./plugins/my-plugin 目录会被复制。
  • npm - 从 npm 复制到插件缓存
  • pip - 从 pip 复制到插件缓存
  • url - 任何以 .git 结尾的 https:// URL
  • github - 任何 owner/repo 简写

路径遍历限制

插件无法引用其复制目录结构之外的文件。遍历插件根目录之外的路径(例如 ../shared-utils)在安装后将不起作用,因为这些外部文件不会被复制到缓存。

使用外部依赖

如果您的插件需要访问其目录之外的文件,您有两个选项: 选项 1:使用符号链接 在插件目录中创建指向外部文件的符号链接。在复制过程中会遵守符号链接:
符号链接的内容将被复制到插件缓存中。 选项 2:重组您的市场 将插件路径设置为包含所有必需文件的父目录,然后直接在市场条目中提供插件清单的其余部分:
此方法复制整个市场根目录,使您的插件可以访问兄弟目录。
指向插件逻辑根目录之外位置的符号链接在复制期间会被跟随。这在保持缓存系统安全优势的同时提供了灵活性。

插件目录结构

标准插件布局

完整的插件遵循此结构:
.claude-plugin/ 目录包含 plugin.json 文件。所有其他目录(commands/、agents/、skills/、hooks/)必须在插件根目录,而不是在 .claude-plugin/ 内。

文件位置参考


CLI 命令参考

Claude Code 提供了用于非交互式插件管理的 CLI 命令,对脚本和自动化很有用。

plugin install

从可用市场安装插件。
参数:
  • <plugin>:插件名称或 plugin-name@marketplace-name 用于特定市场
选项: 范围确定将安装的插件添加到哪个设置文件。例如,—scope project 写入 .claude/settings.json 中的 enabledPlugins,使插件对克隆项目存储库的每个人都可用。 示例:

plugin uninstall

删除已安装的插件。
参数:
  • <plugin>:插件名称或 plugin-name@marketplace-name
选项: 别名: removerm

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 脚本未执行
  1. 检查脚本是否可执行:chmod +x ./scripts/your-script.sh
  2. 验证 shebang 行:第一行应该是 #!/bin/bash#!/usr/bin/env bash
  3. 检查路径是否使用 ${CLAUDE_PLUGIN_ROOT}"command": "${CLAUDE_PLUGIN_ROOT}/scripts/your-script.sh"
  4. 手动测试脚本:./scripts/your-script.sh
Hook 未在预期事件上触发
  1. 验证事件名称是否正确(区分大小写):PostToolUse,而不是 postToolUse
  2. 检查匹配器模式是否与您的工具匹配:"matcher": "Write|Edit" 用于文件操作
  3. 确认 hook 类型有效:commandpromptagent

MCP 服务器故障排除

服务器未启动
  1. 检查命令是否存在且可执行
  2. 验证所有路径是否使用 ${CLAUDE_PLUGIN_ROOT} 变量
  3. 检查 MCP 服务器日志:claude --debug 显示初始化错误
  4. 在 Claude Code 外手动测试服务器
服务器工具未出现
  1. 确保服务器在 .mcp.jsonplugin.json 中正确配置
  2. 验证服务器是否正确实现 MCP 协议
  3. 检查调试输出中的连接超时

目录结构错误

症状:插件加载但组件(命令、agents、hooks)缺失。 正确结构:组件必须在插件根目录,而不是在 .claude-plugin/ 内。只有 plugin.json 属于 .claude-plugin/
如果您的组件在 .claude-plugin/ 内,请将它们移到插件根目录。 调试清单
  1. 运行 claude --debug 并查找”loading plugin”消息
  2. 检查每个组件目录是否在调试输出中列出
  3. 验证文件权限允许读取插件文件

分发和版本管理参考

版本管理

遵循语义版本控制进行插件发布:
版本格式MAJOR.MINOR.PATCH
  • MAJOR:破坏性更改(不兼容的 API 更改)
  • MINOR:新功能(向后兼容的添加)
  • PATCH:错误修复(向后兼容的修复)
最佳实践
  • 1.0.0 开始进行第一个稳定版本
  • 在分发更改之前更新 plugin.json 中的版本
  • CHANGELOG.md 文件中记录更改
  • 使用预发布版本,如 2.0.0-beta.1 进行测试

另请参阅

Last modified on February 12, 2026