规则
规则是存放在.claude/rules/目录下的Markdown文件,用于为Claude设定特定的约束或规范。
未限定作用域的规则类似于CLAUDE.md文件,会在每次会话开始时加载,并在上下文压缩时重新注入。这可能导致在任务无关时浪费令牌资源。
路径限定规则则通过添加paths字段,仅在相关路径下加载规则指令。
例如:限定于src/api/**路径的规则,在仅处理文档的会话中不会被加载,只有当Claude读取src/api/目录下的文件时才会生效。
示例配置如下:
paths:
- "src/api/**"
- "**/*.handler.ts"
所有API处理程序必须在处理前使用Zod进行输入验证。
提示:针对特定文件的约束(如“迁移文件只能追加”)适合放在路径限定的规则中。当指令涉及跨多个但非全部代码库部分的通用关注点时,优先使用路径限定规则而非嵌套的CLAUDE.md文件。
技能
技能存放于.claude/skills/目录,包含指令、脚本和资源的文件夹。每个技能有一个SKILL.md文件,包含名称、描述和主体内容。
会话开始时仅加载名称和描述,完整内容在技能被调用时加载,调用方式包括斜杠命令(如/code-review)或自动匹配任务。

例如,/code-review是内置技能,用于审查当前代码差异并报告结果,但不修改文件。该技能定义了操作流程,确保每次调用都遵循相同结构。
在上下文压缩时,Claude Code会重新注入已调用的技能,且总令牌预算有限,调用较早的技能会优先被移除。
提示:流程性指令(如部署流程、发布检查清单、审查流程)应放入技能中,而非CLAUDE.md。
Claude Code自带多种技能,也支持自定义技能。详见构建Claude技能完整指南。
子代理
子代理是存放于.claude/agents/目录的Markdown文件,定义针对特定辅助任务的独立助手。每个文件使用YAML frontmatter(名称、描述及可选模型和工具访问字段),主体内容作为子代理的系统提示。
子代理与技能类似,名称、描述和工具列表在会话开始时加载,但主体内容不会自动调用。Claude通过Agent工具调用子代理,并传入提示字符串。

子代理的主体内容不会进入主会话上下文,而是在独立的上下文窗口中运行,返回的仅是最终消息和元数据。
该模式支持最多五层嵌套,且动态工作流可协调数十至数百个后台代理,无需手动指定每个子代理细节。工作流计划和中间结果存储于脚本变量中,避免上下文窗口膨胀,同时保持指令准确性。
提示:当辅助任务如深度搜索、日志分析或依赖审计会产生大量中间结果且不需主会话引用时,使用子代理更合适。若希望流程在主线程中展开以便观察和控制每一步,则应使用技能。
钩子
钩子是用户定义的命令、HTTP端点或LLM提示,通过监听Claude生命周期中特定事件(如文件编辑、工具调用、会话开始)实现对Claude行为的确定性控制。

钩子在settings.json、托管策略设置或技能/代理frontmatter中注册。

钩子类型包括命令、HTTP、mcp_tool、提示和代理。前三种执行确定性操作,后两种则依赖Claude判断输出。
钩子配置或指令存放于主上下文窗口外,因而上下文成本较低。执行时,钩子处理程序或模型调用在独立窗口中运行。
部分钩子输出会保存至主上下文(例如阻塞钩子的标准错误信息),但大多数钩子输出不会,除非配置明确返回。
这使钩子与CLAUDE.md、规则和技能有本质区别。更多详情见如何配置钩子。
提示:钩子适合需要确定性执行的操作,如编辑后运行代码格式化、完成后发送Slack通知或阻止特定命令执行。PreToolUse钩子可检查工具调用并通过退出码2拒绝调用。
钩子上下文成本低,因为它们是由外部代码执行,而非加载到Claude上下文的指令。
输出样式
输出样式文件存放于.claude/output-styles/,用于注入系统提示指令。它们不会被压缩,每次会话开始时加载,首次请求后缓存,具有中等上下文成本。
由于位于系统提示中,输出样式的指令遵循权重最高,应谨慎使用。
更改输出样式会替换默认样式(除非在frontmatter中设置keep-coding-instructions: true)。
在Claude Code中,默认样式包含帮助用户完成软件工程任务的关键指令,如:
- 如何限定变更范围;
- 何时添加或省略代码注释;
- 安全问题处理;
- 验证习惯(如完成前运行测试)。
自定义输出样式默认会丢失这些指令,使Claude更像通用助手而非软件工程助手。
提示:在编写自定义输出样式前,建议先尝试内置样式。Proactive、Explanatory和Learning涵盖了最常见需求(自主性、教学模式、协作编码),无需维护样式文件。
追加系统提示
另一种修改指令的方法是使用append-system-prompt标志。与修改输出样式可能带来大幅且意外的行为变化不同,追加标志仅在原始系统提示基础上增加指令,不改变Claude的角色。
该标志在调用时传入,仅对当前调用生效,不会跨会话持久保存。
追加系统提示会增加输入令牌数,尽管提示缓存能在会话内减少此成本。若指令要求更详细或更长的输出,也会增加输出令牌数。
提示:追加系统提示适合添加特定编码标准、输出格式或领域知识。但随着指令数量增加,Claude对所有指令的严格遵守度可能下降,尤其当指令间存在冲突时。
Claude Code定制快速建议
如果你发现自己在以下场景中,建议考虑将指令放在更合适的位置:
-
“每次X都执行Y”写在CLAUDE.md中。 若行为需可靠执行(如每次编辑后运行格式化,完成后发送Slack通知),应使用
settings.json中的钩子。模型主动选择运行格式化与自动运行格式化不同。 -
“绝不做某事”写在CLAUDE.md中。 指令无法保证绝对执行,模型在压力大、长会话、模糊情境或提示注入时可能失效。真正的安全防护应使用钩子和权限。托管设置(Managed settings)更进一步,管理员部署且不可被本地配置覆盖,是实现组织范围确定性防护的唯一方式。
-
CLAUDE.md中写30行流程。 流程应放入技能中。CLAUDE.md适合存放Claude应始终记住的事实,如构建命令、monorepo结构、团队规范。部署手册或安全审查清单应放在
.claude/skills/,仅在调用时加载。 -
API专用规则未限定路径。 若规则仅适用于
src/api/**,应使用paths:限定,避免在无关工作时加载。无作用域规则等同于放在CLAUDE.md,始终加载且消耗令牌。 -
将个人偏好写入项目级CLAUDE.md。 所有基于文件的方法均有用户级对应文件,且每次Claude Code会话都会加载。个人偏好(如始终使用语义化提交信息)应放本地文件,项目级文件则用于团队范围且特定于代码库的偏好。
入门指南
更多Claude Code的使用技巧和模式,包括环境配置及并行会话扩展,详见我们的Claude Code最佳实践文档。
当你掌握了多种配置后,可以将技能、子代理、钩子、输出样式等打包成插件,方便团队或项目间共享统一配置。


