Claude Code 高级扩展篇

14 阅读7分钟

1. Skill 系统:按需加载的能力模块

1.1 什么是 Skill?

Skill 是 Claude Code 的能力插件系统,相当于给 AI 配备的"专业说明书"。与 CLAUDE.md 不同,Skill 不是每次对话都加载,而是按需调用——只有当任务匹配时,才会被激活并注入上下文。

1.2 Skill 的分类

类型说明示例
知识型提供特定领域的最佳实践和规范代码审查指南、安全规范
流程型定义多步骤的工作流程PR 创建流程、发布流程
工具型封装特定工具的使用方法数据库迁移、测试运行
混合型结合以上多种类型完整的 CI/CD 技能包

1.3 为什么 Skill 不写在 CLAUDE.md 里?

核心原则:不是必用,但是常用

CLAUDE.md 的内容会在每次会话启动时自动加载到系统提示词中,占用 Token 预算。而 Skill 采用懒加载策略——每次运行 Agent 时,系统只向大模型发送 Skill 的元信息(名称、描述、触发条件),让模型知道"有哪些说明书可用"以及"什么时候该调用哪个"。只有当模型判断需要时,才会加载完整的 Skill 内容。

1.4 Skill 的作用域

与 CLAUDE.md 类似,Skill 也区分全局项目级

  • 全局 Skill:存放在 ~/.claude/skills/,对所有项目生效
  • 项目 Skill:存放在项目 .claude/skills/,仅对当前项目生效

1.5 发现与安装 Skill

Claude Code 提供了一个元 Skill —— find-skill,可以用自然语言搜索和安装社区 Skill:

/find-skill 我需要一个能帮我生成 API 文档的 Skill

CC 会自动搜索匹配的 Skill 并协助安装,无需手动查找和配置。


2. MCP(Model Context Protocol):AI 的 Type-C 转接头

2.1 什么是 MCP?

MCP 是 Claude Code 与外部系统通信的标准协议,可以理解为"AI 领域的 Type-C 转接头"。通过 MCP Server,CC 能够读取和操作第三方工具的数据,例如:

  • NotebookLM:读取研究笔记和知识图谱
  • Figma:获取设计稿数据并生成前端代码
  • 数据库:直接查询和修改数据
  • 浏览器:自动化网页操作

2.2 MCP 的代价

MCP 的主要缺点是占用 Token 数量大。每个 MCP Server 的工具定义、参数 schema 都会注入到系统提示词中,多个 MCP 同时启用时会显著消耗上下文空间。

2.3 当前趋势

社区正在形成两个方向的演进:

  • 轻量级功能 → 转为 Skill:不需要持续连接的工具,按需加载
  • 重量级功能 → 转为 CLI:需要频繁交互的工具,通过命令行接口调用(详见第 3 节)

3. CLI 集成:AI 的母语

3.1 为什么是 CLI?

一个反直觉的结论:AI 学习可视化操作的成本,比操作命令行大得多。命令提示词才是 AI 的"母语"——结构化的输入输出、明确的参数、可预测的格式,这些天然适合大模型理解和调用。

3.2 厂商的 AI 化转型

越来越多的厂商开始将原本面向人类点击操作的功能和接口,封装成 CLI 来提供给 AI 使用。你可以通过 CC 安装各种开源 CLI 工具,例如:

  • 飞书 CLI:发送邮件、创建文档、建日历、导出文档等
  • openCli:查询本地生活数据(如"杭州必吃榜"),获取社交媒体上的数据和图片

3.3 ! Bash 模式详解

! 是 CC 中直接执行 Shell 命令的前缀,是 CLI 工具与 CC 协同的核心入口。

基本用法

在对话中输入 ! 加空格,后面跟上任意 Shell 命令即可执行:

! npm install lodash
! git status
! curl https://api.example.com/data

命令的完整输出(stdout + stderr)会反馈给 Claude,形成"执行 → 读取结果 → 下一步决策"的闭环。

典型场景

场景示例
安装依赖! npm i axios
运行脚本! npm run test
Git 操作! git diff HEAD~1
调用 CLI 工具! feishu doc create --title "周报"
系统命令! ls -la src/

注意事项

  • ! 命令的执行仍需经过权限模式的审批(除非在 Bypass Permissions 模式下)
  • 长时间运行的命令可以使用 run_in_background 参数在后台执行
  • 命令输出过长时会被截断,建议配合 headtail 等工具控制输出量

4. SubAgent:分身协作

4.1 调用方式

SubAgent 是主 Agent 启动的子任务执行者,有三种调用模式:

模式说明适用场景
主 Agent 自主调用模型判断需要并行处理时自动启动多文件搜索、独立验证
手动提示调用用户明确要求启动子代理指定特定类型的审查
提示主 Agent 生成并调用让模型动态生成子代理配置自定义任务类型

4.2 使用建议

  • 独立任务并行化:多个不依赖彼此的搜索/读取操作,用多个 SubAgent 同时执行
  • 保护主上下文:将大量阅读工作委托给 SubAgent,只返回摘要,避免主上下文被污染
  • 类型匹配:根据任务选择合适的子代理类型(Explore 用于搜索、Plan 用于设计等)

5. Hooks:事件驱动的自动化

5.1 什么是 Hooks?

Hooks 是 Claude Code 的事件触发器——"指定什么条件,执行什么动作"。例如:

"帮我写一个当任务完成时,'叮'一下的 Hook"

Hook 会在特定事件发生时自动执行预设的 Shell 命令,无需人工干预。

5.2 常见 Hook 场景

事件示例动作
任务完成播放提示音、发送通知
文件修改前自动备份、运行 lint
会话启动加载特定配置、显示状态
工具调用后记录日志、触发验证

5.3 配置方式

Hooks 配置在项目或全局的 settings.json 中:

{
  "hooks": {
    "PostToolUse": {
      "Edit": "echo '叮~ 文件已修改'"
    }
  }
}

6. 插件:一体化打包

插件是将上述工具(Skill、MCP、CLI、Hook)打包到一起的组合体。一个插件可能包含:

  • 一个或多个 Skill(能力模块)
  • 一个 MCP Server(外部连接)
  • 预配置的 Hook(自动化触发)
  • 甚至可能只是一个单独的 Skill 或 MCP

插件的价值在于开箱即用——安装一个插件,就能获得完整的工作流支持,无需逐个配置。


7. MCP 配置实战

7.1 安装 MCP Server

MCP Server 通过 settings.json 配置,支持 stdiosse 两种传输方式:

{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-filesystem", "/path/to/allowed/dir"]
    },
    "github": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-github"],
      "env": {
        "GITHUB_PERSONAL_ACCESS_TOKEN": "your-token"
      }
    }
  }
}

7.2 MCP 调试技巧

  • 使用 /context 查看已加载的 MCP Server 列表
  • 如果 MCP 工具不生效,检查 settings.json 语法和命令路径
  • 对于 stdio 模式,确保命令能在终端中独立运行

7.3 MCP 安全注意事项

  • 最小权限原则:只授予 MCP Server 必要的访问权限
  • 敏感信息隔离:Token 等密钥不要硬编码在 settings.json 中,使用环境变量
  • 目录限制:文件系统类 MCP 应限制可访问的目录范围

8. Hook 事件类型详解

8.1 可用事件

事件触发时机示例用途
PreToolUse工具调用前拦截危险操作、二次确认
PostToolUse工具调用后记录日志、播放提示音
NotificationCC 发送通知时自定义通知格式
SessionStart会话启动时加载特定配置、显示欢迎信息
SessionEnd会话结束时保存状态、生成摘要

8.2 实战示例

{
  "hooks": {
    "PostToolUse": {
      "Edit": "echo '📝 文件已修改'",
      "Bash": "echo '⚡ 命令已执行'"
    },
    "SessionStart": "echo '👋 欢迎回来,上次会话已恢复'"
  }
}

9. 自定义 Skill 编写

9.1 Skill 文件结构

一个 Skill 本质上是一个 Markdown 文件,包含 YAML frontmatter 和正文指令:

---
name: my-skill
description: 描述这个 Skill 做什么
---

当用户要求做 X 时,按照以下步骤执行:

1. 第一步...
2. 第二步...
3. 验证...

9.2 编写原则

  • 描述要具体:description 字段决定模型何时调用此 Skill
  • 指令要可执行:避免模糊描述,给出明确的步骤和判断标准
  • 保持精简:Skill 内容越长,加载时消耗的 Token 越多