【学习笔记】Claude Code 插件系统概览

9 min

学习笔记系列 · 第一篇

本篇介绍 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.md

plugin.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.jsonmarketplace.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-tools

5.4 分发方式

方式适用场景
本地目录个人使用、开发调试
Git 仓库团队共享、版本管理
公共 marketplace面向所有用户

6. 插件的生命周期

6.1 安装

/plugin install plugin-name@marketplace-name

Claude Code 会:

  1. 把 marketplace 安装的插件文件复制到缓存目录:~/.claude/plugins/cache/<marketplace-name>/<plugin-name>/<version>/
  2. 识别插件内的所有能力(skills、agents、hooks 等)
  3. 让这些能力在当前和后续会话中可用

开发时通过 claude --plugin-dir 临时加载的插件不会走这个 marketplace 缓存路径。

6.2 更新

claude plugin update plugin-name@marketplace-name

Claude Code 会创建新的缓存目录(新版本号),旧版本可能被清理。

注意:如果 settings.json 中的配置指向了旧缓存路径,需要考虑稳定 launcher 方案(见 第十一篇:实践案例)。

6.3 卸载

/plugin uninstall plugin-name@marketplace-name

6.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,context

7.4 调试 bin 脚本

直接在终端运行:

node bin/my-script.js

对于需要 stdin 的脚本(如 status line):

echo '{"model":{"display_name":"Sonnet"}}' | node bin/glm-statusline.js

7.5 查看已加载的插件

/plugin list

8. 版本管理

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 update

9. 系列导航

本系列以 GLM StatusLine 插件为贯穿案例,逐一讲解 Claude Code 插件的各项能力:

篇号主题文件
1插件系统概览01-插件系统概览.md(本篇)
2Skill02-Skill.md
3Agents03-Agents.md
4Hooks04-Hooks.md
5MCP05-MCP.md
6LSP06-LSP.md
7Output Styles07-Output-Styles.md
8Themes08-Themes.md
9Monitors09-Monitors.md
10Bin10-Bin.md
11实践案例:GLM StatusLine11-实践案例-GLM-StatusLine.md

参考资料

📌 本文相关仓库BingqiangZhou/CCStatusline — Claude Code 插件系统学习笔记 & GLM StatusLine 实践案例