跳转到内容

项目记忆总览

「Plan Mode 里的计划写得挺好,可一批准执行,它又跑了 npm test 而不是我们仓库里的 pnpm test。」

前三章你已理解 代理循环Plan Mode:模型每轮都会读当前上下文里的项目说明,再决定调用哪些工具。缺的不是「更聪明的提示」,而是跨会话仍生效的项目入职文档。本指南把这一块收成第四部分 · 项目记忆:只谈 Claude 如何记住你的项目,以及你应把什么写进记忆、什么交给别的机制。

官方说明见 How Claude remembers your project


章节你将解决
1本章(总览)双机制、加载直觉、扩展分工
2CLAUDE.md 编写与维护/init、分层、rules、写什么
3自动记忆与 /memoryAuto memory、审计、晋升到 CLAUDE.md
4Monorepo 与多工具记忆walk、懒加载、AGENTS.md、排除无关文件
5团队记忆落地Managed、PR 评审、组织节奏(本部分终点

预计通读约 45~60 分钟;若你已在 monorepo 中工作,可先读第 4 章再回第 2 章补写 CLAUDE.md


每次新会话的上下文窗口都是空的。若没有持久记忆,你会反复交代:

  • 测试命令是 pnpm test 还是 npm test
  • 哪些目录禁止修改
  • 大改前是否要先 /plan

项目记忆不是让模型「变聪明」,而是把团队已达成共识的事实写进每次会话都会加载的上下文,减少循环里的重复纠正。

Claude Code 提供两套互补机制:

CLAUDE.md自动记忆 Auto Memory
谁写Claude
内容规范、命令、架构约定从纠正中沉淀的偏好与经验
共享项目级可进 Git;用户级在本机按仓库哈希存在本机,不进 Git
适用每条会话都应遵守的硬事实调试心得、临时决策、个人习惯
加载会话启动时全文注入MEMORY.md 前 200 行或 25KB

两者都是上下文,不是客户端强制配置。写得越具体,遵守越稳定;要「无论模型怎么想都必须执行」的步骤,见 Hooks代理循环 中的权限规则。自动记忆需 Claude Code v2.1.59+(以 claude --version 为准)。


CLAUDE.md 是纯 Markdown 文件。Claude Code 在会话启动时自动读取,不必在提示词里 @。它相当于:

  1. 新同事的入职说明:项目做什么、怎么跑、目录大致分工。
  2. 可执行的编码约定:命名、测试、禁止事项。
  3. 架构速查:三到五句话说清模块如何协作。

最小示例:

# My Project
## 命令
- 构建: `pnpm build`
- 测试: `pnpm test`
## 硬约束
- 禁止修改 generated/

官方建议:当你发现自己在重复纠正同一件事时写入。典型信号:

  • Claude 第二次犯同一种错
  • Code Review 指出「它本该知道」的仓库约定
  • 你刚在上个会话里打过的说明,这次又要再打一遍

若某条说明只属于单一子目录多步流程,见 编写与维护 中的 rules 与 Skill 体系,不要全部堆进根 CLAUDE.md


常见误解是「后加载的文件会覆盖先加载的」。官方行为是:沿目录树发现的多个 CLAUDE.md 会拼接进同一段上下文,越靠近你 cwd 的说明在拼接结果里越靠后。

  • 向上 walk:从 cwd 到文件系统根,启动时加载沿途 CLAUDE.md / CLAUDE.local.md
  • 向下懒加载:子目录 CLAUDE.md 仅在 Claude Read 该目录文件时注入。
  • 兄弟包不加载:在 frontend/ 工作不会自动带上 backend/CLAUDE.md

图示、monorepo 排除与跨工具桥接见 Monorepo 与多工具记忆/compact 后根 CLAUDE.md 会从磁盘重载;子目录记忆需再次 Read 才出现,细节链 上下文管理

动手:在项目根 CLAUDE.md 加一行「回答以收到开头」。新开会话提问,确认前缀;运行 /memory 核对文件是否在加载列表中。


你想达到的效果用哪种机制
默认测试命令、命名风格CLAUDE.md
大改前先规划CLAUDE.md 提醒 + Plan Mode
禁止 git push --forcerm -rfpermissions.deny,不是 CLAUDE.md
Edit 后必须跑 PrettierHooks PostToolUse
多步发布流程、偶尔才用Skills
调试中 Claude 自己记的偏好自动记忆
仅编辑某类文件时的规范.claude/rules/ + paths

代理循环 已说明:CLAUDE.md 写在上下文里,挡不住已授权的 Bash。在 CLAUDE.md 里写「禁止删文件」不等于安全;deny 规则或 Hook 才是硬边界。

组织部署时:拦截工具、沙箱用 Managed settings;代码风格与合规提醒用 Managed CLAUDE.mdclaudeMd 字段。部署细节见 团队记忆落地团队与组织级落地


场景写在哪
所有项目用 pnpm~/.claude/CLAUDE.md
本仓库用 Vitest./CLAUDE.md
本地 DB 端口 5433CLAUDE.local.md
仅 API 包禁止直查库packages/api/CLAUDE.md
仅编辑 *.tsx 时格式化.claude/rules/ + paths
每次提交前必须 lintHook,不是 CLAUDE.md

长任务的窗口挤占与 handoff 属于 上下文管理与多代理


试着回答:

  1. CLAUDE.md 与 auto memory 各由谁写、适合放什么?
  2. 目录树上是「覆盖」还是「拼接」?
  3. 在 CLAUDE.md 写「禁止 force push」能否阻止已授权的 git push --force

下一章:CLAUDE.md 编写与维护——分层、/init、rules 与可验证写法。