Claude Code 插件系统:打包与分享你的工作流
Claude Code 插件系统:打包与分享你的工作流
Prorise
第八章. 插件系统:打包与分享你的工作流
本章摘要:前面我们学了 MCP 扩展能力、Hooks 自动化脚本、自定义命令……但它们都是"散装"的,只能在单个项目里用。想把这些配置分享给队友?想在多个项目里复用?插件系统就是把这些散装配置"打包成礼盒"的标准方式。
本章学习路径
| 阶段 | 内容 | 解锁能力 |
|---|---|---|
| 第一阶段 | 插件 vs 独立配置 | 知道什么时候该用插件 |
| 第二阶段 | 插件结构解析 | 能看懂别人写的插件 |
| 第三阶段 | 从零创建插件 | 能自己写一个完整插件 |
| 第四阶段 | 市场机制 | 能发布和分享插件 |
| 第五阶段 | 安装与管理 | 能安装和管理团队插件 |
8.1. 为什么需要插件
上一章我们学会了用 Hooks 实现自动化。但有个问题一直没解决:
“我在 A 项目配了一套超好用的 Hooks 和自定义命令,B 项目也想用,怎么办?”
最笨的办法:复制粘贴。把 .claude/ 目录下的文件全部拷过去。
“那我有 10 个项目呢?”
复制 10 次。
“后来我改进了配置,想同步更新呢?”
再复制 10 次。
这就是 散装配置的痛点:难以复用、难以同步、难以分享。
8.1.1. 散装配置的三大痛点
痛点 1:跨项目复用困难
你在 .claude/commands/ 里写了一个超好用的 /review 命令,专门用来做代码审查。现在新开了一个项目,想用这个命令,只能手动复制文件过去。
痛点 2:团队共享麻烦
你写了一套团队规范的 Hooks(比如提交前自动跑 lint),想让队友也用上。怎么办?发个压缩包?建个共享文档?每次更新都要通知大家重新下载?
痛点 3:版本管理混乱
你的配置在不断迭代优化。但散落在各个项目里的副本版本不一,有的是 v1.0,有的是 v1.2,有的是你三个月前复制的"远古版本"。
8.1.2. 插件 vs 独立配置:何时用哪个
Claude Code 提供了两种方式来扩展功能:
| 方式 | 命令格式 | 适用场景 |
|---|---|---|
独立配置(.claude/ 目录) | /hello | 个人使用、单项目定制、快速实验 |
插件(.claude-plugin/ 目录) | /my-plugin:hello | 团队共享、跨项目复用、社区分发 |
“等等,插件的命令格式怎么多了个冒号?”
这就是 命名空间 机制。插件的所有命令都会带上插件名作为前缀,比如 /my-plugin:hello、/my-plugin:review。
“这不是更麻烦了吗?”
恰恰相反,这是为了 防止冲突。想象一下:你装了 A 插件和 B 插件,它们都有一个 /format 命令。如果没有命名空间,Claude 不知道该执行哪个。有了命名空间,就变成了 /a-plugin:format 和 /b-plugin:format,清清楚楚。
选择指南:
| 你的需求 | 推荐方式 |
|---|---|
| 只在当前项目用,不打算分享 | 独立配置 |
| 想在多个项目里复用同一套配置 | 插件 |
| 想分享给团队或社区 | 插件 |
| 快速实验一个想法,还没定型 | 先用独立配置,稳定后再转插件 |
8.1.3. 本节小结
本节我们搞清楚了一个核心问题:为什么需要插件。
| 对比维度 | 独立配置 | 插件 |
|---|---|---|
| 复用性 | 仅当前项目 | 跨项目、跨团队 |
| 命令格式 | /hello | /plugin-name:hello |
| 版本管理 | 无 | 支持语义化版本 |
| 分发方式 | 手动复制 | 通过市场安装 |
8.2. 插件结构解析
知道了为什么需要插件,现在来看看一个插件长什么样。
8.2.1. 最小插件结构
一个最简单的插件只需要两样东西:
1 | my-plugin/ |
就这么简单。.claude-plugin/plugin.json 是插件的"身份证",告诉 Claude Code 这是一个插件、叫什么名字、版本多少。commands/ 目录放你的自定义命令。
“那 plugin.json 里写什么?”
最简版本:
1 | { |
三个字段,搞定。
8.2.2. 完整插件目录一览
当然,插件能做的远不止自定义命令。一个功能完整的插件可以包含:
1 | my-plugin/ |
| 目录/文件 | 作用 | 是否必须 |
|---|---|---|
.claude-plugin/plugin.json | 插件元数据 | ✅ 必须 |
commands/ | 斜杠命令(用户主动调用) | 可选 |
agents/ | 自定义 Agent | 可选 |
skills/ | Agent Skills(模型自动调用) | 可选 |
hooks/hooks.json | 事件钩子 | 可选 |
.mcp.json | MCP 服务器 | 可选 |
.lsp.json | LSP 服务器 | 可选 |
“commands 和 skills 有什么区别?”
commands 是用户主动调用的,你输入 /my-plugin:review,它才执行。
skills 是模型自动调用的。你不需要显式调用,Claude 会根据任务上下文自动判断
“哦,这个任务需要用到代码审查能力”,然后自动加载对应的 Skill。
8.2.3. plugin.json 清单文件详解
plugin.json 是插件的核心配置文件,我们来看看完整版长什么样:
1 | { |
字段说明:
| 字段 | 是否必须 | 作用 |
|---|---|---|
name | ✅ 必须 | 插件唯一标识,也是命令的命名空间前缀 |
description | ✅ 必须 | 插件描述,显示在插件管理界面 |
version | ✅ 必须 | 版本号,建议遵循语义化版本(如 1.0.0) |
author | 可选 | 作者信息,包含 name 和 email |
homepage | 可选 | 插件主页或文档地址 |
repository | 可选 | 源码仓库地址 |
license | 可选 | 开源协议(如 MIT、Apache-2.0) |
keywords | 可选 | 关键词数组,用于搜索发现 |
8.2.4. 本节小结
本节我们拆解了插件的内部结构:
| 组件 | 位置 | 作用 | 调用方式 |
|---|---|---|---|
| 清单文件 | .claude-plugin/plugin.json | 定义插件元数据 | 自动读取 |
| 斜杠命令 | commands/*.md | 用户主动调用的功能 | /plugin-name:command |
| Agent | agents/*.md | 自定义 Agent 角色 | /agents 菜单选择 |
| Skills | skills/*/SKILL.md | 模型自动调用的能力 | Claude 自动判断 |
| Hooks | hooks/hooks.json | 事件钩子 | 自动触发 |
| MCP | .mcp.json | 外部工具集成 | Claude 自动调用 |
8.3. 创建你的第一个插件
理论讲完了,现在来实战。我们从零开始创建一个 代码审查插件,包含一个斜杠命令和一个 Agent Skill。
8.3.1. 需求分析
我们要做一个叫 code-reviewer 的插件,功能如下:
| 功能 | 类型 | 说明 |
|---|---|---|
/code-reviewer:review | 斜杠命令 | 用户主动调用,审查指定文件 |
security-check | Agent Skill | Claude 自动调用,检查安全漏洞 |
最终目录结构:
1 | code-reviewer/ |
8.3.2. 创建插件目录和清单
步骤 1:创建目录结构
1 | mkdir -p code-reviewer/.claude-plugin |
步骤 2:创建 plugin.json
创建文件 code-reviewer/.claude-plugin/plugin.json:
1 | { |
8.3.3. 添加斜杠命令
斜杠命令是用户主动调用的功能。我们来创建一个 /code-reviewer:review 命令。
创建文件 code-reviewer/commands/review.md:
1 | --- |
关键点解释:
---包裹的部分是 前置元数据Markdown 文件开头的 YAML 格式元数据块,description字段会显示在/help列表中$ARGUMENTS是占位符,会被用户输入的参数替换。比如用户输入/code-reviewer:review src/main.ts,那么$ARGUMENTS就会变成src/main.ts
8.3.4. 添加 Agent Skill
Agent Skill 和斜杠命令不同,它是 模型自动调用 的。Claude 会根据任务上下文判断"这个任务需要用到安全检查能力",然后自动加载对应的 Skill。
创建文件 code-reviewer/skills/security-check/SKILL.md:
1 | --- |
关键点解释:
name和description是必须的 frontmatter 字段description非常重要,Claude 会根据这个描述来判断何时自动调用这个 Skill- Skill 的内容是给 Claude 看的指令,告诉它"当你需要做安全检查时,按这个思路来"
8.3.5. 本地测试插件
插件写好了,怎么测试?Claude Code 提供了 --plugin-dir 参数,可以直接加载本地插件目录进行测试。
步骤 1:启动 Claude Code 并加载插件
1 | claude --plugin-dir ./code-reviewer |
成功现象:Claude Code 正常启动,没有报错。
步骤 2:验证命令是否加载
1 | /code.... |
在命令列表中,你应该能看到 /code-reviewer:review 命令。
步骤 3:测试命令
1 | › /code-reviewer:review src/main.ts |
Claude 会按照你在 review.md 中定义的指令,对指定文件进行代码审查。
步骤 4:验证 Skill 是否生效
Skill 是自动调用的,你不需要显式触发。试着让 Claude 做一个安全相关的任务:
1 | › 帮我检查一下这个项目有没有安全漏洞 |
如果 Skill 配置正确,Claude 会自动加载 security-check Skill,按照你定义的检查维度进行安全扫描。
开发迭代:每次修改插件文件后,需要重启 Claude Code 才能生效。建议开两个终端窗口,一个编辑插件,一个运行测试。
8.3.6. 本节小结
本节我们从零创建了一个完整的代码审查插件:
| 步骤 | 产出 | 作用 |
|---|---|---|
| 创建目录结构 | code-reviewer/ | 插件根目录 |
| 编写 plugin.json | .claude-plugin/plugin.json | 定义插件元数据 |
| 添加斜杠命令 | commands/review.md | 用户主动调用的审查功能 |
| 添加 Skill | skills/security-check/SKILL.md | Claude 自动调用的安全检查能力 |
| 本地测试 | claude --plugin-dir ./code-reviewer | 验证插件功能 |
8.4. 插件市场机制
插件写好了,怎么分享给别人?总不能让队友也用 --plugin-dir 加载本地目录吧。
这就需要 插件市场(Marketplace) 了。
8.4.1. 市场是什么
插件市场一个插件目录,列出了可供安装的插件及其来源简单说,市场就是一个 插件清单,告诉 Claude Code:“这里有哪些插件可以装,去哪里下载”。
市场可以是:
- 一个 GitHub 仓库
- 一个 GitLab 仓库
- 一个本地目录(开发测试用)
用户通过 /plugin marketplace add 命令添加市场,然后就能浏览和安装里面的插件了。
8.4.2. 创建本地市场(开发测试用)
在正式发布到 GitHub 之前,我们先创建一个本地市场来测试。
目录结构:
1 | my-marketplace/ |
步骤 1:创建市场目录
1 | mkdir -p my-marketplace/.claude-plugin |
步骤 2:创建 marketplace.json
创建文件 my-marketplace/.claude-plugin/marketplace.json:
1 | { |
步骤 3:添加市场并安装插件
1 | claude |
1 | › /plugin marketplace add ./my-marketplace |
成功现象:提示市场添加成功。
1 | › /plugin install code-reviewer@my-marketplace |
成功现象:提示插件安装成功,重启 Claude Code 后生效。
8.4.3. 发布到 GitHub(团队/社区共享)
本地测试通过后,就可以把市场发布到 GitHub 了。
步骤 1:创建 GitHub 仓库
在 GitHub 上创建一个新仓库,比如 your-username/claude-plugins。
步骤 2:推送市场目录
1 | cd my-marketplace |
步骤 3:团队成员添加市场
现在,任何人都可以通过以下命令添加你的市场:
1 | › /plugin marketplace add your-username/claude-plugins |
然后安装插件:
1 | › /plugin install code-reviewer@your-username |
私有仓库:如果是私有仓库,用户需要有访问权限才能添加市场。Claude Code 会使用本地的 Git 凭证进行认证。
8.4.4. marketplace.json 配置详解
我们来看看 marketplace.json 的完整配置选项:
1 | { |
顶层字段:
| 字段 | 是否必须 | 作用 |
|---|---|---|
name | ✅ 必须 | 市场唯一标识,用户安装插件时会用到(如 plugin@marketplace-name) |
owner | ✅ 必须 | 市场维护者信息 |
metadata.description | 可选 | 市场描述 |
metadata.pluginRoot | 可选 | 插件根目录,设置后 source 可以用相对路径 |
plugins | ✅ 必须 | 插件列表 |
插件条目字段:
| 字段 | 是否必须 | 作用 |
|---|---|---|
name | ✅ 必须 | 插件名称 |
source | ✅ 必须 | 插件来源(本地路径或远程仓库) |
description | 可选 | 插件描述 |
version | 可选 | 插件版本 |
author | 可选 | 插件作者 |
keywords | 可选 | 关键词,用于搜索 |
category | 可选 | 分类 |
source 的三种写法:
1 | // 写法 1:本地相对路径 |
8.4.5. 本节小结
本节我们学习了插件市场机制:
| 概念 | 作用 | 关键文件 |
|---|---|---|
| 市场(Marketplace) | 插件目录,列出可安装的插件 | .claude-plugin/marketplace.json |
| 本地市场 | 开发测试用 | /plugin marketplace add ./path |
| GitHub 市场 | 团队/社区共享 | /plugin marketplace add owner/repo |
8.5. 安装与管理插件
作为插件的使用者,你需要知道如何发现、安装、管理插件。
8.5.1. 添加市场源
在安装插件之前,你需要先添加市场源。
添加 GitHub 市场:
1 | › /plugin marketplace add owner/repo-name |
添加 GitLab 或其他 Git 仓库:
1 | › /plugin marketplace add https://gitlab.com/team/plugins.git |
添加本地市场(开发测试):
1 | › /plugin marketplace add ./path/to/marketplace |
查看已添加的市场:
1 | › /plugin |
选择 “管理市场” 可以查看所有已添加的市场源。
8.5.2. 浏览和安装插件
方式 1:交互式浏览(推荐)
1 | › /plugin |
这会打开一个交互式菜单,你可以:
- 浏览可用插件
- 查看插件详情(描述、版本、功能)
- 一键安装
方式 2:直接安装
如果你已经知道插件名称:
1 | › /plugin install plugin-name@marketplace-name |
例如:
1 | › /plugin install code-reviewer@my-marketplace |
安装后:重启 Claude Code,插件就会生效。
8.5.3. 启用/禁用/卸载插件
禁用插件(保留配置,暂时不用):
1 | › /plugin disable plugin-name@marketplace-name |
启用插件(重新启用已禁用的插件):
1 | › /plugin enable plugin-name@marketplace-name |
卸载插件(完全移除):
1 | › /plugin uninstall plugin-name@marketplace-name |
查看已安装的插件:
1 | › /plugin |
选择 “管理插件” 可以查看所有已安装的插件及其状态。
8.5.4. 团队级插件配置(自动安装)
“每个新入职的同事都要手动添加市场、安装插件,太麻烦了。”
Claude Code 支持在项目级别配置插件,团队成员克隆项目后,插件会自动安装。
步骤 1:在项目根目录创建配置
创建或编辑 .claude/settings.json:
1 | { |
步骤 2:提交到 Git
1 | git add .claude/settings.json |
步骤 3:团队成员使用
当团队成员克隆项目并首次运行 Claude Code 时:
- Claude Code 会检测到
.claude/settings.json中的市场配置 - 提示用户是否信任该项目
- 用户确认后,自动添加市场并安装指定的插件
安全提示:插件可以执行任意代码。只信任来自可靠来源的项目配置。
8.5.5. 本节小结
本节我们学习了插件的安装与管理:
| 操作 | 命令 |
|---|---|
| 添加市场 | /plugin marketplace add owner/repo |
| 浏览插件 | /plugin → 浏览插件 |
| 安装插件 | /plugin install name@marketplace |
| 禁用插件 | /plugin disable name@marketplace |
| 启用插件 | /plugin enable name@marketplace |
| 卸载插件 | /plugin uninstall name@marketplace |
| 团队配置 | .claude/settings.json 中配置 extraKnownMarketplaces 和 enabledPlugins |
8.6. 本章总结与插件开发速查
本章我们学习了 Claude Code 的插件系统——把散装的配置打包成可复用、可分享的标准格式。核心思想是:一次编写,到处使用。
8.6.1. 核心概念回顾
| 概念 | 作用 | 关键点 |
|---|---|---|
| 插件 | 打包自定义功能 | 命令带命名空间前缀 /plugin-name:command |
| 市场 | 分发插件的目录 | 可以是 GitHub 仓库或本地目录 |
| Skills | 模型自动调用的能力 | 根据任务上下文自动加载 |
8.6.2. 场景速查:遇到这些情况,直接用
场景 1:创建最小插件
1 | mkdir -p my-plugin/.claude-plugin |
my-plugin/.claude-plugin/plugin.json:
1 | { |
my-plugin/commands/hello.md:
1 | --- |
场景 2:本地测试插件
1 | claude --plugin-dir ./my-plugin |
场景 3:创建本地市场
my-marketplace/.claude-plugin/marketplace.json:
1 | { |
1 | › /plugin marketplace add ./my-marketplace |
场景 4:发布到 GitHub
1 | cd my-marketplace |
用户安装:
1 | › /plugin marketplace add you/claude-plugins |
场景 5:团队自动安装配置
.claude/settings.json:
1 | { |
8.6.3. 调试插件问题
插件不生效?命令找不到?别慌,按这个清单排查:
问题 1:命令没出现在 /help 列表中
| 检查项 | 排查方法 |
|---|---|
| plugin.json 是否存在 | 确认 .claude-plugin/plugin.json 路径正确 |
| 目录结构是否正确 | commands/ 应该在插件根目录,不是在 .claude-plugin/ 里面 |
| 是否重启了 Claude Code | 修改插件后必须重启才能生效 |
问题 2:Skill 没有被自动调用
Skill 的触发依赖于 description 字段的描述质量。如果 Claude 没有自动调用你的 Skill,检查:
description是否清晰描述了 “什么情况下应该使用这个 Skill”- 你的任务描述是否与 Skill 的
description匹配
问题 3:插件安装后文件找不到
这是一个常见坑点:插件安装后会被 复制到缓存目录,而不是原地使用。如果你的 Hooks 或 MCP 配置引用了插件目录外的文件,会找不到。
解决方案:使用 ${CLAUDE_PLUGIN_ROOT} 变量引用插件内的文件:
1 | { |
问题 4:验证插件语法
Claude Code 提供了验证命令,可以检查插件配置是否有语法错误:
1 | claude plugin validate ./my-plugin |
或者在 Claude Code 内部:
1 | › /plugin validate ./my-plugin |
8.6.4. 从独立配置迁移到插件
如果你已经在 .claude/ 目录下积累了一些好用的配置,想把它们打包成插件分享给团队,按这个步骤迁移:
迁移对照表:
| 独立配置位置 | 插件位置 |
|---|---|
.claude/commands/*.md | my-plugin/commands/*.md |
.claude/agents/*.md | my-plugin/agents/*.md |
settings.json 中的 hooks | my-plugin/hooks/hooks.json |
.mcp.json | my-plugin/.mcp.json |
迁移步骤:
步骤 1:创建插件骨架
1 | mkdir -p my-plugin/.claude-plugin |
步骤 2:创建 plugin.json
1 | { |
步骤 3:复制文件
1 | # 复制命令 |
步骤 4:迁移 Hooks
独立配置的 Hooks 在 settings.json 里,插件的 Hooks 需要单独放到 hooks/hooks.json:
创建 my-plugin/hooks/hooks.json:
1 | { |
注意:Hooks 中引用的脚本文件也要复制到插件目录内,并使用 ${CLAUDE_PLUGIN_ROOT} 变量引用。
步骤 5:测试
1 | claude --plugin-dir ./my-plugin |
迁移后的变化:
| 维度 | 迁移前 | 迁移后 |
|---|---|---|
| 命令格式 | /review | /my-plugin:review |
| 作用范围 | 仅当前项目 | 可跨项目安装 |
| 分享方式 | 手动复制 | 通过市场安装 |
8.6.5. 插件开发最佳实践
实践 1:语义化版本号
版本号遵循 主版本.次版本.修订号 格式:
- 主版本:不兼容的 API 变更(如命令名改了)
- 次版本:向后兼容的功能新增
- 修订号:向后兼容的问题修复
实践 2:写好 README
在插件根目录创建 README.md,包含:
- 插件功能介绍
- 安装方法
- 命令列表和使用示例
- 配置说明(如果有环境变量)
实践 3:命名规范
- 插件名:使用 kebab-case(如
code-reviewer) - 命令名:简短有意义(如
review、format) - Skill 名:描述能力(如
security-check、performance-analysis)
实践 4:最小权限原则
- MCP 服务器只配置必要的权限
- Hooks 只监听必要的事件
- 文件系统访问只授权必要的目录







