Clipping 微信公众号

调教 Claude Code 的七种方法

by Anthropic 原文 ↗
Created: 2026-06-19

公众号名称:AGI Hunt

作者名称:Anthropic

发布时间:2026-06-19 03:00

ANTHROPIC OFFICIAL

调教 Claude Code 的七种方法

CLAUDE.md · Rules · Skills · Subagents · Hooks · Output Styles · System Prompt

刚刚,Anthropic 发了一篇博客,系统性地讲了一件事:怎么让 Claude Code 按你的方式干活。

教程想必大家都看过了不少,这次官方讲的,不是那种「试试这个 prompt」之类的小技巧……而是从架构层面,把 Claude Code 的七种自定义机制掰开揉碎了地讲清楚。

包括 CLAUDE.md 文件、Rules、Skills、Subagents、Hooks、Output Styles,还有一个 append system prompt 的命令行参数,每种方法的加载时机、token 成本、压缩行为都不一样。

这应该算是目前关于「如何操控 Claude Code 行为」最完整的一份官方指南了。

以下是全文内容。

七种方法一览

Claude Code 的行为可以通过七种方式来定制,每种方式控制三个维度:

指令什么时候加载进上下文

长会话压缩(compaction)时会不会丢失

指令的权重有多高

下面是速查对比:

CLAUDE.md(根目录)

成本高 压缩后保留

加载:会话开始时加载,全程保留

压缩:压缩后重新读取,缓存刷新

场景:构建命令、目录结构、编码规范、团队约定

CLAUDE.md(子目录)

成本低 按需加载

加载:按需加载,读取该子目录下文件时触发

压缩:压缩后丢失,直到再次访问该子目录

场景:特定子目录的规范

Rules

成本中等 压缩后保留

加载:会话开始(用户级),或匹配文件被访问时(路径限定)

压缩:压缩后重新注入

场景:特定约束或规范(如「API handler 必须用 Zod 校验」)

Skills

成本低 有限保留

加载:启动时仅加载名称和描述,调用时才加载全文

压缩:已调用的 Skills 重新注入,有共享预算,先进先出

场景:流程化工作(部署检查表、发布流程)

Subagents

成本低 隔离运行

加载:启动时加载名称和描述,通过 Agent 工具调用时加载正文

压缩:仅最终摘要返回主会话,中间结果不进入主上下文

场景:并行/隔离副任务(深度搜索、日志分析、依赖审计)

Hooks

成本低 确定性执行

加载:在生命周期事件触发时执行

压缩:完全绕过压缩,配置在主上下文之外

场景:确定性自动化:跑 linter、发 Slack、拦截命令

Output Styles / System Prompt

成本高/中等 权重最高

加载:会话开始时注入系统提示词

压缩:永不压缩

场景:角色变更、语气、格式偏好

CLAUDE.md 文件

CLAUDE.md 是项目根目录下的一个 markdown 文件。会话启动时加载,全程驻留在上下文中。

构建命令、目录结构、monorepo 布局、编码规范、团队约定,这些信息天然适合放在这里。

它有两种类型,加载方式不同:

始终加载:根目录的 CLAUDE.md 文件,可以是仓库级共享的,也可以是你本地保存的个人偏好。这些文件在会话启动时全部加载,长会话中也不会丢失。Claude Code 执行压缩时,会重新读取这些文件。

按需加载:子目录下的 CLAUDE.md 文件。比如 app/api/CLAUDE.md 只在 Claude 读取 app/api/ 下的文件时才会加载,会话启动时不会加载。压缩后会丢失,直到再次访问该子目录。

子目录 CLAUDE.md 的按需加载机制

在共享仓库中,CLAUDE.md 容易变成「公共垃圾场」:每个团队往里面追加自己的指令,但……没人删。

成本是累积的,每一行都会加载到每个工程师的每次会话中,不管跟当前任务有没有关系。这既消耗 token,又会稀释真正重要的指令的遵循度。

文件一旦膨胀了,就应该把团队级的规范推到路径限定的 Rules 里,把流程推到 Skills 里,让它们只在需要的时候才加载。

Tip

把 CLAUDE.md 控制在 200 行以内,指定一个 owner,像审代码一样审它的改动。把它当成一份代码库概览,或者是一个索引,指向 Claude 需要时可以找到更多信息的其他文件。

在 monorepo 中,每个团队的目录应该有自己的子目录 CLAUDE.md,这样团队只加载自己的规范。开发者还可以用 claudeMdExcludes 设置跳过自己从不碰的团队的文件。

对于必须在整个组织所有仓库中统一执行的标准,比如安全策略、合规要求,可以通过 MDM 或配置管理工具把 CLAUDE.md 集中部署到开发者的机器上,这种方式个人设置无法排除。

Rules

Rules 是 .claude/rules/ 目录下的 markdown 文件,用来给 Claude 设定特定的约束或规范。

没有路径限定的 Rules 跟 CLAUDE.md 行为一样:会话启动时加载,压缩后重新注入。这就有可能浪费 token,因为不管当前任务需不需要,它都在那儿。

路径限定的 Rules 就聪明多了,加一个 paths 字段就能控制加载时机。

比如,一个限定到 src/api/** 的规则,在你只改文档的时候完全不会加载。只有当 Claude 读取 src/api/ 目录下的文件时,它才会出现在上下文中。

写法长这样:

yaml

--- paths:

  • “src/api/**”
  • ”**/*.handler.ts”

All API handlers must validate input with Zod before processing.

Tip

**文件级的约束,比如「migration 只能追加不能修改」,最适合放在路径限定的 Rule 里。**当一条指令是跨多个目录(但又不是全部目录)的横切关注点时,路径限定的 Rule 比子目录 CLAUDE.md 更合适。

Skills

Skills 存放在 .claude/skills/ 目录下,由指令、脚本和资源组成的文件夹,Claude 会动态加载。每个 Skill 有一个 SKILL.md 文件,包含名称、描述和正文。

会话启动时,只有名称和描述会被加载。完整的正文只在 Claude 调用该 Skill 时才加载,可以通过斜杠命令(如 /code-review)触发,也可以通过任务自动匹配触发。

Skills 通过系统提示词触发

举个例子,/code-review 是一个内置 Skill,它会审查你当前的 diff 并输出发现,但不修改文件。这个 Skill 定义了一套固定的流程,所以每次调用时 Claude 都会走同样的结构化方法。

压缩时,Claude Code 会按共享预算重新注入已调用的 Skills。如果一个会话中调用了很多 Skills,最早调用的会先被丢弃。

Tip

流程化的指令,比如部署工作流、发布检查表、代码审查流程,应该放在 Skill 里,而不是 CLAUDE.md 里。

Claude Code 自带了一些 Skills,但你也可以自己写。

Subagents

Subagents 是 .claude/agents/ 目录下的 markdown 文件,定义了用于特定副任务的隔离助手。每个文件用 YAML frontmatter 声明名称、描述,加上可选的模型和工具访问权限,后面跟着正文,正文会成为该 Subagent 的系统提示词。

跟 Skills 类似,会话启动时只加载名称、描述和工具列表,正文不会自动加载。Claude 通过 Agent 工具调用它们,传入一个 prompt 字符串。

上下文窗口的内容加载时序

关键在于:Subagent 的正文不仅不会自动加载,它根本不会进入主对话

Subagent 在自己的全新上下文窗口中运行,返回给主会话的只有最终消息(通常是多个子任务的汇总结果)加上元数据。

这个模式还能继续扩展:Subagents 支持最多五层嵌套,动态工作流可以编排数十甚至上百个后台 Agent,而不需要你指定每个 Subagent 架构的细节。编排计划和中间结果存在脚本变量中,而非 Claude 的上下文窗口,所以扩展规模不会牺牲指令的精确度。

Skill vs Subagent 的核心区别

Tip

**隔离性是选择 Subagent 而非 Skill 的主要理由。**当一个副任务会产生大量你之后不会再引用的中间结果时,用 Subagent。当你希望流程在主线程中展开、方便你逐步观察和介入时,用 Skill。

Hooks

Hooks 是用户定义的命令、HTTP 端点或 LLM 提示词,通过在 Claude 生命周期的特定事件上触发来实现更确定性的行为控制,这些事件包括文件编辑、工具调用或会话启动等。

Claude Code 会话中 Hook 可以触发的事件

Hooks 在 settings.json、托管策略设置或 Skill/Agent 的 frontmatter 中注册。

Hooks 有几种类型:commandHTTPmcp_toolpromptagent。所有 Hooks 都是确定性触发的。前三种执行也是确定性的,而后两种(prompt 和 agent)则用 Claude 的判断力来决定输出,不过……触发条件本身依然是确定性的。

Hooks 的上下文成本几乎可以忽略,因为配置或指令在主上下文窗口之外。Harness 根据类型运行处理器(command、http、mcp_tool)或用独立窗口做模型调用(prompt、agent)。

部分 Hooks 的输出会保存到主上下文窗口。比如,阻断型 Hook 的标准错误输出会保存到上下文中,这样 Claude 能知道调用被拒绝的原因。

但大多数 Hooks 不会把输出保存到主窗口,除非配置中明确要求返回。比如你用 PreCompact 事件把聊天记录备份到另一个文件里……Claude 压根不会知道备份存到了哪儿。

这让 Hooks 和 CLAUDE.md、Rules、Skills 有本质区别。

Tip

**任何应该确定性发生的事情,都该用 Hook。**编辑后自动跑 linter、完成后发 Slack 通知、执行前拦截特定命令。一个 PreToolUse Hook 可以检查任何工具调用,用 exit code 2 来拒绝它。

它的上下文成本低,因为它是 harness 运行的代码,而不是加载到上下文里让 Claude 去读的指令。

Output Styles

Output Styles 是 .claude/output-styles/ 目录下的文件,会被注入到系统提示词中。它们永远不会被压缩,每次会话启动时都会加载,首次请求后缓存,上下文成本中等。

因为在系统提示词中,Output Styles 在目前讲的所有方法里指令遵循权重最高,应该谨慎使用。

修改 Output Style 会替换默认的 Output Style(除非你在样式的 frontmatter 中设置 keep-coding-instructions: true)。

在 Claude Code 中,这意味着会移除那些告诉 Claude 它在帮用户做软件工程任务的指令,还有其他关键的默认指令,比如:

如何控制改动范围

什么时候加代码注释、什么时候省略

遇到安全问题怎么办

验证习惯,比如完成前跑测试

默认情况下,自定义 Output Style 会把这些全丢掉。Claude Code 就从一个软件工程助手,变成了……一个通用助手。

Tip

**写自定义 Output Style 之前,先看看内置样式。**Proactive、Explanatory 和 Learning 覆盖了最常见的需求(自主性、教学模式、协作编程),不需要你自己维护一个样式文件。

append system prompt

跟修改 Output Styles 不同,append-system-prompt 是一个命令行参数。它只在原始系统提示词的基础上追加内容,不会修改 Claude 的角色,只是给默认角色加指令。

它在调用时传入,只对当次调用生效,不会作为文件跨会话持久化。

追加系统提示词的上下文成本相比其他方法可能要更高一些。它会增加输入 token,不过 prompt 缓存在首次请求后会降低这个成本。如果指令让 Claude 使用更冗长的风格,输出 token 也会跟着涨。

**追加系统提示词最适合添加特定的编码标准、输出格式或领域知识。**但要注意一点,追加的指令越多,Claude 对它们的遵循度就越低,尤其是当指令之间有冲突的时候。

实用避坑指南

如果你发现自己在做以下这些事,可能需要换个方式了:

在 CLAUDE.md 里写「每次 X 都做 Y」

如果某个行为应该可靠地发生,比如每次编辑后跑 prettier 或完成后发 Slack,用 settings.json 里的 Hook。

改用 Hooks,确定性执行

在 CLAUDE.md 里写「绝对不要做这个」

指令其实是错误的工具。在高压、长会话、模糊场景下,或者存在 prompt 注入时,模型有可能违反规则。真正的护栏必须是确定性的。

改用 Hooks + Permissions + Managed Settings

在 CLAUDE.md 里写 30 行的流程

CLAUDE.md 是给 Claude 全程持有的事实:构建命令、monorepo 布局、团队规范。部署手册或安全审查清单应该放在 .claude/skills/ 里。

改用 Skills,正文只在调用时加载

API 相关 Rule 没设路径限定

没有限定的 Rule 在机制上等同于把内容放进 CLAUDE.md:始终加载,始终消耗 token。

加 paths: 限定,无关工作时不加载

把个人偏好写进项目级 CLAUDE.md

其实所有基于文件的方法都有用户级的对应版本,个人偏好(比如「始终使用语义化 commit 消息」)应该用本地文件。

用本地用户级文件存个人偏好

开始使用

更多关于 Claude Code 的使用技巧和模式,从环境配置到跨并行会话扩展,可以参考 Claude Code 最佳实践文档。

等你配好了几样之后,还可以把 Skills、Subagents、Hooks、Output Styles 打包成一个 Plugin,在团队成员和项目之间共享一套完整的配置。

相关链接

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

Claude Code 文档:https://docs.anthropic.com/en/docs/claude-code


内容效果不满意?点此反馈

输入关键词开始搜索