CLAUDE.md内容的一些实践总结

CLAUDE.md目前不光在Claude Code中被自动加载,OpenCode和Cursor也会自动加载项目的这个文件。它不和SKILLS、SUBAGENTS一样按需加载,它会一直存在于上下文中,所以要尽量小的占用上下文,要做到只放重要信息和你的特殊要求。一般情况下使用/init 生成的是完全无法达到要求的。

经过一段时间的实践,项目中CLAUDE.md可以写下面的几项内容

  • 很多模型默认生成MySQL语法的语句,你项目如果使用Postgresql你就可以在这里说明。
  • ClaudeCode或者OpenCode使用国内模型的时候也会返回英文,为了不每次都调整可以将"回复使用中文"添加到这里。
  • 你可以在这个文件加入强制它执行规划的提示,如"每次实现新功能的时候,先规划一下然后反思一下规划,有不明白的要向我提问,直到我明确提出执行计划你才能开始编写代码"
  • 有时候它会运行这个项目来看代码是否正确,但有时候你并不想让Claude这么做,你可以告诉它只编译不运行。
  • 你添加一个接口的时候,让Claude按照你的目录的规划来实现各自的代码,而不是自己创建新的目录和文件来实现逻辑
  • 如果给模型的提示词不好使,就在CLAUDE.md中加上MUST FOLLOW多写一遍。
  • CLAUDE.md 控制在模型上下文Token数的1%之内,尽量少占用上下文。因为模型可能在达到上下文限制之前就已经开始腐化。
  • 当某个SKILLS或者SUBAGENT总是不触发的时候,你可以在CLAUDE.md里面再写一下触发的提示
  • 一些你不希望它做的事情,比如git psuh 和git commit 命令,
  • 其它,待补充...

如下是一个CLAUDE.md的示例

复制代码
### MUST FOLLOW:输出内容的时候一定要使用中文
复制代码
### MUST FOLLOW: 项目的数据库使用的是PostgreSQL,编写SQL要使用Postgresql的语法,不要使用MySQL的语法

### 做计划的时候要优先考虑业界最佳实践,输出计划前也要再反思一下,参考本项目的整体逻辑不遗漏细节,同时又不要过度设计。 
复制代码
### 测试编译是否成功的时候,编译后不要生成文件

### 项目目录结构
```
gin-project/
├── main.go                 # 程序入口
├── config/
│   └── config.go           # 配置管理
├── controller/             # 控制器 (MVC中的C)
│   ├── user.go
│   └── auth.go
├── service/                # 业务逻辑层
│   ├── user.go
│   └── auth.go
├── model/                  # 数据模型 + 数据库操作
│   ├── user.go
│   └── db.go
├── router/                 # 路由注册
│   └── router.go
├── middleware/             # 中间件
│   ├── auth.go
│   └── cors.go
├── utils/                  # 工具函数
│   └── response.go
└── go.mod
```    

### 接口调用链路
当你实现一个接口时,参考文本检测接口 `POST /v1/text/check` 调用链路来实现,完整的调用链路如下:

```
HTTP Request
     ↓
router/router.go        # 路由注册、分组、中间件挂载
     ↓
middleware/*.go         # JWT认证、CORS、日志记录(可选)
     ↓
controller/*.go         # 参数校验、JSON绑定、调用Service
     ↓
service/*.go            # 业务逻辑、事务管理、规则校验
     ↓
model/*.go              # 数据模型、ORM操作、SQL执行
     ↓
   Database             # MySQL/PostgreSQL等持久化存储
```