
先问一句:你的 CLAUDE.md 有多少行了
80 行,150 行,还是已经过了 300 行?
我见过最夸张的一份接近 500 行,前端规范、数据库约定、测试要求、部署流程全堆在一起。问题不在内容本身,而在加载机制:每次启动 Claude Code,这个文件都会被原封不动地读进上下文。不管你这次是重构核心模块,还是只想改个文案。
CLAUDE.md 没有"只挑相关部分注入"这种逻辑。文件长度乘以调用频率,就是你真金白银付出去的 token。
全局注入:最容易被忽略的 AI 编程成本
做 Claude Code 中转接入这几年,我们在 ECC 后台见过很多团队的真实用量曲线。有个现象反复出现:明明只是改个按钮颜色,单次调用的 input token 却高得离谱。顺着账单往回查,问题几乎都指向同一个文件——CLAUDE.md。
大多数团队的 CLAUDE.md 不是一次写成的,是一点点长起来的。A 加了一段 React 组件命名规范,B 补了"数据库不许裸写 SQL",C 上周踩了 moment.js 的时区坑,顺手记了一笔。每个人都在加,没人删过。三个月后文件破两百行,内容横跨整条技术栈,而每一次调用都把这堆东西完整打包发出去。
按 Claude API 当前 input token 定价(约 $3/1M tokens)粗算一笔:
场景:10 人团队,200 行 CLAUDE.md ≈ 2000 tokens
单次加载:2000 tokens × $3/1M = $0.006
每人每天 50 次:$0.006 × 50 = $0.30/人/天
全团队每天:$0.30 × 10 = $3/天
每月(22 个工作日):$3 × 22 = $66/月
这 66 美元的唯一作用是"加载规范文件",其中大半内容在大多数对话里根本用不上。单看一次微不足道,按月累积就肉眼可见了。而且 CLAUDE.md 还在持续膨胀,这条曲线只会更陡。
长上下文的第二笔代价:指令遵循率下滑
钱只是表面问题。更隐蔽的损失在质量。
语言模型处理长上下文时,靠后的内容权重会被稀释。你写在第 200 行的"测试必须覆盖边界值",淹没在一大片前端样式规则里,实际影响力远不如第 10 行那条。
社区里有不少类似反馈:把 CLAUDE.md 精简之后,模型对指令的遵循率反而上去了。道理很朴素——信噪比高了,每条指令分到的权重就更大。这个规律在 Codex、GPT 系列上同样成立,长上下文里的"中间遗忘"是跨模型的通病,不是 Claude 独有。
所以这不只是省钱,是用好任何 AI Coding 工具都绕不开的基础工程问题。
Skills:让 Claude Code 按需加载能力
Anthropic 在 Claude Platform 里定义了 Agent Skills:模块化的能力包,每个 Skill 包含 instructions、metadata,以及可选的 scripts 和 templates。社区项目 awesome-claude-skills(ComposioHQ 维护)的说法更直白:一个可复用的指令包,教 AI agent 怎么处理某一类特定任务。结构很简单,每个 Skill 就是一个独立文件夹,核心是一份 SKILL.md。
两种方式的差别:
| 维度 | CLAUDE.md | Skills |
|---|---|---|
| 加载方式 | 每次全量注入 | 按任务类型挂载 |
| 适用场景 | 所有对话 | 特定类别任务 |
| 维护成本 | 集中、易膨胀 | 分散、边界清晰 |
| token 影响 | 全局计费 | 仅相关 Skill 计费 |
顺带说一句,Skills 解决的是"规范按需加载",MCP 解决的是"工具按需接入"。两者经常被搞混,但其实是互补的两层——规范用 Skills 管,能力用 MCP 扩。Skills 在 Claude Code 里的具体挂载触发机制,以官方文档为准。另外,豆包、ima 等产品也有叫"Skills"的功能,那是另一套体系,别混着用。
实操:拆 CLAUDE.md 的判断标准
打开你的 CLAUDE.md,对每一条规则只问一个问题:
改一个普通功能,Claude 需要知道这条吗?
答案是"需要"的,留在 CLAUDE.md 顶部的精简版里。答案是"不一定"或"只有特定任务才用得上"的,拆成独立 Skill。
举个真实例子。拆分前,所有东西都挤在一个文件:
## 代码规范
- 使用 TypeScript strict 模式
- 组件命名用 PascalCase
## 数据库操作
- 禁止裸写 SQL,统一用 Prisma ORM
- 查询必须加 .lean() 减少内存占用
## 测试规范
- 覆盖率不低于 80%
- 边界值必须单独写 test case
## 部署流程
- 合并前必须跑完 CI
- 禁止直接 push main 分支
拆完之后,CLAUDE.md 只留真正全局的几条:
## 核心约定
- 语言:TypeScript strict 模式
- 组件命名:PascalCase
- Git 分支:禁止直接 push main
数据库相关的挪进专门的 Skill,只在动数据库时挂载:
# skills/database/SKILL.md
## 数据库操作规范
- 统一使用 Prisma ORM,禁止裸写 SQL
- 查询链必须包含 .lean() 以降低内存占用
- 事务操作使用 prisma.$transaction
测试规范同理,写测试时才用得上:
# skills/testing/SKILL.md
## 测试规范
- 覆盖率目标:80%
- 边界值独立 test case
- Mock 外部依赖,不引入真实网络请求
文件治理:把 CLAUDE.md 当代码来管
CLAUDE.md 膨胀,本质是工程纪律问题,不是谁个人爱写文档。几条能直接执行的规矩:
- 行数硬上限。定一个数字,比如 80 行,新增一行就必须删一行或迁出去做 Skill。
- 变更走 PR review。改 CLAUDE.md 和改代码一样要审,它直接影响所有人的 token 账单。
- 季度清理。每个季度回看一次,把过期的历史边界案例清掉。
- onboarding 内容分离。项目背景、历史沿革放 README 或 wiki,别塞进 CLAUDE.md。
写在最后
CLAUDE.md 是 Claude Code 工作流里最容易被忽视的成本节点。全局加载意味着每多一行,都在给每次调用加税。
两个今天就能做的动作:打开 CLAUDE.md,用"改按钮颜色需要这条吗"过一遍;把筛出来的偶发规范整理成独立 Skill 文件夹。
做 AI 编程久了有个体会:成本优化最持久的办法从来不是换个更便宜的模型,而是让每次调用只带上真正必要的上下文。这件事 GPT、Codex 同样适用,但在 Claude Code 上,Skills 给了你一个特别顺手的抓手。
关于 Easy Claude Code
如果你想用上 Claude Code,可以试试我们 ECC(Easy Claude Code)的中转服务:免🪜、低成本、快速稳定,直连官方 Claude Code。企业定制化服务可详询。