把 Claude Code 用好,核心不在于写多花哨的提示词,而在于搞清楚一件事:你的指令什么时候被加载、占用多少上下文、会不会被压缩遗忘。Anthropic 在最新一期博客里系统梳理了七种自定义指令方式——从根目录的 CLAUDE.md 到一次性 CLI 标志,每一种都在"加载时机""压缩行为""token 成本"三个维度上做出了不同的取舍。选错方式,轻则上下文被无关内容塞满,重则关键规则在压缩后彻底消失。下面逐一拆解。
CLAUDE.md:最基础也最容易踩坑的指令载体
加载机制:根目录与子目录的双轨制
CLAUDE.md 是 Claude Code 的"项目宪法"。根目录的 CLAUDE.md 每次会话都会自动加载,相当于给 AI 立下的不可违背的家规;而子目录的 CLAUDE.md 则按需加载——只有当 Claude Code 在工作过程中实际触及该子目录的文件时,对应的规则才会被纳入上下文。这种设计的巧妙之处在于兼顾了全局一致性和局部灵活性,避免把所有规则一股脑塞进根目录导致 token 浪费。但也带来一个常见误区:开发者以为子目录的规则"一直都在",结果发现 Claude 处理另一个模块时根本没遵守那套规范。
适合放什么,不适合放什么
CLAUDE.md 的最佳拍档是构建命令和编码规范。比如"运行测试用 pnpm test""提交前必须跑 lint""所有 API 接口走 zod 校验"——这类指令稳定、不易变动、全局适用。不太建议把高度场景化的内容写进去,比如某个特定 bug 的排查步骤、某次重构的具体方案。原因是 CLAUDE.md 始终占着上下文席位,内容越多,留给实际对话的空间就越少。
规则系统:精准控制加载范围
无范围规则 vs 路径范围规则
规则是 CLAUDE.md 的精细化补充。无范围规则的行为模式和 CLAUDE.md 类似,始终在线;而路径范围规则则绑定了特定的 glob 模式,只在匹配的文件被操作时才触发。这意味着你可以在同一个项目里为前端代码、后端服务、数据库迁移脚本各自定义一套规则,彼此互不干扰。相比把规则一股脑写进 CLAUDE.md,这种方式对 token 预算友好得多。
规则系统的实际收益
路径范围规则最大的价值在于"按需出现"。设想一个全栈项目,如果把 React 组件规范、Go 服务规范、SQL 迁移规范全塞进 CLAUDE.md,Claude 写后端代码时,前端规范就是纯噪音。规则系统把上下文切割成精准的片段,每个场景只加载该场景需要的知识。这种"外科手术式"的上下文管理,对大型项目尤为关键。
技能、子智能体与钩子:三种按需调用的执行单元
技能:共享 token 预算的模块化能力
技能(Skills)是 Claude Code 的"插件市场"。和 CLAUDE.md 不同,技能不是在会话开始时加载,而是根据任务需要被调用。更关键的是,所有技能共享同一个 token 预算——当某个技能加载进来时,它消耗的上下文会从全局额度中扣除。所以技能适合封装那些"偶尔用一次但用时很重要"的能力,比如生成 API 文档、执行代码审查、运行安全扫描。技能设计得当,可以让 Claude 在需要时瞬间切换到专家模式。
子智能体:隔离上下文的并行执行者
子智能体是 Claude Code 处理复杂任务时的"分身术"。它在一个完全隔离的上下文窗口中运行,主线程看不到它的中间思考过程,只会收到它返回的最终消息。这种隔离设计带来两个显著好处:一是子智能体的探索过程不会污染主对话的上下文,二是多个子智能体可以并行处理不同子任务。子智能体特别适合那些"过程很重、结论很轻"的工作,比如在代码库中搜索某个模式、批量处理文件转换、跑大规模重构。
钩子:确定性自动化的执行开关
钩子是 Claude Code 里最容易被低估的功能。它挂在特定的生命周期事件上——比如文件被写入前、命令执行后、会话结束时——触发后可以自动运行任意 shell 命令。钩子最强大的特性是它绕过了上下文压缩:无论主对话被压缩了多少轮,钩子依然会忠实地在对应节点触发。这让它成为"确定性自动化"的理想载体:每次保存文件时自动跑 linter、每次会话结束前备份聊天记录、每次提交前检查敏感信息泄露。这些事情绝不能因为压缩而遗忘。
输出样式与附加系统提示:边缘但有用的补充手段
输出样式:永久注入的格式模板
输出样式的作用是把特定的格式化指令注入系统提示。它和 CLAUDE.md 的区别在于"永不压缩"——即使主对话的上下文被反复压缩,输出样式依然完整保留。这让它适合存放那些"无论如何都要遵守"的格式约定,比如代码注释风格、文档结构、PR 描述模板。代价是它始终占着上下文席位,所以不适合放长内容。
附加系统提示:一次性使用的临时指令
附加系统提示通过 CLI 标志传入,只在单次会话中有效。它不会写入任何配置文件,会话结束即消失。这种"用完即弃"的特性让它适合实验性场景:测试某种新指令的效果、在临时任务中追加特殊要求、或者为一次性脚本注入上下文。由于不持久化,它的试错成本几乎为零。
怎么选:一张决策清单
按稳定性选择载体
如果规则长期不变,用 CLAUDE.md 或输出样式;如果规则因场景而异,用路径范围规则;如果规则只在特定事件触发,用钩子;如果规则只用于一次任务,用附加系统提示。
按上下文成本选择载体
始终加载且永不压缩:CLAUDE.md、输出样式。按需加载且共享预算:技能、子智能体。精准匹配且只在对应场景出现:路径范围规则。事件驱动且绕开压缩:钩子。临时性单次使用:附加系统提示。
七种方式看似复杂,实际上构成了一套层次分明的指令管理体系。理解它们的加载时机和压缩行为,比记住具体语法更重要。当你能准确判断"这个需求该用哪种方式承载"时,Claude Code 才真正从"能聊"变成"好用"。

