玩转通用智能体之Claude Code
第四章 CLAUDE.md:与智能怪兽的契约
用过一段时间Claude Code之后,我发现了一个问题:每次新开一个会话,我都要重新告诉它一些基本的事情。比如我用的是什么框架,我的代码风格是什么样的,有哪些注意事项。
这就像是你每天早上醒来,都得重新认识一遍你的室友,告诉他"我叫王小二,我喜欢喝豆浆,不要动我的牙刷"。很烦。
一
CLAUDE.md就是为了解决这个问题而生的。
这个文件放在你的项目根目录,或者你的home目录下的.claude/文件夹里。Claude Code每次启动的时候,都会自动读这个文件,把里面的内容当成背景知识。
你可以在里面写:
- 项目的概述
- 技术栈
- 代码风格约定
- 常用的命令
- 需要注意的事项
总之,任何你想让Claude Code知道的事情,都可以写在里面。
二
我写CLAUDE.md的经历,有点像写遗嘱。
一开始我不知道该写什么,就写了些基本的东西:项目是用什么语言写的,用的是什么框架,测试怎么跑。后来我发现,CLAUDE.md可以写得更详细一些。
比如我加了一条:"不要用any类型,哪怕再麻烦也要写正确的类型定义。"这是因为Claude Code有时候会偷懒,觉得"反正能跑就行"。但我是个有洁癖的人,看不顺眼any类型。
我还写了:"写注释的时候,解释一下为什么这样做,而不是做了什么。做什么看代码就知道了,为什么要做才需要说。"
这些约定,让Claude Code的输出更符合我的口味。
三
但CLAUDE.md也不是写得越多越好。
有个概念叫"context window",前面提过。这个东西有限,你写的太多,就会占掉Claude Code思考的空间。就像是你给一个人塞太多背景资料,他反而记不住重点。
所以CLAUDE.md要写得精炼。只写那些真正重要的,那些Claude Code自己猜不到的。代码能说明的事情,就不用写在CLAUDE.md里了。标准库怎么用,也不用写,它自己知道。
Anthropic官方给了一个清单:
应该写的:
- 特殊的bash命令
- 与默认不同的代码风格
- 测试方法
- 项目的惯例(分支命名、PR规范等)
- 架构上的决策
- 开发环境的特殊设置
- 容易踩的坑
不应该写的:
- 看代码就能知道的事情
- 标准语言规范
- 详细的API文档(贴链接就行)
- 经常变化的信息
- 每个文件的详细说明
- 显而易见的事情(比如"要写干净的代码")
四
我用/init命令生成的CLAUDE.md,后来被我改了很多遍。
每次我发现Claude Code做了什么让我不满意的事情,我就想想:这是不是应该在CLAUDE.md里提前说明?如果是,我就加进去。
慢慢地,这个文件变得越来越长,也越来越符合我的需求。
这就像调 radio,一开始全是杂音,你慢慢调,直到找到最清晰的那个频率。
五
CLAUDE.md是人与智能怪兽之间的契约。
你写下规则,它遵守规则。但这个契约不是一劳永逸的,你需要不断地调整它,完善它,让它更好地服务于你的工作。
记住一点:CLAUDE.md是为当前项目服务的。不同的项目,应该有不同版本的CLAUDE.md。你的个人偏好在个人设置里写,项目的特殊要求在项目里的CLAUDE.md里写。
这样,无论你在做什么项目,Claude Code都知道该怎么配合你。