# 驾驭 Claude Code：CLAUDE.md、技能、钩子、规则、子智能体等

- 来源：Claude：Blog（网页）
- 发布时间：2026-06-18 00:00
- AIHOT 分数：72
- AIHOT 标记：精选
- AIHOT 链接：https://aihot.virxact.com/items/cmqjsqzm906huslmhlsasckqc
- 原文链接：https://claude.com/blog/steering-claude-code-skills-hooks-rules-subagents-and-more

## 精选理由

如果你用Claude Code，这篇把定制化方法讲透了，从何时用技能到何时用钩子，比扒拉文档高效得多。

## AI 摘要

Claude Code 提供七种自定义指令方式：CLAUDE.md（根目录始终加载，子目录按需加载）、规则（无范围或路径范围）、技能（按需调用，共享 token 预算）、子智能体（隔离上下文运行并返回最终消息）、钩子（生命周期事件触发，绕过压缩）、输出样式（注入系统提示，永不压缩）和附加系统提示（CLI 标志，仅单次有效）。每种方式在加载时机、压缩行为、上下文成本和适用场景上各有不同，例如 CLAUDE.md 适合存放构建命令与编码规范，路径范围规则避免无关上下文消耗，子智能体用于并行隔离任务，钩子用于确定性自动化（如运行 linter 或备份聊天记录）。

## 正文

驾驭 Claude Code：何时使用 CLAUDE.md、技能、钩子与子智能体

分类

Claude Code

产品

Claude Code

日期

2026 年 6 月 18 日

阅读时间

5

分钟

https://claude.com/blog/steering-claude-code-skills-hooks-rules-subagents-and-more

Claude 的设计理念是适配你的工作方式，而在 Claude Code 中，你可以对其进行自定义。

共有七种方法可以指示 Claude 的行为：CLAUDE.md 文件、规则、技能、子智能体、钩子、输出样式以及附加系统提示词。

每种方法控制着：

指令何时加载到上下文中；

指令是否在长会话中持续存在（压缩行为）；以及

指令拥有多大的权威性。

下表快速总结了每种方法之间的关键差异，而本文则提供了更多细节和决策框架，用于确定你的每条 Claude 指令应归属于哪一类。

方法 加载时机 压缩行为 上下文成本 使用场景

CLAUDE.md（根目录） 会话开始时；在整个会话期间保留在上下文中 记忆化。读取一次并缓存至会话结束；压缩后缓存被清除并重新读取 高。无论是否相关，每一行都会消耗 token 构建命令、目录布局、单体仓库结构、编码规范、团队约定

CLAUDE.md（子目录） 按需加载，当 Claude 读取该子目录下的文件时 丢失，直到再次操作该子目录 低。仅在处理相关子目录时消耗上下文 特定于某个子目录的约定

规则 会话开始时（用户级规则）或仅在触及匹配文件时（路径限定） 压缩时重新注入 中等。除非是路径限定，否则始终开启 特定的约束或约定（例如，所有 API 处理器必须使用 Zod 验证输入）

技能 会话开始时加载名称和描述；技能被调用时加载完整内容 被调用的技能会重新注入，直至达到共享预算；最早使用的优先丢弃 低。仅在调用时加载完整内容；受限于所有已调用技能共享的 token 预算 程序化工作流（部署或发布检查清单）

子智能体 会话开始时加载名称、描述和工具列表；仅当通过 Agent 工具调用时才加载主体内容 只有最终消息（摘要加元数据）返回给主会话 低。在主上下文中零成本，直到被调用；在其独立的上下文窗口中运行。 并行运行工作或执行应隔离运行并仅返回摘要的辅助任务（深度搜索、日志分析、依赖审计）。

钩子 在生命周期事件触发时执行 完全绕过上下文压缩 低。配置存在于主上下文之外；部分输出可能返回（例如，阻塞性错误）。 确定性自动化：运行代码检查工具、完成后发布到 Slack、阻塞命令、在预压缩时备份聊天历史。

输出风格 会话启动时注入到系统提示词中 永不压缩 高。占用上下文窗口，但会覆盖默认的系统提示词。 重要的角色变更（从代码助手变为通用助手）

追加到系统提示词 会话启动时作为 CLI 标志传入 永不压缩；仅适用于该次调用 中等。在会话中首次请求后会被缓存。 语气、回复长度、格式偏好

传递指令的七种方法

有七种方式可以自定义 Claude Code 的行为：用于始终开启的项目上下文的 CLAUDE.md 文件、用于硬性约束的规则、用于可复用流程的技能、用于委派工作的子智能体、用于确定性自动化的钩子，以及用于全局变更的输出风格或系统提示词追加。

每种方法都在上下文成本与权威性之间进行权衡。这些方法影响 Claude 的行为，而您选择的另外两个独立调节旋钮——模型和努力程度——则控制其能力大小和工作努力程度。

CLAUDE.md 文件

CLAUDE.md 是位于项目根目录的一个 Markdown 文件。它在会话启动时加载到上下文中，并在整个会话期间保留。

构建命令、目录布局、单体仓库结构、编码规范和团队规范都自然地适合放在这里。

有两种类型，它们的加载方式不同：

始终加载：第一种是根目录下的 CLAUDE.md 文件，可以放在共享仓库中，和/或保存在本地，用于您个人针对特定项目的偏好设置。所有这些文件在会话启动时加载，并且在长会话中不会丢失或降级。当 Claude Code 压缩对话时，它会重新读取这些文件。

按需加载：位于初始化会话所在文件夹下子目录中的 CLAUDE.md 文件。例如，当 Claude 读取 `app/api` 目录下的文件时，`app/api/CLAUDE.md` 才会被加载，而非在会话启动时加载。它遵循路径作用域规则的压缩行为：在该子目录被再次访问之前，该规则处于未激活状态。

当 Claude 读取某个目录下的文件时，当前工作目录（cwd）下所有子目录中的 CLAUDE.md 文件都会被加载。

在共享仓库中，CLAUDE.md 会像任何无主配置文件一样不断膨胀：每个团队都会追加自己的指令，而没有任何内容被删除。这种成本会随着规模扩大而累积。

仓库中的每位工程师，无论其任务是否相关，每行内容都会加载到他们的每一个会话中。这会消耗模型 token，并削弱对真正重要指令的遵循程度。随着文件不断增长，应将团队特定的约定迁移到路径作用域规则中，将流程迁移到技能中，这样它们只会在相关时才会被加载。

提示：将 CLAUDE.md 保持在 200 行以内，为其指定负责人，并像审查代码一样审查对其的修改。其内容本身应遵循与任何提示词相同的规则：编写有效的提示词意味着要明确具体，解释约束背后的原因，并给出示例。

将此文件视为向 Claude 提供代码库概览，或作为一个索引，指向其他文件，Claude 可在需要时从中查找更多信息。

在单体仓库（monorepo）中，为每个团队的目录创建其自己的子目录 CLAUDE.md，这样团队只会加载自己的约定，而开发者可以使用 `claudeMdExcludes` 设置来跳过那些他们从不接触的团队代码文件。

对于必须适用于组织中每个仓库的标准——例如安全策略、合规要求——可以通过 MDM 或配置管理工具将集中管理的 CLAUDE.md 部署到开发者机器上，并且无法通过个人设置将其排除。

更多关于设置 CLAUDE.md 的内容，请参阅我们的博客文章《CLAUDE.md 文件：为你的代码库定制 Claude Code》。

视频 · 前往原文观看

规则

规则是位于 `.claude/rules/` 目录下的 markdown 文件，用于向 Claude 提供特定的约束或约定。

无作用域规则的行为类似于 CLAUDE.md，它们总是在会话启动时加载，并在压缩时重新注入。即使上下文与当前任务无关，也会加载进来，从而浪费模型 token。

路径作用域规则允许您添加一个 `paths` 字段来控制规则的加载时机，从而仅在相关时才加载规则指令。

例如：一个作用域为 `src/api/**` 的规则，在仅涉及文档的会话期间不会进入上下文。只有当 Claude 读取 `src/api/` 目录下的文件时，该规则才会被加载。

具体效果如下所示：

---paths:-"src/api/**"-"**/*.handler.ts"---AllAPIhandlersmustvalidateinputwithZodbeforeprocessing.

提示：针对特定文件的约束，例如“迁移操作仅允许追加”，最适合作为规则放在您的 `paths` 前置元数据中。当指令涉及横切关注点或出现在代码库多个（但非全部）角落的文件时，应优先使用路径作用域规则，而非嵌套的 CLAUDE.md 文件。

技能

技能存放在 `.claude/skills/` 目录下，作为包含指令、脚本和资源的文件夹，由 Claude 动态加载。每个技能都有一个 `SKILL.md` 文件，其中包含名称、描述和主体内容。

会话启动时仅加载名称和描述；当 Claude 通过斜杠命令（`/code-review`）或自动匹配任务来调用该技能时，才会加载完整的主体内容。

技能通过您的系统提示词触发。

例如，`/code-review` 是一个内置技能，它会审查您当前的差异（diff）并报告发现，而不会编辑文件。该技能定义了操作手册，因此每次调用时，Claude 都会遵循相同的结构化方法。

在压缩时，Claude Code 会重新注入已调用的技能，直至所有已调用技能的总预算上限。如果您在会话期间调用了多个技能，最早调用的技能会首先被丢弃。

提示：程序性指令，例如部署工作流、发布检查清单或审查流程，应放在技能中，而非 CLAUDE.md 中。

Claude Code 自带了一些技能，但您也可以编写自己的自定义技能。我们关于为 Claude 构建技能的完整指南将向您展示具体方法。

子智能体

子智能体是位于 `.claude/agents/` 目录下的 Markdown 文件，用于为特定的辅助任务定义独立的助手。每个文件使用 YAML 前置元数据（包含名称、描述，以及可选的模型和工具访问权限字段），其后紧跟的正文内容则作为该子智能体的系统提示词。

子智能体与技能类似，在会话启动时会加载其名称、描述和工具列表，但智能体正文中更庞大的指令上下文并不会自动调用。Claude 通过 Agent 工具调用子智能体，并传入一个提示词字符串。

Claude Code 的上下文窗口包含了 Claude 在会话中了解到的所有信息。这里的交互式时间线展示了哪些内容在何时被加载。

子智能体正文中更庞大的指令上下文不仅不会自动调用，而且根本不会进入父级对话。

随后，子智能体在其自身全新的上下文窗口中运行，唯一返回主会话的内容是子智能体的最终消息（通常是许多子任务汇总后的结果）以及元数据。

这种模式具有良好的可扩展性：子智能体最多可以嵌套五层，动态工作流可以编排数十到数百个后台智能体，而无需你指定子智能体架构的每个细节。编排计划和中间结果存储在脚本变量中，而非 Claude 的上下文窗口里，这使得在保持指令准确性的同时实现了规模化扩展。

提示：这种隔离性正是选择使用子智能体而非技能的主要原因之一。当深度搜索、日志分析或依赖审计等辅助任务会产生你不会再次引用的中间结果，从而扰乱主对话时，请使用子智能体。当你希望流程在主线程内执行，以便观察并引导每一步时，请使用技能。

钩子

钩子是用户定义的命令、HTTP 端点或 LLM 提示词，通过在 Claude 生命周期中的特定事件（如文件编辑、工具调用或会话启动）触发，从而对 Claude 的行为提供更确定性的控制。

Claude Code 会话中钩子可触发的事件映射图。

你可以在 `settings.json`、托管策略设置或技能/智能体的前置元数据中注册钩子。

钩子有几种类型：命令、HTTP、mcp_tool、提示词和智能体。所有钩子都是确定性触发的。前三种确定性执行，而后两种（提示词和智能体）则依赖 Claude 的判断而非一组规则来决定输出。

钩子的上下文成本较低，因为其配置或指令位于主上下文窗口之外。根据钩子类型，运行框架会执行处理程序（命令、HTTP、mcp_tool），或使用独立窗口进行模型调用（提示词、智能体）。

某些钩子的输出可能会保存到主上下文窗口中。例如，阻塞型钩子的标准错误输出会保存在上下文中，以便 Claude 了解调用被拒绝的原因。

但大多数钩子的输出不会保存到主窗口，除非配置明确要求返回。如果你在压缩前使用 PreCompact 事件将聊天历史备份到另一个文件以供后续参考，Claude 将不知道哪个文件保存了聊天历史。

这使得这些钩子类型与 CLAUDE.md、规则和技能有本质区别。你可以在我们的文章《如何配置钩子》中了解更多。

提示：将钩子用于任何需要确定性执行的操作：编辑后运行代码检查器、完成后发布到 Slack、或在特定命令执行前阻止它们。PreToolUse 钩子可以检查任何工具调用，并通过退出码 2 拒绝该调用。

它们的上下文成本较低，因为它们是运行框架执行的代码，而非加载到上下文中的 Claude 指令。技能和钩子也是设计智能体循环——重复运行直到满足停止条件的工作流——的基础构建块。

输出风格

输出风格是位于 .claude/output-styles/ 目录下的文件，用于向系统提示词注入指令。它们永远不会被压缩，在每个会话开始时加载，并在会话内首次请求后缓存，这意味着它们具有中等程度的上下文成本。

由于它们位于系统提示词中，输出风格在我们目前介绍的所有方法中具有最高的指令遵循权重，应谨慎使用。

输出样式的更改将替换默认输出样式（除非你在样式文件的 frontmatter 中将 `keep-coding-instructions: true` 设置为 true）。

在 Claude Code 中，这将移除那些告知 Claude 它正在帮助用户处理软件工程任务的指令，以及其他关键性的默认指令，例如：

如何界定变更范围；

何时添加或省略代码注释；

如何处理安全问题；

以及在宣布工作完成前运行测试等验证习惯。

默认情况下，自定义输出样式会丢弃所有这些内容，Claude Code 会变得更像一个通用助手，而非软件工程助手。

提示：在编写自定义输出样式之前，请先检查内置样式。Proactive、Explanatory 和 Learning 涵盖了最常见的使用需求（自主性、教学模式、协作编码），无需你自行维护样式文件。

追加系统提示词

修改输出样式的一种替代方案是使用 `append-system-prompt` 标志。修改输出样式文件可能会对 Claude 的行为产生巨大且非预期的改变，而 `append` 标志仅会在原始系统提示词基础上进行添加。它不会修改 Claude 的角色；只是在其默认角色上增加指令。

它也是在调用时传递的，并且仅适用于该次调用，而不会作为文件跨会话持久化。

与其他传递指令的方法相比，追加系统提示词可能会产生更高的上下文成本。它会增加输入 token 数量，不过提示词缓存可以在会话中首次请求后降低这一成本。指示 Claude 使用更冗长或更长的风格也会增加输出 token。

提示：追加系统提示词最适合用于添加特定的编码标准、输出格式或领域特定知识。请记住，追加系统提示词在遵循度方面存在边际效益递减。通常，你使用此方法提供的指令越多，Claude 严格遵循它们的程度就越低，尤其是在指令之间存在矛盾时。

何时使用每种方法

如果你发现自己正在做以下某件事，那么你可能需要考虑为你的指令寻找一个替代位置：

在 CLAUDE.md 中写“每次 X，都做 Y”。如果某个行为需要可靠地发生，比如每次编辑后运行 prettier，或任务完成时发布到 Slack，则应改用 settings.json 中的钩子（hook）。模型选择运行格式化工具，与格式化工具自动运行，是两回事。

在 CLAUDE.md 中写“绝不要做这个”。当存在绝对不允许发生的事情时，指令（instruction）是错误的手段。Claude 大部分时间会遵循指令，但在压力下、长时间会话中、模糊情境下，或因任务访问的文件中存在提示词注入时，模型可能无法遵循提示词规则。真正的护栏必须是确定性的，而强制执行的手段是钩子（hooks）和权限（permissions）。PreToolUse 钩子可以检查调用并以退出码 2 终止调用来阻止它。托管设置（Managed settings）更进一步：它们由管理员部署，不能被用户的本地配置覆盖，并且是强制执行确定性、组织级护栏的唯一方式。

在 CLAUDE.md 中写一个 30 行的流程。流程应归属于技能（skills）。CLAUDE.md 用于存放 Claude 应始终掌握的事实：构建命令、单体仓库布局、团队约定。部署运行手册或安全审查清单应放在 .claude/skills/ 目录下，其内容仅在调用时加载。

不带路径的 API 特定规则。如果某条规则仅适用于 src/api/**，则使用 paths: 限定作用域，使其在不相关的工作中不进入上下文。未限定作用域的规则在机制上等同于将内容放入 CLAUDE.md：始终加载，始终消耗 token。

将个人偏好写入项目级别的 CLAUDE.md 文件。所有基于文件的方法都有一个用户级别的对应文件，无论你在哪个仓库中，该文件都会在每个 Claude Code 会话中加载。个人偏好（如始终使用语义化提交信息）请使用本地文件。项目级别的文件用于存放团队通用但特定于某个代码库的偏好。

Claude Code 自定义入门

你可以在我们的 Claude Code 最佳实践文档中找到更多关于充分利用 Claude Code 的技巧和模式，从配置环境到跨并行会话扩展。

一旦你让其中几个技能正常工作，就可以将多个技能（包括技能、子智能体、钩子、输出样式）打包成一个插件，以便在团队成员或项目之间共享一套连贯的配置。

本文由 Anthropic 员工 Michael Segner 撰写。

借助 Claude 改变您组织的运作方式。
