Claude Code 工程 · Plugins
学习舱 / Claude Code 工程 / Plugins

Plugins 与开放生态

整理中 深度 · 应用 更新 2026-09-09

前置 Skills 实战、Hooks

Plugins 与开放生态

一句话定位:Plugin 是把技能、代理、钩子、MCP 配置打包成一个可分发单元的机制——自带命名空间、走市场安装;本文讲它装什么、怎么打包、以及引入第三方插件前该查什么。前置:Skills 实战与 Hooks——本文打包的正是这两样东西。

先从复制粘贴配置说起

半年下来,你攒了一堆个人配置:两三个趁手的 Skill、一个只读审计 agent、一套格式化 hooks。换一个项目,就得把这些文件一个个复制进新的 .claude/ 目录;同事看了好用,你把文件挨个发过去,还附一段「记得改这里」的说明。

散装配置的麻烦会越滚越大:没有版本号(改到哪版说不清)、没有命名空间(你的 deploy 和同事的 deploy 互相覆盖)、没有一键安装(每次同步靠手工)。最痛的是复利中断:同事基于你的配置改进了一版,你这边永远不知道。

怎么把这些组件变成一个可版本化、可分发、装上就能跑的单元?

答案是 Plugin:一个自带清单的目录,把相关组件装进去、统一挂上 插件名: 命名空间,通过市场分发安装。官方对两种方式的定位一句话:散装 .claude/ 适合个人快速迭代;要共享、要版本化、要跨项目复用,就打包成 Plugin。打包不是终点——官方建议的路径正是「散装起步、跑通了再打包」,别在最需要试错的阶段背上发布流程。先看解剖:

Plugin 解剖:一个目录装下一套手艺 ① 清单与组件目录 .claude-plugin/plugin.json(清单:名称、版本) skills/ 技能 · agents/ 代理定义 hooks/ 钩子 · .mcp.json 外部工具 settings.json 默认设置 · bin/ 可执行文件 清单可省略——组件用默认位置即可 常见错误:组件误放进 .claude-plugin/ 里 ② 命名空间 技能统一变成 /插件名:技能名 与散装同名也不冲突 ③ 版本化 清单声明 version 用户只在版本号变化时收到更新 ④ 分发:插件市场(Marketplace) 官方精选 / 社区公开 / 自建私有,三档渠道任选 读法:①是货箱,②③是箱贴(名字与版本),④是货架——打包、贴签、上架

图:Plugin 解剖——①清单与组件目录 ②统一命名空间 ③版本化 ④市场分发;散装配置的三大痛点各有一解

渐进拆解:把工具箱变成产品

类比:散装配置是一抽屉散装工具——都能用,但借给别人要一件件挑;Plugin 是带说明书与型号的工具套装——封箱(清单)、贴牌(命名空间)、打版本号、上架商店。别人买的不是散件,是「装上即用的一整套」。工具箱还解决了一个隐蔽问题:两个工人可能有同名的扳手,收进各自的工具箱、贴上箱标,就再也不会拿混——这就是命名空间。

目录结构与清单(①货箱)

一个插件一个目录:.claude-plugin/plugin.json 是清单,声明名称与版本——但它可以省略,组件都用默认位置时不需要清单。组件各归各位:

目录 / 文件用途
skills/技能目录(旧式 commands/ 扁平文件也认)
agents/代理定义
hooks/hooks.json 事件处理
.mcp.jsonMCP 外部工具接入
.lsp.json代码智能
monitors/后台监视
settings.json启用插件时套用的默认设置
bin/进 PATH 的可执行文件

官方点名的高频错误只有一个:把组件目录塞进 .claude-plugin/ 里——那个目录只放 plugin.json,其余全在插件根。

命名空间(②箱贴)

插件里的技能统一变成 /插件名:技能名(如 /my-first-plugin:hello)——这就是技能「同名不冲突」的机制保证:散装 deploy 和插件 deploy 各走各的名字。

版本化(③型号)

版本由清单的 version 字段声明,用户只在版本号变化时收到更新——升级节奏掌握在作者手里。

安装作用域与测试

  • 本地开发:--plugin-dir 指向目录即可测试,不装入正式配置。
  • 团队内部共享:用私有仓库当市场——市场清单放在你控制的仓库里,加什么、何时更新都由你定。
  • 公开市场:用 /plugin marketplace add 命令注册(如社区市场),/plugin 菜单浏览安装。

插件里的 hooks 与散装 hooks 一样以你的完整用户权限执行——这个风险点在供应链一节细说。

大白话:Skill 是一门手艺,MCP 是接进来的水电管网,Plugin 是把「手艺 + 管线图纸 + 说明书」封成一箱发货。箱子本身不干活——干活的是里面的东西;箱子的价值在于可运输、可清点、可追踪版本。

技术定义:Plugin 是含可选清单文件(.claude-plugin/plugin.json)与若干组件目录的自包含目录;清单字段以名称与版本为核心。安装经插件市场完成,市场本质是一份「插件目录 + 来源仓库」的清单:官方精选市场随首次交互启动自动注册,公开社区市场需一条命令手动添加,另支持私有自建。组件沿用散装机制的语义:skills/ 即技能(挂命名空间)、agents/ 即子代理定义、hooks/hooks.json 即事件钩子、.mcp.json 即 MCP 服务器声明。

打包与分发(④货架)

分发前四步:

  1. 写 README(安装与用法说明)。
  2. 定版本策略:清单显式声明;不声明时自动取来源仓库的版本信息兜底。
  3. 建或选市场。
  4. 找同事试用。

版本策略的细节值得一句:声明了 version 字段,用户只在该字段变化时收到更新——这既是发布节奏的控制点,也是「我不推更新你就安全」的供应链阀门。

市场分三档:

渠道准入定位
claude-plugins-officialAnthropic 精选,首次交互启动自动注册官方精选
claude-community公开社区市场,经审核进入社区公开
私有市场仓库自建团队内部用

提交社区市场前,本地先跑 claude plugin validate 自检;审核管道跑同样的检查外加自动化安全筛查。通过的插件被固定到特定提交,目录每晚同步。

从散装迁移有官方路径:把 .claude/ 下的组件按类型挪进插件目录结构(skills/(旧 commands/ 亦可)、agents/、hooks/ 对号入座),技能名从此多出插件名前缀——引用它的地方记得同步改名。

迁完记得处理 .claude/ 原件:agents 的同名散装定义会盖过插件版(删掉原件才让插件版生效);技能则因命名空间不同新旧并存(/deploy 与 /my-plugin:deploy 都在),删原件是为了不留双份入口。

从 Claude Code 到开放标准

这套生态不是孤岛,底座都是通用协议:

  • 技能格式:Agent Skills 开放标准(跨 AI 工具通用)。
  • 外部工具接入:MCP 协议(行业通用)。
  • 代码智能:LSP(编辑器世界的老标准)。

Claude Code 的插件生态建立在通用协议之上,技能与工具可以在不同产品间迁移,而不是锁死在单一产品里。

动手:五分钟打一个包

三步(# 后是注解):

mkdir -p my-first-plugin/skills/hello          # 建插件目录与技能目录
cat > my-first-plugin/skills/hello/SKILL.md <<'EOF'
---
description: 打一声招呼,演示插件技能的形态
---
向用户问好,并报出今天的日期。
EOF
claude --plugin-dir ./my-first-plugin          # 指向目录即可测试:/my-first-plugin:hello

跑通之后再补清单与元数据:加 .claude-plugin/plugin.json(写 name 与 version;测试阶段没建清单时,命名空间取自目录名)、加 README;准备分享时跑 claude plugin validate ./my-first-plugin 自检,通过后按前述三档渠道上架或自建私有市场给团队用。反向操作也支持:已有的散装 .claude/ 配置可按官方迁移步骤转成插件,组件位置对号入座。

Plugin、Skill、MCP 三者都能「加能力」,一张表划清边界(口径来自官方文档):

机制本质加的是什么典型场景
Skill按需加载的提示与流程知识与流程发版清单、领域速查
MCP Server外部工具协议接入新的工具能力查数据库、管云资源
Plugin打包与分发单元上面两种的组合外加代理、钩子团队标配一套手艺

边界与取舍:上架之前先过安检

三者边界一句话。 加「知识/流程」写 Skill,加「工具能力」接 MCP Server,要把一组东西打包分发才是 Plugin——Plugin 本身不产能力,它是容器与渠道。三者的关系画成图:

Plugin / Skill / MCP:容器、知识、工具 Plugin(容器与渠道:打包 · 命名空间 · 版本) Skill 知识与流程 (提示层,按需加载) 加「怎么做事」 MCP Server 外部工具接入 (协议层,动态能力) 加「能做更多事」 容器里还可以有:agents/ 子代理 · hooks/ 钩子 · settings 默认配置 单个能力自己装(散装 .claude/);成套分享才封箱(Plugin)

图:三者边界——Plugin 是外层容器,内装 Skill(提示层)与 MCP(协议层);容器解决的是分发问题,不是能力问题

反过来说:个人自用、单项目、还在快速迭代的配置,别急着打包,散装迭代最快;「准备分享」才是打包的信号。

第三方插件的供应链风险怎么评估

插件的 hooks 与散装 hooks 一样以你的完整用户权限执行 shell——装一个恶意插件等于把机器钥匙交出去。评估清单:

  1. 一看来源:优先官方精选市场(Anthropic 精选);社区市场经审核与自动化安全筛查;私有市场则取决于你信不信那个仓库。
  2. 二看内容:安装前审 hooks 与 bin/(会自动执行的脚本与可执行文件);skills 相对安全(只是提示文本)。
  3. 三看机制:市场分发把插件固定在特定提交上、版本变更可控,比「复制粘贴来路不明的脚本」可控得多。
  4. 四看最小化:只启用当前需要的插件,用不上的及时停用。

还有一个常被忽略的角度:供应链风险是动态的——装的时候干净,不代表更新后依然干净;私有场景把版本锁死、公开场景留意版本变更说明,都是常规动作。

别为了「看起来专业」过度打包。 插件引入命名空间与版本管理的成本,换来的是分发与复用——一个人单项目用不上这些。官方建议的节奏是:散装起步、快速迭代,等确认要分享时再打包迁移。

自测

合上文章先自己答,再展开对照:

Plugin、Skill、MCP Server 三者都能「给 Claude 加能力」——边界在哪?

三者是「容器、知识、工具」的关系。Skill 是按需加载的提示与流程——加的是知识与流程(怎么做事);MCP Server 是外部工具的协议接入——加的是新的工具能力(能做更多事);Plugin 本身不产能力,它是打包与分发单元——把技能、代理、钩子、MCP 配置组合在一起,带命名空间与版本,解决「怎么分享」。所以:单条流程写 Skill,接外部系统用 MCP,要把一套组合分享给团队或社区才打成 Plugin。

引入第三方 Plugin 的供应链风险怎么评估?

核心风险:插件的 hooks 以你的完整用户权限执行 shell,恶意插件等于交出机器钥匙。四步评估:一看来源——官方精选市场经 Anthropic 精选,社区市场有审核加自动化安全筛查,私有市场取决于仓库控制者;二看内容——重点审 hooks/ 与 bin/(会自动执行的脚本与可执行文件),skills 只是提示文本相对安全;三看机制——市场分发把插件固定在特定提交、版本变更可控,优于来路不明的散装脚本;四看最小化——只启用需要的插件,用不上及时停用。安装前的最后动作永远是:打开 hooks 文件亲眼看一遍。

参考与延伸

  • Claude Code 官方文档《Create custom plugins》:目录结构、清单字段、市场分发与验证的原始出处 — code.claude.com/docs/en/plugins
  • Agent Skills 开放标准(agentskills.io):技能格式跨工具通用的规范基础 — agentskills.io

下一站:Headless、CI/CD 与 Agent SDK——离开交互终端:把 Claude Code 嵌进脚本与流水线。

本节点大纲与自测题(5 个子点 · 2 问)

大纲

  • Marketplace 三类市场与生态概览
  • Plugin 目录结构与清单文件
  • Plugin 配置与安装作用域
  • Plugins 打包与分发
  • 从 Claude Code 到行业开放标准

自测——答不上来就是缺口

  • Plugin、Skill、MCP Server 三者都能「给 Claude 加能力」——边界在哪?
  • 引入第三方 Plugin 的供应链风险怎么评估?