Claude:Blog(网页)
精选
72AI 编辑部评分,满分 100

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

2026-06-18 00:00· 46天前
跳到正文
精选理由

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

AI 摘要

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

正文 · AI 翻译

驾驭 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 改变您组织的运作方式。

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

Claude:Blog(网页)·2026-06-18 00:00·46天前
阅读原文· claude.com
精选理由

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

AI 摘要

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

正文 · AI 翻译

驾驭 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 改变您组织的运作方式。

阅读原文claude.com