第23章:插件与技能——无限扩展

两种扩展方式

Claude Code 提供了两种扩展方式:

插件(Plugin)技能(Skill)
复杂度高(需要写代码)低(只需要写文本)
能力可以添加工具、命令、UI只能添加提示词和工作流
分发通过 npm 安装放在目录里就行
适合开发者所有人

技能系统(Skills)

技能是 Claude Code 最简单的扩展方式——你只需要写一个 Markdown 文件,就能教 AI 新的"技能"。

创建一个技能

~/.claude/skills/ 目录下创建一个文件:


# ~/.claude/skills/code-review.md

---
name: code-review
description: 进行详细的代码审查
---

你现在是一个严格的代码审查专家。请审查提供的代码,检查以下方面:

## 代码质量
- 命名是否清晰(变量名、函数名)
- 函数是否过长(超过 30 行应该拆分)
- 是否有重复代码

## 安全性
- 是否有 SQL 注入风险
- 是否正确处理了用户输入
- 是否有硬编码的密钥

## 性能
- 是否有不必要的循环
- 是否有 N+1 查询问题
- 是否正确使用了缓存

请用以下格式输出审查结果:
- 严重问题用 🔴 标记
- 警告用 🟡 标记
- 建议用 🟢 标记

使用技能

有两种方式调用技能:


方式 1:斜杠命令
/skill code-review

方式 2:直接提及
"请用 code-review 技能审查 src/api.ts"

技能的发现

AI 可以自动发现并推荐技能:


用户: "帮我审查一下这个 PR"

AI 思考:用户想做代码审查...
         我有一个 code-review 技能可以用!

AI: "我发现有一个 code-review 技能可以帮助你。要我用它来审查吗?"

技能的组合

技能可以互相组合:


# ~/.claude/skills/full-review.md

---
name: full-review
description: 完整的代码审查流程
---

请按以下步骤进行完整的代码审查:

1. 首先用 /skill code-review 检查代码质量
2. 然后用 /skill security-scan 检查安全问题
3. 最后用 /skill performance-check 检查性能
4. 汇总所有发现,生成一份报告

插件系统(Plugins)

插件是更强大的扩展方式——它们可以用代码来扩展 Claude Code 的功能。

插件的结构


// 一个插件的基本结构
export type Plugin = {
  id: string              // 唯一标识
  name: string            // 显示名称
  version: string         // 版本号
  description: string     // 描述

  commands?: Command[]    // 新增的斜杠命令
  tools?: Tool[]          // 新增的工具
  hooks?: Hook[]          // 新增的钩子
}

插件能做什么?

1. 添加新工具


// 翻译工具插件
const TranslateTool = buildTool({
  name: "Translate",
  inputSchema: z.object({
    text: z.string(),
    from: z.string(),
    to: z.string(),
  }),
  async call(input) {
    const result = await translateAPI(input.text, input.from, input.to)
    return { data: result }
  },
  description: () => "翻译文本",
})

2. 添加新命令


// 代码统计命令插件
const StatsCommand = {
  name: "stats",
  help: "显示代码统计信息",
  async handler(input, context) {
    const stats = await analyzeCodebase()
    context.displayMessage({
      role: "system",
      content: `项目统计:
        文件数: ${stats.files}
        总行数: ${stats.lines}
        语言分布: ${stats.languages.join(", ")}`,
    })
  },
}

3. 添加钩子


// 自动格式化钩子
const AutoFormatHook = {
  event: "PostToolUse",
  matcher: "FileEdit",
  async handler(context) {
    const filePath = context.toolInput.file_path
    await formatFile(filePath)
  },
}

插件的安装


# 从 npm 安装
claude plugin install @company/claude-translate-plugin

# 插件安装到 ~/.claude/plugins/

插件的安全

插件运行在受限环境中,有以下限制:


✅ 可以读取工作目录内的文件
✅ 可以调用网络 API
✅ 可以注册工具和命令

❌ 不能直接修改文件(必须通过工具系统)
❌ 不能绕过权限检查
❌ 不能访问其他插件的数据

技能 vs 插件 vs MCP

三种扩展方式各有适用场景:


简单的提示词模板?→ 用技能
  例:代码审查模板、提交信息格式

需要自定义逻辑?→ 用插件
  例:代码统计工具、自动翻译工具

需要连接外部服务?→ 用 MCP
  例:数据库查询、Slack 集成、GitHub API

它们也可以组合使用:


MCP 提供数据库查询能力
  + 插件提供查询结果可视化
  + 技能定义何时使用什么查询
  = 一个完整的数据库助手

扩展生态系统

Claude Code 的三种扩展方式形成了一个生态系统:


┌─────────────────────────────────────────────┐
│                Claude Code 核心               │
│                                              │
│   ┌──────────┐ ┌──────────┐ ┌──────────┐   │
│   │  技能 A   │ │  技能 B   │ │  技能 C   │   │
│   │(Markdown) │ │(Markdown) │ │(Markdown) │   │
│   └──────────┘ └──────────┘ └──────────┘   │
│                                              │
│   ┌──────────┐ ┌──────────┐                 │
│   │  插件 A   │ │  插件 B   │                 │
│   │  (代码)   │ │  (代码)   │                 │
│   └──────────┘ └──────────┘                 │
│                                              │
│   ┌──────────┐ ┌──────────┐ ┌──────────┐   │
│   │ MCP 服务A │ │ MCP 服务B │ │ MCP 服务C │   │
│   │  (进程)   │ │  (进程)   │ │  (进程)   │   │
│   └──────────┘ └──────────┘ └──────────┘   │
│                                              │
└─────────────────────────────────────────────┘

本章小结

  • - 技能是最简单的扩展——一个 Markdown 文件就能教 AI 新能力
  • - 插件可以用代码添加工具、命令和钩子
  • - MCP 连接外部服务和 API
  • - 三种方式各有适用场景,可以组合使用
  • - 插件运行在受限环境中,不能绕过安全系统

思考题

  1. 1. 如果你是一个高中生开发者,你会创建什么样的技能?
  2. 2. 插件系统的安全限制是否足够?你能想到什么潜在风险吗?
  3. 3. 技能、插件、MCP 三者的边界在哪里?一个功能应该用哪种方式实现?

扩展性的三个层次

Claude Code 的扩展系统展示了"扩展性"的三个层次:


第一层:配置级扩展(最简单)
  改 settings.json 就能自定义行为
  例:修改权限规则、改主题、改快捷键
  → 不需要写任何代码

第二层:内容级扩展(中等)
  写 Markdown 文件就能添加新功能
  例:创建技能文件、编写 CLAUDE.md
  → 需要写文本,但不需要写代码

第三层:代码级扩展(最灵活)
  写代码来实现任何功能
  例:开发插件、编写 MCP 服务器
  → 需要编程技能

好的系统应该让不同水平的用户都能扩展它。初学者可以改配置,中级用户可以写技能文件,高级用户可以开发插件。

这种"阶梯式"的扩展设计让系统对新手友好、对专家强大。

下一章,我们将进入高级话题篇——多智能体协作。


本书由 everettjf 使用 Claude Code 分析泄露源码编写 | 保留出处即可自由转载