×−+
插件第 10 课 · Claude Code 教程
第 10 课 · PLUGINS

插件:
把一整套配置装进一个盒子

前面几课,你学会了写技能、配子代理、挂钩子、接 MCP。要把这一套交给同事,总不能让他一个个文件去拷。插件就是一个打包好的盒子:一条命令装好,一条命令更新,团队里人人一样。

约 40 分钟 11 节 · 8 个动手练习 章末测验 改编自 luongnv89/claude-howto(MIT)
my-team-kit一个插件 = 一个文件夹
同事只要一条:
/plugin install
  my-team-kit@my-team
入门先用起来 原理弄懂为什么 实战动手练 深入进阶与避坑

只想用别人的插件,看"入门"就够了;想自己做一个、分享给团队,接着看"原理"和"实战"。

01入门

插件是什么

一个插件就是一个文件夹,里面放着技能、子代理、钩子、MCP 服务器等,外加一张"身份证" .claude-plugin/plugin.json(可以不写,但写上才能定名字、版本和说明)。

单独配置(放在 .claude/)插件
技能的名字/hello/插件名:hello,带前缀,不同插件同名也不打架
怎么给别人把文件拷过去,钩子还要手动合并进设置对方一条 /plugin install
怎么更新再拷一遍发新版本,对方 /plugin update 或自动更新
适合自己用、只在一个项目里用、快速试验团队共用、跨项目复用、公开发布
  • 官方建议:先在 .claude/ 里写,好用了再打包成插件。
  • 插件和市场:插件放在"市场"(marketplace)里发布。市场就是一份插件目录,一个 GitHub 仓库就能当市场。
  • 安全:插件能在你电脑上以你的身份运行任意代码(钩子、MCP 服务器都是程序)。只装你信任的来源。
02入门

找插件、装插件

分两步:先添加市场(登记一份目录,什么都还没装),再从里面安装插件。官方市场 claude-plugins-official 在你第一次打开 Claude Code 时就自动加好了。

试一试:在 /plugin 面板里挑一个装上

输入 /plugin 打开插件管理器。点列表里的插件看详情,再选一个安装范围:

my-app — /plugin
DiscoverInstalledMarketplacesErrorsStats

示意:插件是官方市场里真实存在的,面板的排版和"每轮约多少 token"是示意数字;装之前以面板上的实际数字为准。

想做什么对话里终端里
添加市场/plugin marketplace add anthropics/claude-codeclaude plugin marketplace add …
安装/plugin install 插件名@市场名claude plugin install 插件名@市场名 --scope project
看装了哪些/plugin listclaude plugin list
暂时关掉 / 打开/plugin disable、/plugin enableclaude plugin disable、enable
卸载/plugin uninstall 插件名@市场名claude plugin uninstall …
看它会带来多少上下文详情页的 Context costclaude plugin details 插件名
  • 装完就生效:安装摘要最后一行写 Plugin is now active. 就能直接用;写 Run /reload-plugins to activate. 时 Claude Code 会替你重新加载;如果它提示下一条消息要重读整段对话,输入 /reload-plugins --force。在另一个终端用 claude plugin 命令装的,要在对话里输入 /reload-plugins。
  • 社区市场:第三方插件经过自动审核后放在 anthropics/claude-plugins-community,要自己添加,安装时写 @claude-community。
03入门

练一练:装在哪个范围?

每个场景选一个最合适的。最后一个选项是"不做插件,直接写在 .claude/ 里"。

04原理

盒子里有什么

插件的每种内容都有固定的位置。放对了,Claude Code 自动认出来;放错了,不报错,只是不加载。点文件树里的文件看看:

my-team-kit
最常见的错误

把 skills/、agents/、hooks/ 放进了 .claude-plugin/ 文件夹。那里面只放 plugin.json,其他东西都放在插件根目录。

05原理

名字、路径和版本

做插件时最容易踩的三个坑:技能叫什么名字、脚本路径怎么写、改了代码同事为什么收不到。

名字带前缀

plugin.json 里的 name 就是前缀。插件 my-team-kit 里的技能 review 叫 /my-team-kit:review,子代理叫 my-team-kit:security-reviewer。这样两个插件都有叫 review 的技能也不会打架。

路径用变量,别写死

装插件时,Claude Code 会把整个文件夹拷贝到 ~/.claude/plugins/cache/,每个版本一个目录(从本地文件夹添加的市场是例外:插件直接从原文件夹读,改了就生效)。所以插件里引用自己的文件,要用这几个变量:

变量指向用来放
${CLAUDE_PLUGIN_ROOT}插件现在的安装目录,每次更新都会变插件自带的脚本、配置
${CLAUDE_PLUGIN_DATA}~/.claude/plugins/data/插件-市场/,更新后还在装好的依赖(如 node_modules)、缓存。卸载时会删掉
${CLAUDE_PROJECT_DIR}当前项目的根目录项目里的脚本、配置
  • 拷贝以后,插件够不着自己文件夹外面的文件,../shared/ 这种路径会失效。
  • 钩子命令里的变量要用双引号包起来(在 JSON 里写成 \"),路径里有空格也不出错:"\"${CLAUDE_PLUGIN_ROOT}\"/scripts/format.sh"。

试一试:改了代码,同事能收到吗?

06实战

动手做第一个插件

填个名字,勾上要装的东西,代码窗口里会生成整个插件的每个文件。拷下来放进一个文件夹,按下面三步试一遍。

身份证 plugin.json
name
description
author
装进去什么

三步试一遍

终端
  • --plugin-dir 只在这次会话里加载,不用安装,适合边改边试。改了文件,对话里输入 /reload-plugins 就能用上新的。
  • 懒得建文件夹?claude plugin init my-helper --with skills hooks 会在 ~/.claude/skills/my-helper/ 生成一个骨架,下次启动自动加载为 my-helper@skills-dir,不用安装。
07实战

插件体检:原仓库的 pr-review

原仓库自带一个示例插件 pr-review。它能装上,但装上以后有一半东西不会生效。给它做个体检:

pr-review
点"开始体检"。文件树里是插件原来的结构。
  • claude plugin validate ./pr-review 检查的是格式:plugin.json、hooks/hooks.json、各文件开头的 frontmatter。"放错位置、没被加载"它查不出来,要用 claude plugin details pr-review 或 /plugin 详情页看实际装进了什么。
  • 装上后在 /plugin 的 Errors 标签页看有没有加载错误;更细的用 claude --debug。
08实战

分享给团队:建一个自己的市场

市场就是一个带 .claude-plugin/marketplace.json 的仓库,里面列出有哪些插件、去哪取。

目录结构
team-plugins/                     # 推到 GitHub:your-org/team-plugins
├── .claude-plugin/
│   └── marketplace.json          # 市场目录
└── plugins/
    └── my-team-kit/              # 第 6 节做的插件
        ├── .claude-plugin/plugin.json
        └── skills/ …
.claude-plugin/marketplace.json
  1. 检查:claude plugin validate ./team-plugins,看到 ✔ Validation passed。
  2. 本地试装:/plugin marketplace add ./team-plugins,再 /plugin install my-team-kit@my-team。
  3. 推到 GitHub,同事执行 /plugin marketplace add your-org/team-plugins,然后安装。私有仓库也行,同事有读权限就能装。
  4. 发新版:改 plugin.json 里的 version(第 5 节),再推送。

让同事一打开项目就收到提示

把市场和要启用的插件写进项目的 .claude/settings.json,提交到仓库。同事信任这个项目文件夹后,市场会自动加好;插件如果还没装,Claude Code 会提示他运行对应的安装命令。

.claude/settings.json
  • 第三方和本地市场默认不自动更新,要在 /plugin → Marketplaces 里打开;官方市场默认自动更新。
  • 想让更多人用:先跑 claude plugin validate,再从官方表单提交到社区市场。官方市场由 Anthropic 自己挑选,没有申请入口。
09实战

终端演练:装一个、做一个

先从官方的演示市场装一个现成的插件用起来,再做一个自己的插件,本地加载、检查、改了重新加载。点"下一步"回放,放完可以自己输入。

my-app — claude — 90×28
>

终端画面为教学示意,输出的措辞和数字是虚构的;命令、市场名、插件名与官方文档一致。

10深入

进阶与避坑

装了没反应、改了没更新、同事装不上……按症状查。

装好了,技能却找不到
先看名字:插件技能带前缀,是 /插件名:技能名。再看 /plugin 的 Errors 标签页。还不行,清掉缓存重装:rm -rf ~/.claude/plugins/cache,重启 Claude Code,再安装一次。
我往插件里放了 CLAUDE.md,没有生效
插件里的 CLAUDE.md 不会被当成项目说明加载。要让 Claude 每次都知道的东西,写成一个技能(skill);项目自己的约定还是写在项目的 CLAUDE.md 里(第 2 课)。
我推了新代码,同事 /plugin update 说已是最新
plugin.json 里写了 version,就只认这个号。每次发布都把它改大,比如 1.0.0 → 1.1.0。团队内部用的插件也可以干脆不写 version,按提交号更新。
装了 typescript-lsp,报 Executable not found in $PATH
代码智能插件只负责"接线",语言服务器程序要你自己装,比如 npm install -g typescript-language-server typescript。装好后 Claude 每次改完文件就能立刻看到类型错误,还能跳转到定义、查找引用。
移除市场之后,插件也没了
/plugin marketplace remove 会顺带卸载从这个市场装的所有插件。只想刷新列表用 /plugin marketplace update,它不会更新已装的插件,更新插件用 /plugin update 插件名。
插件太多,感觉上下文被吃掉了
每个插件的技能描述、子代理描述每轮都要占一点上下文。claude plugin details 插件名 能看到"always-on"占多少 token。/plugin 的 Installed 页会把两周没用过的插件列在 Not used recently 下面,不用的就关掉或卸掉。
公司想统一管理插件
管理员可以在下发的设置里用 strictKnownMarketplaces 规定只能添加哪些市场、blockedMarketplaces 封禁某些市场、enabledPlugins 强制启用某些插件。
老教程里的写法和官方不一样
  1. 插件的 MCP 配置放在 mcp/xxx.json:默认只读插件根目录的 .mcp.json,别的位置要在 plugin.json 里用 mcpServers 指过去。
  2. 把 hooks/pre-deploy.js 这样的脚本直接放进 hooks/ 就算钩子:钩子要在 hooks/hooks.json 里注册。
  3. userConfig 每项只写 description:type 和 title 也是必填。
  4. 后台监视器写在 plugin.json 顶层的 monitors、用 trigger 字段:官方是 monitors/monitors.json(或 experimental.monitors),触发条件字段叫 when,值是 always 或 on-skill-invoke:技能名。
  5. 插件的 settings.json 只支持 agent:现在还支持 subagentStatusLine。
  6. marketplace.json 里 "owner": "my-org" 写成字符串:官方是对象 {"name": "…"}。插件来源也没有 pip 这一种。
  7. Rust 的代码智能插件叫 rust-analyzer-lsp,不是 rust-lsp。没有 /plugin install github:用户名/仓库 这种写法:先把仓库作为市场添加再安装,或者一步到位 /plugin install 插件名 --marketplace 用户名/仓库。
11检验

小测验

8 道题,每题选完会立刻看到解析。这是最后一课的测验。