我的 CLAUDE.md 里都放了什么

最讽刺的事情是什么? 你一边抱怨"每次新会话都要重新跟 Claude 解释项目背景", 一边项目根目录里根本没有 CLAUDE.md

别笑, 我之前就是这个状态。

后来发现有个偷懒的办法——直接跑 /init。Claude 会自动分析你的项目结构、检测构建工具和测试框架, 生成一份初始的 CLAUDE.md。如果已经有 CLAUDE.md 了, /init 不会覆盖, 而是建议改进。

CLAUDE.md 的本质

Claude Code 启动的时候会自动读这个文件, 把它当作用来理解项目的起点。你项目怎么跑测试、目录结构是什么、有哪些不能碰的约定——写进去, 它自己就知道了。

第一类: 命令

最常见的用法——把命令写进去, 省得每次说:

## Commands
- 测试: npm test
- 构建: npm run build
- 单文件测试: npx jest src/xxx.test.ts
- Lint: npx eslint src/

有了这些, Claude 自己知道该跑什么, 不用你再说"跑一下测试"。

第二类: 架构约定

有些东西 Claude 看代码看不出来:

## Architecture
- 状态管理用 Zustand, 不用 Redux
- API 请求统一走 src/api/ 下的封装
- 不要直接改 src/core/ 里的文件, 只能通过扩展接口

第三类: 团队规范

Linter 管不了, 但 review 的时候一定会被说的:

## 规范
- 组件文件用 PascalCase 命名
- 每个组件都要有单元测试
- 不许硬编码字符串, 所有文案走 i18n

不该放什么

CLAUDE.md 最常见的毛病就是太长。当真正有用的指令被大量废话淹没, 模型会把它们一视同仁, 约等于没有。

  • 个性设定——“你是一个资深软件工程师"这种东西系统 prompt 已经覆盖了
  • 所有人都知道的通用规范
  • 猜测性的规则——等 Claude 真犯错了再加, 不要预判

我的做法是: 刚开始只写最必要的几行, 用一段时间, 等 Claude 在某个地方犯了错, 加一条规则进去。犯错一次加一条, 这样 CLAUDE.md 里全是"有用的"规则, 没有一条是废话。

另外我自己的经验是, CLAUDE.md 不要超过 200 行。太长的话 Claude 会忽略其中一半。如果你确实有大量规则要写, 拆分方案:

  • .claude/rules/ 目录: 按路径范围拆。比如 rules/api-design.md 设定 paths: ["src/api/**/*.ts"]。Claude 只有读到对应路径的文件时才会加载这个规则, 不占用全局上下文
  • Skill 文件: 不常用的参考材料放到 skill 里, 按需加载, 不在每次会话里都占用上下文
  • @ 导入: CLAUDE.md 可以引用其他文件, 用 @README.md@docs/guide.md 的方式导入

还有两个文件也是 CLAUDE.md

CLAUDE.local.md

项目根目录下还可以放一个 CLAUDE.local.md, 这是你个人的项目配置, 不提交到 git。适合放你自己的沙箱地址、测试账号这类东西。

用户级 CLAUDE.md

~/.claude/CLAUDE.md 是对所有项目生效的个人偏好。适合放你个人的代码风格偏好、通用工作流规则。

再进一步: 权限管理

除了 CLAUDE.md, Claude Code 还有 settings.json 来控制 agent 能做什么。

三种权限规则:

  • allow: 直接做, 不用问我
  • ask: 每次要我做主
  • deny: 禁止

我自己的配置是 deny 一切, 然后慢慢放开:

{
  "permissions": {
    "default": "deny",
    "allow": ["read", "edit", "search"],
    "deny": ["run:curl", "run:wget"]
  }
}

默认禁止网络请求推荐大家都做——你不会希望 Claude 自己去下载不明来路的包来装。

Hook 是更细粒度的控制, 可以在 agent 的每个操作前后触发: 允许、警告、或者直接拦。适合对安全性要求高的场景。

Auto Memory: Claude 自己记笔记

CLAUDE.md 是你手写的规则。Claude Code 还有一个叫 Auto Memory 的功能——Claude 自己会记笔记。

你纠正它的东西、你项目里的构建命令、调试经验——Claude 会自己写到 ~/.claude/projects/<项目>/memory/ 里, 下次会话自动读回来。你什么都不用写。

运行 /memory 可以查看它记了什么, 也可以手动编辑或删除。文件就是普通的 markdown, 随便改。

文章链接:

/zh/archive/claude-code-configuration/

# 相关文章推荐