Claude Code 插件体系完全指南:6种组件类型、安装方法与实战避坑

Claude Code 的插件系统在 v2.1.x 系列更新中逐渐成熟,从最初"终端里的AI补全工具"演变成一个可扩展平台。本文基于官方文档整理,覆盖插件的完整组件结构、安装命令和常见问题,帮你少走弯路。


插件到底是什么?

官方的定义很干净:一个插件就是一个自包含的目录,里面可以包含技能(Skills)、Agent、钩子(Hooks)、MCP 服务器、LSP 服务器和后台监控(Monitors)中的一种或多种。

安装后,插件会被缓存到 ~/.claude/plugins/cache/,每个版本是独立目录,旧版本会在更新后 7 天自动清理。这个设计意味着你不能在插件内用相对路径引用外部文件,所有路径必须相对于插件根目录并以 ./ 开头。


6种组件类型详解

1. Skills(技能)

Skills 是最常见的组件,本质是一个 Markdown 文件,描述 Claude 在特定场景下应该做什么。安装后会生成 /名称 的斜杠命令,Claude 也可以根据上下文自动调用。

目录结构:

skills/
  commit-message/
    SKILL.md       ← 技能描述文件
  code-review/
    SKILL.md

如果插件根目录直接放了一个 SKILL.md(没有 skills/ 子目录),Claude Code v2.1.142+ 会自动将整个插件识别为单技能插件,不需要额外配置。

2. Agents(子代理)

Agents 是专用子代理,适合处理固定流程的复杂任务。它们出现在 /agents 界面,Claude 可以自动调用,也可以手动触发。

Agent 的 Markdown 文件支持 frontmatter 配置:

---
name: security-reviewer
description: 审查代码中的安全问题
model: claude-opus-4
effort: high
maxTurns: 20
---

注意:出于安全考虑,插件提供的 Agent 不支持 hooksmcpServerspermissionMode 字段,这些只能在用户级别配置。

3. Hooks(事件钩子)

Hooks 是插件里最强大也最需要谨慎使用的组件,允许在 Claude Code 的各个生命周期事件上注入逻辑。

完整事件列表:

事件 触发时机
SessionStart 会话开始或恢复时
UserPromptSubmit 你提交提示词后、Claude 处理前
PreToolUse 工具调用执行前(可拦截)
PostToolUse 工具调用成功后
PostToolUseFailure 工具调用失败后
Stop Claude 完成响应时
FileChanged 监听的文件在磁盘上发生变化
CwdChanged 工作目录变化(如执行了 cd
PreCompact 上下文压缩前
SessionEnd 会话结束时

Hook 支持四种执行方式:command(执行 shell 脚本)、http(发送 POST 请求)、mcp_tool(调用 MCP 工具)、prompt(触发 LLM 推理)。

4. MCP Servers

MCP(Model Context Protocol)是 Anthropic 主导的开放协议,让 Claude Code 连接外部服务。配置写在插件根目录的 .mcp.json 文件中,插件启用后 MCP 服务器自动启动,无需手动配置。

支持的外部集成包括:GitHub、GitLab、Jira、Slack、Sentry、Vercel、Firebase 等。

MCP 和普通插件的核心区别在于:MCP 服务器是客户端无关的,同一个 MCP Server 可以同时服务 Claude Code、Cursor、Windsurf 等多个工具。

5. LSP Servers(语言服务器)

LSP 集成让 Claude Code 在编辑代码时获得实时语义分析能力:跳转定义、查找引用、悬停类型信息、即时错误诊断。

官方提供了三个现成的 LSP 插件:

插件名 语言服务器 安装命令
pyright-lsp Pyright(Python) pip install pyright
typescript-lsp TypeScript Language Server npm install -g typescript-language-server typescript
rust-analyzer-lsp rust-analyzer 见官方文档

6. Monitors(后台监控)

Monitors 是实验性功能(需要 v2.1.105+),允许插件注册持续运行的后台进程。每一行 stdout 输出都会作为通知传给 Claude,让它能主动响应日志变化、部署状态或轮询事件,而不需要你每次手动询问。

配置在 monitors/monitors.json 中,需要用 experimental.monitors 字段声明(直接放顶层也能用,但会有 deprecation 警告)。


安装与管理:CLI 命令速查

# 浏览可用插件
/plugin Discover

# 安装插件(默认 user 作用域,对所有项目生效)
claude plugin install pyright-lsp@claude-plugins-official

# 安装到项目作用域(写入 .claude/settings.json,可以 git 提交共享给团队)
claude plugin install security-guidance --scope project

# 列出已安装插件
claude plugin list

# 查看插件详情(包含 token 消耗估算)
claude plugin details pyright-lsp

# 更新插件
claude plugin update pyright-lsp

# 卸载并清理依赖
claude plugin uninstall myPlugin --prune

# 验证插件 manifest
claude plugin validate

三种作用域的区别:

作用域 配置文件位置 使用场景
user(默认) ~/.claude/settings.json 个人跨项目通用插件
project .claude/settings.json 团队共享,可以 git 提交
local .claude/settings.local.json 项目专用,已 gitignore

插件目录结构参考

一个完整插件的标准布局:

my-plugin/
├── .claude-plugin/
│   └── plugin.json        ← 元数据(可选,但推荐)
├── skills/
│   └── my-skill/
│       └── SKILL.md
├── agents/
│   └── reviewer.md
├── hooks/
│   └── hooks.json
├── .mcp.json              ← MCP 服务器配置
├── .lsp.json              ← LSP 服务器配置
├── monitors/
│   └── monitors.json
└── bin/                   ← 可执行文件,自动加入 PATH

plugin.json 中只有 name 字段是必填的,其他都可以省略:

{
  "name": "my-plugin",
  "displayName": "My Plugin",
  "version": "1.0.0",
  "description": "插件功能说明",
  "author": { "name": "你的名字" }
}

常见问题排查

插件加载了但技能不出现 组件目录放错位置了——skills/agents/hooks/ 必须在插件根目录,不能放在 .claude-plugin/ 里面。只有 plugin.json 属于 .claude-plugin/

Hooks 不触发 两个最常见原因:脚本没有可执行权限(运行 chmod +x script.sh),或者事件名大小写写错(是 PostToolUse,不是 postToolUse)。

LSP 报"Executable not found in $PATH" 需要先在系统里安装对应的语言服务器二进制文件,例如 npm install -g typescript-language-server typescript,Claude Code 本身不会自动安装依赖。

MCP 服务器启动失败claude --debug 启动,可以看到详细的初始化日志。最常见原因是配置里用了绝对路径——所有路径必须用 ${CLAUDE_PLUGIN_ROOT} 变量替代。


安全提醒

插件本质上包含可执行脚本,具有文件系统访问权限。生产环境务必优先使用官方目录的插件;社区插件在安装前先阅读源码,特别关注 hooks/bin/ 目录下的脚本内容。

插件安装后会被缓存到本地,${CLAUDE_PLUGIN_ROOT} 路径在插件更新后会变化,运行 /reload-plugins 可以让 Hooks 和 MCP 服务器切换到新路径;Monitors 需要重启会话才能更新。


相关链接

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。