扩展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.md 和 CLAUDE.local.md 文件。这意味着,如果您在 foo/bar/ 目录下运行 Claude Code,它会从 foo/bar/CLAUDE.md 、 foo/CLAUDE.md 以及任何相关的 CLAUDE.local.md 文件中读取指令。
Claude 还会在当前工作目录下的子目录中找到 CLAUDE.md 和 CLAUDE.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.md 或 api-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可以移除
