CClaude Code 中文教程
文档 / plugins

创建插件

官方中文文档· 查看原文 ↗ ·官方译文,未经机器翻译

创建自定义插件以使用 skills、agents、hooks 和 MCP servers 扩展 Claude Code。

Plugins 让你能够使用自定义功能扩展 Claude Code,这些功能可以在项目和团队中共享。本指南涵盖如何使用 skills、agents、hooks 和 MCP servers 创建自己的插件。

想要安装现有插件?请参阅发现和安装插件。有关完整的技术规范,请参阅插件参考

何时使用插件与独立配置

Claude Code 支持两种方式来添加自定义 skills、agents 和 hooks:

方法 Skill 名称 最适合
独立.claude/ 目录) /hello 个人工作流、项目特定的自定义、快速实验
插件(包含 skills、agents、hooks 或 .claude-plugin/plugin.json 清单的自包含目录) /plugin-name:hello 与团队成员共享、分发到社区、版本化发布、跨项目重用

在以下情况下使用独立配置

  • 你正在为单个项目自定义 Claude Code
  • 配置是个人的,不需要共享
  • 你在打包 skills 或 hooks 之前进行实验
  • 你想要简短的 skill 名称,如 /hello/deploy

在以下情况下使用插件

  • 你想与团队或社区共享功能
  • 你需要在多个项目中使用相同的 skills/agents
  • 你想要版本控制和轻松更新扩展
  • 你通过市场分发
  • 你可以接受命名空间化的 skills,如 /my-plugin:hello(命名空间可防止插件之间的冲突)
建议

.claude/ 中的独立配置开始进行快速迭代,然后在准备好共享时转换为插件

快速开始

本快速开始将引导你创建一个带有自定义 skill 的插件。你将创建一个清单(定义插件的配置文件)、添加一个 skill,并使用 --plugin-dir 标志在本地测试它。

前置条件

提示

如果你没有看到 /plugin 命令,请将 Claude Code 更新到最新版本。有关升级说明,请参阅故障排除

创建你的第一个插件

  1. 创建插件目录

    每个插件都位于其自己的目录中,包含你的 skills、agents 或 hooks,可选地与 .claude-plugin/plugin.json 清单一起。该位置对于本快速开始并不重要,因为你将在测试步骤中使用 --plugin-dir 指向 Claude Code 该目录。在任何方便的地方创建它,例如临时文件夹或项目目录:

    ```bash theme={null}
    mkdir my-first-plugin
    ```
    
    其余步骤从父目录运行,并引用相对于它的路径,如 `my-first-plugin/...`。
    
  2. 创建插件清单

    位于 .claude-plugin/plugin.json 的清单文件定义了你的插件的身份:其名称、描述和版本。Claude Code 使用此元数据在插件管理器中显示你的插件。

    在你的插件文件夹内创建 `.claude-plugin` 目录:
    
    ```bash theme={null}
    mkdir my-first-plugin/.claude-plugin
    ```
    
    然后使用以下内容创建 `my-first-plugin/.claude-plugin/plugin.json`:
    
    ```json my-first-plugin/.claude-plugin/plugin.json theme={null}
    {
      "name": "my-first-plugin",
      "description": "A greeting plugin to learn the basics",
      "version": "1.0.0",
      "author": {
        "name": "Your Name"
      }
    }
    ```
    
    | 字段            | 目的                                                                                                                      |
    | :------------ | :---------------------------------------------------------------------------------------------------------------------- |
    | `name`        | 唯一标识符和 skill 命名空间。Skills 以此为前缀(例如 `/my-first-plugin:hello`)。                                                            |
    | `description` | 在浏览或安装插件时在插件管理器中显示。                                                                                                     |
    | `version`     | 可选。如果设置,用户仅在你更新此字段时接收更新。如果省略且你的插件通过 git 分发,则使用提交 SHA,每个提交都计为新版本。请参阅[版本管理](/docs/zh-CN/plugins-reference#version-management)。 |
    | `author`      | 可选。有助于归属。                                                                                                               |
    
    有关 `homepage`、`repository` 和 `license` 等其他字段,请参阅[完整清单架构](/docs/zh-CN/plugins-reference#plugin-manifest-schema)。
    
  3. 添加 skill

    Skills 位于 skills/ 目录中。每个 skill 是一个包含 SKILL.md 文件的文件夹。文件夹名称成为 skill 名称,以插件的命名空间为前缀(在名为 my-first-plugin 的插件中的 hello/ 创建 /my-first-plugin:hello)。

    在你的插件文件夹中创建一个 skill 目录:
    
    ```bash theme={null}
    mkdir -p my-first-plugin/skills/hello
    ```
    
    然后使用以下内容创建 `my-first-plugin/skills/hello/SKILL.md`:
    
    ```markdown my-first-plugin/skills/hello/SKILL.md theme={null}
    ---
    description: Greet the user with a friendly message
    disable-model-invocation: true
    ---
    
    Greet the user warmly and ask how you can help them today.
    ```
    
  4. 测试你的插件

    使用 --plugin-dir 标志运行 Claude Code 以加载你的插件:

    ```bash theme={null}
    claude --plugin-dir ./my-first-plugin
    ```
    
    Claude Code 启动后,尝试你的新 skill:
    
    ```shell theme={null}
    /my-first-plugin:hello
    ```
    
    你将看到 Claude 用问候语回应。运行 `/help` 以查看你的 skill 在插件命名空间下列出。
    
    提示

    为什么要命名空间? 插件 skills 总是命名空间化的(如 /my-first-plugin:hello),以防止多个插件具有相同名称的 skills 时发生冲突。

      要更改命名空间前缀,请更新 `plugin.json` 中的 `name` 字段。
    
  5. 添加 skill 参数

    通过接受用户输入使你的 skill 动态化。$ARGUMENTS 占位符捕获用户在 skill 名称后提供的任何文本。

    更新你的 `SKILL.md` 文件:
    
    ```markdown my-first-plugin/skills/hello/SKILL.md theme={null}
    ---
    description: Greet the user with a personalized message
    ---
    
    # Hello Skill
    
    Greet the user named "$ARGUMENTS" warmly and ask how you can help them today. Make the greeting personal and encouraging.
    ```
    
    运行 `/reload-plugins` 以获取更改,然后尝试使用你的名字的 skill:
    
    ```shell theme={null}
    /my-first-plugin:hello Alex
    ```
    
    Claude 将按名字问候你。有关向 skills 传递参数的更多信息,请参阅 [Skills](/docs/zh-CN/skills#pass-arguments-to-skills)。
    

你已成功创建并测试了一个包含以下关键组件的插件:

  • 插件清单.claude-plugin/plugin.json):描述你的插件的元数据
  • Skills 目录skills/):包含你的自定义 skills
  • Skill 参数$ARGUMENTS):捕获用户输入以实现动态行为
建议

--plugin-dir 标志对开发和测试很有用。当你准备好与他人共享你的插件时,请参阅创建和分发插件市场

在你的 skills 目录中开发插件

与其在每次启动时传递 --plugin-dir,你可以在你的 skills 目录中保留一个插件,并让 Claude Code 自动加载它。claude plugin init 会为你搭建一个:

claude plugin init my-tool

这会创建 ~/.claude/skills/my-tool/,其中包含 .claude-plugin/plugin.json 清单和一个启动器 SKILL.md。在下一个会话中,它会作为 my-tool@skills-dir 加载,无需市场或安装步骤。

有关自动加载规则、个人与项目范围、工作区信任要求以及如何更新或删除一个,请参阅 Skills-directory plugins

插件结构概览

你已创建了一个带有 skill 的插件,但插件可以包含更多内容:自定义 agents、hooks、MCP servers、LSP servers 和后台监视器。

注意

常见错误:不要将 commands/agents/skills/hooks/ 放在 .claude-plugin/ 目录内。只有 plugin.json 应该在 .claude-plugin/ 内。所有其他目录必须在插件根级别。

插件根是单个插件自己的目录:包含 .claude-plugin/plugin.json 的目录。它永远不是 ~/.claude/。例如,Claude Code 不会读取放在 ~/.claude/.mcp.json.mcp.json

目录 位置 目的
.claude-plugin/ 插件根 包含 plugin.json 清单(如果组件使用默认位置,则可选)
skills/ 插件根 Skills 作为 <name>/SKILL.md 目录
commands/ 插件根 Skills 作为平面 Markdown 文件。为新插件使用 skills/
agents/ 插件根 自定义 agent 定义
hooks/ 插件根 hooks.json 中的事件处理程序
.mcp.json 插件根 MCP server 配置
.lsp.json 插件根 用于代码智能的 LSP server 配置
monitors/ 插件根 monitors.json 中的后台监视器配置
bin/ 插件根 在启用插件时添加到 Bash tool 的 PATH 的可执行文件
settings.json 插件根 启用插件时应用的默认设置

恰好包含一个 skill 的插件可以直接在插件根目录放置 SKILL.md,而不是创建 skills/ 目录。Claude Code 会将其作为单个 skill 加载,并使用 frontmatter 中的 name 字段作为调用名称。对于可能增长到多个 skill 的插件,请使用 skills/ 布局。

提示

后续步骤:准备好添加更多功能了吗?跳转到开发更复杂的插件以添加 agents、hooks、MCP servers 和 LSP servers。有关所有插件组件的完整技术规范,请参阅插件参考

开发更复杂的插件

一旦你对基本插件感到满意,你可以创建更复杂的扩展。

向你的插件添加 Skills

插件可以包含 Agent Skills 以扩展 Claude 的功能。Skills 是模型调用的:Claude 根据任务上下文自动使用它们。

在你的插件根目录添加一个 skills/ 目录,其中包含包含 SKILL.md 文件的 Skill 文件夹:

my-plugin/
├── .claude-plugin/
│   └── plugin.json
└── skills/
    └── code-review/
        └── SKILL.md

每个 SKILL.md 包含 YAML frontmatter 和说明。包含一个 description,以便 Claude 知道何时使用该 skill:

---
description: Reviews code for best practices and potential issues. Use when reviewing code, checking PRs, or analyzing code quality.
---

When reviewing code, check for:
1. Code organization and structure
2. Error handling
3. Security concerns
4. Test coverage

安装插件后,运行 /reload-plugins 以加载 Skills。有关完整的 Skill 编写指南,包括渐进式披露和工具限制,请参阅 Agent Skills

向你的插件添加 LSP servers

建议

对于 TypeScript、Python 和 Rust 等常见语言,请从官方市场安装预构建的 LSP 插件。仅当你需要支持尚未涵盖的语言时,才创建自定义 LSP 插件。

LSP(Language Server Protocol)插件为 Claude 提供实时代码智能。如果你需要支持没有官方 LSP 插件的语言,你可以通过向你的插件添加 .lsp.json 文件来创建自己的:

{
  "go": {
    "command": "gopls",
    "args": ["serve"],
    "extensionToLanguage": {
      ".go": "go"
    }
  }
}

安装你的插件的用户必须在其机器上安装语言服务器二进制文件。

有关完整的 LSP 配置选项,请参阅 LSP servers

向你的插件添加后台监视器

后台监视器让你的插件在后台监视日志、文件或外部状态,并在事件到达时通知 Claude。Claude Code 在插件处于活动状态时自动启动每个监视器,因此你无需指示 Claude 启动监视。

在插件根目录添加一个 monitors/monitors.json 文件,其中包含监视器条目数组:

[
  {
    "name": "error-log",
    "command": "tail -F ./logs/error.log",
    "description": "Application error log"
  }
]

来自 command 的每个 stdout 行在会话期间作为通知传递给 Claude。有关完整的架构,包括 when 触发器和变量替换,请参阅 Monitors

使用你的插件提供默认设置

插件可以在插件根目录包含一个 settings.json 文件,以在启用插件时应用默认配置。目前仅支持 agentsubagentStatusLine 键。

设置 agent 激活插件的自定义 agents 之一作为主线程,应用其系统提示、工具限制和模型。这让插件在启用时通过改变 Claude Code 的默认行为方式。

{
  "agent": "security-reviewer"
}

此示例激活在插件的 agents/ 目录中定义的 security-reviewer agent。来自 settings.json 的设置优先于在 plugin.json 中声明的 settings。未知键被静默忽略。

组织复杂的插件

对于具有许多组件的插件,按功能组织你的目录结构。有关完整的目录布局和组织模式,请参阅 Plugin directory structure

在本地测试你的插件

使用 --plugin-dir 标志在开发期间测试插件。这会直接加载你的插件,无需安装。

claude --plugin-dir ./my-plugin

该标志也接受插件目录的 .zip 存档,这需要 Claude Code v2.1.128 或更高版本。

claude --plugin-dir ./my-plugin.zip

--plugin-dir 插件与已安装的市场插件同名时,本地副本在该会话中优先。这让你可以测试已安装的插件的更改,而无需先卸载它。由托管设置强制启用或强制禁用的插件是唯一的例外:--plugin-dir 无法覆盖这些。

当你对插件进行更改时,运行 /reload-plugins 以获取更新,无需重新启动。这会重新加载 plugins、skills、agents、hooks、插件 MCP servers 和插件 LSP servers。测试你的插件组件:

  • 使用 /plugin-name:skill-name 尝试你的 skills
  • 检查 agents 是否出现在 /context 中的 Custom Agents 下,或通过其作用域名称 @-mention 其中一个
  • 验证 hooks 是否按预期工作
建议

你可以通过多次指定标志来一次加载多个插件:

claude --plugin-dir ./plugin-one --plugin-dir ./plugin-two

要测试已打包为 .zip 存档并托管在 URL 上的插件(例如 CI 构建工件),请改用 --plugin-url。Claude Code 在启动时获取存档并仅为该会话加载它。如果获取失败或存档无效,Claude Code 会报告插件加载错误并在没有它的情况下启动。与任何插件源相同的信任考虑适用:仅将此标志指向你控制或信任的存档。

要加载多个插件,请为每个 URL 重复该标志:

claude --plugin-url https://example.com/my-plugin.zip --plugin-url https://example.com/other.zip

或将空格分隔的 URL 作为一个带引号的参数传递:

claude --plugin-url "https://example.com/my-plugin.zip https://example.com/other.zip"

调试插件问题

如果你的插件不按预期工作:

  1. 检查结构:确保你的目录在插件根目录,而不是在 .claude-plugin/
  2. 单独测试组件:分别检查每个 skill、agent 和 hook
  3. 使用验证和调试工具:有关 CLI 命令和故障排除技术,请参阅 Debugging and development tools

共享你的插件

当你的插件准备好共享时:

  1. 添加文档:包含一个 README.md,其中包含安装和使用说明
  2. 选择版本控制策略:决定是设置显式 version 还是依赖 git 提交 SHA。请参阅 version management
  3. 创建或使用市场:通过 plugin marketplaces 分发以供安装
  4. 与他人测试:在更广泛分发之前让团队成员测试插件

一旦你的插件在市场中,其他人可以使用 Discover and install plugins 中的说明安装它。要将插件保持在你的团队内部,请在 private repository 中托管市场。

向社区市场提交你的插件

Anthropic 为 Claude Code 插件维护两个公共市场:

  • claude-plugins-official:由 Anthropic 维护的精选插件集。在你首次以交互方式启动 Claude Code 时自动注册。在该首次启动之前运行的非交互式脚本必须使用 claude plugin marketplace add anthropics/claude-plugins-official 显式添加它。
  • claude-community:公共社区市场,第三方提交在审查后进入。用户使用 /plugin marketplace add anthropics/claude-plugins-community 添加它,并从中安装为 @claude-community

要提交你的插件以供社区市场审查,请使用以下应用内表单之一:

claude.ai 表单需要 Team 或 Enterprise 组织和目录管理访问权限;组织所有者默认具有此访问权限。不属于 Team 或 Enterprise 组织的个人作者可以改用 Console 表单。

在提交之前,在本地运行 claude plugin validate。审查管道对每个提交运行相同的检查,以及自动安全筛选。

批准的插件被固定到 anthropics/claude-plugins-community 目录中的特定提交 SHA,当你向你的存储库推送新提交时,CI 会自动提升该固定。公共目录每晚从审查管道同步,因此批准和你的插件出现在 marketplace.json 中之间可能会有延迟。要检查你的插件是否已可安装,请在社区目录中搜索其名称。

官方市场 claude-plugins-official 是单独策划的。Anthropic 自行决定包含哪些插件。没有申请流程,提交表单不会将插件添加到官方市场。

如果 Anthropic 在官方市场中列出你的插件,你的 CLI 可以提示 Claude Code 用户安装它。请参阅 Recommend your plugin from your CLI

提示

有关完整的技术规范、调试技术和分发策略,请参阅 Plugins reference

将现有配置转换为插件

如果你已经在 .claude/ 目录中有 skills 或 hooks,你可以将它们转换为插件,以便更轻松地共享和分发。

迁移步骤

  1. 创建插件结构

    在你的项目根目录中创建一个新的插件目录,与现有的 .claude/ 文件夹并排放置,以便下一步中的相对 cp 路径能够解析:

    ```bash theme={null}
    mkdir -p my-plugin/.claude-plugin
    ```
    
    在 `my-plugin/.claude-plugin/plugin.json` 处创建清单文件:
    
    ```json my-plugin/.claude-plugin/plugin.json theme={null}
    {
      "name": "my-plugin",
      "description": "Migrated from standalone configuration",
      "version": "1.0.0"
    }
    ```
    
  2. 复制你现有的文件

    将你现有的配置复制到插件目录:

    ```bash theme={null}
    # Copy commands
    cp -r .claude/commands my-plugin/
    
    # Copy agents (if any)
    cp -r .claude/agents my-plugin/
    
    # Copy skills (if any)
    cp -r .claude/skills my-plugin/
    ```
    
  3. 迁移 hooks

    如果你在设置中有 hooks,请创建一个 hooks 目录:

    ```bash theme={null}
    mkdir my-plugin/hooks
    ```
    
    使用你的 hooks 配置创建 `my-plugin/hooks/hooks.json`。从你的 `.claude/settings.json` 或 `settings.local.json` 复制 `hooks` 对象,因为格式相同。命令在 stdin 上接收 hook 输入作为 JSON,所以使用 `jq` 提取文件路径:
    
    ```json my-plugin/hooks/hooks.json theme={null}
    {
      "hooks": {
        "PostToolUse": [
          {
            "matcher": "Write|Edit",
            "hooks": [{ "type": "command", "command": "jq -r '.tool_input.file_path' | xargs npm run lint:fix" }]
          }
        ]
      }
    }
    ```
    
  4. 测试你迁移的插件

    加载你的插件以验证一切正常:

    ```bash theme={null}
    claude --plugin-dir ./my-plugin
    ```
    
    测试每个组件:运行你的命令、检查 agents 是否出现在 `/context` 中,并验证 hooks 是否正确触发。
    

迁移时的变化

独立(.claude/ 插件
仅在一个项目中可用 可以通过市场共享
.claude/commands/ 中的文件 plugin-name/commands/ 中的文件
settings.json 中的 Hooks hooks/hooks.json 中的 Hooks
必须手动复制以共享 使用 /plugin install 安装
提示

迁移后,从 .claude/ 中删除原始文件以避免重复。项目和用户 .claude/agents/ 定义会覆盖同名的插件 agents,因此插件版本仅在删除原始文件后才会生效。Plugin skills 被命名为 /plugin-name:skill-name,所以原始的 /skill-name 和插件副本都保持可用,而不是其中一个覆盖另一个。

后续步骤

现在你了解了 Claude Code 的插件系统,以下是针对不同目标的建议路径:

对于插件用户

对于插件开发者