CoreCode文档

用好 CoreCode

CLAUDE.md 怎么写

最后更新:2026 年 10 月 27 日

CLAUDE.md 是写给 Claude Code 的项目说明,每次会话开始时都会读一遍。写得好,Claude 少犯重复的错;写得长而乱,它每一轮都在浪费上下文。这一页按 Anthropic 的 官方说明 整理,加上它对花费的影响。

要点
  • CLAUDE.md 是上下文,不是强制配置:Claude 会参考它,但不保证每条都照做。必须拦住的操作要用 hook。
  • 用户级放 ~/.claude/CLAUDE.md,项目级放 ./CLAUDE.md 或 ./.claude/CLAUDE.md,个人的项目偏好放 ./CLAUDE.local.md 并加进 .gitignore。
  • 写具体、能检验的规则,每个文件控制在 200 行以内,用标题和列表组织。
  • 只对部分代码有效的规则放进 .claude/rules/,用 paths 限定范围;多步流程写成 skill。
  • 它每一轮都随请求发送;会话中途改了它,要等 /clear、/compact 或重启才生效。

CLAUDE.md 是什么

一个纯文本的 Markdown 文件,写着 Claude 在这个项目里应该知道的事:怎么构建和测试、代码约定、目录结构、“总是要这样做”的规则。Claude Code 每次启动会话都会读它,把它当作上下文。

它不是强制配置。规则写得越具体、越简洁,Claude 越稳定地遵守;但要“无论如何都不许做”的事,比如不许改某个目录,应该用 PreToolUse hook 拦截。

另外 Claude Code 还有一套“自动记忆”:你纠正过它的事,它会自己记下来,存在 ~/.claude/projects/<项目>/memory/。CLAUDE.md 是你写的规则,自动记忆是它学到的经验,两者每次会话都会加载。

放在哪

范围位置适合写什么
用户级~/.claude/CLAUDE.md你所有项目通用的偏好,比如回复语言、常用工具
项目级./CLAUDE.md 或 ./.claude/CLAUDE.md团队共享的规则:构建命令、代码规范、架构说明。提交进版本库
本地./CLAUDE.local.md只属于你的项目偏好,比如本地测试地址。加进 .gitignore

启动时,Claude Code 读取当前目录和它所有上级目录里的 CLAUDE.md,内容按从上到下的顺序拼在一起,越靠近当前目录的越后读。子目录里的 CLAUDE.md 不在启动时读,而是等 Claude 读写那个子目录里的文件时才加载。

从哪开始

在项目里运行 /init。Claude 会分析代码库,生成一份包含构建命令、测试方法和项目约定的 CLAUDE.md;已经有的话,它会提出修改建议而不是覆盖。然后再补上 Claude 自己发现不了的东西。

写什么

把它当作“不写下来就得每次重复解释”的地方。出现下面这些情况,就该往里加一条:

只写每次会话都该知道的事实。多步骤的操作流程写成 skill,需要时才加载;只对某一部分代码有效的规则,放进 .claude/rules。

怎么写才有效

写能检验的具体规则,不写笼统的要求:

不要写写成
代码格式要规范用 2 空格缩进
改完要测试提交前运行 npm test
文件要组织好API 处理函数放在 src/api/handlers/

一个简短的示例:

# 项目说明

## 命令
- 安装依赖:pnpm install(不要用 npm)
- 运行测试:pnpm test,提交前必须通过
- 本地启动:pnpm dev,端口 3000

## 约定
- TypeScript 严格模式,不用 any
- API 处理函数放在 src/api/handlers/,每个文件一个路由
- 数据库变更只通过 prisma migrate,不手改表结构

## 回复
- 用中文回复,代码注释用英文

导入其他文件

用 @路径 把别的文件导入进来,比如 详见 @README 和 @docs/git-instructions.md。相对路径以 CLAUDE.md 所在位置为准,导入可以嵌套,最多四层。写在反引号里的 `@README` 不会被导入。

导入只是让文件更好组织,不会减少上下文开销:被导入的内容同样每次都会加载。第一次遇到导入项目目录以外的文件时,Claude Code 会弹窗请你确认。

用 .claude/rules 按范围拆分

项目大了,可以在 .claude/rules/ 下按主题拆成多个 .md 文件,比如 testing.md、api-design.md。没有 paths 的规则和 CLAUDE.md 一样在启动时加载;加上 paths 的只在 Claude 处理匹配的文件时才加载:

---
paths:
  - "src/api/**/*.ts"
---
# API 规则
- 所有接口都要做输入校验
- 错误统一用 ApiError 返回

CLAUDE.md 里某一段已经长成多步流程的,可以改写成 skill,用到时才加载,见 Skills 使用教程。

已经有 AGENTS.md 怎么办

Claude Code v2.1.277 起可以直接读 AGENTS.md:项目里没有 CLAUDE.md 时,它读 AGENTS.md;有 CLAUDE.md 时只读 CLAUDE.md。想让几个编程工具共用一份说明,在 CLAUDE.md 里写一行 @AGENTS.md 导入即可。

和花费、缓存的关系

更多省钱做法见 省钱指南。

怎么确认它被读到了

常见问题

CLAUDE.md 写多长合适?

官方建议每个文件控制在 200 行以内。只对部分代码有效的规则挪进带 paths 的 .claude/rules/,多步流程写成 skill。

为什么 Claude 不照着 CLAUDE.md 做?

常见原因是规则太笼统、文件太长、规则之间互相矛盾,或者会话中途改的内容还没生效。用 /context 确认文件被加载了,把规则改得具体可检验;必须执行的约束用 hook。

改了 CLAUDE.md 为什么没生效?

当前会话不会重新读它。运行 /clear、/compact 或重启 Claude Code 后才会读到新内容。

CLAUDE.md 和 AGENTS.md 能同时用吗?

有 CLAUDE.md 时默认只读 CLAUDE.md。在 CLAUDE.md 里加一行 @AGENTS.md,就能两边共用一份说明。