【学习笔记】Claude Code 插件系统概览
学习笔记系列 · 第一篇
本篇介绍 Claude Code 插件系统的整体架构:插件是什么、能做什么、怎么组织、怎么分发。
1. 插件是什么
Claude Code 插件是一个自包含目录。目录里放着一组扩展能力(skill、agent、hook、MCP server 等),用户安装后,Claude Code 会自动发现并加载这些能力。
关键特征:
- 不需要编译:纯文件目录,满足约定的文件结构即可。
- 不是 npm 包:不通过 npm registry 分发(但可以有
package.json用于脚本管理)。 - 按需组合:每个能力放在固定子目录,只放用到的,不需要全做。
插件能做什么?
┌──────────────────────────────────────────────────┐
│ Claude Code 插件 │
├──────────┬──────────┬──────────┬─────────────────┤
│ skills/ │ agents/ │ hooks/ │ .mcp.json │
│ 复用指令 │ 隔离任务 │ 自动触发 │ 外部工具连接 │
├──────────┼──────────┼──────────┼─────────────────┤
│ .lsp.json│ output- │ themes/ │ monitors/ │
│ 代码智能 │ styles/ │ 视觉主题 │ 后台监听 │
│ │ 回答风格 │ │ │
├──────────┴──────────┴──────────┴─────────────────┤
│ bin/ — 可执行脚本,加入 PATH │
└──────────────────────────────────────────────────┘2. 最小插件
一个最小的 Claude Code 插件通常只需要插件清单和一个可调用组件。plugin.json 在官方 schema 里只有 name 是必需字段;没有清单时,Claude Code 也能按目录名和默认位置自动发现组件。但如果要走 marketplace 分发,建议明确提供 .claude-plugin/plugin.json:
my-plugin/
├── .claude-plugin/
│ └── plugin.json
└── skills/
└── hello/
└── SKILL.mdplugin.json(插件身份):
{
"name": "my-plugin",
"displayName": "My Plugin",
"description": "A minimal Claude Code plugin example.",
"version": "1.0.0"
}skills/hello/SKILL.md(一个 skill):
---
description: Say hello to the user.
---
# Hello
Tell the user: "Hello from my-plugin! 👋"开发时直接加载:
claude --plugin-dir /path/to/my-plugin加载后用户可以输入 /hello 调用这个 skill。
这就是一个完整的插件。
3. 插件能力的目录映射
Claude Code 插件的能力放在根目录的固定子目录中,而不是放在 .claude-plugin/ 里面:
my-plugin/
├── .claude-plugin/
│ ├── plugin.json ← 插件身份(必需)
│ └── marketplace.json ← marketplace 分发(可选)
│
├── skills/ ← 可复用指令包
│ └── deploy/SKILL.md
│
├── agents/ ← 自定义 subagent
│ └── reviewer.md
│
├── hooks/
│ └── hooks.json ← 生命周期事件自动触发
│
├── .mcp.json ← 外部工具连接器(MCP server)
│
├── .lsp.json ← 代码智能(LSP server)
│
├── output-styles/ ← 回答风格
│ └── teacher.md
│
├── themes/ ← 终端视觉主题
│ └── dark-pro.json
│
├── monitors/
│ └── monitors.json ← 后台长驻命令
│
└── bin/ ← 加入 PATH 的可执行脚本
└── my-tool.js每个子目录都是可选的,只放实际用到的能力。
各能力速查
| 目录/文件 | 作用 | 详细笔记 |
|---|---|---|
skills/ | 可复用的指令包,用户可以 /name 调用 | 第二篇:Skill |
agents/ | 自定义 subagent 定义 | 第三篇:Agents |
hooks/hooks.json | 生命周期事件自动触发 | 第四篇:Hooks |
.mcp.json | 外部工具连接器 | 第五篇:MCP |
.lsp.json | 语言服务器连接 | 第六篇:LSP |
output-styles/ | 改变回答格式/语气 | 第七篇:Output Styles |
themes/ | 终端视觉主题 | 第八篇:Themes |
monitors/monitors.json | 后台长驻命令 | 第九篇:Monitors |
bin/ | 加入 PATH 的脚本 | 第十篇:Bin |
4. plugin.json 详解
plugin.json 放在 .claude-plugin/ 目录下,是插件的身份证。
{
"name": "glm-statusline",
"displayName": "GLM StatusLine",
"description": "Configurable GLM / Z.ai usage status line for Claude Code.",
"version": "1.2.3",
"author": {
"name": "CCStatusline",
"email": "optional@example.com",
"url": "https://example.com"
},
"homepage": "https://code.claude.com/docs/en/statusline",
"license": "MIT",
"keywords": [
"claude-code",
"statusline",
"glm"
]
}字段说明:
| 字段 | 必需 | 说明 |
|---|---|---|
name | 是 | 插件标识符,用于安装/更新命令。小写字母、数字和连字符。 |
displayName | 否 | 给用户看的友好名称;不影响命名空间。 |
description | 否 | 简要描述功能。Claude Code 根据它展示和搜索插件。 |
version | 否 | 语义化版本号(SemVer)。省略时,marketplace 安装会按 git commit SHA 识别版本。 |
author | 否 | 作者信息对象。 |
homepage | 否 | 项目主页 URL。 |
repository | 否 | 源码仓库 URL。 |
license | 否 | 开源协议。 |
keywords | 否 | 关键词数组,帮助 marketplace 分类和搜索。 |
defaultEnabled | 否 | 是否安装后默认启用。适合有成本或权限影响的插件设为 false。 |
实用建议:
description尽量具体,写清楚”做了什么”和”什么时候用”。version要和package.json、marketplace.json(如果有)保持一致。name一旦发布就不应再改,因为安装和更新命令依赖它。
5. marketplace.json 与分发
5.1 什么是 marketplace
marketplace.json 让一个目录(可以是本地目录或远程 Git 仓库)变成一个可被 Claude Code 发现的插件集合。
5.2 marketplace.json 结构
{
"name": "bingqiangzhou-tools",
"owner": {
"name": "CCStatusline"
},
"description": "Local marketplace for Claude Code plugins.",
"version": "1.2.3",
"plugins": [
{
"name": "glm-statusline",
"displayName": "GLM StatusLine",
"source": "./",
"description": "Configurable GLM / Z.ai usage status line.",
"version": "1.2.3",
"author": {
"name": "CCStatusline"
},
"category": "interface",
"tags": ["statusline", "glm"]
}
]
}关键字段:
name:marketplace 名称,用户安装时引用。plugins[].source:"./"表示插件就在当前目录;也可以指向子目录。- 一个 marketplace 可以包含多个插件。
5.3 安装流程
# 1. 添加 marketplace
/plugin marketplace add /path/to/plugin-directory
# 2. 从 marketplace 安装插件
/plugin install glm-statusline@bingqiangzhou-tools
# 3. 更新插件
claude plugin update glm-statusline@bingqiangzhou-tools5.4 分发方式
| 方式 | 适用场景 |
|---|---|
| 本地目录 | 个人使用、开发调试 |
| Git 仓库 | 团队共享、版本管理 |
| 公共 marketplace | 面向所有用户 |
6. 插件的生命周期
6.1 安装
/plugin install plugin-name@marketplace-nameClaude Code 会:
- 把 marketplace 安装的插件文件复制到缓存目录:
~/.claude/plugins/cache/<marketplace-name>/<plugin-name>/<version>/ - 识别插件内的所有能力(skills、agents、hooks 等)
- 让这些能力在当前和后续会话中可用
开发时通过 claude --plugin-dir 临时加载的插件不会走这个 marketplace 缓存路径。
6.2 更新
claude plugin update plugin-name@marketplace-nameClaude Code 会创建新的缓存目录(新版本号),旧版本可能被清理。
注意:如果 settings.json 中的配置指向了旧缓存路径,需要考虑稳定 launcher 方案(见 第十一篇:实践案例)。
6.3 卸载
/plugin uninstall plugin-name@marketplace-name6.4 重新加载
/reload-plugins修改插件文件后,可以用这个命令重新加载。但某些变更(如 hooks、MCP 配置)可能需要重启 Claude Code。
7. 开发调试方法
7.1 直接加载当前目录
cd /path/to/my-plugin
claude --plugin-dir .不需要 marketplace 和安装步骤,直接把当前目录当作插件加载。适合开发调试。
7.2 marketplace 方式安装
/plugin marketplace add /path/to/my-plugin
/plugin install my-plugin@my-marketplace适合模拟真实安装流程。
7.3 测试 skill
/my-plugin:skill-name如果 skill 有参数:
/my-plugin:install --show=plan,5h,context7.4 调试 bin 脚本
直接在终端运行:
node bin/my-script.js对于需要 stdin 的脚本(如 status line):
echo '{"model":{"display_name":"Sonnet"}}' | node bin/glm-statusline.js7.5 查看已加载的插件
/plugin list8. 版本管理
8.1 版本一致性
本项目为了发布和验证简单,要求三个文件的版本号保持一致:
package.json → "version": "1.2.3"
.claude-plugin/plugin.json → "version": "1.2.3"
.claude-plugin/marketplace.json → "version": "1.2.3" + plugins[].version建议在验证脚本中自动检查。
8.2 更新步骤
1. 修改三个文件的版本号
2. 运行验证脚本(npm test)
3. git commit + tag
4. 用户运行 claude plugin update9. 系列导航
本系列以 GLM StatusLine 插件为贯穿案例,逐一讲解 Claude Code 插件的各项能力:
| 篇号 | 主题 | 文件 |
|---|---|---|
| 1 | 插件系统概览 | 01-插件系统概览.md(本篇) |
| 2 | Skill | 02-Skill.md |
| 3 | Agents | 03-Agents.md |
| 4 | Hooks | 04-Hooks.md |
| 5 | MCP | 05-MCP.md |
| 6 | LSP | 06-LSP.md |
| 7 | Output Styles | 07-Output-Styles.md |
| 8 | Themes | 08-Themes.md |
| 9 | Monitors | 09-Monitors.md |
| 10 | Bin | 10-Bin.md |
| 11 | 实践案例:GLM StatusLine | 11-实践案例-GLM-StatusLine.md |
参考资料
- Claude Code 官方文档 - Create plugins
- Claude Code 官方文档 - Plugins reference
- Claude Code 官方文档 - Plugin marketplaces
- Claude Code 官方文档 - Customize your status line
📌 本文相关仓库:BingqiangZhou/CCStatusline — Claude Code 插件系统学习笔记 & GLM StatusLine 实践案例