CLAUDE.md:与智能怪兽的契约

2 阅读3分钟

玩转通用智能体之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都知道该怎么配合你。