乐于分享
好东西不私藏

Claude Code 插件第一性原理:你装的不是新功能,是打包分发

Claude Code 插件第一性原理:你装的不是新功能,是打包分发
title:"Claude Code 插件第一性原理:你装的不是新功能,是打包分发"type:公众号终稿series:Claude Code 从 0 到 1 入门sequence:11status:终稿created:2026-06-28published:2026-06-28main_value:实用为主source_material:"[[50-创作与素材/MOC-待消化素材/怎么给 AI 装插件]]"writing_plan:"[[50-创作与素材/工作区/CC11-插件第一性原理-plan]]"related_docs:-"[[CC07-从Skill到SubAgent:一张桌子的故事]]"-"[[CC08-多个AI怎么协作]]"-"[[CC09-Claude Code 的提示词是提醒——不够用,得装门禁 Hook]]"-"[[CC10-Claude Code 权限分 5 档:5 张房卡看你该拿哪张]]"-"[[30-知识与技能/MOC-AI应用方法论/AI辅助写作-L1-03-事实层与解读层]]"style_card:19 · 马斯克(第一性原理 + 反官方包装 + 280 字短帖)tags:-Claude Code-Plugin-插件-第一性原理-打包分发-Marketplace-高信任组件-npmdescription:|Claude Code 插件不是 App Store 装的孤立功能,而是把你已有能力(Skill/Hook/MCP/SubAgent)打包分发的容器。本文剥到第一性讲清楚:插件解决了什么(散装配置难复制)、怎么用(目录结构 + manifest + marketplace + scope)、什么时候该用(先问 3 个问题)、2 个致命失控(App Store 装一堆 + 个人配置仓库化)。changelog:-2026-06-28:v1 草稿,按 writing-sop 跑完 9 维决策 + brainstorming 流程 + 马斯克(19)风格指令 + 6 大块大纲-2026-06-28:内容审查通过(全文合格,无高风险问题)-2026-06-28:事实核查通过——3 处修订——(1) "11 个组件"改为"9 个核心稳定 + 2 个 experimental"(官方主页只列 9 个稳定,Themes/Output styles 标 experimental);(2) §5 "high-trust components" 去掉引号 + 标"素材原作者转述";(3) §4 命名空间加 1 句"S KILL.md name 不带前缀";移到 MOC-创作成果/

Claude Code 从 0 到 1 入门系列 · 第 11 篇上手时间:读完约 8 分钟,搭一个最小插件约 5 分钟

Skill / Hook / Permission / SubAgent / Agent Teams / MCP ……熟悉吗?会用这些,都是能力

你的能力非常强,让同事非常羡慕:"你这套 Claude Code 怎么配的?我也想装"。那怎么做?🤔

单个文件📄可以复制,单段配置📄也可以贴过去,这整套能力散落在 .claude/settings.json.mcp.json、脚本目录里。你想想,复制一次还行,给多个人复制会不会出错?

然后,假设你更新了 Hook 逻辑,是不是还得通知大家手动更新😅😅

所以才有了 Plugin(插件)。


插件 = 新功能?😅😅不是这样

大多数人第一次听说 Claude Code 插件,直觉反应是:

"哦,就是装一个新功能嘛,像装 Chrome 插件那样。"

这个直觉是错的。

如果你真的把 Plugin 当"新功能"装:

  • 逛 marketplace 像逛 应用商店 一样,然后装一堆
  • 装完期待 Claude "多了一个能力"
  • 结果发现 Claude 没变聪明,因为 Plugin 装的是你已有的能力,不是新能力

哪里有问题?🫤

Chrome 插件 = 装一个新功能(广告拦截器、密码管理器、主题皮肤), 这些插件给浏览器增加原本没有的能力。

Claude Code 插件 ≠ 装一个新功能

它是把你已经在用的 Skill / Hook / MCP / SubAgent 打包起来,让另一个项目、另一个同事也能用同一套。

可总结为👉第一性:Plugin 的价值不是给 Claude Code 加能力,是把你已有的能力(你花了一周配的 Hook、你写的 MCP server、你调的 Skill)变成可分发、可更新、可安装的包


Plugin 第一性:你已有能力的打包分发

抛去官方定义,抛掉"npm 包类比",Plugin 第一性原理只有一句话:

Plugin = 你已有能力的打包分发。

ta不是新功能,是把分散在 .claude/settings.json、脚本目录里的配置,作为一个整体打包。装的人不用懂怎么配、用哪几个文件、怎么连。

这跟 npm 包的设计哲学一样👉不是创造新能力,是给已有能力提供分发包装

但实际 npm 类比容易把人带偏,让人以为"Plugin 就是 npm 包的 copy"。真正的 Plugin 比 npm 多了两层

  1. 容器化
    Plugin 不是单一文件,是一组文件(Skill + Hook + MCP + SubAgent + manifest + 默认设置)的整体打包
  2. 可发现性
    通过 Marketplace 目录统一管理,不用记仓库地址

我看官方文档把 Plugin 说成"包含 skills/agents/hooks/MCP servers 等扩展能力",有点觉得这个描述是倒果为因。Plugin 不是"包含这些东西",Plugin 是"这些分散能力的统一分发入口"。

如果让我重写所有文章,我会先写"Plugin = 容器, 也等于 你已有能力的打包",再讲里面能塞什么。先讲结构、再讲组件,而不是反过来从内到外。


拆解:9 个核心组件👉Plugin 是容器不是功能

以往,Plugin 常被说成只打包 5 件套:commands、agents、skills、hooks、MCP。这个理解是过时的,当前官方一个 Plugin 包含 9 类核心组件 + 2 个 experimental

核心 9 类(稳定)

组件
放在哪
干什么
Skillsskills/
给 Claude 增加任务流程
Commandscommands/
flat Markdown 命令(新插件优先用 Skills)
Agentsagents/
自定义 subagent
Hookshooks/hooks.json
自动化检查 / 事件处理
MCP servers.mcp.json
连接外部工具
LSP servers.lsp.json
代码跳转、引用、诊断
Monitorsmonitors/monitors.json
后台监听
bin/bin/
给 Bash tool 加命令
Default settingssettings.json
默认启用时的设置

Experimental 2 类 ⚠️

组件
放在哪
干什么
Output stylesoutput-styles/
自定义输出风格
Themesthemes/
自定义界面主题

⚠️ Output styles 和 Themes 截至 2026-06 仍标 experimental,生产环境谨慎使用

Plugin 是"容器"不是"功能"你这样理解一下

一个 PR 审查 Plugin = Skill(审查流程)+ Agent(安全审查员)+ MCP(GitHub 数据)+ Hook(提交前检查)🤔🛠️4 类能力打包在一起,团队成员装一次就有完整能力。

如果让我重做插件分类,我会先按"装的人会得到什么能力"分(流程 / 工具 / 智能 / 监控),再按组件分。现在的分类按"实现机制"分,让装的人看了一脸懵


什么时候该装?先问 3 个问题

不是所有配置都该打 Plugin。先问 3 个问题,全答"是"才考虑打包

问题
答"是" → 该装 Plugin
答"否" → 留 standalone
这套配置会被另一个项目或同事复用吗?
是——打包
否——留 .claude/
配置包含 3 个以上组件吗?
(Skill + Hook + MCP...)
是——打包收益高
否——standalone 更轻
配置会随时间演进、需要分发更新吗?
是——版本化分发
否——手动复制即可

反过来说,如果 3 个问题有 1 个答"否",就先别打 Plugin——standalone(散装配置)适合个人和单项目。

具体怎么判断?👇

你在做什么
更适合
给当前项目写一条规则
.claude/
 或 CLAUDE.md
试验一个临时 Hook
.claude/settings.local.json
写一个只给自己用的 Skill
standalone Skill
同一套能力要给多个项目用
Plugin
要给同事一键安装
Plugin
要走 marketplace 分发和更新
Plugin

这跟发 npm 包一个逻辑👉不要一开始就发包。先在本项目里跑通,稳定后再打包。

如果你只数出 0-1 条(部分)该打 Plugin🤔证明你还在 standalone 阶段,⚠️别为了"看起来工程化"提前打包。


5 分钟搭一个最小可用插件

目标也比较简单:搭一个最简 PR 审查 Plugin。

【一个 Skill + 一个 manifest】,然后让同事能装上。

第 1 步:建目录结构(30 秒)

pr-review-plugin/├── .claude-plugin/│   └── plugin.json└── skills/    └── review-pr/        └── SKILL.md

⚠️ 常见错:把 skills/ 也塞进 .claude-plugin/ 里,这会导致组件加载不到。只 manifest 进 .claude-plugin/,其他组件放插件根目录

第 2 步:写 manifest(1 分钟)

.claude-plugin/plugin.json

{    "name""pr-review-plugin",    "description""Claude Code 的团队PR审查工作流",    "version""1.0.0",    "author": {        "name""Your Team"      }}

字段含义

  • name
    插件唯一标识,也是 Skill 命名空间前缀(下面第 3 步会用到)
  • description
    管理界面展示用
  • version
    控制用户什么时候收到更新,不写 version 的话,如果通过 git 分发,Claude Code 用 commit SHA 判断版本,每次 commit 都视为新版本
  • author
    作者归属

第 3 步:写一个 Skill(1 分钟)

skills/review-pr/SKILL.md

---name:review-prdescription:审查拉取请求的安全性,风格和测试---# Review PR在审查拉起请求时:1.检查安全问题(SQL注入,硬编码密钥)2.验证代码风格符号项目规范3.确认测试覆盖新逻辑4.在最后输出风险列表

命名空间机制:当你装了 pr-review-plugin,调用时用 /pr-review-plugin:review-pr不会跟其他插件的 review-pr 冲突

⚠️ 注意:SKILL.md 里的 name 字段只写 skill 本名(如 review-pr),不带命名空间前缀——前缀由 plugin.json 的 name 自动加。

第 4 步:发到仓库 + 加 Marketplace(2 分钟)

推到一个 git 仓库(比如 your-org/pr-review-plugin)。

然后在 Claude Code 里:

/plugin marketplace add https://gitlab.com/your-org/plugins.git/plugin install pr-review-plugin@your-org

安装作用域(用 --scope 指定):

Scope
影响范围
适合
user
你所有项目
个人常用插件
project
当前仓库所有协作者
团队统一工具链
local
只在当前仓库本机
临时实验
managed
管理员下发
企业强制插件

默认装到 user scope,团队统一用要显式加 --scope project,会写入 .claude/settings.json 的 enabledPlugins

大概就这样,5 分钟🏪📨你的同事就能装你的 PR 审查 Plugin 了。


高信任组件的 2 个致命失控 + 短帖收尾

搭插件容易,管住风险难

一句话:Plugins 和 marketplaces 是 high-trust components,可以用你的用户权限在机器上执行任意代码。⚠️ 插件跑在你的 session 权限里。

失控 1:把 Plugin 当 App Store(应用商店) 装一堆

Marketplace 的体验跟手机商店太像了,图标、列表、一键安装。但底层完全不同:

维度
手机 App
Claude Code Plugin
跑在哪
系统沙箱
你的 Claude Code session
能访问什么
沙箱限制的 API
你登录的所有权限(GitHub / Cloud / 数据库)
跑代码吗
受限
任意代码
(继承你的 session 权限)

修复建议:每装一个插件,至少看它的 bin/ 和 hooks/👀👉这两类是真正能"代你执行"的代码。装 10 个不知来源的 plugin,等于把电脑控制权交给 10 个陌生人

失控 2:把 Plugin 当个人配置仓库

把所有 Skill、所有 Hook、个人主题、shell 别名全打进一个"my-claude-config" Plugin,结果可能同事装了反而被强制改成你的工作风格

修复建议:Plugin 应该围绕单一可复用工作流打包("PR 审查"、"合规审计"),不是个人 dotfiles。个人偏好放 ~/.claude/ 不进 Plugin。


收尾 2 件事儿

三句话总结

  1. 第一性
    Plugin = 你已有能力的打包分发,不是新功能。
  2. 决策
    先问 3 个问题(复用?3 个组件?分发更新?)。满足 3 个"是"才打 Plugin,有1个"否"就留 standalone。
  3. 风险
    高信任组件跑在你 session 权限里👉看 bin/ 和 hooks/、别装来源不明的、看 scope、定期回顾。

5-15 分钟练习题

任务:列出你 ~/.claude/ 下当前所有 standalone 配置(Skills / Hooks / MCP servers)。判断:哪些只对你个人 / 单项目有用✔️留在 standalone;哪些会被另一个项目或同事复用🛠️🛠️可以打成 Plugin。

验收标准(全部满足才算合格):

  1. 列出 ≥ 3 条 standalone 配置
    每条写清"是 Skill / Hook / MCP / 其他" + "用途一句话"
  2. 判断每条是否该打 Plugin
    用本文的 3 个问题(复用?3 个组件?要分发更新?),每条给"是/否"判断 + 一句话理由
  3. 如果 ≥ 2 条该打 Plugin
    写出 1 个最小 Plugin 目录结构(manifest + 至少 1 个组件)
  4. 复述第一性
    用一句话讲清"Plugin 第一性原理是什么"(不超过 30 字)

做完 4 步,你会有一个自己的"散装配置 → Plugin 化"清单🤔🫤下次想打包直接照着做。


本文是 CC10-Claude Code 权限分 5 档:5 张房卡看你该拿哪张 的延伸阅读——前一篇讲"给 AI 权限边界",本文讲"把已有能力打包分发"。