Plugin(插件)是一种标准化的扩展打包与分发机制:它把散落在各处的 Agent 扩展能力(斜杠命令、子 Agent、Skill、Hook、MCP 服务器等)连同一份清单文件,打包成一个可整体安装、更新、卸载和分享的独立单元。如果说 Skill、Hook、MCP 分别解决了 Agent 的某一类能力问题,那么 Plugin 解决的就是这些能力的交付问题——让扩展像手机应用一样"一条命令装好、整体升级、不用即卸"。
本教程将系统讲解 Plugin 的概念定义、解剖结构、安装与加载机制,梳理它与 Skill、Hook、MCP 等扩展机制的分工,并结合主流 Agent 工具介绍插件市场的使用方式与团队插件的构建思路,最后对 Codex、Claude Code 与 DeepSeek Harness 三款主流工具在插件载入与使用上的差异作横向对比。
前置教程
如想快速开始学习本教程,你可能需要先完成以下前置教程:
- Agent概念详解,插件打包的各类能力最终都服务于 Agent,先理解 Agent 的基本构成。
- Harness概念详解,插件中的命令、Hook、MCP 服务器等组件挂载到 Harness 的执行链路上运行。
- Skill概念详解,Skill 是插件中最常被打包的能力组件,理解 Skill 有助于理解插件的构成。
- Hook钩子概念详解,Hook 是插件可包含的确定性控制组件,两者结合能体会插件的打包价值。
1. 什么是 Plugin
1.1 概念定义
Plugin(插件)在软件工程中泛指一种"不动宿主源码即可扩展宿主功能"的机制,这一思想在各类软件中早已成熟:
| 形态 | 宿主 | 打包内容 | 安装方式 |
|---|---|---|---|
| 浏览器扩展 | Chrome、Firefox | 脚本、页面、权限声明 | 应用商店一键安装 |
| 编辑器扩展 | VS Code | 语言支持、主题、调试器 | 扩展市场一键安装 |
| 手机应用 | iOS、Android | 完整功能的程序包 | 应用商店安装与卸载 |
它们的共同点是:功能以标准单元打包,通过清单文件声明自身,经统一渠道分发,装上即用、卸载即净。
在 AI Agent 语境下,Plugin 是把多种 Agent 扩展能力连同清单文件打包成一个标准单元的机制,用户通过一条命令即可完成安装,安装后各组件按各自的方式自动生效。
可以把 Agent 的扩展体系想象成一套厨具:Skill 是一本菜谱,Hook 是灶台上的定时器,MCP 是接通水电的管道。单买每一件都能用,但搬运和组装全靠自己。Plugin 则是"整套厨具礼盒"——开箱即是成套搭配好的工具,说明书(清单文件)告诉你每件装在哪、怎么用。
1.2 从"散装扩展"到"插件化"
在插件机制出现之前,Agent 的各类扩展能力各自为政:Skill 要手工下载文件放进目录,Hook 脚本要拷贝到项目里再修改配置注册,MCP 服务器要逐条编辑 JSON 配置。能力本身没问题,问题出在交付环节:
| 场景 | 散装扩展的做法 | 痛点 | 插件化之后 |
|---|---|---|---|
| 安装社区能力 | 手工下载文件、放入指定目录 | 步骤零散,容易漏文件或放错位置 | 一条命令安装整个插件 |
| 分享团队 Hook | 拷贝脚本,再手工修改 settings.json |
脚本路径易错,更新靠口头通知 | 插件随配置自动注册,升级即更新 |
| 接入 MCP 服务器 | 逐条编辑 JSON 配置文件 | 配置繁琐,多项目重复劳动 | 安装插件时自动注册 MCP 服务器 |
| 团队环境对齐 | 口头约定各自安装哪些扩展 | 成员环境不一致,问题难排查 | 插件清单入仓库,全员一键对齐 |
散装扩展解决的是"有没有这个能力",插件解决的是"这个能力如何可靠地到达每个使用者手里"。当扩展数量变多、需要多人协作或跨项目复用时,插件化的价值会迅速放大。
1.3 Plugin 的两个关键特性
| 特性 | 含义 | 带来的价值 |
|---|---|---|
| 打包聚合 | 一个插件内可同时包含斜杠命令、Skill、Hook、子 Agent、MCP 配置等多种组件 | 相关能力成套交付,安装一次全部生效,无需逐件配置 |
| 可分发性 | 通过插件市场、Git 仓库或本地目录一键安装,支持统一的升级、禁用与卸载 | 扩展管理像手机应用一样规范:装了就能用,不用就卸载 |
2. Plugin 的解剖结构
2.1 清单文件 plugin.json
清单文件是插件的"身份证"。以 Claude Code 的插件体系为参考实现(大量兼容其生态的 Agent 工具沿用了相同的设计),清单固定位于插件目录的 .claude-plugin/plugin.json:
{
"name": "commit-helper",
"description": "团队提交规范工具包:代码审查命令、提交信息 Skill 与提交前校验 Hook",
"version": "1.0.0",
"author": {
"name": "eogee.com 教程团队"
}
}
| 字段 | 作用 |
|---|---|
name |
插件唯一标识,同时用作组件的命名空间前缀 |
description |
一句话说明插件用途,显示在插件市场的列表中 |
version |
插件版本号,用于升级管理 |
author |
作者信息,可选 |
homepage、repository |
主页与源码仓库地址,可选 |
2.2 插件可包含的组件
一个插件可以只包含一类组件,也可以把多类组件组合在一起。以参考实现为例,插件可包含五类组件:
| 组件 | 存放位置 | 触发方式 | 典型用途 |
|---|---|---|---|
| 斜杠命令 | commands/ 目录 |
用户输入 /插件名:命令名 |
快捷操作入口,如一键审查、一键生成 |
| 子 Agent | agents/ 目录 |
主 Agent 按任务自动委派 | 隔离上下文处理专项任务 |
| Skill | skills/ 目录 |
模型自主加载或用户显式调用 | 领域知识、操作规范、行为指导 |
| Hook | hooks/hooks.json |
生命周期事件自动触发 | 强制校验、自动化动作 |
| MCP 服务器 | 清单的 mcpServers 字段或 .mcp.json |
模型按需调用 | 接入外部系统的工具能力 |
这五类组件正是前面章节介绍过的各类扩展机制(Skill 见 Skill概念详解,Hook 见 Hook钩子概念详解,MCP 见 MCP概念详解与应用完整教程)。插件对它们做的事情只有一件:打包并代为注册。组件的触发逻辑、执行方式全部沿用各自原有的机制,插件不改变组件的行为,只负责让它们"随包到达、装上即生效"。
2.3 一个完整插件的目录结构
以前面的 commit-helper 插件为例,一个功能完整的插件目录如下(用不到的组件目录可以省略):
commit-helper/
├── .claude-plugin/
│ └── plugin.json # 清单文件
├── commands/
│ └── review.md # /commit-helper:review 审查命令
├── skills/
│ └── commit-style/
│ └── SKILL.md # 提交信息撰写规范
├── hooks/
│ ├── hooks.json # 钩子注册配置
│ └── guard.py # 钩子脚本本体
└── .mcp.json # 可选:随包注册的 MCP 服务器
其中 commands/review.md 是一个典型的斜杠命令文件,用 Markdown 编写,头部描述说明命令用途:
---
description: 审查当前改动并生成符合团队规范的提交信息
---
请审查当前工作区的全部改动,重点检查:改动是否与提交意图一致、
是否包含调试残留、是否符合仓库的代码风格。审查通过后,按
commit-style 技能中的规范生成提交信息草稿。
2.4 插件的安装与加载机制
无论插件来自插件市场、Git 仓库还是本地目录,安装与加载都遵循同一条流水线:
市场、Git 仓库、本地目录] --> CACHE[本地缓存目录
按插件与版本存放] CACHE --> PARSE[解析清单
plugin.json] PARSE --> REG[注册组件
命令、Skill、Hook、MCP] REG --> NS[命名空间隔离
插件名:组件名] NS --> RUN[组件按各自机制生效] style SRC fill:#d6eaf8,stroke:#2980b9,stroke-width:2px style CACHE fill:#ffecd6,stroke:#e67e22,stroke-width:2px style PARSE fill:#ebdef0,stroke:#8e44ad,stroke-width:2px style REG fill:#d5f5e3,stroke:#27ae60,stroke-width:2px style NS fill:#fadbd8,stroke:#c0392b,stroke-width:2px style RUN fill:#fef9e7,stroke:#b7950b,stroke-width:2px
两个关键环节值得注意:
- 本地缓存:安装的插件统一存放在用户主目录下的插件缓存目录中(例如
~/.claude/plugins/),项目配置里只记录"启用了哪些插件"。这样同一个插件可以被多个项目复用,升级也只需更新缓存中的一份。 - 命名空间隔离:插件注册的所有组件都带上插件名前缀——命令是
/插件名:命令名,技能以插件名:技能名标识,MCP 工具名为mcp__插件名__工具名。不同插件即使定义了同名命令也互不干扰。
3. Plugin 与相关概念的关系
3.1 概念关系图谱
打包与分发单元] --> C1[斜杠命令] P --> C2[Skill
行为指导] P --> C3[Hook
强制规则] P --> C4[子 Agent] P --> C5[MCP 服务器
外部工具] C1 --> A[Agent
智能体] C2 --> A C4 --> A C5 --> A C3 --> H[Harness
执行引擎] style P fill:#fef9e7,stroke:#b7950b,stroke-width:2px style C1 fill:#d6eaf8,stroke:#2980b9,stroke-width:2px style C2 fill:#fdebd0,stroke:#e67e22,stroke-width:2px style C3 fill:#fadbd8,stroke:#c0392b,stroke-width:2px style C4 fill:#d5f5e3,stroke:#27ae60,stroke-width:2px style C5 fill:#ebdef0,stroke:#8e44ad,stroke-width:2px style A fill:#e8f4f8,stroke:#1a6b8a,stroke-width:2px style H fill:#ebdef0,stroke:#8e44ad,stroke-width:2px
3.2 Plugin vs Skill
Skill 与 Plugin 是最容易混淆的两个概念,因为插件里经常装着 Skill:
| 维度 | Skill | Plugin |
|---|---|---|
| 本质 | 单件行为指令模板 | 多种能力的打包分发单元 |
| 内容 | 一个 SKILL.md 指令文件(可附脚本资源) | 命令、Skill、Hook、子 Agent、MCP 的任意组合 |
| 生效方式 | 模型自主加载或用户显式调用 | 安装后整体注册,组件按各自机制生效 |
| 解决的问题 | 指导模型如何做事 | 扩展能力如何打包、安装、分发、管理 |
| 类比 | 一份讲义 | 一整套教材礼盒 |
核心分工:Skill 回答"模型怎么做事",Plugin 回答"这堆能力怎么交付"。单个 Skill 用一个文件就能分享;当能力超过一件——比如"一条命令加一份规范再加一道校验"的组合,或者需要统一升级与卸载时,插件的打包价值就体现出来了。Skill 可以单独存在,也可以作为组件随插件分发。
3.3 Plugin vs MCP
MCP 为 Agent 接入外部工具提供了标准协议(见 MCP概念详解与应用完整教程),它解决"模型能调用什么";插件与 MCP 是包含关系——插件可以把 MCP 服务器连同配置一起打包:
| 维度 | 单独配置 MCP | 通过插件打包 MCP |
|---|---|---|
| 配置方式 | 手工编辑项目或用户的 MCP 配置文件 | 安装插件时自动注册 |
| 分享成本 | 把配置片段发给协作者,各自粘贴 | 分享一个插件名即可 |
| 升级与卸载 | 手工修改配置 | 插件统一升级,卸载即移除 |
3.4 Plugin vs Hook
Hook 提供 Agent 的确定性控制(见 Hook钩子概念详解),它的痛点同样在分发环节:Hook 脚本要放进指定目录,还要在配置文件中注册,分享时接收方需要"拷脚本、改配置"两步操作,路径错了就静默失效。插件把 Hook 脚本与 hooks.json 注册配置一起打包,安装即注册、卸载即移除;脚本路径通过插件根目录变量(如参考实现中的 ${CLAUDE_PLUGIN_ROOT})自动解析,无需手工适配。
3.5 四类扩展机制的定位总结
| 机制 | 解决的问题 | 使用方式 | 与插件的关系 |
|---|---|---|---|
| Skill | 模型怎么做事 | 模型自主加载或显式调用 | 可独立存在,常作为插件组件 |
| Hook | 事件点上的强制规则 | 引擎在生命周期事件自动触发 | 可独立存在,常作为插件组件 |
| MCP | 外部工具如何接入 | 模型按需调用 | 可独立存在,常作为插件组件 |
| Plugin | 上述能力的打包与分发 | 安装后各组件按各自机制生效 | 打包载体,自身不提供新能力 |
插件自身不产生任何新能力,它是纯粹的"集装箱":Skill、Hook、MCP 是货物,插件负责把货物成套运到用户手里并摆放到位。
4. Plugin 的分发与应用
4.1 插件市场(Marketplace)机制
插件市场是插件的"应用商店"。一个市场本质上是一个 Git 仓库,根目录放置一份市场清单 .claude-plugin/marketplace.json,列出仓库内托管的插件:
{
"name": "team-marketplace",
"owner": {
"name": "eogee.com 教程团队"
},
"plugins": [
{
"name": "commit-helper",
"source": "./plugins/commit-helper",
"description": "团队提交规范工具包"
}
]
}
以参考实现为例,市场与插件的常用管理命令如下:
# 添加一个插件市场(市场仓库地址)
/plugin marketplace add owner/repo
# 从指定市场安装插件
/plugin install commit-helper@team-marketplace
# 打开交互式管理界面,浏览、启用、禁用或卸载插件
/plugin
除市场外,插件也支持直接从 Git 仓库地址或本地目录安装,适合未上架市场的内部插件与开发调试场景。
4.2 主流工具的插件支持情况
| 工具 | 插件机制 | 分发方式 |
|---|---|---|
| Claude Code | 完整插件体系:清单文件、五类组件、命名空间隔离 | 插件市场(marketplace)、Git 仓库、本地目录 |
| ZCode | 与 Claude Code 同构的插件与市场设计,技能以"插件名:技能名"加载 | 官方市场与自定义市场 |
| DeepSeek Harness | "一切皆插件"架构,模型、工具、界面等能力均由插件组合而成 | dsh plugin 命令与 dshmarket 市场 |
其中 DeepSeek Harness 把插件化推到了极致——连模型接入、Web 界面都是插件,具体的安装操作见 DeepSeek Harness插件概念详解与安装教程;而 Codex 尚未提供统一的插件打包机制,扩展以散装的 Skill 与 MCP 为主。三款工具在插件载入与使用上的具体差异,见下一章的逐项对比。
4.3 场景一:安装并使用社区插件
假设团队选中了一个社区代码审查插件,完整的使用过程如下:
# 第一步:添加插件所在的市场
/plugin marketplace add owner/repo
# 第二步:安装插件
/plugin install code-review@owner-repo
安装完成后无需重启,插件的能力立即可用:
- 在会话中输入
/code-review:review,触发插件自带的审查命令; - 插件包含的 Skill 进入可加载列表,模型在相关任务中自主引用;
- 插件注册的 Hook 在对应生命周期事件上自动生效。
想停用时,在 /plugin 管理界面中禁用即可,所有组件一起失效;确认不再需要则卸载,本地缓存一并清除。
4.4 场景二:构建团队规范插件
插件最典型的团队应用,是把"规范"打包成"能力"。以提交规范为例,散装做法需要每个成员手工配置三样东西;插件做法是把它们装进一个 commit-helper 包:
| 需求 | 承载组件 | 说明 |
|---|---|---|
| 一键生成规范提交信息 | 斜杠命令 /commit-helper:review |
统一入口,无需口头描述要求 |
| 提交信息撰写规范 | Skill commit-style |
模型生成提交信息时自动遵循 |
| 提交前强制校验 | Hook(PreToolUse 事件) |
格式不合规直接拦截,兜底保障 |
插件内的 Hook 注册文件 hooks/hooks.json 与散装配置结构一致,脚本路径改用插件根目录变量:
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "python ${CLAUDE_PLUGIN_ROOT}/hooks/guard.py"
}
]
}
]
}
}
把这个插件推送到团队市场后,新成员从"读规范文档、拷脚本、改配置"变成一条安装命令。规范更新的传播路径也从"通知每个人改"变成"发一个新版本,大家升级插件"。
4.5 设计原则与安全注意事项
| 原则 | 说明 |
|---|---|
| 来源可信 | 插件拥有注册 Hook、MCP 服务器的权力,安装前确认来源,优先选择官方市场或团队内部市场 |
| 聚焦单一主题 | 一个插件围绕一个场景打包相关能力,避免大而全的"万能包" |
| 版本管理 | 使用语义化版本号,能力变更写入更新说明,方便使用者评估是否升级 |
| 命名清晰 | 组件命名带上插件语境,避免与其他插件的组件语义混淆 |
| 及时升级 | 关注市场的更新提醒,安全类修复应尽快跟进 |
安装插件等同于把外部代码引入工作环境:Hook 会在后台自动执行,MCP 服务器会常驻运行。安装前务必审查插件的来源与内容,对来路不明的插件保持与对待陌生可执行程序同等的警惕。
5. Codex、Claude Code 与 DSH 的插件机制对比
同属主流 Agent 工具,三者在"插件"这件事上走出了三条路线:Codex 未设统一的插件机制,扩展以散装形式存在;Claude Code 建立了标准化的插件包与市场体系;DeepSeek Harness(下称 DSH)则把"一切皆插件"上升为系统架构。理解三者的差异,有助于为不同场景选择合适的扩展方式。
5.1 三种路线的总体定位
| 维度 | Codex | Claude Code | DSH |
|---|---|---|---|
| 插件在体系中的定位 | 无统一插件机制,扩展以散装形式存在 | 标准化的扩展打包与分发单元 | 系统架构本身,"一切皆插件" |
| 一个"插件"是什么 | 不存在插件包,能力以单个文件或配置段为单位 | 插件目录、plugin.json 清单与组件集合 |
一个声明了 dsh 字段的 npm 包 |
| 可承载的能力 | Skill(目录拷贝)、MCP 与模型接入(config.toml) |
斜杠命令、子 Agent、Skill、Hook、MCP | 工具、Web 界面、服务、配置补丁,直至模型接入与沙箱 |
| 设计取向 | 简单透明,一份文件多工具通用 | 能力成套交付、统一管理 | 系统可组装、可整体替换 |
三条路线对应三种诉求:Codex 把扩展"化整为零",换来最简单的使用方式;Claude Code 把扩展"装箱交付",换来可管理的规模;DSH 把扩展上升为架构,换来整个系统的自由组装。
5.2 载入方式对比
载入是三者差异最大的环节,三条流水线如下:
网盘或 Git 下载"] --> A2["拷入约定目录
.agents/skills/"] A2 --> A3["编辑 config.toml
注册 MCP 等配置"] A3 --> A4["新会话中生效"] end subgraph CC["Claude Code:标准包载入"] B1["插件市场或 Git 仓库"] --> B2["/plugin install
下载到本地缓存"] B2 --> B3["解析清单
按命名空间注册组件"] B3 --> B4["即时生效"] end subgraph DH["DSH:一切皆插件"] C1["dshmarket 或 npm 源"] --> C2["dsh plugin add
pnpm 装入 profile"] C2 --> C3["自动挂载 bundle
叠加配置树"] C3 --> C4["重启 dsh web 生效"] end style A1 fill:#d6eaf8,stroke:#2980b9,stroke-width:2px style A2 fill:#d6eaf8,stroke:#2980b9,stroke-width:2px style A3 fill:#d6eaf8,stroke:#2980b9,stroke-width:2px style A4 fill:#d5f5e3,stroke:#27ae60,stroke-width:2px style B1 fill:#fdebd0,stroke:#e67e22,stroke-width:2px style B2 fill:#fdebd0,stroke:#e67e22,stroke-width:2px style B3 fill:#fdebd0,stroke:#e67e22,stroke-width:2px style B4 fill:#d5f5e3,stroke:#27ae60,stroke-width:2px style C1 fill:#ebdef0,stroke:#8e44ad,stroke-width:2px style C2 fill:#ebdef0,stroke:#8e44ad,stroke-width:2px style C3 fill:#ebdef0,stroke:#8e44ad,stroke-width:2px style C4 fill:#d5f5e3,stroke:#27ae60,stroke-width:2px
各环节的逐项对照:
| 环节 | Codex | Claude Code | DSH |
|---|---|---|---|
| 载入动作 | 手工拷贝文件、手工编辑配置 | /plugin install 一条命令 |
dsh plugin --profile web add 包名 |
| 载入来源 | 网盘、Git 等手工获取 | 市场(marketplace)、Git 仓库、本地目录 | dshmarket、npm 源、GitHub、Git URL、本地目录 |
| 存放位置 | .agents/skills/(项目级)或 ~/.agents/skills/(全局级) |
用户主目录插件缓存 ~/.claude/plugins/,项目仅记录启用清单 |
profile 目录 ~/.dsh/profiles/<名称>/ 的 node_modules |
| 注册方式 | 无需注册,目录与配置文件即注册 | 解析清单后自动注册全部组件 | 声明 dsh.bundle.patch 的包自动加入 bundles 组合包清单 |
| 生效时机 | 保存即生效,新会话可调用 | 安装完成即时生效 | 需重启 dsh web |
| 隔离机制 | 目录即作用域,无命名空间 | 命名空间 插件名:组件名 |
profile 之间隔离,配置树逐层叠加 |
Codex 的"载入"是纯手工过程:没有安装命令,也没有清单文件——把 Skill 目录拷进 .agents/skills/ 即完成载入,把 MCP 服务器写进 ~/.codex/config.toml 即完成注册。载入粒度是单个文件与配置段,每一步都可见、可控。
Claude Code 的"载入"是标准化流程:一条命令完成下载、解析、注册;组件以命名空间隔离,不同插件互不覆盖;项目级与用户级配置可以叠加,团队共享同一份启用清单。
DSH 的"载入"是系统装配:dsh plugin 命令本身不执行安装,而是把参数转发给 pnpm 在 profile 目录中完成依赖安装;安装成功后按插件声明的补丁自动挂载进配置树,与内置组合包逐层叠加出最终行为。此外,DSH 插件可包含运行在浏览器中的 client 端代码,Web 界面类插件会在页面加载时被动态引入。
5.3 使用与管理对比
| 操作 | Codex | Claude Code | DSH |
|---|---|---|---|
| 调用扩展 | /技能名/ 调用 Skill,MCP 工具由模型按需调用 |
/插件名:命令名 触发命令,其余组件各按原机制生效 |
组件由系统装配后自动生效,用户通过 profile 选择能力组合 |
| 升级 | 重新下载覆盖旧文件 | 从市场或仓库拉取新版本 | add 包名@latest 或 update 包名 --latest |
| 禁用 | 移出技能目录或注释配置段 | /plugin 管理界面中禁用,组件整体失效 |
在配置补丁层调整挂载条目 |
| 卸载 | 删除文件或配置段 | /plugin 管理界面中卸载,清除本地缓存 |
dsh plugin remove 包名,自动移出 bundles |
三者在管理成本上的差异延续自载入方式:Codex 的升级与卸载靠"重新拷贝、手动清理",扩展一多容易遗漏;Claude Code 与 DSH 都有命令化的管理入口,区别在于 DSH 的更新与卸载需要重启 dsh web 才生效,Claude Code 则即改即生效。
DSH 从 npm 镜像源安装或更新插件时可能遇到同步滞后:指定
@latest却装到旧版本时,可显式指定版本号或临时切换官方源;从 Git 仓库安装插件时,pnpm 10 及以上环境需在 profile 的pnpm-workspace.yaml中放行构建脚本,否则安装可能失败。
5.4 如何选择
| 需求场景 | 推荐路线 | 理由 |
|---|---|---|
| 个人使用,以行为规范、领域知识为主 | Codex 式散装 Skill | 一份 SKILL.md 拷贝即用,还能在三家工具间通用(见 DeepSeek Harness等Agent Skill安装与应用教程) |
| 团队需要成套分发能力并统一管理 | Claude Code 式插件 | 清单文件与插件市场带来一键安装、统一升级与命名空间隔离 |
| 需要改造 Agent 系统本身 | DSH 式插件 | 界面、模型接入、服务均可作为插件整体替换 |
三条路线可以并存:日常行为规范用散装 Skill 满足,团队成套能力用标准插件交付,系统级定制交给 DSH 的 profile 组装——按场景选工具,按粒度选机制。
6. 总结
6.1 核心内容回顾
- Plugin(插件) 是 Agent 扩展能力的标准打包与分发单元,由清单文件
plugin.json加若干组件目录构成,核心特性是打包聚合与可分发性。 - 插件可包含五类组件:斜杠命令、子 Agent、Skill、Hook、MCP 服务器;插件只负责打包与注册,组件行为沿用各自原有机制。
- 安装与加载遵循"来源、本地缓存、解析清单、注册组件、命名空间隔离"的流水线,命名空间保证不同插件的组件互不冲突。
- 概念分工:Skill 回答"模型怎么做事",Hook 回答"系统强制做什么",MCP 回答"能调用什么外部工具",Plugin 回答"这些能力如何交付"。
- 插件市场(marketplace)是插件的分发渠道,一条市场清单可以托管多个插件;典型团队应用是把规范打包成随装随用的能力集合。
- Codex、Claude Code 与 DSH 代表三条路线:Codex 以目录拷贝与手工配置散装载入,Claude Code 以清单驱动的标准包一条命令载入即生效,DSH 以 npm 包装入 profile 并需重启生效;散装、标准包与系统装配三种粒度可按场景组合使用。
6.2 常见问题与解答
问:单个 Skill 一个文件就能分享,为什么还需要插件?
答:分享单件能力时,直接发文件确实更简单。插件的用武之地在于组合与规模:当能力超过一件(命令加规范加校验的组合)、需要统一升级卸载、或者要在团队多人多项目间保持环境一致时,插件提供了清单化的管理方式。
问:安装多个插件后,同名组件会互相冲突吗?
答:不会。插件注册的组件都带有插件名前缀(命令 /插件名:命令名、技能 插件名:技能名、MCP 工具 mcp__插件名__工具名),命名空间隔离保证不同插件的同名组件互不覆盖。同类 Hook 则会叠加执行,组合多个插件时留意规则之间的相互作用。
问:插件中的 Hook 脚本路径在不同电脑上会失效吗?
答:插件体系为脚本路径提供了插件根目录变量(如 ${CLAUDE_PLUGIN_ROOT}),无论插件缓存到哪台机器的哪个目录,路径都会被自动解析,无需手工适配。
问:如何发布自己的插件?
答:最简单的方式是把插件目录推送到 Git 仓库,使用者通过仓库地址直接安装;插件较多时,在仓库根目录创建市场清单 marketplace.json,就形成了一个团队专属的插件市场,成员添加市场后即可按名安装。
问:禁用和卸载插件有什么区别?
答:禁用后插件的所有组件一起失效,但本地缓存保留,随时可以重新启用;卸载则把插件从本地缓存中删除,再次使用需要重新安装。临时排查问题时建议先禁用。
问:Codex 没有插件机制,能用 Claude Code 生态里的插件吗?
答:插件包本身无法直接安装,但可以拆开复用:插件中的 Skill 组件(SKILL.md)多数可直接拷贝到 .agents/skills/ 使用;Hook 与 MCP 服务器则需要按 Codex 的约定手工迁移——Hook 逻辑改写为本地脚本或配置,MCP 服务器逐条写入 ~/.codex/config.toml。
举手提问