掌控 Claude Code:CLAUDE.md、Skills、Hooks、Subagents… 七种指令方式,一张表说清楚
公众号名称:TriAi
作者名称:Anthropic
发布时间:2026-06-19 11:27
原文链接:https://claude.com/blog/steering-claude-code-skills-hooks-rules-subagents-and-more
TriAI · Claude
很多人用 Claude Code 时,习惯把所有规则一股脑写进 CLAUDE.md——结果文件越堆越大,每次会话都在烧 token,真正关键的指令反而常常不被遵守。
其实 Claude 给了你七种「下指令」的方式,区别就三点:什么时候加载进上下文、长会话压缩后还在不在、说话的分量有多重。选对位置,指令才能既省 token 又真正生效。
先说结论 • 代码库事实、团队规范 → CLAUDE.md • 局部约束(只管某几个目录)→ 路径限定 Rules • 可复用的操作流程(部署、发布、审查)→ Skills • 要隔离运行、只返回结果的重活 → Subagents • 必须百分百发生、不能靠模型「想起来」→ Hooks • 大幅改变 Claude 角色定位 → Output styles / 追加系统提示
七种方式核心对比,后面逐一拆解:
CLAUDE.md(根目录) 加载时机:会话启动,全程保留 | 开销:高 适合:构建命令、目录结构、编码规范、团队规范
CLAUDE.md(子目录) 加载时机:读取对应目录文件时才加载 | 开销:低 适合:特定子目录的规范
Rules(规则) 加载时机:用户级始终加载;路径限定时按需加载 | 开销:中 适合:特定约束,如 API 处理器必须用 Zod 验证
Skills(技能) 加载时机:名称描述启动时加载,调用时才加正文 | 开销:低 适合:可复用流程,如部署、发布清单
Subagents(子代理) 加载时机:名称描述启动时加载,正文通过 Agent 工具调用 | 开销:低 适合:并行任务、隔离运行的重活
Hooks(钩子) 加载时机:生命周期事件触发,完全绕过压缩 | 开销:低 适合:必须确定性执行的自动化
Output styles / 追加系统提示 加载时机:会话启动注入系统提示,永不压缩 | 开销:高 适合:大幅改变 Claude 角色定位
一、CLAUDE.md 文件
CLAUDE.md 是项目根目录下的 Markdown 文件,会话启动时加载,全程保留在上下文里。构建命令、目录结构、Monorepo 架构、编码规范、团队规范——这些「全程都要知道的事实」放在这里最合适。
有两种类型,加载方式不同:
• **根目录(始终加载):**共享仓库里的或个人本地偏好文件,会话启动就读进来,压缩后也会重新读取,不会丢。
• **子目录(按需加载):**比如 app/api/CLAUDE.md 只在 Claude 读到 app/api 下的文件时才加载,压缩后不触碰就消失。

在共享仓库里,CLAUDE.md 很容易变成「人人追加、没人删除」的大杂烩。每行都会加载到每个工程师的每个会话——无论当前任务用不用得到,token 都在烧。随着文件变大,把团队特定的规范推入路径限定 Rules、把流程推入 Skills,让它们只在相关时才出现。
建议控制在 200 行以内,设一个文件负责人,像审代码一样审它的改动。把它当作「给 Claude 的代码库导图」,或者一个索引,指向真正需要时再深读的文件。
二、Rules(规则)
Rules 是 .claude/rules/ 目录下的 Markdown 文件,给 Claude 特定的约束或规范。
没有限定路径的 Rules 行为跟根目录 CLAUDE.md 一样——始终加载,始终占 token。路径限定 Rules 才是精髓:加一个 paths 字段,只在 Claude 读到匹配目录下的文件时才加载进来。
---
paths:
- "src/api/**"
- "**/*.handler.ts"
---
所有 API 处理器必须在处理之前使用 Zod 验证输入。
「迁移文件只能追加」这类约束,最适合放成带
paths的 Rule。跨切面的约束、散落在代码库多处的规范,选路径限定 Rule,而不是在到处嵌套 CLAUDE.md。
三、Skills(技能)
Skills 放在 .claude/skills/,每个 Skill 是一个文件夹,有 SKILL.md、配套脚本和资源。
会话启动时只加载名称和描述;Claude 通过斜杠命令(如 /code-review)或自动匹配任务触发后,才把正文加载进来——用不到就不占 token。压缩时,所有调用过的 Skills 在共享预算内重新注入,最旧的先丢。

部署流程、发布清单、代码审查步骤……凡是流程化的东西,放 Skill,别放 CLAUDE.md。Claude Code 自带了一批 Skills,你也可以写自定义的。
四、Subagents(子代理)
Subagents 放在 .claude/agents/,是带 YAML 前置参数(名称、描述,以及可选的模型和工具权限)的 Markdown 文件,正文就是子代理的系统提示。
子代理正文从不进入父对话,在自己独立的上下文窗口里跑,最终只有一条汇报消息回到主会话。动态工作流可以协调数十到数百个后台子代理,中间过程不污染你的主会话。

什么时候用 Subagents 而不是 Skills?
• 深度搜索、日志分析、依赖审计——中间过程你不想看到、也不需要干预 → 用 Subagents,结果汇报即可。
• 流程每一步你都想跟着看、随时调整方向 → 用 Skills,在主线程里走。
五、Hooks(钩子)
Hooks 是注册在 settings.json 里的用户自定义命令、HTTP 端点或 LLM 提示,在 Claude 生命周期的特定事件上确定性触发——文件编辑、工具调用、会话启动……都可以挂。

有五种类型:command、HTTP、mcp_tool、prompt、agent。前三种纯确定性执行;后两种会用 Claude 的判断来决定输出。Hook 的配置住在主上下文窗口外面,上下文开销极低,完全绕过压缩。
编辑后跑 linter、完成时推 Slack、保存前拦特定命令——这些「必须发生」的事,交给 Hook,别写进 CLAUDE.md 靠模型记。
PreToolUseHook 能检查任何工具调用,退出码 2 直接拒绝。
六、Output styles(输出样式)
Output styles 放在 .claude/output-styles/,直接注入系统提示,永不被压缩,在所有方法里指令遵循权重最高——谨慎用。
**注意:**自定义 Output style 默认会替换掉 Claude Code 的默认系统提示,连「如何限定改动范围」「何时写注释」「安全顾虑怎么处理」这些内置指令也会一起消失,Claude Code 会退化为通用助手。设置 keep-coding-instructions: true 可以保留原有指令。
动手之前先看看内置样式:Proactive(主动)、Explanatory(说明)、Learning(学习),覆盖了最常见的场景,不用自己维护文件。
七、追加系统提示(Append system prompt)
append-system-prompt 是调用时的 CLI 参数,只往原有系统提示后面追加内容,不替换 Claude 的角色定位,只适用于当次调用,不跨会话保存。比动 Output style 文件副作用小得多。
适合一次性追加特定编码标准、领域知识或输出格式要求。有一点要注意:塞进去的指令越多,遵循度越低,尤其是相互矛盾时。精简比堆砌有效。
几个常见的「放错地方」
• 在 CLAUDE.md 里写「每次……都要……」 → 交给 Hook。模型「想起来」跑格式化,和保存时「自动」跑,是两码事。
• 在 CLAUDE.md 里写「绝对不能……」 → 硬禁令别用文字。长会话、模糊语境、提示注入,都可能让模型破例。红线靠 Hook 或权限来卡,PreToolUse 能直接拦下并拒绝。要组织级别的硬控,用 Managed settings——管理员部署,个人设置无法覆盖。
• 把 30 行的部署步骤写进 CLAUDE.md → 流程归 Skills。CLAUDE.md 只放事实,.claude/skills/ 里的正文只在调用时才加载。
• 只管 src/api 的规则不加 paths → 不加就等于放进 CLAUDE.md:始终加载,始终烧 token。
• 个人偏好写进项目级 CLAUDE.md → 个人习惯(比如始终用语义化 commit)放用户级本地文件,项目级只放团队共用的规范。
以下是 Claude 官方 Blog,喜欢原汁原味的朋友可以阅读:
https://claude.com/blog/steering-claude-code-skills-hooks-rules-subagents-and-more
本文跟着 Anthropic 官方思路,梳理了 Claude Code 七种指令方式各自的定位与取舍。想一起学 Claude、看更多 AI 实践笔记,欢迎关注 TriAI。有云资源 / AI 资源需求,也可以加微信:TriAI_
TriAI
记录AI成长故事
本文由 TriAI 排版发布
欢迎转发给同样在学 Claude / AI 的朋友
内容效果不满意?点此反馈
