第 03 模块 · 3 节

CLAUDE.md:记忆与偏好配置

《Claude Code 基础入门》03 斜杠命令全掌握 · 本节时长 28 分钟

每次都要反复叮嘱?太累

你可能发现:每次让 Claude Code 干活,都要重新说一遍「用 Vue 不用 jQuery」「缩进用 4 空格」「提交信息要规范」。说多了烦,漏说了它就容易跑偏。

CLAUDE.md 就是来解决这个的:它是项目的「记忆文件」,Claude Code 每次进入项目都会自动读它,把里面的约定当成默认规则。

贯穿项目这一节我们给 todo-app 写一份 CLAUDE.md,把「用 Node.js、先预览再改、代码要简洁」这些约定写进去。之后每次让 Claude 改 todo,它都会自动遵守。

CLAUDE.md 是什么

CLAUDE.md 是放在项目根目录的一个 Markdown 文件。它的内容就是「你希望 Claude Code 一直遵守的约定」。

  • 项目根目录:这个项目通用
  • ~/.claude/CLAUDE.md:对你所有项目通用

Claude Code 每次启动会话,都会把它加载进来,作为行为基准。


里面该写什么

写「项目的事实和约定」,别写废话。典型内容:

# 项目约定

## 技术栈
- 前端用 Vue 3,不用 jQuery
- 状态管理用 Pinia

## 代码风格
- 缩进 4 空格
- 组件命名用 PascalCase

## 规范
- 提交信息遵循 Conventional Commits
- 新增功能必须写对应测试

关键是把「你希望它默认怎么做」写清楚,它就不用每次问。


怎么用最有效

  • 写事实:技术栈、目录结构、构建命令、环境变量
  • 写偏好:命名风格、是否用某个库、错误处理规范
  • 写流程:测试怎么跑、发布怎么走

对比:

❌ 「好好写代码」→ 太空泛,没用 ✅ 「提交信息格式:type(scope): 描述,例如 feat(auth): 增加登录接口」→ 具体可执行


一个完整示例

# 项目:后台管理系统

## 技术栈
Vue 3 + Vite + Pinia + TypeScript

## 常用命令
- 启动开发:npm run dev
- 跑测试:npm test
- 构建:npm run build

## 约定
- API 请求都封装在 src/api/ 下,禁止在组件里直接 fetch
- 所有数值金额用「分」存储,展示时再转「元」
- 提交信息:feat/fix/docs/refactor/test

有了这个文件,Claude Code 一进项目就「懂规矩」,你不用每次重复。


落地练习:给 todo-app 写 CLAUDE.md

todo-app 目录里新建 CLAUDE.md,把我们的约定写进去:

# todo-app 项目约定

## 技术栈
- Node.js,无外部框架

## 常用命令
- 运行工具:node index.js

## 约定
- 每个操作必须先在屏幕打印「将做什么」,确认后才真正执行
- 待办名称不能为空,为空要提示
- 代码尽量简短,单文件能实现就不拆多个

然后新开一个会话,对 Claude 说:

这个项目的 CLAUDE.md 里写了哪些约定?复述一遍。

如果它能准确复述出来,说明它真的读进去了。

怎么判断做对了?——Claude 能逐条复述出「打印确认后才执行」「名称不为空」「代码简短」这几条约定,而不是笼统说「我记得有约定」。

卡住了怎么办? 它说不记得?先确认 CLAUDE.md 在项目根目录(和 package.json 同级),再 ls 确认文件名拼写。它复述不全?那是文件内容写得不清晰,回头看看约定是否具体可执行。


常见坑:写一堆空话

最常见的坑是 CLAUDE.md 里写「请好好写代码」「代码要高质量」这种空泛口号

AI 没法执行「好好写」这种模糊要求。要写成可判定的规则:「待办名称不能为空」「用 4 空格缩进」「运行前先预览」。判断标准很简单——如果这句话换个同事看不懂该怎么照做,就说明太模糊,需要写具体。


小结

  1. CLAUDE.md = 项目的记忆文件,Claude Code 每次自动读
  2. 放根目录管这个项目,放 ~/.claude/ 管所有项目
  3. 写事实、偏好、流程,要具体可执行
  4. 别写空话,写成可判定的规则
  5. 我们给 todo-app 写好了 CLAUDE.md

下一模块,我们做个完整的实战项目,把前面学的串起来。