Claude Code配置避坑指南:CLAUDE.md、钩子、MCP、子代理、代理团队到底怎么搭

Claude Code越配越翻车,九层配置到底谁在拖后腿!

打开终端之前,先想清楚一件事:你是在用AI,还是在被AI的配置玩!

Claude Code这套东西,九篇文章讲完了一整套配置体系——模型、上下文、钩子、MCP服务器、技能、子代理、代理团队。单个拎出来每个都讲得清清楚楚,但真到了实际跑一个需求的时候,这些东西是叠在一起运作的。问题从来不是“你懂不懂每个按钮是干什么的”,而是“它们凑在一起的时候,到底谁在拖后腿”。



九层配置叠起来,谁在悄悄吃你的钱

先把这个系统的全貌摊开看一眼。

CLAUDE.md管记忆,模型开关管质量和价格,钩子管强制动作,MCP服务器管外部工具,技能管领域知识,子代理管隔离任务,代理团队管多实例协作。每一层都影响其他层。CLAUDE.md写太长了,重要规则被废话淹没。MCP服务器挂了50个工具,每次调用都在烧预算。子代理返回一篇文章那么长的报告,省下来的上下文一口气全吐回去。代理团队更狠——多个实例之间共享状态,协调本身就在消耗上下文。

这不是单个设置的问题。这是系统性问题。

Claude Code默认有200K token的上下文窗口,可以通过特定模型扩展到1M token。听起来很大对吧?但CLAUDE.md每一行都在吃token,不管当前任务用不用得上。MCP服务器的工具定义也在吃。读一个文件可能就是几十K。对话轮数多了又是几万。这些东西叠在一起,200K也好1M也好,说满就满。

上下文满了会怎样?Claude开始忘事,开始不确定之前确认过的细节,开始重复说过的话。然后自动压缩启动,把历史对话压成摘要。压缩本身不免费,而且压缩之后你失去了推理的线索。

这不是技术故障。这是你把上下文当作无限资源在用的必然结果。



CLAUDE.md写长了,Claude就看不见重点了

/init命令能根据代码库结构生成一个CLAUDE.md的初稿——构建系统、测试框架、常见模式都能扫出来。这个初稿大概60%到70%是对的。剩下的30%是工具猜不出来的东西:部署惯例、什么绝对不能做、哪些目录碰不得、哪些测试跑起来太慢早期迭代得跳过。这些得手写。

但手写也有手写的问题。

官方建议CLAUDE.md控制在200行以内。实际干过的团队说最好压到80行以内。道理很简单:CLAUDE.md的每一行都在吃token,不管当前任务用不用得上。写500行规则等于每次对话先交500行的入场费。

那该写什么?

Claude从代码里看不出来的东西才值得写。不是“写整洁代码”这种废话——这种指令Claude本来就照着做,写了等于白写。“永远不要直接提交到main分支”才是有牙齿的约束。架构决策为什么这么拆分、扩展点在哪、哪个遗留文件总被人误改、哪个目录正在迁移不应该加新逻辑。这些值得写。

风格偏好不值得写。语言基础不值得写。通用好习惯不值得写。这些吃token但不产生价值。

一个判断标准:同一个纠正你在对话里跟Claude说了超过两次,就放进CLAUDE.md。没说过两次的别放。



钩子才是那个说到做到的东西

CLAUDE.md是建议,钩子是强制执行。

这个区别值得再念一遍。CLAUDE.md可以被忽略,上下文可以被压缩,模型可以自己推理出一条绕过规则的路。钩子不管这些,该跑就跑。

三个最管用的事件:

PreToolUse在工具执行前触发。不想让Claude往migrations目录里写东西?在这里拦。不想让rm -rf随便跑?在这里拦。

PostToolUse在工具执行后触发。改完TypeScript文件自动跑lint。改完测试文件自动跑测试。

Stop在Claude结束一轮响应时触发。编译检查、构建验证、写日志。

有个坑值得单独说:每次文件写入都跑格式化钩子,长会话里可能烧掉160K token。如果你的格式化工具慢,或者会话里很多小修改,别每次写都跑,会话之间跑一次就够了。



MCP服务器接得越多,上下文死得越快

每个MCP服务器都把它的工具列表塞进Claude的上下文。GitHub二十个工具,Sentry三十个,数据库十五个——六十五个以上工具在你还什么都没输入的时候就已经在吃token了。

正确的做法:只接当前会话真正需要的东西。做功能实现要GitHub和数据库,不需要Sentry、分析平台和Slack同时在线。

项目专用的服务器放在项目根目录的.mcp.json里,别放全局。到处都需要的东西才放~/.claude/mcp.json。这个区分能防止项目专用工具污染不相关的会话。

CI或自动化管道里跑Claude的时候,用--mcp-config加--strict-mcp-config把服务器钉死。自动化要确定性,不要跟着用户配置漂移。



子代理是省上下文的,不是给你写作文用的

子代理在自己的上下文窗口里干活,干完只把结论交回来。主会话看不到它遍历文件的过程,只看到结果摘要。

但有个致命细节:子代理返回什么,什么东西就进入主上下文。返回6000字的报告,省下来的上下文一次性全部吐回去。

所以输出格式不是可选项。定义子代理的时候就要规定清楚:最多返回多少项、必须包含哪些字段、代码片段能不能带。

内置的Explore子代理专门做代码库搜索和分析,只读不写。Claude遇到需要搜索或理解代码库但不改代码的任务时会自动用它。探索结果被挡在主对话上下文之外。

2026年6月v2.1.172上线后,子代理可以嵌套生成子代理了。之前这是硬禁止的。嵌套带来了新的复杂度——每一层都在消耗独立的上下文,但最终汇总到主会话时仍然只有摘要。



代理团队:多个Claude一起干活,谁说了算

代理团队让多个Claude Code实例像一个团队那样协作。一个会话当主管,分配任务、协调工作、汇总结果。队员独立干活,各有各的上下文窗口,队员之间可以直接互相发消息。

和子代理的区别:

子代理只向主代理汇报,代理团队的队员互相沟通。子代理适合“干完把结果给我”的任务,代理团队适合需要讨论和协作的复杂工作。子代理的token成本更低,代理团队的token成本更高——每个队员都是一个独立的Claude实例。

代理团队目前还是实验性功能,默认关闭。需要在settings.json或环境变量里手动开启。

官方点名的四个最强用例:研究和审查——几个队员同时查一个问题的不同侧面然后互相质疑对方的发现;新模块开发——每个队员独占一块互不干扰的部分;竞争假设调试——并行测试不同理论,互相证伪;跨层改动——前端、后端、测试各派一个队员盯着。

一句话:单会话有“记忆装不下、活只能排队干”两堵墙,代理团队让你从一个人硬扛变成工头带一队人并行干。



上下文快满的时候,信号比你想的更早

几个信号告诉你该干预了:

Claude开始对之前很确定的细节表示不确定。回答里对之前做过的决策引用错误或者前后矛盾。token用量接近压缩区间。

干预手段按成本排序:

/clear在不同任务之间清空上下文。别把调试会话的上下文带到功能实现里去。

--continue恢复之前的会话,不用从头重建上下文。

手动压缩提示:“在我们继续之前,总结一下到目前为止关于认证模块我们确定了什么。”这会在活跃上下文里建立一个干净的参考点。

会话重启加一份精炼的规格说明。如果会话确实已经废了,把已经做的决策保存下来,关掉会话,用一份编码了这些决策的规格说明重新开始。一份500 token的规格说明比一份50K token的废掉的上文有用得多。

Claude Code 2026年的上下文编辑功能会自动清理过时的工具调用输出,同时保留对话流。这处理了日常积累,但不能替代/clear。



一个完整的工作会话长什么样

项目初始化,做一次:

CLAUDE.md写架构概览、约束条件、“完成”的定义。.claude/agents/里放code-reviewer、db-researcher、dependency-checker。.claude/settings.json里配钩子——PostToolUse在TypeScript文件写入后跑lint,PreToolUse阻止往migrations/目录写东西。.mcp.json里只挂这个项目需要的GitHub和PostgreSQL MCP服务器。

会话开始:

“我要实现用户通知偏好功能。规格在docs/specs/notifications.md。先出计划,别写代码。”

研究阶段:交给db-researcher子代理去查数据库结构影响。它返回结构化摘要——受影响的表、建议的改动、迁移注意事项。主会话看到400 token,而不是8000 token的数据库遍历。

实现阶段:显式设置模型和effort级别。写数据库迁移脚本,PreToolUse钩子在写入migrations/之前拦截确认,PostToolUse钩子在TypeScript服务文件上跑lint。

审查阶段:调用code-reviewer子代理,限定范围——改动的文件、最多10条发现。审查结果以结构化列表返回。

验证:跑测试套件。逐一核对规格里的验收标准是否达成,不只是“测试通过了”。

收尾:/clear清空,再干下一件事。

这不是什么复杂的工作流。这是一个有意识的工作流。



一个还没答案的问题

Claude Code的上下文窗口号称1M token。但上下文越长性能越下降——注意力被分散到更多token上,老内容开始干扰当前任务。这个现象叫“上下文腐烂”。

那么问题来了:1M的窗口,实际可用的是多少?什么时候开始腐烂?腐烂的速度是线性的还是指数级的?

官方文档说“接近窗口末尾时自动压缩”。但“接近”是多近?80%?90%?自动压缩触发的阈值默认是83%左右。也就是说会话可以长到830K token才压缩。

830K token里有多少是有用的信息,有多少是“注意力被分散到更多token上”的噪音?这个问题没人给出精确答案。但每一个经历过长会话退化的人都知道答案存在——只是还没有被量化出来。