插件:
把一整套配置装进一个盒子
前面几课,你学会了写技能、配子代理、挂钩子、接 MCP。要把这一套交给同事,总不能让他一个个文件去拷。插件就是一个打包好的盒子:一条命令装好,一条命令更新,团队里人人一样。
/plugin install
my-team-kit@my-team
只想用别人的插件,看"入门"就够了;想自己做一个、分享给团队,接着看"原理"和"实战"。
插件是什么
一个插件就是一个文件夹,里面放着技能、子代理、钩子、MCP 服务器等,外加一张"身份证" .claude-plugin/plugin.json(可以不写,但写上才能定名字、版本和说明)。
单独配置(放在 .claude/) | 插件 | |
|---|---|---|
| 技能的名字 | /hello | /插件名:hello,带前缀,不同插件同名也不打架 |
| 怎么给别人 | 把文件拷过去,钩子还要手动合并进设置 | 对方一条 /plugin install |
| 怎么更新 | 再拷一遍 | 发新版本,对方 /plugin update 或自动更新 |
| 适合 | 自己用、只在一个项目里用、快速试验 | 团队共用、跨项目复用、公开发布 |
- 官方建议:先在
.claude/里写,好用了再打包成插件。 - 插件和市场:插件放在"市场"(marketplace)里发布。市场就是一份插件目录,一个 GitHub 仓库就能当市场。
- 安全:插件能在你电脑上以你的身份运行任意代码(钩子、MCP 服务器都是程序)。只装你信任的来源。
找插件、装插件
分两步:先添加市场(登记一份目录,什么都还没装),再从里面安装插件。官方市场 claude-plugins-official 在你第一次打开 Claude Code 时就自动加好了。
试一试:在 /plugin 面板里挑一个装上
输入 /plugin 打开插件管理器。点列表里的插件看详情,再选一个安装范围:
示意:插件是官方市场里真实存在的,面板的排版和"每轮约多少 token"是示意数字;装之前以面板上的实际数字为准。
| 想做什么 | 对话里 | 终端里 |
|---|---|---|
| 添加市场 | /plugin marketplace add anthropics/claude-code | claude plugin marketplace add … |
| 安装 | /plugin install 插件名@市场名 | claude plugin install 插件名@市场名 --scope project |
| 看装了哪些 | /plugin list | claude plugin list |
| 暂时关掉 / 打开 | /plugin disable、/plugin enable | claude plugin disable、enable |
| 卸载 | /plugin uninstall 插件名@市场名 | claude plugin uninstall … |
| 看它会带来多少上下文 | 详情页的 Context cost | claude 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。
练一练:装在哪个范围?
每个场景选一个最合适的。最后一个选项是"不做插件,直接写在 .claude/ 里"。
盒子里有什么
插件的每种内容都有固定的位置。放对了,Claude Code 自动认出来;放错了,不报错,只是不加载。点文件树里的文件看看:
把 skills/、agents/、hooks/ 放进了 .claude-plugin/ 文件夹。那里面只放 plugin.json,其他东西都放在插件根目录。
名字、路径和版本
做插件时最容易踩的三个坑:技能叫什么名字、脚本路径怎么写、改了代码同事为什么收不到。
名字带前缀
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"。
试一试:改了代码,同事能收到吗?
动手做第一个插件
填个名字,勾上要装的东西,代码窗口里会生成整个插件的每个文件。拷下来放进一个文件夹,按下面三步试一遍。
三步试一遍
--plugin-dir只在这次会话里加载,不用安装,适合边改边试。改了文件,对话里输入/reload-plugins就能用上新的。- 懒得建文件夹?
claude plugin init my-helper --with skills hooks会在~/.claude/skills/my-helper/生成一个骨架,下次启动自动加载为my-helper@skills-dir,不用安装。
插件体检:原仓库的 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。
分享给团队:建一个自己的市场
市场就是一个带 .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 validate ./team-plugins,看到✔ Validation passed。 - 本地试装:
/plugin marketplace add ./team-plugins,再/plugin install my-team-kit@my-team。 - 推到 GitHub,同事执行
/plugin marketplace add your-org/team-plugins,然后安装。私有仓库也行,同事有读权限就能装。 - 发新版:改
plugin.json里的version(第 5 节),再推送。
让同事一打开项目就收到提示
把市场和要启用的插件写进项目的 .claude/settings.json,提交到仓库。同事信任这个项目文件夹后,市场会自动加好;插件如果还没装,Claude Code 会提示他运行对应的安装命令。
- 第三方和本地市场默认不自动更新,要在
/plugin→ Marketplaces 里打开;官方市场默认自动更新。 - 想让更多人用:先跑
claude plugin validate,再从官方表单提交到社区市场。官方市场由 Anthropic 自己挑选,没有申请入口。
终端演练:装一个、做一个
先从官方的演示市场装一个现成的插件用起来,再做一个自己的插件,本地加载、检查、改了重新加载。点"下一步"回放,放完可以自己输入。
终端画面为教学示意,输出的措辞和数字是虚构的;命令、市场名、插件名与官方文档一致。
进阶与避坑
装了没反应、改了没更新、同事装不上……按症状查。
装好了,技能却找不到
/插件名:技能名。再看 /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 强制启用某些插件。老教程里的写法和官方不一样
- 插件的 MCP 配置放在
mcp/xxx.json:默认只读插件根目录的.mcp.json,别的位置要在plugin.json里用mcpServers指过去。 - 把
hooks/pre-deploy.js这样的脚本直接放进hooks/就算钩子:钩子要在hooks/hooks.json里注册。 userConfig每项只写description:type和title也是必填。- 后台监视器写在
plugin.json顶层的monitors、用trigger字段:官方是monitors/monitors.json(或experimental.monitors),触发条件字段叫when,值是always或on-skill-invoke:技能名。 - 插件的
settings.json只支持agent:现在还支持subagentStatusLine。 marketplace.json里"owner": "my-org"写成字符串:官方是对象{"name": "…"}。插件来源也没有pip这一种。- Rust 的代码智能插件叫
rust-analyzer-lsp,不是rust-lsp。没有/plugin install github:用户名/仓库这种写法:先把仓库作为市场添加再安装,或者一步到位/plugin install 插件名 --marketplace 用户名/仓库。
小测验
8 道题,每题选完会立刻看到解析。这是最后一课的测验。
