Claude Code 扩展功能对比:CLAUDE.md、Skills、子代理、MCP 配置时机与选择

Claude Code 的扩展功能各有侧重:CLAUDE.md 存放始终有效的项目规则,Skills 存放按需加载的知识和工作流,子代理隔离执行复杂任务,MCP 连接外部服务,Hooks 实现确定性自动化。从 CLAUDE.md 开始逐步搭建,当上下文窗口快满时用子代理或设置技能 disable-model-invocation: true 优化开销。

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 服务器打包成可安装单元 跨仓库复用配置,分发给他人 通过 marketplaces 分发

逐步搭建你的配置

不需要一开始就配置好一切。每个功能都有明显的触发时机,大多数团队大致按以下顺序添加:

触发时机 添加什么
Claude 把某个约定或命令搞错了两次 加到 CLAUDE.md
每次开始任务都要输入同一段提示 保存为可调用的 Skill
第三次把同一个流程或清单粘贴到对话里 封装成 Skill
每次要从浏览器标签页复制 Claude 看不到的数据 把那个系统接入 MCP 服务器
某个任务让对话充满了不会再用到的输出 通过子代理处理
希望某件事每次都自动发生,不用提 写一个 Hook
另一个仓库需要相同的配置 打包成 Plugin

同样的触发时机告诉你什么时候更新已有的配置。反复出现的错误或代码审查意见是 CLAUDE.md 的编辑信号;反复手动调整的工作流是 Skill 需要修订的信号。

功能对比

Skills vs 子代理

Skills 和子代理解决不同问题:

维度 Skill 子代理
本质 可复用的指令、知识或工作流 有独立上下文的隔离工作者
核心价值 跨上下文共享内容 上下文隔离。工作在子代理中完成,只有摘要返回
上下文影响 加到主窗口 使用独立窗口,有自己的输入输出 Token
最适合 参考资料、可调用工作流 读大量文件的任务、并行工作、专业工作者

Skills 也可以通过 context: fork 在子代理上下文中运行。子代理可以预加载 Skills(skills: 字段)。

CLAUDE.md vs Skill

维度 CLAUDE.md Skill
加载时机 每次会话,自动 按需(Claude 自动或你手动触发)
可包含文件 是,用 @path 导入 是,用 @path 导入
可触发工作流 是,用 /<name> 触发
最适合 "始终做 X"的规则 参考资料、可调用工作流

CLAUDE.md:Claude 每次都要知道的内容——编码约定、构建命令、项目结构、"禁止做 X"的规则。

放 Skill:Claude 有时需要的参考资料(API 文档、风格指南),或用 /<name> 触发的工作流(部署、发布、审查)。

CLAUDE.md 保持在 200 行以内。超出部分移到 Skills 或拆分到 .claude/rules/ 文件。

CLAUDE.md vs .claude/rules/ vs Skill

三者都存储指令,但加载方式不同:

维度 CLAUDE.md .claude/rules/ Skill
加载时机 每次会话 每次会话,或打开匹配文件时 按需,调用或 Claude 判断相关时
作用域 整个项目 可按文件路径限定 任务特定
最适合 核心约定和构建命令 语言或目录特定的指导 参考资料、可重复工作流

CLAUDE.md 存储每个会话都需要的内容:构建命令、测试约定、项目架构。

用 rules 保持 CLAUDE.md 精简。规则可以通过 paths frontmatter 仅当 Claude 处理匹配文件时才加载,节省上下文。

用 Skills 存储 Claude 偶尔才需要的内容,如 API 文档或部署清单。

子代理 vs Agent Teams

维度 子代理 Agent Teams
上下文 独立上下文窗口,结果返回调用方 独立上下文窗口,完全独立
通信 只向主代理报告结果 成员之间互相发消息
协调 主代理管理所有工作 共享任务列表,自我协调
Token 成本 低:结果摘要返回 高:每个成员是独立的 Claude 实例
最适合 只关心结果的专注任务 需要讨论和协作的复杂工作

使用子代理 当需要快速专注的工作者:研究问题、验证主张、审查文件。子代理完成工作返回摘要,主对话保持干净。

使用 Agent Teams 当成员需要共享发现、互相挑战并独立协调。适合带有竞争假设的研究、并行代码审查、新功能开发等,每个成员负责一部分。

过渡点:如果你在运行并行子代理但遇到上下文限制,或子代理之间需要通信,Agent Teams 是自然的下一步。

Agent Teams 是实验性功能,默认禁用。详见 agent teams

MCP vs Skill

维度 MCP Skill
本质 连接外部服务的协议 知识、工作流和参考资料
提供 工具和数据访问 知识、工作流、参考资料
示例 Slack 集成、数据库查询、浏览器控制 代码审查清单、部署工作流、API 风格指南

MCP 让 Claude 能与外部系统交互。没有 MCP,Claude 无法查询数据库或发 Slack。

Skills 教 Claude 如何高效使用这些工具,以及可用 /<name> 触发的工作流。一个 Skill 可以包含团队的数据库 Schema 和查询模式,或一个 /post-to-slack 工作流。

配合示例:MCP 服务器连接数据库,Skill 教会 Claude 数据模型、常见查询模式、不同任务应使用的表。

Hook vs Skill

维度 Hook Skill
运行方式 执行 shell 命令、HTTP 请求、LLM 提示或子代理 Claudioe 读取并遵循的指令
触发方式 生命周期事件,如 PostToolUseSessionStart 你输入 /<name>,或 Claude 根据描述判断相关而自动加载
确定性 每次事件必然触发 Claude 解读指令,结果有变化
上下文成本 零,除非 Hook 返回输出 描述每次请求都加载;内容在使用时加载
最适合 文件编辑后 lint、阻止危险命令、日志记录、通知 需要推理的工作流、参考资料、多步任务

用 Hook:动作必须每次同样执行且不需要 Claude 思考。例如:保存时格式化、拒绝 rm -rf /、会话结束时发 Slack 消息。

用 Skill:Claude 应决定如何应用步骤,或内容是知识而非脚本。例如:/release 检查清单、API 风格指南、调试 playbook。

把护栏放在 Hook 里CLAUDE.md 或 Skill 中的"不要编辑 .env"是指令而非保证。PreToolUse Hook 阻止编辑才是强制执行。如果规则必须每次生效,做成 Hook 而非提示指令。

Hook 输出会进入上下文PostToolUse Hook 运行 linter 后返回文本给 Claude 阅读;/fix-lint Skill 告诉 Claude 如何修复。

功能的分层机制

同一功能可以在多个级别定义:用户级、项目级、插件级或托管策略级。当同一功能存在多个级别时,遵循以下规则:

  • CLAUDE.md 文件 累加:所有级别的内容同时进入上下文。工作目录及以上的文件在启动时加载;子目录的文件在访问时加载。指令冲突时,Claude 根据判断协调,更具体的指令通常优先。详见 CLAUDE.md 加载方式
  • Skills 和子代理 按名称覆盖:同名时,优先级高的定义覆盖低的(Skills:托管 > 用户 > 项目;子代理:托管 > CLI 标记 > 项目 > 用户 > 插件)。插件 Skills 已命名空间化避免冲突。详见 Skill 发现子代理作用域
  • MCP 服务器 按名称覆盖:本地 > 项目 > 用户。详见 MCP 作用域
  • Hooks 合并:无论来源如何,所有注册的 Hook 都会在匹配事件上触发。详见 Hooks

理解上下文成本

每个功能都会消耗一些上下文。过多可能填满上下文窗口,或引入干扰导致技能触发不正确、Claude 忘记约定。

功能 加载时机 上下文成本
CLAUDE.md 会话启动 每次请求都有
Skills 启动 + 使用时 描述在每次请求中;内容只在使用时加载
MCP 服务器 会话启动 工具名启动时加载;完整 Schema 延迟到使用时
代码智能 文件编辑后 + 按需 编辑后诊断;符号查询时加载
子代理 生成时 独立于主会话
Hooks 触发时 零,除非 Hook 返回额外上下文

默认情况下,Skill 描述在会话启动时加载以便 Claude 判断何时使用。设置 disable-model-invocation: true 可隐藏技能直到你手动调用,将其上下文成本降为零。对于非自己编写的技能,可在 settings 中通过 skillOverrides 实现相同效果而不修改文件。

各功能加载细节

CLAUDE.md

加载时机:会话启动

加载内容:所有级别(托管、用户、项目)的 CLAUDE.md 完整内容。

继承:Claude 从工作目录向上读取 CLAUDE.md,并在访问子目录时发现嵌套文件。

保持 CLAUDE.md 在 200 行以内。参考资料移至 Skills,按需加载。

Skills

加载时机:取决于配置。默认描述在启动时加载,完整内容在使用时加载。对于 disable-model-invocation: true 的技能,直到你调用才加载。

加载内容:模型可调用的技能,名称和描述在每个请求中可见。调用 /name 或 Claude 自动加载时,完整内容进入对话。

Claude 如何选择技能:Claude 将任务描述与技能描述匹配。描述模糊或重叠时可能选错或遗漏。要指定使用某个技能,用 /name 调用。disable-model-invocation: true 的技能对 Claude 不可见直到你调用。

上下文成本:低直到使用。用户专用技能零开销直到调用。

在子代理中:技能在子代理中不是按需加载,而是 skills 字段中列出的技能在启动时完全预加载。子代理仍可通过 Skill 工具发现和调用未列出的项目、用户和插件技能。

带有副作用的技能使用 disable-model-invocation: true,节省上下文并确保只有你触发。

MCP 服务器

加载时机:会话启动。

加载内容:已连接服务器的工具名称。完整 JSON Schema 延迟到 Claude 需要特定工具时。

上下文成本工具搜索默认开启,空闲时占用极少量上下文。

可靠性提示:MCP 连接可能在中途静默失败。服务器断开后工具消失而不警告。Claude 可能尝试使用一个已不存在的工具。如果发现 Claude 无法使用之前能访问的 MCP 工具,运行 /mcp 检查连接。

运行 /mcp 查看每个服务器的 Token 开销。断开不活跃使用的服务器。

代码智能

加载时机:文件编辑后,以及 Claude 导航代码时按需。

加载内容:编辑后的类型错误和警告。符号查找时的定义、引用和类型信息。

上下文成本:低。符号查找通常替代大范围文件读取,因此净上下文使用可能降低。

LSP 工具需安装代码智能插件后才激活。

子代理

加载时机:当人或 Claude 为任务生成时。

加载内容:全新隔离上下文,包含:

  • 代理自身的系统提示(非完整 Claude Code 系统提示)
  • skills: 字段中列出的技能完整内容
  • CLAUDE.md 和 git 状态(内置的 Explore 和 Plan 代理省略两者
  • 主代理在提示中传递的任何上下文

上下文成本:独立于主会话。子代理不继承对话历史或已调用的技能。

用子代理处理不需要完整对话上下文的工作。隔离性防止主会话膨胀。

Hooks

加载时机:特定事件触发时。

加载内容:默认无加载。Hook 在主对话外部执行。

上下文成本:零,除非 Hook 返回输出消息加入对话。

Hook 最适合副作用(lint、日志记录),不需要影响 Claude 上下文。

组合使用

组合 工作方式 示例
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.md – 存储项目上下文、约定和指令
  • Skills – 提供领域知识和可复用工作流
  • 子代理 – 将工作卸载到隔离上下文
  • Agent Teams – 协调多个并行会话
  • MCP – 连接外部服务
  • Hooks – 用钩子自动化工作流
  • Plugins – 打包和分享功能集
  • Marketplaces – 托管和分发插件集合

常见问题

Claude Code 扩展功能太多会不会把上下文撑满?

CLAUDE.md 和 Skill 的描述每次请求都占用一点上下文,但 Skill 内容按需加载,MCP 工具 Schema 延迟加载,子代理和 Hook 完全隔离。为技能设置 disable-model-invocation: true 可将其上下文成本降为零。建议 CLAUDE.md 保持在 200 行以内,详细内容移到 Skills。

我该先配置哪个扩展功能?

CLAUDE.md 开始,写下项目约定和构建命令。当遇到重复输入相同提示时创建 Skill,需要外部服务时接入 MCP,需要自动化时写 Hook。具体触发时机参见上方"逐步搭建你的配置"表格。

Skills 和 Hooks 有什么区别?

Skills 是给 Claude 看的指令,Claude 阅读后决定如何行动,适合需要推理的多步任务。Hooks 是在特定事件触发的确定性脚本,不经过 LLM 直接执行,适合强制性的自动化(如格式化、校验、阻止危险命令)。如果规则必须每次都强制执行,用 Hook;如果适合让 Claude 自主判断,用 Skill。