Claude Code 七种配置方式 · 个人总结
Published in:2026-03-28 | category: AI编程

Claude Code 七种配置方式 · 个人总结

看了几篇解读 + 对照官方文档后的自己的理解 · 2026-07-03


先讲清楚:为什么分七种

以前我配置 Claude Code,基本就是往 CLAUDE.md 里堆东西。后来发现两件事:

  1. 上下文窗口是硬资源——塞越多,遵循度越差,长对话里尤其明显
  2. 「建议」和「必做」是两回事——写在 md 里的是概率性遵守,Hook 才是确定性执行

官方把配置拆成七种,本质上是在回答三个问题:什么时候进上下文、压缩后还在不在、占多少 token。选错位置,等于白写。

我自己的三条判断:

内容类型放哪
事实(技术栈、命令、目录)CLAUDE.md
流程(部署、审查、多步 SOP)Skills
必须发生 / 绝对不能发生Hooks + 权限

一张表看清七种方式

方式加载时机压缩后Token性质
根 CLAUDE.md会话开始,全程在缓存后重读,不丢高,每行都占建议
子目录 CLAUDE.md读到该目录文件时丢了,直到再碰该目录建议
Rules(无 paths)会话开始重新注入建议
Rules(有 paths)匹配路径被读时重新注入建议
Skills开始只加载名+描述;触发才加载全文已触发的按预算重注入,最早的先丢低→中建议
Subagents开始只加载名+描述+工具;Agent 工具调用时才跑主会话只收最终摘要主会话几乎零隔离执行
Hooks生命周期事件完全绕过压缩配置不进上下文确定性
Output Styles会话开始,进系统提示不压缩高,且权重最高替换/追加系统提示
Append PromptCLI 单次传入不压缩,仅当次中,首请求后缓存追加,单次

注:Output Styles 和 Append Prompt 算第七种里的两个变体,官方表格是分开列的。


1. CLAUDE.md — 项目常驻记忆

放什么:构建命令、目录结构、monorepo 布局、命名规范、团队约定——AI 需要始终知道的事实。

不放什么:部署 runbook、审查清单、30 行以上的步骤——这些该进 Skills。

两种加载行为(之前我搞混了)

类型行为
根目录会话开始就加载;会话内 memoized;压缩后会重新读取
子目录(如 app/api/CLAUDE.md只有 Claude 读到该目录下文件才加载;压缩后会丢,直到再次碰那个目录

子目录 CLAUDE.md 和 path-scoped Rules 的压缩行为一样——这点容易记错。

200 行:官方明确建议上限。不是玄学,是实测:行数多了,无关任务也带着跑,遵循度反而下降。我有过类似体验,把流程全塞 CLAUDE.md 后,长对话里 AI 开始「选择性失忆」。

索引思维:CLAUDE.md 当目录,不当百科全书。

1
2
3
前端规范 → docs/FRONTEND.md
部署 → /deploy 技能
安全策略 → .claude/rules/security.md(path-scoped)

Monorepo:各团队子目录放自己的 CLAUDE.md;用 claudeMdExcludes 跳过不碰的团队目录。组织级安全策略可以 MDM 下发,个人 settings 无法 exclude。

个人 vs 项目:个人偏好(semantic commit、语气)放 ~/.claude/ 用户级;团队约定放项目级。别把个人习惯写进团队 CLAUDE.md。

维护方式:当代码对待——有 owner、PR review、出问题时回溯是不是某条规则太长或被淹没了。


2. Rules — 路径级约束

.claude/rules/ 下的 Markdown,YAML frontmatter 里加 paths 做作用域:

1
2
3
4
5
6
---
paths:
- "src/api/**"
- "**/*.handler.ts"
---
所有 API handler 必须用 Zod 校验输入

无 paths 的 Rule = 另一个 CLAUDE.md:会话开始就加载,改文档也带着,浪费 token。写 Rule 如果不加 paths,和直接往 CLAUDE.md 堆没区别。

** vs 子目录 CLAUDE.md**:

  • 规范只跟某个模块目录走 → 子目录 CLAUDE.md
  • 规范跨目录(所有 *.test.ts、所有 migration 文件)→ path-scoped Rule

3. Skills — 按需加载的流程

.claude/skills/<name>/SKILL.md,渐进式加载:

  • 会话开始:只有 name + description(几乎不占 token)
  • 触发时:加载完整 body(/code-review 手动调,或 AI 根据 description 自动匹配)

Commands 已合并进 Skills.claude/commands/ 还能用但是 legacy;新东西一律放 .claude/skills/。Skills 多了 auto-invocation——AI 看 description 自己决定要不要调,Commands 时代没有这能力。

两种触发模式:

模式谁控制
用户调用 /skill-name
auto-invocationAI 读 description 自行匹配

auto-invocation 写 description 要精准——太宽会误触发,太窄永远调不到。

压缩预算:一次会话触发太多 Skill,压缩后按总预算重注入,最早触发的先被踢。所以大需求别在一个会话里 /grill + /deploy + /review 全跑一遍,分会话更稳。

我的用法:工作流里的 /grill-with-docs/to-prd/implement/review 本质上都是 Skills。Phase 0 规划、Phase 1 实现、Phase 2 审查各开新会话,也是为了避免 Skill 预算和上下文互相污染。


4. Subagents — 隔离干活的

.claude/agents/ 下每个文件一个独立助手,YAML frontmatter 配 name、description、model、tools 等。

和 Skills 的核心区别

SkillSubagent
执行位置主对话线程独立上下文窗口
中间过程全在主对话里不回主对话
自动触发可以不行,必须 Agent 工具显式调用
适合要看过程、随时干预只要结论、过程很长

调研 50 个文件找 Bug 根因、扫日志、依赖审计——中间几万 token 的中间结果,主对话不需要看,Subagent 合适。

支持嵌套最多 5 层;/batch 批量迁移本质就是 Subagent 编排。很多工具现在能自动创建 Subagent,但理解「隔离上下文」这个设计点,才知道什么时候该手动 spawn。

我的倾向:implement 阶段仍是一 Issue 一会话 + Skill,不用 Subagent——我要看 diff 过程。调研型、只关心结论的任务才考虑 Subagent。


5. Hooks — 唯一靠谱的「必做」

前面六种本质上都是给 AI 的建议。Hooks 是 harness 在生命周期事件上跑的确定性逻辑,跟模型想不想无关。

注册位置:.claude/settings.json(项目级)或 ~/.claude/settings.json(用户级),也可 managed policy(组织级,用户改不了)。

常见事件:PreToolUsePostToolUsePreCompactSessionStartStop 等。

Hook 类型要分清(之前容易误以为全是 shell 脚本):

类型是否确定性
command / HTTP / mcp_tool✅ 确定性
prompt / agent❌ 仍靠模型判断

经典用法:

  • PostToolUse:编辑后自动 Prettier / lint
  • PreToolUse:检测危险操作,exit code 2 拦截工具调用(拦截原因会进上下文让 AI 知道为啥被拒)
  • PreCompact:压缩前备份对话
  • Stop:跑测试脚本,不通过不让结束本轮(best practices 里提到的 unattended 验证闭环)

「永远不要做 X」:CLAUDE.md 写「别删 migration 文件」——长会话、压缩、文件里的 prompt injection 都可能破功。真防线是 PreToolUse Hook + Managed Settings 权限,组织级强制的 managed settings 用户本地改不掉。

这跟 fail-closed 设计一脉相承:别指望 AI 自觉,靠类型系统和权限兜底。


6. Output Styles — 慎用的高权重开关

.claude/output-styles/ 注入系统提示,不压缩,且官方说它是七种里指令遵循权重最高的。

自定义 Output Style 默认会替换 Claude Code 内置系统提示——改范围、注释习惯、安全处理、跑测试再收工这些默认行为会全没,变成「通用助手」而非「编程助手」。

frontmatter 里设 keep-coding-instructions: true 可以保留默认编程指令,自定义前先查内置三种:

  • Proactive — 更主动执行
  • Explanatory — 详细解释
  • Learning — 协作学习模式

我基本不用自定义 Output Style——改系统提示的副作用太大,不如 Skills 精准。


7. Append System Prompt — 临时微调

CLI --append-system-prompt追加不替换,仅当次 invocation 生效,不持久化到文件。

适合:临时调语气、输出格式、加一段领域知识。

限制:追加越多,每条遵循度越低,冲突时更明显。首请求后 prompt caching 会降 input cost,但 verbose 风格会增加 output token。

和 Output Style 对比:Append 是加法、单次;Output Style 是文件级、可能替换默认行为、权重更高。


决策树(我自己用的)

1
2
3
4
5
6
7
8
9
10
11
12
要写一条配置

├─ 全局事实,≤200 行 → 根 CLAUDE.md
├─ 某模块事实 → 子目录 CLAUDE.md
├─ 跨目录规范 → Rules + paths
├─ 无 paths 的 Rule → 别写,等于第二个 CLAUDE.md
├─ 多步流程 / SOP → Skills
├─ 调研只要结论 → Subagent
├─ 每次 X 后必做 Y → Hook(command 型)
├─ 绝对不能 X → PreToolUse Hook + 权限
├─ 改整体行为模式 → Output Style(先看内置)
└─ 临时调一次 → --append-system-prompt

不在「七法」里但经常一起出现的

能力和七法的关系
Plugins把 Skills + Subagents + Hooks + Output Styles 打包分享,不是第八种配置方式
MCP Servers扩展工具面(读 DB、调 API),和「怎么调教行为」是另一条线
Agent TeamsSubagent 的规模化编排,日常多数场景用不到
Permissions / Managed Settings和 Hook 配合做组织级硬边界

Cursor 侧有 .cursor/rules.cursor/skills 等平行概念,思路类似:常驻规则 vs 按需技能 vs 确定性 hook。跨工具迁移配置时,先对齐「加载时机」而不是文件名。


设计思想(对我自己的启发)

  1. 事实 / 流程分离 — CLAUDE.md 是内存常驻变量,Skills 是按需 import 的函数
  2. 作用域收窄 — path-scoped Rules、子目录 CLAUDE.md、Skill 渐进加载,都是在对抗 context bloat
  3. 概率 vs 确定 — 「建议 AI 跑 lint」和「编辑完必跑 lint」不是一回事;安全边界必须确定性
  4. 隔离 vs 透明 — Skill 透明可干预,Subagent 隔离保主对话干净;选型看你要控过程还是只要结果
  5. 配置也是代码 — CLAUDE.md 会膨胀、会过时、会互相打架;需要 owner 和定期 prune

搭自己的 Agent 系统(不限 Claude Code)也适用:把「常驻记忆」「按需 SOP」「硬 guardrail」「后台 worker」分开设计,比一个大 system prompt 靠谱得多。


和我现有工作流的对照

配置原则我现在的做法待改进
CLAUDE.md 只放事实Phase 0 用 /grill-with-docs 沉淀到 docs/检查各项目 CLAUDE.md 是否超标、有无流程混入
Skills 放流程/grill-with-docs/to-prd/to-issues/implement/reviewdescription 写好 auto-invocation 边界
一 Issue 一会话Phase 1 实现阶段避免 Skill 预算和上下文交叉污染
审查换 AIPhase 2 换厂商/换模型本质是 Subagent/新会话隔离,不是同会话里叠 Skill
Hooks 做确定性还没系统配format/lint、危险命令拦截、Stop 前跑测试
索引而非百科全书docs/ + CONTEXT.md 指针monorepo 可考虑 path-scoped Rules

一个具体计划

  • 各 repo CLAUDE.md 审计:流程性内容迁 Skills,超 200 行拆索引
  • 加 PostToolUse format hook,别写在 CLAUDE.md 里赌 AI 记得
  • 加 PreToolUse 拦截 rm -rf、删 migration、动生产配置等
  • /review Skill 的 description 写清楚触发条件,避免 implement 会话误调
  • 调研型任务试 Subagent,implement 仍保持主对话可见

最后想说的

七种方式看起来多,记一个核心就够:上下文窗口是最 scarce 的资源,确定性和概率性不要混用

我之前的误区是把所有东西往 CLAUDE.md 塞——省事,但长对话里 AI 反而更不听话。拆成 Facts / Flows / Guards 三层之后,token 省下来,遵循度反而上去。

Output Styles 和 Append Prompt 我日常几乎不用;Hooks 和 path-scoped Rules 是被低估的两块——前者管「必须发生」,后者管「别什么都加载」。Skills 是目前 ROI 最高的投入点,把工作流里重复说的话封装成 /xxx,比每次 copy prompt 强一个数量级。

Prev:
Claude Code 配置体系 · 学习笔记
Next:
全面预算管理核心笔记(基于华为财经实践)