Appearance
扩展 Claude Code
Claude Code 内置了文件操作、搜索、执行和网页访问等工具,覆盖大多数编程任务。在此之上,扩展层让你可以添加 Claude 知道的知识(CLAUDE.md、Skills)、连接外部服务(MCP)、隔离执行复杂任务(子代理、Agent Teams)和自动化工作流(Hooks)。本文梳理各功能的适用场景、上下文开销,以及如何随着工作需要逐步搭建你的配置。
Claude Code 使用内置工具(文件操作、搜索、命令执行、网页访问)处理大多数编程任务。本文介绍扩展层:你可以添加的自定义功能,用来告诉 Claude 更多内容、连接更多服务、自动化更多流程。
刚开始用 Claude Code? 先从 CLAUDE.md 写项目约定开始,等遇到具体需求再按需添加其他扩展。
扩展层概览
各扩展功能插入代理循环的不同节点:
| 功能 | 作用 | 适用场景 | 示例 |
|---|---|---|---|
| CLAUDE.md | 每次会话自动加载的持久上下文 | 项目约定、"始终做 X"的规则 | "使用 pnpm,不用 npm。提交前运行测试。" |
| Skills | 可复用的知识和工作流 | 参考资料、可重复任务 | /deploy 运行部署清单;API 文档技能 |
| 子代理 | 独立上下文的隔离执行器 | 上下文隔离、并行任务、专业工作者 | 读很多文件的研究任务,只返回关键发现 |
| Agent Teams | 协调多个独立的 Claude Code 会话 | 并行研究、新功能开发、相互竞争的假设 | 同时启动安全、性能、测试审查员 |
| MCP | 连接外部服务 | 外部数据或操作 | 查询数据库、发 Slack 消息、控制浏览器 |
| Hooks | 在特定事件上运行的确定性脚本 | 不涉及 LLM 的可预测自动化 | 每次文件编辑后自动运行 ESLint |
Plugins 是打包层,把 Skills、Hooks、子代理和 MCP 服务器打包成可安装单元。使用 Plugin Marketplaces 分发给他人。
逐步搭建你的配置
不需要一开始就配置好一切。每个功能都有明显的触发时机,大多数团队大致按以下顺序添加:
| 触发时机 | 添加什么 |
|---|---|
| Claude 把某个约定或命令搞错了两次 | 加到 CLAUDE.md |
| 每次开始任务都要输入同一段提示 | 保存为可调用的 Skill |
| 第三次把同一个流程或清单粘贴到对话里 | 封装成 Skill |
| 每次要从浏览器标签页复制 Claude 看不到的数据 | 把那个系统接入 MCP 服务器 |
| 某个任务让对话充满了不会再用到的输出 | 通过子代理处理 |
| 希望某件事每次都自动发生,不用提 | 写一个 Hook |
| 另一个仓库需要相同的配置 | 打包成 Plugin |
同样的触发时机告诉你什么时候更新已有的配置。反复出现的错误或代码审查意见是 CLAUDE.md 的编辑信号;反复手动调整的工作流是 Skill 需要修订的信号。
功能对比
Skills vs 子代理
Skills 和子代理解决不同问题:
| 维度 | Skill | 子代理 |
|---|---|---|
| 本质 | 可复用的指令、知识或工作流 | 有独立上下文的隔离工作者 |
| 核心价值 | 跨上下文共享内容 | 上下文隔离。工作在子代理中完成,只有摘要返回 |
| 最适合 | 参考资料、可调用工作流 | 读大量文件的任务、并行工作、专业工作者 |
Skills 也可以通过 context: fork 在子代理上下文中运行。子代理可以预加载 Skills(skills: 字段)。
CLAUDE.md vs Skill
| 维度 | CLAUDE.md | Skill |
|---|---|---|
| 加载时机 | 每次会话,自动 | 按需(Claude 自动或你手动触发) |
| 可触发工作流 | 否 | 是,用 /name 触发 |
| 最适合 | "始终做 X"的规则 | 参考资料、可调用工作流 |
放 CLAUDE.md:Claude 每次都要知道的内容——编码约定、构建命令、项目结构、"禁止做 X"的规则。
放 Skill:Claude 有时需要的参考资料(API 文档、风格指南),或用 /<name> 触发的工作流(部署、发布、审查)。
CLAUDE.md 保持在 200 行以内。超出部分移到 Skills 或拆分到 .claude/rules/ 文件。
子代理 vs Agent Teams
| 维度 | 子代理 | Agent Teams |
|---|---|---|
| 上下文 | 独立上下文窗口,结果返回调用方 | 独立上下文窗口,完全独立 |
| 通信 | 只向主代理报告结果 | 成员之间可以互相发消息 |
| 协调 | 主代理管理所有工作 | 共享任务列表,自我协调 |
| Token 成本 | 低:结果摘要返回 | 高:每个成员是独立实例 |
| 最适合 | 只关心结果的专注任务 | 需要讨论和协作的复杂工作 |
MCP vs Skill
| 维度 | MCP | Skill |
|---|---|---|
| 本质 | 连接外部服务的协议 | 知识、工作流和参考资料 |
| 提供 | 工具和数据访问 | 知识、工作流、参考资料 |
MCP 让 Claude 能与外部系统交互(没有 MCP 就无法查询数据库或发 Slack)。Skill 教 Claude 如何高效使用这些工具。两者配合:MCP 提供连接,Skill 提供用法文档和查询模式。
功能的分层机制
同一功能可以在多个级别定义:用户级、项目级、插件级或托管策略级。
- CLAUDE.md 是累加的:所有级别的内容同时进入上下文。冲突时,更具体的指令通常优先。
- Skills 和子代理 按名称覆盖:同名时,高优先级位置的定义生效。
- MCP 服务器 按名称覆盖:本地 > 项目 > 用户。
- Hooks 合并:所有注册的 Hook 都会触发,不管来源。
理解上下文开销
每个功能都会消耗一些上下文。过多可能把上下文填满,也可能引入干扰,导致技能触发不正确或 Claude 忘记约定。
| 功能 | 加载时机 | 上下文开销 |
|---|---|---|
| CLAUDE.md | 会话启动 | 每次请求都有 |
| Skills | 启动 + 使用时 | 描述在每次请求中;内容只在使用时加载 |
| MCP 服务器 | 会话启动 | 工具名在启动时加载;Schema 按需加载 |
| 子代理 | 生成时 | 隔离于主会话 |
| Hooks | 触发时 | 零,除非 Hook 返回额外上下文 |
降低 Skills 上下文开销:在 frontmatter 中设置 disable-model-invocation: true,该技能在你手动调用前不会进入上下文,开销为零。
组合使用
| 组合 | 工作方式 | 示例 |
|---|---|---|
| Skill + MCP | MCP 提供连接,Skill 教 Claude 如何使用 | MCP 连接数据库,Skill 文档化 schema 和查询模式 |
| Skill + 子代理 | Skill 调度并行子代理 | /audit 技能启动安全、性能、风格三个子代理 |
| CLAUDE.md + Skills | CLAUDE.md 保持常驻规则,Skills 按需加载参考资料 | CLAUDE.md 说"遵循 API 约定",Skill 包含完整的 API 风格指南 |
| Hook + MCP | Hook 通过 MCP 触发外部操作 | 编辑关键文件后,Hook 发送 Slack 通知 |
快速索引
| 我想… | 看这里 |
|---|---|
| 给 Claude 持久的项目知识 | CLAUDE.md |
| 创建可调用的工作流命令 | Skills |
| 专业化 AI 助手处理特定任务 | 子代理 |
| 多个代理并行协作 | Agent Teams |
| 连接外部数据库/API/工具 | MCP |
| 文件编辑后自动运行格式化 | Hooks |
| 把配置打包给其他仓库使用 | Plugins |
| 了解各功能的上下文开销 | 本文"理解上下文开销"部分 |
常见问题
Q: 应该先配置什么扩展功能?
先从 CLAUDE.md 开始——写下项目约定和构建命令。其他功能按需添加:当你发现自己反复输入同样的提示时加 Skill,需要连接外部工具时配 MCP,想要自动化某些操作时写 Hook。
Q: 扩展功能多了上下文会不会不够用?
CLAUDE.md 和 Skills 描述每次请求都会消耗一点上下文。Skill 内容按需加载,MCP 工具 Schema 按需延迟,子代理和 Hook 完全隔离。保持 CLAUDE.md 在 200 行以内,把详细内容移到 Skills,是最简单的上下文优化。
Q: Skills 和 Hooks 有什么区别?
Skills 是给 Claude 看的指令,Claude 阅读后决定如何行动。Hooks 是在特定事件触发的确定性脚本,不经过 LLM,每次都会执行,适合强制性的自动化(如格式化、校验)。