Claude Code官方文档精华梳理(三)——扩展Claude代码、上下文理解

扩展Claude Code代码

理解何时使用CLAUDE.md、技能、子代理、钩子、MCP和插件。

Claude Code 结合了一种能够分析代码的结构模型,同时还提供了一些内置工具,用于文件操作、搜索、执行以及网络访问等任务。这些内置工具可以应对大多数编码需求。您可以通过这些功能来定制 Claude 的能力,将其连接到外部服务,并自动化工作流程。

概述

扩展模块可以连接到主动循环的不同部分:

  • CLAUDE.md 增加了持续的上下文信息,Claude 在每次会话中都能看到这些上下文信息。
  • 这些技能带来了可重复使用的知识和可调用的工作流程。
  • 代码智能功能将 Claude 连接到语言服务器,使得用户可以进行符号级别的导航,并实时获取类型错误的提示。
  • MCP 将 Claude 与外部的服务和工具连接了起来。
  • Subagent在独立的环境中运行自己的程序,并输出汇总结果。
  • Agent teams负责协调多个独立会话,同时共享任务并支持点对点的消息传递功能。
  • Hooks在生命周期事件中触发,可以执行脚本、发送 HTTP 请求、执行提示操作,或者调用子代理。
  • 插件和市场平台可以整合这些功能,共同发挥作用。

SKILL是最灵活的功能扩展形式。技能是一种包含知识、工作流程或指令的标记文件。你可以通过类似 /deploy 这样的命令来调用技能,或者当合适的时候,Claude 会自动加载这些技能。技能可以在当前的对话中运行,也可以通过子代理在独立的上下文中运行。

将功能融合到你的目的中

其功能包括:Claude 在每次会话中都能持续感知上下文;用户或 Claude 可以随时调用这些功能;以及针对特定事件执行的后台自动化操作。下表中列出了这些功能的详细信息,以及它们何时会被启用。

插件是系统的扩展模块。一个插件可以将各种功能、挂钩、子代理以及 MCP 服务器整合到一个可安装的单元中。插件的名称是带有命名空间的,例如 /my-plugin:review ,因此多个插件可以共存。当希望在多个仓库中重复使用相同的设置,或者通过市场向他人分发系统时,就可以使用插件。

随着时间的推移来构建你的系统配置

你不需要事先配置所有功能。每个功能都有明确的触发条件,大多数团队通常会按照这个顺序来添加这些功能:

Claude多次搞错了一个命令等内容,那么可以把它添加到CLAUDE.md文件中。

如果不断的输入类似相同的提示词,封装成skill。

如果一直把浏览器上的数据粘贴充当上下文的话那就给claude code连接MCP服务。

如果希望一个次要任务不会打断主要任务,可以通过Subagent代理它

同样的触发点会告诉你何时需要更新已有的内容。重复出现的错误或反复出现的评论意见,都是需要修改的地方------这些属于 CLADE.md 的编辑工作,而不是在聊天中进行的简单修正。那种需要不断手动调整的工作流程,也是一种需要再次改进的技能。

比较类似的功能

SKILLS和Subagent分别解决不同的问题:

  • SKILLS是可重复使用的内容,可以嵌入到任何上下文中使用。
  • Subagent是独立工作的人员,他们与您的主聊谈是分开运行的。

技能可以分为两种类型:参考技能和动作技能。参考技能指的是Claude在游戏过程中所使用的知识(比如你的 API 风格指南)。而动作技能则是告诉Claude执行特定的操作(比如 /deploy ,它用于触发你的部署工作流程)。

当需要隔离上下文或者当前上下文窗口已经满了的话,可以使用Subagent。 子代理可能会读取数十份文件或进行广泛的搜索,而主会话则只会收到摘要信息。由于子代理的工作不会占用主上下文资源,因此当不需要让中间结果保持可见时,这种方式也非常有用。自定义子代理可以拥有自己的指令,并且可以预加载技能。

了解各功能模块的层叠关系

功能可以在多个层面上进行定义:全局的、每个项目的、通过插件实现的,或者通过管理策略来管控。此外,还可以将 CLAUDE.md 文件嵌套在子目录中,或者将技能分配到单一代码库中的特定包中。当同一个功能存在于多个层面时,它们之间的层级关系如下:

CLAUDE.md 文件采用叠加式加载方式:所有级别的配置都会同时被纳入 Claude 的上下文之中。 当前工作目录及其上级目录中的文件会在程序启动时立即加载;而子目录则会在你进入它们时再进行加载。当不同的指令发生冲突时,Claude 会自行判断如何协调这些指令,通常情况下,更具体的指令会具有更高的优先级。

加载 CLAUD.md 文件方式

Claude Code 通过从当前工作目录开始遍历目录树来读取 CLAUDE.md 文件,同时检查每个目录中是否存在 CLAUDE.mdCLAUDE.local.md 文件。这意味着,如果您在 foo/bar/ 目录下运行 Claude Code,它会从 foo/bar/CLAUDE.md 、 foo/CLAUDE.md 以及任何相关的 CLAUDE.local.md 文件中读取指令。

Claude 还会在当前工作目录下的子目录中找到 CLAUDE.mdCLAUDE.local.md 文件。这些文件不会在程序启动时立即加载,而是在 Claude 读取这些子目录中的文件时才会被加载进来。

如果你工作在一个大型的单体仓库中,而其他团队的 CLAUDE.md 文件被合并到了你的仓库中,可以使用 claudeMdExcludes 来跳过这些文件。

在将 CLAUDE.md 文件中的块级 HTML 注释( )注入到 Claude 的上下文中之前,这些注释会被删除。你可以使用这些注释来为人工维护者留下说明,而不会浪费上下文标记。而代码块内的注释则会被保留下来。当你使用 Read 工具直接打开 CLAUDE.md 文件时,注释仍然可见。

从其他目录中加载内容

--add-dir 标志允许 Claude 访问主工作目录之外的其他目录。默认情况下,来自这些目录的 CLAUDE.md 文件不会被加载到程序中。

若要从其他目录加载内存文件,请设置 CLAUDE_CODE_ADDITIONAL_DIRECTORIES_CLAUDE_MD 环境变量:CLAUDE_CODE_ADDITIONAL_DIRECTORIES_CLAUDE_MD=1 claude --add-dir .../shared-config

这些文件将从附加目录中加载到 CLAUDE.md 、 .claude/CLAUDE.md 、 .claude/rules/*.md 和 CLAUDE.local.md 中。如果排除了 local ,那么 CLAUDE.local.md 则不会被加载。

整理规则,使用 .claude/rules/

对于较大的项目,你可以将说明内容组织到多个文件中,使用 .claude/rules/ 目录来进行分类。这样可以将说明内容模块化,便于团队维护。此外,规则也可以限定在特定的文件路径上,这样只有在 Claude 处理相关文件时才会加载相应的规则,从而减少了不必要的干扰,并节省了上下文信息空间。

这些规则会在每个会话开始时被加载到上下文中,或者当匹配文件被打开时也会被加载。对于那些不需要一直存在于上下文中的任务特定指令,可以使用"技能"来替代,因为这些技能只有在你调用它们时,或者当 Claude 判断它们与你提供的提示相关时才会被加载。

制定规则

请将 markdown 文件放置在项目的 .claude/rules/ 目录下。每个文件应涵盖一个主题,文件名应具有描述性,例如 testing.mdapi-design.md 。所有 .md 类型的文件都会被递归扫描,因此你可以将规则组织到子目录中,比如 frontend/ 或 backend/ 。

复制代码
your-project/
├── .claude/
│   ├── CLAUDE.md           # Main project instructions
│   └── rules/
│       ├── code-style.md   # Code style guidelines
│       ├── testing.md      # Testing conventions
│       └── security.md     # Security requirements

那些没有 paths 前缀的规则,在程序启动时会以与 .claude/CLAUDE.md 相同的优先级被加载。

路径特定规则

这些规则可以通过使用 YAML 格式的前序声明,并结合 paths 字段来指定仅适用于特定文件。这些条件性规则只有在 Claude 处理符合指定模式的文件时才生效。

复制代码
---
paths:
  - "src/api/**/*.ts"
---

# API Development Rules

- All API endpoints must include input validation
- Use the standard error response format
- Include OpenAPI documentation comments

那些没有 paths 字段的规则会无条件地被加载,并且适用于所有文件。只有当 Claude 读取到符合该模式的文件时,路径范围内的规则才会生效,而不是在每次工具使用过程中都触发。

在 paths 字段中使用全局模式,根据扩展名、目录或任意组合来匹配文件:

Pattern 模式/样式 Matches 匹配结果
**/*.ts 任何目录中所有的 TypeScript 文件
src/**/* src/ 目录下的所有文件
*.md 项目根目录下的 Markdown 文件
src/components/*.tsx 位于特定目录中的 React 组件

你可以指定多个模式,并使用花括号展开机制来匹配一个模式中的多个扩展名:

复制代码
---
paths:
  - "src/**/*.{ts,tsx}"
  - "lib/**/*.ts"
  - "tests/**/*.test.ts"
---
通过符号链接在多个项目之间共享规则

.claude/rules/ 目录支持符号链接,因此你可以维护一组共享的规则,并将这些规则链接到多个项目中。符号链接可以正常解析和加载,而循环符号链接也会被正确处理。

这个例子同时涉及了一个共享目录和一个单独的文件:

复制代码
ln -s ~/shared-claude-rules .claude/rules/shared
ln -s ~/company-standards/security.md .claude/rules/security.md
用户级规则

~/.claude/rules/ 中的个人设置适用于机器上的每个项目。将这些设置用于那些不需要特定于项目的偏好设置吧。

复制代码
~/.claude/rules/
├── preferences.md    # Your personal coding preferences
└── workflows.md      # Your preferred workflows

用户级别的规则会在项目规则之前被加载,因此项目规则的优先级更高。

管理适用于大型团队的 CLAUDE.md 文件

对于在各个团队中部署 Claude Code 的组织来说,您可以集中管理相关指令,并控制哪些 CLAUDE.md 文件会被加载到系统中。

部署全组织的 CLAUDE.md 文件

这些组织可以部署一个由中央管理的 CLAUDE.md 文件,该文件适用于机器上的所有用户。这个文件无法通过个人设置来排除在外。

  • 在指定的文件位置创建该文件。
  • 使用您的配置管理系统进行部署
    • 可以使用 MDM、组策略、Ansible 或类似工具来在开发人员的机器上分发该文件。

claudeMd 键允许你将管理的 CLAUDE.md 内容直接放入 managed-settings.json 中,而无需部署单独的文件。

适用范围:在每台机器上进行的所有 Claude 代码会话中,适用于所有仓库。如果需要对特定仓库进行特殊处理,请提交一个名为 project CLAUDE.md 的配置文件。

优先级:与托管版的 CLAUDE.md 文件相同。在用户和项目的 CLAUDE.md 文件之前加载。

结合多种功能

每个扩展功能都解决不同的问题:CLAUDE.md 负责处理持续性的上下文管理,MCP 负责处理按需产生的知识和工作流程,MCP 还负责处理外部连接相关的事宜,而子代理则负责处理隔离问题,最后,钩子功能则用于实现自动化操作。在实际应用中,这些功能会根据你的工作流程进行组合使用。

例如,你可以利用 CLAUDE.md 来处理项目规范;使用某种技能来优化部署工作流程;通过 MCP 连接到数据库;还可以在每次编辑后运行代码检查功能。每个工具都专注于处理自己最擅长的任务。

了解上下文成本

你添加的每一个功能都会占用 Claude 的一些上下文资源。如果使用的功能过多,可能会填满上下文窗口,但同时也会引入不必要的噪音,从而降低 Claude 的效率;例如,某些技能可能无法正常触发,或者 Claude 可能会错过你对某些约定的理解。理解这些权衡关系有助于你构建出一个高效的系统。

默认情况下,技能描述在会话开始时加载,因此 Claude 可以决定何时使用这些描述。可以在技能的前言部分设置 disable-model-invocation: true ,这样就能完全避免 Claude 看到这些描述,直到你手动触发该技能时才显示。这对于那些只有你自己才会触发的技能来说,可以將上下文信息的使用成本降至零。如果你没有编写某个技能的描述,可以在设置中设置 skillOverrides ,无需修改技能文件即可实现同样的效果。

了解这些功能是如何加载的

每个功能在您的会话中不同的时间点加载。下方的标签页解释了每个功能何时加载以及加载的内容。下面是claude code官网的图片。

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

不需要的Worktree可以移除

相关推荐
ideal-cs2 小时前
总结:Windows/Mac电脑,安装ClaudeCode + DeepSeekV4Pro
windows·macos·claude code·安装claude code·deepseek v4 pro
十正18 小时前
Claude code源码精读之蜂群模式
javascript·人工智能·agent·claude code
youcans_19 小时前
【跟我学 AI 编程】(6) Claude Code 与 IDE 的集成
ide·人工智能·ai编程·claude code
仰望星空的凡人20 小时前
VSCODE接入Claude Code使用第三方模型教程
ide·vscode·ai智能体·claude code
Better Bench1 天前
Ubuntu 22.04系统中解决运行CC-Switch-v3.16.1-Linux-x86_64.AppImage中文乱码
linux·ubuntu·claude·claude code·cc-switch
yongridada1 天前
公司内网使用Vscode+claude code
vscode·claude code
jiayong232 天前
Claude Code 快速参考卡片
大数据·elasticsearch·搜索引擎·ai·claude·claude code
北暮城南2 天前
使用 Claude Code 高效实现图像边缘检测:多算法对比与工程实践
python·opencv·numpy·matplotlib·边缘检测·claude code
刚木2 天前
用 Claude Code 从零开发一个待办任务管理系统
ai·claude code