features-overview
扩展 Claude Code
了解何时使用 CLAUDE.md、Skills、subagents、hooks、MCP 和 plugins。
Claude Code 结合了一个能够推理代码的模型和内置工具,用于文件操作、搜索、执行和网络访问。内置工具涵盖了大多数编码任务。本指南涵盖扩展层:您添加的功能,用于自定义 Claude 的知识、将其连接到外部服务以及自动化工作流。
初次使用 Claude Code? 从 CLAUDE.md 开始了解项目约定,然后根据需要添加其他扩展当特定触发器出现时。
概述
扩展插入代理循环的不同部分:
- CLAUDE.md 添加 Claude 每个会话都能看到的持久上下文
- Skills 添加可重用的知识和可调用的工作流
- 代码智能 将 Claude 连接到语言服务器,用于符号级导航和实时类型错误
- MCP 将 Claude 连接到外部服务和工具
- Subagents 在隔离的上下文中运行自己的循环,返回摘要
- Agent teams 协调多个独立会话,具有共享任务和点对点消息传递
- Hooks 在生命周期事件上触发,可以运行脚本、HTTP 请求、提示或 subagent
- Plugins 和 marketplaces 打包和分发这些功能
Skills 是最灵活的扩展。Skill 是一个包含知识、工作流或说明的 markdown 文件。您可以使用 /deploy 之类的命令调用 skills,或者 Claude 可以在相关时自动加载它们。Skills 可以在您当前的对话中运行,也可以通过 subagents 在隔离的上下文中运行。
将功能与您的目标相匹配
功能范围从 Claude 每个会话都能看到的始终开启的上下文,到您或 Claude 可以调用的按需功能,再到在特定事件上运行的后台自动化。下表显示了可用的功能以及何时使用每个功能。
| 功能 | 作用 | 何时使用 | 示例 |
|---|---|---|---|
| CLAUDE.md | 每次对话加载的持久上下文 | 项目约定、”始终执行 X” 规则 | “使用 pnpm,而不是 npm。提交前运行测试。” |
| Skill | Claude 可以使用的说明、知识和工作流 | 可重用内容、参考文档、可重复的任务 | /deploy 运行您的部署清单;包含端点模式的 API 文档 skill |
| Subagent | 返回摘要结果的隔离执行上下文 | 上下文隔离、并行任务、专门的工作者 | 读取许多文件但仅返回关键发现的研究任务 |
| Agent teams | 协调多个独立的 Claude Code 会话 | 并行研究、新功能开发、使用竞争假设进行调试 | 生成审查者同时检查安全性、性能和测试 |
| Code intelligence | 语言服务器导航和诊断 | 类型化语言、大型代码库(其中 grep 速度慢或不精确) | 跳转到符号的定义,而不是读取整个文件 |
| MCP | 连接到外部服务 | 外部数据或操作 | 查询您的数据库、发布到 Slack、控制浏览器 |
| Hook | 由事件触发的脚本、HTTP 请求、提示或 subagent | 必须在每个匹配事件上运行的自动化 | 每次文件编辑后运行 ESLint |
Plugins 是打包层。Plugin 将 skills、hooks、subagents 和 MCP servers 捆绑到单个可安装单元中。Plugin skills 是命名空间的(如 /my-plugin:review),因此多个 plugins 可以共存。当您想在多个存储库中重用相同的设置或通过 marketplace 分发给他人时,使用 plugins。
随时间推移构建您的设置
您不需要提前配置所有内容。每个功能都有一个可识别的触发器,大多数团队大致按以下顺序添加它们:
| 触发器 | 添加 |
|---|---|
| Claude 两次出错约定或命令 | 将其添加到 CLAUDE.md |
| 您一直在输入相同的提示来启动任务 | 将其保存为用户可调用的 skill |
| 您第三次将相同的剧本或多步骤过程粘贴到聊天中 | 将其捕获为 skill |
| 您一直在从 Claude 看不到的浏览器标签页复制数据 | 将该系统连接为 MCP server |
| Claude 读取许多文件以查找符号的定义或使用位置 | 为您的语言安装 code intelligence plugin |
| 一个辅助任务用您不会再次引用的输出淹没您的对话 | 通过 subagent 路由它 |
| 您希望每次都发生某事而无需询问 | 编写 hook |
| 第二个存储库需要相同的设置 | 将其打包为 plugin |
相同的触发器告诉您何时更新您已有的内容。重复的错误或反复出现的审查评论是 CLAUDE.md 编辑,而不是聊天中的一次性更正。您一直手动调整的工作流是需要另一次修订的 skill。
比较相似的功能
某些功能可能看起来相似。以下是如何区分它们。
* **Skills** 是可重用的内容,您可以将其加载到任何上下文中
* **Subagents** 是与您的主对话分开运行的隔离工作者
| 方面 | Skill | Subagent |
| ------------------------------------ | ------------- | --------------------- |
| **它是什么** | 可重用的说明、知识或工作流 | 具有自己上下文的隔离工作者 |
| **关键优势** | 在上下文之间共享内容 | 上下文隔离。工作单独进行,仅返回摘要 |
| **[上下文窗口](/zh-CN/context-window)影响** | 添加到您的主窗口 | 使用具有自己输入和输出令牌的单独窗口 |
| **最适合** | 参考材料、可调用的工作流 | 读取许多文件的任务、并行工作、专门的工作者 |
**Skills 可以是参考或操作。** 参考 skills 提供 Claude 在整个会话中使用的知识(如您的 API 风格指南)。操作 skills 告诉 Claude 执行特定操作(如运行您的部署工作流的 `/deploy`)。
**当您需要上下文隔离或上下文窗口变满时,使用 subagent**。Subagent 可能读取数十个文件或运行广泛的搜索,但您的主对话仅接收摘要。由于 subagent 工作不消耗您的主上下文,当您不需要中间工作保持可见时,这也很有用。自定义 subagents 可以有自己的说明并可以预加载 skills。
**它们可以结合。** Subagent 可以预加载特定的 skills(`skills:` 字段)。Skill 可以使用 `context: fork` 在隔离的上下文中运行。有关详细信息,请参阅 [Skills](/zh-CN/skills)。
| 方面 | CLAUDE.md | Skill |
| ----------- | --------------- | --------------- |
| **加载** | 每个会话,自动 | 按需 |
| **可以包含文件** | 是,使用 `@path` 导入 | 是,使用 `@path` 导入 |
| **可以触发工作流** | 否 | 是,使用 `/<name>` |
| **最适合** | "始终执行 X" 规则 | 参考材料、可调用的工作流 |
**如果 Claude 应该始终知道它,请将其放在 CLAUDE.md 中**:编码约定、构建命令、项目结构、"永远不要执行 X" 规则。
**如果它是 Claude 有时需要的参考材料(API 文档、风格指南)或您使用 `/<name>` 触发的工作流(部署、审查、发布),请将其放在 skill 中**。
**经验法则:** 保持 CLAUDE.md 在 200 行以下。如果它在增长,将参考内容移到 skills 或拆分为 [`.claude/rules/`](/zh-CN/memory#organize-rules-with-clauderules) 文件。
| 方面 | CLAUDE.md | `.claude/rules/` | Skill |
| ------- | --------- | ---------------- | ------------ |
| **加载** | 每个会话 | 每个会话,或当打开匹配的文件时 | 按需,当调用或相关时 |
| **范围** | 整个项目 | 可以限定到文件路径 | 特定于任务 |
| **最适合** | 核心约定和构建命令 | 特定于语言或目录的指南 | 参考材料、可重复的工作流 |
**对于每个会话需要的说明,使用 CLAUDE.md**:构建命令、测试约定、项目架构。
**使用 rules 来保持 CLAUDE.md 专注。** 带有 [`paths` frontmatter](/zh-CN/memory#path-specific-rules) 的 rules 仅在 Claude 处理匹配文件时加载,节省上下文。
**对于 Claude 有时只需要的内容,使用 skills**,如 API 文档或您使用 `/<name>` 触发的部署清单。
* **Subagents** 在您的会话内运行并将结果报告回您的主上下文
* **Agent teams** 是相互通信的独立 Claude Code 会话
| 方面 | Subagent | Agent team |
| -------- | ----------------- | ----------------------- |
| **上下文** | 自己的上下文窗口;结果返回给调用者 | 自己的上下文窗口;完全独立 |
| **通信** | 仅向主代理报告结果 | 队友直接相互发送消息 |
| **协调** | 主代理管理所有工作 | 具有自我协调的共享任务列表 |
| **最适合** | 仅结果重要的专注任务 | 需要讨论和协作的复杂工作 |
| **令牌成本** | 较低:结果摘要返回到主上下文 | 较高:每个队友是一个单独的 Claude 实例 |
**当您需要一个快速、专注的工作者时,使用 subagent**:研究一个问题、验证一个声明、审查一个文件。Subagent 完成工作并返回摘要。您的主对话保持清洁。
**当队友需要共享发现、相互质疑和独立协调时,使用 agent team**。Agent teams 最适合具有竞争假设的研究、并行代码审查以及每个队友拥有单独部分的新功能开发。
**过渡点:** 如果您运行并行 subagents 但遇到上下文限制,或者您的 subagents 需要相互通信,agent teams 是自然的下一步。
<Note>
Agent teams 是实验性的,默认禁用。有关设置和当前限制,请参阅 [agent teams](/zh-CN/agent-teams)。
</Note>
| 方面 | MCP | Skill |
| -------- | -------------------- | --------------------- |
| **它是什么** | 连接到外部服务的协议 | 知识、工作流和参考材料 |
| **提供** | 工具和数据访问 | 知识、工作流、参考材料 |
| **示例** | Slack 集成、数据库查询、浏览器控制 | 代码审查清单、部署工作流、API 风格指南 |
这些解决不同的问题,可以很好地协同工作:
**MCP** 给予 Claude 与外部系统交互的目的构建的工具,连接和身份验证由服务器处理。
**Skills** 给予 Claude 关于如何有效使用这些工具的知识,以及您可以使用 `/<name>` 触发的工作流。Skill 可能包括您团队的数据库架构和查询模式,或带有您团队消息格式规则的 `/post-to-slack` 工作流。
示例:MCP 服务器将 Claude 连接到您的数据库。Skill 教导 Claude 您的数据模型、常见查询模式以及用于不同任务的表。
| 方面 | Hook | Skill |
| --------- | ------------------------------------------------------------------- | ---------------------------------- |
| **运行** | Shell 命令、HTTP 请求、LLM 提示或 subagent | Claude 读取和遵循的说明 |
| **由以下触发** | [生命周期事件](/zh-CN/hooks#hook-events),如 `PostToolUse` 或 `SessionStart` | 您输入 `/<name>`,或 Claude 将描述与您的任务相匹配 |
| **确定性** | 总是在其事件上触发;触发器是有保证的 | Claude 解释说明;结果可能会有所不同 |
| **上下文成本** | 零,除非 hook 返回输出 | 描述在每个会话加载;使用时加载完整内容 |
| **最适合** | 每次都以相同方式运行且不需要 Claude 思考的操作 | 需要推理的工作流、参考材料、多步骤任务 |
**当操作必须每次都以相同方式发生且不需要 Claude 思考时,使用 hook**。例如:保存时格式化、拒绝 `rm -rf /`、在会话结束时发布 Slack 消息。
**当 Claude 应该决定如何应用步骤或内容是知识而不是脚本时,使用 skill**。例如:`/release` 清单、您的 API 风格指南、调试剧本。
**将护栏放在 hooks 中。** CLAUDE.md 或 skill 中的"永远不要编辑 `.env`"之类的说明是请求,而不是保证。阻止编辑的 `PreToolUse` hook 是强制执行。如果规则必须每次都成立,将其作为 hook 而不是提示说明。
**Hook 输出进入上下文。** 运行您的 linter 的 `PostToolUse` hook 将结果作为 Claude 读取的文本反馈;`/fix-lint` skill 告诉 Claude 如何解决它们。
了解功能如何分层
功能可以在多个级别定义:用户范围、每个项目、通过 plugins 或通过托管策略。您还可以在子目录中嵌套 CLAUDE.md 文件或在 monorepo 的特定包中放置 skills。当相同的功能存在于多个级别时,以下是它们的分层方式:
- CLAUDE.md 文件 是累加的:所有级别同时向 Claude 的上下文贡献内容。来自您的工作目录及以上的文件在启动时加载;子目录在您在其中工作时加载。当说明冲突时,Claude 使用判断来协调它们,更具体的说明通常优先。有关详细信息,请参阅 CLAUDE.md 文件如何加载。
- Skills 和 subagents 按名称覆盖:当相同的名称存在于多个级别时,一个定义根据优先级获胜(对于 skills 为托管 > 用户 > 项目;对于 subagents 为托管 > CLI 标志 > 项目 > 用户 > plugin)。Plugin skills 是 命名空间的 以避免冲突。有关详细信息,请参阅 skill 发现 和 subagent 范围。
- MCP 服务器 按名称覆盖:本地 > 项目 > 用户。有关详细信息,请参阅 MCP 范围。
- Hooks 合并:所有注册的 hooks 为其匹配的事件触发,无论来源如何。有关详细信息,请参阅 hooks。
组合功能
每个扩展解决不同的问题:CLAUDE.md 处理始终开启的上下文,skills 处理按需知识和工作流,MCP 处理外部连接,subagents 处理隔离,hooks 处理自动化。真实的设置根据您的工作流组合它们。
例如,您可能使用 CLAUDE.md 处理项目约定、使用 skill 处理部署工作流、使用 MCP 连接到数据库、使用 hook 在每次编辑后运行 linting。每个功能处理它最擅长的事情。
| 模式 | 工作原理 | 示例 |
|---|---|---|
| Skill + MCP | MCP 提供连接;skill 教导 Claude 如何很好地使用它 | MCP 连接到您的数据库,skill 记录您的架构和查询模式 |
| Skill + Subagent | Skill 为并行工作生成 subagents | /audit skill 启动在隔离上下文中工作的安全性、性能和风格 subagents |
| CLAUDE.md + Skills | CLAUDE.md 保存始终开启的规则;skills 保存按需加载的参考材料 | CLAUDE.md 说”遵循我们的 API 约定”,skill 包含完整的 API 风格指南 |
| Hook + MCP | Hook 通过 MCP 触发外部操作 | 编辑后 hook 在 Claude 修改关键文件时发送 Slack 通知 |
了解上下文成本
您添加的每个功能都会消耗 Claude 的一些上下文。太多可能会填满您的上下文窗口,但它也可能增加噪音,使 Claude 效率降低;skills 可能无法正确触发,或 Claude 可能会失去对您的约定的跟踪。了解这些权衡有助于您构建有效的设置。有关这些功能如何在运行会话中组合的交互式视图,请参阅 探索上下文窗口。
按功能的上下文成本
每个功能都有不同的加载策略和上下文成本:
| 功能 | 何时加载 | 加载内容 | 上下文成本 |
|---|---|---|---|
| CLAUDE.md | 会话开始 | 完整内容 | 每个请求 |
| Skills | 会话开始 + 使用时 | 启动时的描述,使用时的完整内容 | 低(每个请求的描述)* |
| MCP 服务器 | 会话开始 | 工具名称;完整架构按需 | 低,直到使用工具 |
| Code intelligence | 文件编辑后和按需 | 编辑后的诊断;符号查找时的位置信息 | 低;减少其他地方的文件读取 |
| Subagents | 生成时 | 具有指定 skills 的新鲜上下文 | 与主会话隔离 |
| Hooks | 触发时 | 无(外部运行) | 零,除非 hook 返回额外上下文 |
*默认情况下,skill 描述在会话开始时加载,以便 Claude 可以决定何时使用它们。在 skill 的 frontmatter 中设置 disable-model-invocation: true 以将其完全隐藏在 Claude 中,直到您手动调用它。这将 skills 的上下文成本降低到零,您只需自己触发这些 skills。对于您未编写的 skill,在设置中设置 skillOverrides 以在不编辑其文件的情况下执行相同操作。
了解功能如何加载
每个功能在会话的不同点加载。下面的选项卡解释了每个功能何时加载以及什么进入上下文。
**加载内容:** 所有 CLAUDE.md 文件的完整内容(托管、用户和项目级别)。
**继承:** Claude 从您的工作目录读取 CLAUDE.md 文件直到根目录,并在访问这些文件时发现子目录中的嵌套文件。有关详细信息,请参阅 [CLAUDE.md 文件如何加载](/zh-CN/memory#how-claude-md-files-load)。
<Tip>保持 CLAUDE.md 在 200 行以下。将参考材料移到 skills,这些 skills 按需加载。</Tip>
**何时:** 取决于 skill 的配置。默认情况下,描述在会话开始时加载,完整内容在使用时加载。对于仅用户 skills(`disable-model-invocation: true`),在您调用它们之前不加载任何内容。
**加载内容:** 对于模型可调用的 skills,Claude 在每个请求中看到名称和描述。当您使用 `/<name>` 调用 skill 或 Claude 自动加载它时,完整内容加载到您的对话中。
**Claude 如何选择 skills:** Claude 将您的任务与 skill 描述相匹配,以决定哪些相关。如果描述模糊或重叠,Claude 可能加载错误的 skill 或错过会有帮助的 skill。要告诉 Claude 使用特定的 skill,请使用 `/<name>` 调用它。带有 `disable-model-invocation: true` 的 Skills 对 Claude 不可见,直到您调用它们。
**上下文成本:** 低,直到使用。仅用户 skills 在调用前成本为零。
**在 subagents 中:** Skills 在 subagents 中的工作方式不同。不是按需加载,而是在 subagent 的 `skills` 字段中列出的 skills 在启动时完全预加载到其上下文中。Subagents 仍然可以通过 Skill 工具发现和调用未列出的项目、用户和插件 skills。
<Tip>对于有副作用的 skills,使用 `disable-model-invocation: true`。这节省上下文并确保只有您触发它们。</Tip>
**加载内容:** 来自连接的服务器的工具名称。完整的 JSON 架构保持延迟,直到 Claude 需要特定工具。
**上下文成本:** [工具搜索](/zh-CN/mcp#scale-with-mcp-tool-search)默认启用,因此空闲 MCP 工具消耗最少的上下文。
<Tip>运行 `/mcp` 查看连接状态和每个服务器的令牌成本。Claude Code [自动重新连接到远程服务器](/zh-CN/mcp#automatic-reconnection)(如果它们断开连接),您可以断开您未主动使用的服务器。</Tip>
**加载内容:** 每次文件编辑后的类型错误和警告。当 Claude 查找符号时的定义、引用和类型信息。
**上下文成本:** 低。符号查找通常替代广泛的文件读取,因此净上下文使用可能会下降。
<Tip>LSP 工具在您为您的语言安装 [code intelligence 插件](/zh-CN/discover-plugins#code-intelligence) 之前处于非活动状态。</Tip>
**加载内容:** 新鲜、隔离的上下文,包含:
* agent 的自己的系统提示,而不是完整的 Claude Code 系统提示
* agent 的 `skills:` 字段中列出的 skills 的完整内容
* CLAUDE.md 和 git 状态,除了内置的 Explore 和 Plan agents [省略两者](/zh-CN/sub-agents#what-loads-at-startup)
* 主 agent 在提示中传递的任何上下文
**上下文成本:** 与主会话隔离。Subagents 不继承您的对话历史或调用的 skills。
<Tip>对于不需要您完整对话上下文的工作,使用 subagents。它们的隔离防止膨胀您的主会话。</Tip>
**加载内容:** 默认情况下无。Hooks 在主对话外执行。
**上下文成本:** 零,除非 hook 返回作为消息添加到您的对话中的输出。
<Tip>Hooks 非常适合不需要影响 Claude 上下文的副作用(linting、logging)。</Tip>
了解更多
每个功能都有自己的指南,包含设置说明、示例和配置选项。