Claude Code 入门与原理
Claude Code 入门与原理
扩展 Claude Code
3 分钟阅读
扩展 Claude Code
理解何时使用 CLAUDE.md、技能、子智能体、钩子、MCP 和插件。
Claude Code 将能够推理代码的模型与用于文件操作、搜索、执行和网络访问的内置工具相结合。内置工具覆盖大多数编码任务。本指南涵盖扩展层:你添加的功能,用于自定义 Claude 知道什么、连接外部服务以及自动化工作流。
有关核心智能体循环如何工作,请参阅 Claude Code 的工作原理。
Claude Code 新手? 从 CLAUDE.md 开始设置项目约定,然后随着具体触发出现添加其他扩展。
概述
扩展插入智能体循环的不同部分:
- CLAUDE.md 添加 Claude 每次会话都能看到的持久上下文
- 技能 添加可复用的知识和可调用的工作流
- 代码智能 将 Claude 连接到语言服务器,实现符号级导航和实时类型错误
- MCP 将 Claude 连接到外部服务和工具
- 子智能体 在隔离上下文中运行自己的循环,返回摘要
- 智能体团队 协调多个独立会话,共享任务和点对点消息
- 钩子 在生命周期事件触发,可以运行脚本、HTTP 请求、提示或子智能体
- 插件 和 市场 打包和分发这些功能
技能是最灵活的扩展。技能是一个包含知识、工作流或指令的 markdown 文件。你可以用 /deploy 等命令调用技能,或者 Claude 可以在相关时自动加载它们。技能可以在当前对话中运行,或通过子智能体在隔离上下文中运行。
根据目标匹配功能
功能范围从 Claude 每次会话都能看到的始终开启上下文,到你或 Claude 可以按需调用的能力,再到在特定事件上运行的后台自动化。下表显示可用功能以及何时使用它们。
| 功能 | 作用 | 何时使用 | 示例 |
|---|---|---|---|
| CLAUDE.md | 每次对话加载的持久上下文 | 项目约定、"始终执行 X"规则 | "使用 pnpm,不用 npm。提交前运行测试。" |
| 技能 | Claude 可以使用的指令、知识和工作流 | 可复用内容、参考文档、可重复任务 | /deploy 运行你的部署检查清单;带端点模式的 API 文档技能 |
| 子智能体 | 返回摘要结果的隔离执行上下文 | 上下文隔离、并行任务、专业工作者 | 读取许多文件但只返回关键发现的调研任务 |
| 智能体团队 | 协调多个独立的 Claude Code 会话 | 并行研究、新功能开发、带竞争假设的调试 | 同时生成审查者检查安全、性能和测试 |
| 代码智能 | 语言服务器导航和诊断 | 类型化语言、grep 缓慢或不精确的大型代码库 | 跳转到符号定义而不是读取整个文件 |
| MCP | 连接外部服务 | 外部数据或操作 | 查询数据库、发布到 Slack、控制浏览器 |
| 钩子 | 由事件触发的脚本、HTTP 请求、提示或子智能体 | 必须在每次匹配事件上运行的自动化 | 每次文件编辑后运行 ESLint |
| Artifact | 将会话输出发布为私有、交互式网页 | 你想以视觉方式查看或分享而非终端文本的输出 | 随着 Claude 调查而更新的事件时间线 |
插件 是打包层。插件将技能、钩子、子智能体和 MCP 服务器捆绑到单个可安装单元中。插件技能有命名空间(如 /my-plugin:review),因此多个插件可以共存。当你想在多个仓库中复用相同设置或分发给他人的市场时,使用插件。
随时间构建你的设置
你不需要一开始就配置所有内容。每个功能都有可识别的触发点,大多数团队大致按以下顺序添加它们:
| 触发点 | 添加 |
|---|---|
| Claude 两次搞错约定或命令 | 添加到 CLAUDE.md |
| 你一直输入相同的提示来启动任务 | 保存为用户可调用的技能 |
| 你第三次将相同的操作手册或分步程序粘贴到聊天中 | 捕获为技能 |
| 你一直从 Claude 看不到的浏览器标签复制数据 | 将该系统连接为 MCP 服务器 |
| Claude 读取许多文件来查找符号定义或使用位置 | 为你的语言安装代码智能插件 |
| 一个副任务用你不会再引用的输出淹没你的对话 | 通过子智能体路由它 |
| 你想让某事每次发生都无需询问 | 编写一个钩子 |
| 第二个仓库需要相同的设置 | 将其打包为插件 |
相同的触发点告诉你何时更新已有内容。重复的错误或重复的审查评论是 CLAUDE.md 的编辑,而不是聊天中的一次性更正。你一直在手动调整的工作流是需要另一次修订的技能。
比较相似功能
某些功能可能看起来相似。以下是如何区分它们。
- 技能 vs 子智能体
- CLAUDE.md vs 技能
- CLAUDE.md vs 规则 vs 技能
- 子智能体 vs 智能体团队
- MCP vs 技能
- 钩子 vs 技能
技能和子智能体解决不同问题:
- 技能 是可加载到任何上下文中的可复用内容
- 子智能体 是与主对话隔离运行的独立工作者
| 方面 | 技能 | 子智能体 |
|---|---|---|
| 它是什么 | 可复用指令、知识或工作流 | 拥有自己上下文的隔离工作者 |
| 关键优势 | 跨上下文共享内容 | 上下文隔离。工作独立进行,只返回摘要 |
| 上下文窗口 影响 | 添加到你的主窗口 | 使用独立的窗口,有自己的输入和输出 token |
| 最适合 | 参考材料、可调用的工作流 | 读取许多文件的任务、并行工作、专业工作者 |
技能可以是参考或操作。 参考技能提供 Claude 在整个会话中使用的知识(如你的 API 风格指南)。操作技能告诉 Claude 执行特定操作(如运行你部署工作流的 /deploy)。
使用子智能体 当你需要上下文隔离或上下文窗口快满时。子智能体可能读取数十个文件或运行大量搜索,但你的主对话只收到摘要。由于子智能体工作不消耗你的主上下文,这在你不需要中间工作保持可见时也很有用。自定义子智能体可以有自己的指令,并可以预加载技能。
它们可以组合。 子智能体可以预加载特定技能(skills: 字段)。技能可以使用 context: fork 在隔离上下文中运行。详情请参阅技能。
理解功能如何分层
功能可以在多个级别定义:用户范围、项目范围、通过插件,或通过托管策略。你还可以在子目录中嵌套 CLAUDE.md 文件,或将技能放在 monorepo 的特定包中。当相同功能存在于多个级别时,以下是他们如何分层:
- CLAUDE.md 文件 是叠加的:所有级别同时向 Claude 的上下文贡献内容。工作目录及以上的文件在启动时加载;子目录中的文件在你处理这些文件时加载。当指令冲突时,Claude 使用判断来调和它们,更具体的指令通常优先。详情请参阅CLAUDE.md 文件如何加载。
- 技能和子智能体 按名称覆盖:当相同名称存在于多个级别时,一个定义根据优先级获胜(技能:托管 > 用户 > 项目;子智能体:托管 > CLI 标志 > 项目 > 用户 > 插件)。插件技能是命名空间的以避免冲突。详情请参阅技能发现和子智能体范围。
- MCP 服务器 按名称覆盖:本地 > 项目 > 用户。请参阅 MCP 范围。
- 钩子 合并:所有注册的钩子无论来源如何都会在其匹配事件上触发。请参阅钩子。
组合功能
每个扩展解决不同问题:CLAUDE.md 处理始终开启的上下文,技能处理按需知识和工作流,MCP 处理外部连接,子智能体处理隔离,钩子处理自动化。实际设置根据工作流组合它们。
例如,你可能使用 CLAUDE.md 存储项目约定,技能存储部署工作流,MCP 连接数据库,钩子每次编辑后运行 lint。每个功能处理它最擅长的部分。
| 模式 | 工作原理 | 示例 |
|---|---|---|
| 技能 + MCP | MCP 提供连接;技能教 Claude 如何有效使用 | MCP 连接数据库,技能记录架构和查询模式 |
| 技能 + 子智能体 | 技能生成子智能体进行并行工作 | /audit 技能启动安全、性能和风格子智能体,在隔离上下文中工作 |
| CLAUDE.md + 技能 | CLAUDE.md 保存始终开启规则;技能保存按需加载的参考材料 | CLAUDE.md 说"遵循我们的 API 约定",技能包含完整 API 风格指南 |
| 钩子 + MCP | 钩子通过 MCP 触发外部操作 | 编辑后钩子发送 Slack 通知,当 Claude 修改关键文件时 |
理解上下文成本
你添加的每个功能都会消耗 Claude 的部分上下文。过多可能填满上下文窗口,但也可能增加噪音使 Claude 效果降低;技能可能无法正确触发,或 Claude 可能丢失你的约定。理解这些权衡有助于构建有效设置。有关这些功能在运行会话中如何组合的交互式视图,请参阅探索上下文窗口。
按功能的上下文成本
每个功能有不同的加载策略和上下文成本:
| 功能 | 加载时机 | 加载内容 | 上下文成本 |
|---|---|---|---|
| CLAUDE.md | 会话开始 | 完整内容 | 每次请求 |
| 技能 | 会话开始 + 使用时 | 开始时描述,使用时完整内容 | 低(每次请求描述)* |
| MCP 服务器 | 会话开始 | 工具名称;完整模式按需 | 使用工具前低 |
| 代码智能 | 文件编辑后、按需 | 编辑后诊断;查找符号时定义、引用和类型信息 | 低;减少其他地方的文件读取 |
| 子智能体 | 生成时 | 带指定技能的全新上下文 | 与主会话隔离 |
| 钩子 | 触发时 | 无(外部运行) | 零,除非钩子返回额外上下文 |
*默认情况下,技能描述在会话开始时加载,以便 Claude 决定何时使用它们。在技能的 frontmatter 中设置 disable-model-invocation: true 以完全对 Claude 隐藏,直到你手动调用。这对你只自己触发的技能将上下文成本降至零。对于非你编写的技能,在设置中设置 skillOverrides 以执行相同操作而无需编辑其文件。
理解功能如何加载
每个功能在会话的不同点加载。以下标签解释每个功能何时加载以及什么进入上下文。
- CLAUDE.md
- 技能
- MCP 服务器
- 代码智能
- 子智能体
- 钩子
何时: 会话开始
加载内容: 所有 CLAUDE.md 文件的完整内容(托管、用户和项目级别)。
继承: Claude 从工作目录向上读取到根目录的 CLAUDE.md 文件,并在访问子目录时发现嵌套的文件。详情请参阅CLAUDE.md 文件如何加载。
了解更多
每个功能都有自己的指南,包含设置说明、示例和配置选项。