Claude Code 教程丨CLAUDE.md、自动记忆与项目规则

图片

社区里有人把项目里的协作规则,直接写成了 Claude 的“八荣八耻”。

开头不是项目介绍,也不是技术栈,而是一整组行为约束。原网页里有这样两条:

1. 以暗猜接口为耻, 以认真查阅为荣。
2. 以模糊执行为耻, 以寻求确认为荣。

这当然不是官方模板,但它一下子把一件事说透了。
CLAUDE.md 不是装饰文件,也不是项目 README 的另一份副本。它真正的作用,是把 Claude 每次进入项目就该知道的规则提前写清楚。

命令会用了,项目也能跑起来了,接下来真正拉开差距的,往往就是这一步。
有的项目里,Claude 一开工就知道该怎么找文件、该跑什么命令、哪些目录不能碰;有的项目里,Claude 每次都像第一次进仓库。差别往往不在模型,而在项目规则有没有提前写清楚。

社区公开的 CLAUDE.md 页面里,直接把协作规则写成了“八荣八耻”。
社区公开的 CLAUDE.md 页面里,直接把协作规则写成了“八荣八耻”。

1. CLAUDE.md 到底是什么

CLAUDE.md 是一个 Markdown 文件。Claude Code 会在会话开始时读取它,把里面的内容当成长期上下文。

它适合放三类信息:

  • • 这个项目是做什么的
  • • 这个项目平时怎么启动、测试、构建
  • • 这个项目有哪些固定约定,哪些事情不要做

这类信息有一个共同点:每次开新会话都应该知道。
如果每次都要重新说一遍,或者只靠聊天历史来维持,Claude 的表现就会忽好忽坏。

官方文档里也把 CLAUDE.md 定义成“项目特定说明、约定和上下文”的入口。它不是强制配置文件,而是高优先级上下文,所以写法越具体、越短、越清楚,Claude 遵守得越稳定。


2. CLAUDE.md、AGENTS.md、GEMINI.md,名字不同,作用类似

CLAUDE.md 不是一个孤例。很多 agent 工具都会给自己留一个“项目规则文件”的位置。

  • • 在 Claude Code 里,常见的是 CLAUDE.md
  • • 在 Codex、OpenCode 这类 agent 工作流里,很多人会写 AGENTS.md
  • • 在 Gemini 相关工具链里,也能看到 GEMINI.md

名字不同,作用其实很像:
都是把“这个项目里的固定规则、做事方式、禁止事项、常用命令”提前写下来,让 agent 进入项目时先读到。

这里要分清三点:

  • • 作用类似
  • • 文件名不一定一样
  • • 加载机制也不一定完全一样

所以更准确的说法是:不同 agent 生态里,大家都在用类似的办法解决同一个问题,也就是“让工具先理解项目规则,再开始干活”。


3. CLAUDE.md 里到底该写什么

如果只写“项目介绍”“启动命令”“代码规范”,其实还不够。

真正好用的 CLAUDE.md,通常要把下面 8 类信息写清楚:

1. 项目说明和范围

先让 Claude 知道这个项目是什么。

例如:

# Project Overview

-
 这是一个基于 Next.js 的后台系统
-
 主要目录是 `apps/web` 和 `packages/api-client`
-
 默认包管理器是 `pnpm`

这部分不要写成长篇背景介绍,只写 Claude 立刻需要知道的事实。

如果项目有明确范围,也应该写在这里,例如:

  • • 这是后台系统,不是营销官网
  • • 当前只修改 apps/admin,不动 apps/landing
  • • 目标是补功能和修问题,不是整站重构

2. 环境和依赖前提

很多错误不是代码写错,而是环境没说清。

例如:

# Environment

-
 默认使用 `pnpm`
-
 Node 版本是 `20.x`
-
 本地测试依赖 Redis
-
 需要先复制 `.env.example` 到 `.env.local`

这类东西 Claude 不一定能稳定猜出来,最好直接写死。

3. 常用命令

这部分很值钱,因为很多命令 Claude 无法只靠读代码猜出来。

例如:

# Common Commands

-
 开发启动:`pnpm dev`
-
 单测:`pnpm test`
-
 Lint:`pnpm lint`
-
 构建:`pnpm build`

如果项目里有“先起本地 Redis 再跑测试”这种要求,也应该写在这里。

4. 验证和交付要求

这一类经常被漏掉,但其实很关键。

例如:

# Verification

-
 改完后先跑相关单测
-
 前端改动至少跑 `pnpm lint`
-
 如果改了接口,补一条最小测试
-
 交付前列出实际跑过的命令

Claude Code 的官方最佳实践一直在强调一件事:要给 Claude 一种验证自己工作的方式。
测试、lint、截图、预期输出,这些都属于高价值信息。

5. 目录和代码约定

例如:

# Conventions

-
 页面组件放在 `apps/web/app`
-
 API 请求统一走 `packages/api-client`
-
 生成文件在 `packages/api-client/generated`,默认不要手改

这类信息特别适合写进 CLAUDE.md,因为它们是项目自己的规则,不是语言本身的常识。

6. 正向提示

可以把它理解成“希望 Claude 优先怎么做”。

例如:

# Preferred Workflow

-
 先读相关文件,再给修改方案
-
 优先复用现有组件和工具函数
-
 先跑单个相关测试,再决定要不要跑整套
-
 如果规则不清楚,先提问确认

这类内容不是在限制 Claude,而是在给它一个更符合团队习惯的默认动作。

7. 反向约束

有些要求不说清,Claude 很容易踩。

例如:

# Do Not

-
 不要引入新的 UI 库
-
 不要修改 `generated` 目录
-
 不要跳过现有测试直接交付

这部分其实就很像“反向提示词”。

它的作用不是解释项目,而是提前告诉 Claude:哪些路不要走,哪些动作不能做。

8. 输出要求

如果希望 Claude 每次都按同一种方式汇报改动,也可以提前写清楚。

例如:

# Response Style

-
 先说明改动方案,再开始修改
-
 改完后列出变更文件和验证结果
-
 如果没有把握,先说明不确定点

4. 什么不该写进 CLAUDE.md

很多 CLAUDE.md 不好用,不是因为写得不够多,而是因为塞进去的东西太杂。

下面这些内容通常不适合直接写进去:

  • • 这次临时要修的某个 bug
  • • 一次性的任务说明
  • • 太长的背景资料
  • • 大段团队 wiki 摘抄
  • • Claude 自己读代码就能知道的事情

官方最佳实践里有一个判断标准很好用:

删掉这一行,Claude 会不会更容易犯错?

如果不会,通常就不必写进去。

还有一个很实用的判断方法:

  • • 每次开新会话都应该知道的,写进去
  • • 只有当前任务才需要知道的,不要写进去

5. 一份好用的 CLAUDE.md,通常长什么样

官方文档一直在强调两个词:具体 和 简短

一份好用的 CLAUDE.md,通常有这几个特点:

  • • 一份文件尽量控制在 200 行以内
  • • 有标题,有分组,不是一整坨长段落
  • • 规则能执行,能验证
  • • 没有互相打架的要求

先看一个不太好的写法:

# 项目说明

这个项目历史比较复杂,前后端都很多年了,大家平时开发时要注意代码质量、保持清晰、减少重复、提高可读性、注意命名、关注架构、不要写脏代码……

这种写法的问题不是态度不对,而是太空。Claude 读完之后并不知道该怎么做。

再看一个更好的写法:

# Code Style

-
 使用 TypeScript
-
 默认保留现有 ESLint 规则
-
 表单校验沿用现有 `zod` 模式

# Workflow


-
 改完接口后先跑相关单测
-
 改完页面后先看 `pnpm lint`
-
 如果只改一个模块,优先跑单个测试,不跑整套测试

# Do Not


-
 不要改 `generated` 目录
-
 不要直接改数据库迁移文件

这类规则读完之后,Claude 才知道“应该怎么做”“不应该怎么做”。

好的 CLAUDE.md 不是越长越好,而是更具体、更简短、更容易执行。
好的 CLAUDE.md 不是越长越好,而是更具体、更简短、更容易执行。

6. 一个更接近真实项目的最佳实践模板

下面这份模板不是最短版,而是更接近真实项目里能长期用的版本。

# Project Overview

-
 这是一个基于 Next.js 的内部后台系统
-
 主目录有 `apps/web``packages/api-client`
-
 默认包管理器是 `pnpm`
-
 当前主要维护后台管理端,不处理营销官网

# Environment


-
 Node 版本使用 `20.x`
-
 本地开发使用 `pnpm`
-
 测试依赖本地 Redis
-
 环境变量模板在 `.env.example`

# Common Commands


-
 开发启动:`pnpm dev`
-
 Lint:`pnpm lint`
-
 单测:`pnpm test`
-
 构建:`pnpm build`
-
 后台单测:`pnpm test --filter admin`

# Verification


-
 改完页面后至少运行 `pnpm lint`
-
 改完接口后补一个最小测试
-
 不要只汇报“理论上可以”,要写实际执行过的命令
-
 如果没跑测试,要明确说明原因

# Conventions


-
 页面组件放在 `apps/web/app`
-
 API 请求统一走 `packages/api-client`
-
 表单校验沿用现有 `zod` schema
-
 新逻辑优先复用现有 hooks 和 util

# Preferred Workflow


-
 先读相关文件,再给方案
-
 优先沿用现有实现方式
-
 先跑单个相关测试,不默认跑整套
-
 如果规则不明确,先提问确认

# Do Not


-
 不要修改 `packages/api-client/generated`
-
 不要引入新的 UI 库
-
 不要跳过测试直接交付
-
 不要为了通过构建删除已有校验
-
 不要凭空新增不存在的接口和字段

# Response Style


-
 先说明改动思路,再开始修改
-
 改完后列出变更文件和验证结果
-
 有不确定点时先说明

# References


-
 项目概览:@README.md
-
 可用命令:@package.json
-
 Git 约定:@docs/git-workflow.md

这类模板的重点,不是栏目看起来全,而是把真正影响表现的东西拆清楚了:

  • • 项目范围
  • • 环境前提
  • • 常用命令
  • • 验证方式
  • • 目录职责
  • • 正向提示
  • • 反向约束
  • • 输出格式
  • • 需要时再通过 @path 引入额外文件

如果想再往前走一步,可以把这份模板理解成四层:

第一层:事实

项目是什么,用什么工具,命令怎么跑,目录怎么分。

第二层:偏好

优先复用什么,先做什么,怎样验证更合适。

第三层:禁区

哪些目录不能动,哪些做法不要碰,哪些偷懒方式不能接受。

第四层:交付格式

改之前怎么说,改完之后怎么汇报,没把握时怎么说明。

这四层同时写清楚,CLAUDE.md 才更像一份真正能工作的项目规则文件,而不是一份空泛的项目说明。


7. 没有 CLAUDE.md 和有 CLAUDE.md,差别到底在哪

我们用一个很小的任务来看:

给登录页补一个空值校验,并在提交前跑相关测试。

如果项目里没有 CLAUDE.md,Claude 常见的问题是:

  • • 不知道这个项目用什么表单库
  • • 不知道校验逻辑通常写在哪
  • • 不知道哪些目录不能动
  • • 不知道该跑哪个测试命令

如果项目里提前写了这些规则,Claude 的表现通常会稳定很多:

  • • 更容易找对文件
  • • 更容易沿用项目现有写法
  • • 不容易误改生成文件
  • • 改完之后知道该跑什么命令

CLAUDE.md 真正带来的变化,不是让模型突然更聪明,而是让 Claude 更像一个已经进组的人。


8. 三个位置怎么分:用户级、项目级、子目录级

CLAUDE.md 可以放在多个位置,不同位置负责的事情不一样。

1. ~/.claude/CLAUDE.md

适合放个人习惯,比如:

  • • 平时更喜欢怎样的解释方式
  • • 默认先给方案还是先动手
  • • 常用的个人命令偏好

不适合放某个具体项目的规则。

2. 项目根目录 CLAUDE.md

适合放团队共享规则,比如:

  • • 项目说明
  • • 构建命令
  • • 测试方式
  • • 代码和目录约定
  • • 禁止事项

3. 子目录里的 CLAUDE.md

适合放某个目录独有的要求。

例如:

  • • apps/web/CLAUDE.md 放前端约定
  • • packages/api/CLAUDE.md 放接口约定

越通用的规则放越上面,越具体的规则放越下面。

用户级、项目级和子目录级 CLAUDE.md 负责的规则范围并不一样。
用户级、项目级和子目录级 CLAUDE.md 负责的规则范围并不一样。

9. .claude/rules/ 什么时候该上

项目变大之后,继续把所有规则都塞进一个文件里,很快就会乱。

这时候更合适的做法,是把规则拆到 .claude/rules/ 目录里。

例如:

your-project/
├── .claude/
│   ├── CLAUDE.md
│   └── rules/
│       ├── testing.md
│       ├── frontend.md
│       └── backend.md

如果规则只针对某一类文件,还可以加 paths

---
paths:
  - "src/api/**/*.ts"
---

# API 开发规则

- 所有 API 端点必须包含输入校验
- 统一返回标准错误格式
- 包含 OpenAPI 注释

这种写法的好处很直接:

  • • 规则更容易维护
  • • 不同主题拆开了
  • • 只在处理相关文件时才加载对应规则

小项目时,一个 CLAUDE.md 往往就够了。
项目变大、目录变多、规则变复杂时,再拆到 .claude/rules/ 会更合适。


10. 自动记忆会记什么,不会记什么

自动记忆和 CLAUDE.md 不是一回事。

CLAUDE.md 更像我们手动写好的固定规则。
自动记忆更像 Claude 在反复协作里慢慢积累的笔记。

自动记忆更适合记住这些内容:

  • • 这个项目统一用 pnpm
  • • 跑测试前要先起本地 Redis
  • • 某个目录是生成文件,通常不要改
  • • 某类报错该先查哪里

但自动记忆不适合替代这些内容:

  • • 团队正式规范
  • • 固定目录结构
  • • 每次都必须稳定遵守的禁止事项

更简单地说:

  • • 固定规则,放 CLAUDE.md
  • • 协作中慢慢积累出来的经验,让自动记忆去记
固定规则、自动记忆和路径规则各自负责不同类型的项目信息。
固定规则、自动记忆和路径规则各自负责不同类型的项目信息。

11. 最实用的几个最佳实践

把官方建议和实际使用放在一起看,最重要的就是这几条:

1. 保持短

每份 CLAUDE.md 尽量控制在 200 行以内。
太长,Claude 容易忽略重点。

2. 保持具体

不要写“注意代码质量”。
要写“提交前运行 pnpm test”。

3. 只写长期有效的东西

临时任务放在当前对话里,不要塞进 CLAUDE.md

4. 冲突规则只保留一份

同一个要求如果在多个文件里互相打架,Claude 很容易左右摇摆。

5. 大项目要拆

文件一长,就拆到 .claude/rules/,不要继续往一个文件里塞。

6. 像维护代码一样维护它

规则过时了就删,写得不清楚就改,看到 Claude 总犯同一种错,就回来看规则有没有写清楚。

社区里那份“Claude 八荣八耻”之所以让人一眼记住,不是因为它搞笑,而是因为它把规则写成了能执行、能判断的句子。
这才是项目规则文件真正有用的地方。


12. 先做哪一步最有效

最推荐的起步方式不是从空白开始硬写,而是这样做:

  1. 1. 在项目里运行 /init
  2. 2. 让 Claude 先生成一份起始版 CLAUDE.md
  3. 3. 手动删掉废话
  4. 4. 补上 Claude 自己猜不出来的内容

比如:

  • • 真正常用的命令
  • • 团队自己的目录约定
  • • 不能碰的目录
  • • 希望它怎么汇报结果

做完这一步之后,再看哪些规则开始变多,再决定要不要拆 .claude/rules/


13. 真正让 Claude 懂项目的,不是多说,而是提前写清楚

命令解决的是“怎么用 Claude Code”。
CLAUDE.md 解决的是“Claude 进来之后该按什么规矩做事”。
自动记忆解决的是“合作久了之后,Claude 会慢慢记住什么”。

把这三件事分清楚之后,Claude 的表现会稳定很多。

如果今天就要开始动手,最有价值的动作不是再背几个命令,而是去项目里补一份最小可用的 CLAUDE.md

  • • 项目说明
  • • 环境前提
  • • 常用命令
  • • 验证要求
  • • 目录约定
  • • 正向提示
  • • 反向约束
  • • 输出要求

先把这几类内容写清楚,很多“为什么每次都要重新解释”的问题,马上就会少很多。

参考资料

  • Claude Code Memory 文档:https://code.claude.com/docs/zh-CN/memory
  • Claude Code Best Practices:https://code.claude.com/docs/zh-CN/best-practices
  • Claude Code Features Overview:https://code.claude.com/docs/zh-CN/features-overview
     Claude Code How Claude Code Works:https://code.claude.com/docs/zh-CN/how-claude-code-works
  • 社区公开案例 CLAUDEhttps://dbinary.github.io/CLAUDE/

本文来自转载微信公众号-凌小添 ,不代表发现AI立场,如若转载,请联系原作者;如有侵权,请联系编辑删除。

(0)
教程组小编的头像教程组小编
Claude Code 教程丨Skill + Hook:让 AI 7×24 小时不间断干活
上一篇 22小时前
Claude Code 教程丨从对话到工作流,它到底变了什么
下一篇 22小时前

扫码关注我们,了解最新AI资讯~

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注