Claude Code 插件开发完全指南 - 创建 Skills / Agents / Hooks 插件
创建自定义插件以使用 skills、agents、hooks 和 MCP servers 扩展 Claude Code——支持在项目和团队中共享。
Plugins 让你能够使用自定义功能扩展 Claude Code,这些功能可以在项目和团队中共享。本指南涵盖如何使用 skills、agents、hooks 和 MCP servers 创建自己的插件。
想要安装现有插件?请参阅 发现和安装插件。有关完整的技术规范,请参阅 插件参考。
何时使用插件与独立配置
Claude Code 支持两种方式来添加自定义 skills、agents 和 hooks:
| 方法 | Skill 名称 | 最适合 |
|---|---|---|
独立(.claude/ 目录) | /hello | 个人工作流、项目特定的自定义、快速实验 |
插件(包含 .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 标志在本地测试它。
前置条件
- Claude Code 已安装并已认证
ℹ️ 如果你没有看到
/plugin命令,请将 Claude Code 更新到最新版本。
创建你的第一个插件
创建插件目录
每个插件都位于其自己的目录中,包含清单和你的 skills、agents 或 hooks。现在创建一个:
mkdir my-first-plugin
创建插件清单
位于 .claude-plugin/plugin.json 的清单文件定义了你的插件的身份:其名称、描述和版本。
mkdir my-first-plugin/.claude-plugin
然后使用以下内容创建 my-first-plugin/.claude-plugin/plugin.json:
{
"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,每个提交都计为新版本。 |
author | 可选。有助于归属。 |
添加 skill
Skills 位于 skills/ 目录中。每个 skill 是一个包含 SKILL.md 文件的文件夹。文件夹名称成为 skill 名称,以插件的命名空间为前缀。
mkdir -p my-first-plugin/skills/hello
然后使用以下内容创建 my-first-plugin/skills/hello/SKILL.md:
---
description: Greet the user with a friendly message
disable-model-invocation: true
---
Greet the user warmly and ask how you can help them today.
测试你的插件
使用 --plugin-dir 标志运行 Claude Code 以加载你的插件:
claude --plugin-dir ./my-first-plugin
Claude Code 启动后,尝试你的新 skill:
/my-first-plugin:hello
你将看到 Claude 用问候语回应。
添加 skill 参数
通过接受用户输入使你的 skill 动态化。$ARGUMENTS 占位符捕获用户在 skill 名称后提供的任何文本。
更新你的 SKILL.md 文件:
---
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:
/my-first-plugin:hello Alex
Claude 将按名字问候你。
你已成功创建并测试了一个包含以下关键组件的插件:
- 插件清单(
.claude-plugin/plugin.json):描述你的插件的元数据 - Skills 目录(
skills/):包含你的自定义 skills - Skill 参数(
$ARGUMENTS):捕获用户输入以实现动态行为
💡
--plugin-dir标志对开发和测试很有用。当你准备好与他人共享你的插件时,请参阅 创建和分发插件市场。
插件结构概览
你已创建了一个带有 skill 的插件,但插件可以包含更多内容:自定义 agents、hooks、MCP servers、LSP servers 和后台监视器。
⚠️ 常见错误:不要将
commands/、agents/、skills/或hooks/放在.claude-plugin/目录内。只有plugin.json应该在.claude-plugin/内。所有其他目录必须在插件根级别。
| 目录 | 位置 | 目的 |
|---|---|---|
.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 | 插件根 | 启用插件时应用的默认设置 |
开发更复杂的插件
一旦你对基本插件感到满意,你可以创建更复杂的扩展。
向你的插件添加 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: 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
向你的插件添加 LSP servers
💡 对于 TypeScript、Python 和 Rust 等常见语言,请从官方市场安装预构建的 LSP 插件。仅当你需要支持尚未涵盖的语言时,才创建自定义 LSP 插件。
LSP(Language Server Protocol)插件为 Claude 提供实时代码智能。如果你需要支持没有官方 LSP 插件的语言,你可以通过向你的插件添加 .lsp.json 文件来创建自己的:
{
"go": {
"command": "gopls",
"args": ["serve"],
"extensionToLanguage": {
".go": "go"
}
}
}
安装你的插件的用户必须在其机器上安装语言服务器二进制文件。
向你的插件添加后台监视器
后台监视器让你的插件在后台监视日志、文件或外部状态,并在事件到达时通知 Claude。Claude Code 在插件处于活动状态时自动启动每个监视器。
在插件根目录添加一个 monitors/monitors.json 文件,其中包含监视器条目数组:
[
{
"name": "error-log",
"command": "tail -F ./logs/error.log",
"description": "Application error log"
}
]
使用你的插件提供默认设置
插件可以在插件根目录包含一个 settings.json 文件,以在启用插件时应用默认配置。目前仅支持 agent 和 subagentStatusLine 键。
设置 agent 激活插件的自定义 agents之一作为主线程,应用其系统提示、工具限制和模型。
{
"agent": "security-reviewer"
}
在本地测试你的插件
使用 --plugin-dir 标志在开发期间测试插件。这会直接加载你的插件,无需安装。
claude --plugin-dir ./my-plugin
当你对插件进行更改时,运行 /reload-plugins 以获取更新,无需重新启动。测试你的插件组件:
- 使用
/plugin-name:skill-name尝试你的 skills - 检查 agents 是否出现在
/agents中 - 验证 hooks 是否按预期工作
💡 你可以通过多次指定标志来一次加载多个插件:
claude --plugin-dir ./plugin-one --plugin-dir ./plugin-two
要测试已打包为 .zip 存档并托管在 URL 上的插件(例如 CI 构建工件),请改用 --plugin-url。Claude Code 在启动时获取存档并仅为该会话加载它。
claude --plugin-url https://example.com/my-plugin.zip --plugin-url https://example.com/other.zip
调试插件问题
如果你的插件不按预期工作:
- 检查结构:确保你的目录在插件根目录,而不是在
.claude-plugin/内 - 单独测试组件:分别检查每个 skill、agent 和 hook
- 使用验证和调试工具:有关 CLI 命令和故障排除技术,请参阅 Debugging and development tools
共享你的插件
当你的插件准备好共享时:
- 添加文档:包含一个
README.md,其中包含安装和使用说明 - 选择版本控制策略:决定是设置显式
version还是依赖 git 提交 SHA - 创建或使用市场:通过 plugin marketplaces 分发以供安装
- 与他人测试:在更广泛分发之前让团队成员测试插件
一旦你的插件在市场中,其他人可以使用 Discover and install plugins 中的说明安装它。要将插件保持在你的团队内部,请在私有存储库中托管市场。
向官方市场提交你的插件
要向官方 Anthropic 市场提交插件,请使用以下应用内提交表单之一:
- Claude.ai:claude.ai/settings/plugins/submit
- Console:platform.claude.com/plugins/submit
一旦你的插件被列出,你可以拥有自己的 CLI 提示 Claude Code 用户安装它。
ℹ️ 有关完整的技术规范、调试技术和分发策略,请参阅 Plugins reference。
将现有配置转换为插件
如果你已经在 .claude/ 目录中有 skills 或 hooks,你可以将它们转换为插件,以便更轻松地共享和分发。
迁移步骤
创建插件结构
创建一个新的插件目录:
mkdir -p my-plugin/.claude-plugin
在 my-plugin/.claude-plugin/plugin.json 处创建清单文件:
{
"name": "my-plugin",
"description": "Migrated from standalone configuration",
"version": "1.0.0"
}
复制你现有的文件
将你现有的配置复制到插件目录:
# 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/
迁移 hooks
如果你在设置中有 hooks,请创建一个 hooks 目录:
mkdir my-plugin/hooks
使用你的 hooks 配置创建 my-plugin/hooks/hooks.json:
{
"hooks": {
"PostToolUse": [
{
"matcher": "Write|Edit",
"hooks": [{ "type": "command", "command": "jq -r '.tool_input.file_path' | xargs npm run lint:fix" }]
}
]
}
}
测试你迁移的插件
加载你的插件以验证一切正常:
claude --plugin-dir ./my-plugin
迁移时的变化
独立(.claude/) | 插件 |
|---|---|
| 仅在一个项目中可用 | 可以通过市场共享 |
.claude/commands/ 中的文件 | plugin-name/commands/ 中的文件 |
settings.json 中的 Hooks | hooks/hooks.json 中的 Hooks |
| 必须手动复制以共享 | 使用 /plugin install 安装 |
ℹ️ 迁移后,你可以从
.claude/中删除原始文件以避免重复。加载时插件版本将优先。
后续步骤
现在你了解了 Claude Code 的插件系统,以下是针对不同目标的建议路径:
对于插件用户
- 发现和安装插件:浏览市场并安装插件
- 配置团队市场:为你的团队设置存储库级别的插件
对于插件开发者
本文翻译自 Anthropic Claude Code 官方文档,最近一次同步:2025-05-01。