首页 › tutorials › Claude Code记忆配置入门:让AI读懂你的项目

概述

本教程面向零基础用户,系统讲解 Claude Code 的「项目记忆」机制。你将学会用 CLAUDE.md 文件给 Claude 持久化的项目指令,理解从企业级到本地的五层记忆层级,掌握 @import 文件导入、/init 自动生成、auto memory 自动学习三大核心能力,并配齐 settings.json 权限配置。学完后你能让 Claude 在每次新会话中「秒懂」你的代码规范、技术栈与个人偏好,而无需每次重复交代。适合刚装好 Claude Code、想从「能用」进阶到「好用」的所有开发者。

前置条件


一、先理解:为什么需要「记忆」

Claude Code 的一个根本设计是:每一个会话都从一个干净的上下文窗口开始。这意味着你昨晚告诉它「我们用 pnpm、用 ESLint、禁止 any 类型」的所有交代,今天新开会话时全部归零。

如果没有记忆机制,你会陷入两种痛苦:

  1. 重复交代:每个会话开头都要粘贴一遍项目背景、技术栈、代码规范。
  2. 行为漂移:Claude 凭「直觉」做决策——给 React 项目写 class 组件、给 Python 项目用 print 调试、给团队仓库擅自加分号。

Claude Code 用两套互补的记忆系统解决这个问题:

系统 谁来写 存放位置 特点
CLAUDE.md 文件 你(开发者) 仓库内 / 用户目录 显式指令,精确可控,可提交到 git
Auto memory(自动记忆) Claude 自己 .claude/memory/ 自动积累,跨会话学习,无需你操心

理解这两套系统的分工,是配置好记忆的第一步。CLAUDE.md 管「规则」,auto memory 管「事实」。


二、CLAUDE.md 的五层层级

这是最容易让新手困惑的部分:到底把规则写在哪里?答案取决于「这条规则的适用范围」。Claude Code 定义了从最全局到最局部的层级,启动时按顺序加载,越局部的优先级越高。

flowchart TD
    A["1. 企业策略 memory<br/>由 IT 统一下发<br/>最高优先级"] --> B["2. 用户级 memory<br/>~/.claude/CLAUDE.md<br/>跨所有项目"]
    B --> C["3. 项目级 memory<br/>./CLAUDE.md<br/>提交到 git,团队共享"]
    C --> D["4. 项目本地 memory<br/>./CLAUDE.local.md<br/>gitignore,个人专属"]
    D --> E["5. 子目录 memory<br/>子目录/CLAUDE.md<br/>按需加载相关文件时生效"]
    E --> F["6. Auto memory<br/>.claude/memory/<br/>Claude 自动学习"]

    style A fill:#fde68a,stroke:#b45309
    style C fill:#bfdbfe,stroke:#1d4ed8
    style D fill:#fecaca,stroke:#b91c1c
    style F fill:#c7d2fe,stroke:#4338ca

下面逐层拆解。

第 1 层:企业策略 memory(多数人用不到)

由公司 IT 部门通过系统级路径统一部署,例如 macOS 上的 /Library/Application Support/ClaudeCode/CLAUDE.md。它的指令优先级最高,通常用于强制合规要求(如「禁止将代码上传到外部服务」)。如果你是个人开发者,跳过这一层即可。

第 2 层:用户级 memory(强烈推荐配置)

路径:~/.claude/CLAUDE.md

这是你的个人全局偏好,对你机器上的所有项目生效。适合放那些「不管在哪个项目,我都是这么干活」的规则。

创建它:

# 在 home 目录的 .claude 下创建
cat > ~/.claude/CLAUDE.md << 'EOF'
# 个人全局偏好

## 语言
- 默认用中文回复,代码注释可用英文
- 命名用中文标题,命令保持原文

## 工作习惯
- 修改代码前先读取目标文件,不要盲改
- 不要自动 git commit,只在明确要求时提交
- 不要主动创建文档文件,除非明确要求
- 回复简洁,避免冗长解释

## 技术偏好
- 包管理器优先用 pnpm,其次 npm
- TypeScript 项目禁止使用 any 类型
- 优先函数式风格,避免不必要的 class
EOF

预期结果:之后你打开任何项目,Claude 默认就讲中文、不乱 commit、不乱建 README。这一层价值极高,因为它消除了一类最高频的「重复交代」。

第 3 层:项目级 memory(团队协作核心)

路径:<项目根目录>/CLAUDE.md

这是最重要的记忆文件,提交到 git 后整个团队共享。它告诉 Claude「这个项目长什么样」。一个典型的项目级 CLAUDE.md 应包含:

# 项目:订单中台(order-center)

## 技术栈
- 语言:Go 1.22
- Web 框架:Gin
- ORM:GORM(MySQL 8.0)
- 消息队列:Kafka
- 部署:Docker + K8s

## 目录结构
- cmd/         程序入口
- internal/    业务逻辑(禁止被外部 import)
- pkg/         可复用包
- api/         HTTP handler 定义
- migrations/  数据库迁移脚本

## 代码规范
- 错误必须显式处理,禁止 _ = err
- 数据库查询必须带 context 超时
- 新增 API 必须写单元测试,覆盖率不低于 70%
- commit message 格式:type(scope): desc,如 feat(order): 支持批量退款

## 常用命令
- 跑测试:make test
- 起本地服务:make run
- 代码检查:make lint

为什么这一层要提交到 git:因为团队的每个成员用 Claude Code 时都应读到同一份项目背景,保证行为一致。这正是 CLAUDE.md 区别于个人笔记的关键——它是可版本控制的团队知识。

第 4 层:项目本地 memory(个人专属,不提交)

路径:<项目根目录>/CLAUDE.local.md

它的内容只对你自己生效,应当加入 .gitignore。适合放个人化的、不想污染团队仓库的东西:

# 本地个人偏好(不提交)

- 我在排查 #2331 这个 bug,重点关注订单状态机
- 本地数据库连接:root:123456@tcp(localhost:3306)/order
- 我习惯用 vim,生成的代码注释别用 IDE 特定格式

.gitignore 中务必加上:

CLAUDE.local.md

常见坑:很多人把敏感信息(数据库密码、token)写进了第 3 层 CLAUDE.md 并提交,造成泄露。记住:敏感的、个人的 → CLAUDE.local.md;规范的、团队的 → CLAUDE.md。

第 5 层:子目录 memory(按需加载)

路径:<某子目录>/CLAUDE.md

Claude Code 不是启动时把所有子目录的 CLAUDE.md 全塞进上下文(那样太费 token),而是当你读取该子目录下的文件时,才把对应的 CLAUDE.md 加载进来。这适合大型 monorepo:

my-monorepo/
├── CLAUDE.md              ← 整个仓库的总则
├── frontend/
│   └── CLAUDE.md          ← 前端专属规则(React + Vite)
├── backend/
│   └── CLAUDE.md          ← 后端专属规则(Go + Gin)
└── infra/
    └── CLAUDE.md          ← 运维专属规则(Terraform)

当你说「帮我改 frontend 的登录页」时,Claude 读取 frontend/ 下文件,自动加载 frontend/CLAUDE.md,而不会加载 backend 的规则。这种渐进式加载是大仓库省 token 的关键。


三、用 @import 拆分大型 CLAUDE.md

当项目规则越积越多,单个 CLAUDE.md 会膨胀到几百行,既难维护也费 token。Claude Code 支持 @import 语法把规则拆成多个文件按需引用。

基本用法

在 CLAUDE.md 中用 @路径 引用其他文件:

# 项目记忆

@docs/coding-standards.md
@docs/architecture.md
@docs/api-conventions.md

被引用的文件内容会被递归展开进主 CLAUDE.md。这意味着:

实践:模块化记忆目录

推荐的大项目结构:

.claude/
├── CLAUDE.md              ← 主入口,只放索引和 @import
└── rules/
    ├── frontend.md
    ├── backend.md
    ├── testing.md
    └── deployment.md

主 .claude/CLAUDE.md 内容:

# 项目记忆索引

本文件只做导航,详细规则见各模块。

@rules/frontend.md
@rules/backend.md
@rules/testing.md
@rules/deployment.md

好处:改前端规则只动 frontend.md,git diff 清晰;不相关的模块不会被同时加载,省 token。


四、两条快捷命令:/init 与 /memory

/init:一键生成项目记忆

进入一个新项目,最省事的起步方式是运行:

/init

Claude 会自动扫描你的代码库——分析目录结构、识别技术栈、读取配置文件、归纳常用命令——然后生成一份初稿 CLAUDE.md。你只需在其基础上微调。

操作流程:

  1. cd 进入项目根目录
  2. 启动 claude
  3. 输入 /init
  4. Claude 输出草稿,询问是否写入 CLAUDE.md
  5. 确认后,用编辑器打开精修

预期结果:你会得到一份覆盖技术栈、目录、命令的可用初稿,比从零手写快十倍。

/memory:在会话内编辑记忆

不想退出 Claude 去开编辑器?直接输入:

/memory

它会用系统编辑器($EDITOR)打开当前生效的 CLAUDE.md 文件。保存退出后,修改立即在当前会话生效,无需重启。

注意:/memory 默认打开的是当前工作目录的 CLAUDE.md。要编辑用户级的,得手动 vim ~/.claude/CLAUDE.md。


五、Auto Memory:让 Claude 自己记笔记

这是较新的能力,也是最省心的。开启后,Claude 会在交互中自动判断哪些信息值得跨会话记住,并写入 .claude/memory/ 目录。

它和 CLAUDE.md 的区别

维度 CLAUDE.md Auto memory
谁写的 你 Claude
内容性质 规则、指令 事实、偏好、项目背景
可控性 完全可控,精确 自动积累,需偶尔清理
提交 git 通常提交 看情况,个人偏好可不提交

工作机制

  1. Claude 在对话中发现一条值得记住的事实(如「用户偏好用 Rust 写 CLI 工具」)。
  2. 它把这条事实写入 .claude/memory/<slug>.md,文件带 frontmatter(name、description、type)。
  3. 同时在 .claude/memory/MEMORY.md 索引里加一行指针。
  4. 下次新会话启动,MEMORY.md 索引被加载进上下文,Claude「想起来」这些事实。

触发方式:你可以主动说「记住:我们项目的部署目标是 staging.cluster.local」,Claude 会显式保存;也会在正常对话中隐式积累。

记忆类型

Auto memory 通常分四类:

维护建议:每隔一段时间用 /memory 或直接查看 .claude/memory/,删掉过时或错误的记忆。Claude 写的记忆反映的是「写入时为真」的事实,代码变了之后它不会自动失效——所以引用了具体文件名/函数的记忆,用前最好核对一下。


六、settings.json:配置行为与权限

CLAUDE.md 管「Claude 该懂什么」,settings.json 管「Claude 该怎么行动」。两者分工不同,配合使用。

文件层级(同样从全局到局部)

文件 作用域 是否提交 git
~/.claude/settings.json 用户全局 否
.claude/settings.json 项目级,团队共享 是
.claude/settings.local.json 项目级,个人专属 否(gitignore)
企业级 managed settings 全机器强制 由 IT 部署

/config:图形化配置

最简单的入口是在 Claude 会话里输入:

/config

它会打开一个分页的设置界面,用方向键就能改主题、模型、权限等,改完自动写回对应的 settings.json。新手优先用这个,别手撸 JSON。

手写示例:项目级权限

.claude/settings.json 一个典型场景是预设命令权限,减少反复确认:

{
  "permissions": {
    "allow": [
      "Bash(npm test)",
      "Bash(npm run lint)",
      "Bash(git status)",
      "Bash(git diff:*)",
      "Read(**/*.md)"
    ],
    "deny": [
      "Bash(rm -rf:*)",
      "Bash(git push:*)",
      "Read(**/.env*)"
    ],
    "ask": [
      "Bash(git commit:*)"
    ]
  },
  "model": "claude-sonnet-4-6",
  "env": {
    "DEBUG": "true"
  }
}

字段含义:

安全提示:deny 里把 rm -rf、git push、读取 .env 都拦住,是低成本高收益的护栏。团队共享的 .claude/settings.json 里写好这套,所有人受益。


七、实战案例:为一个真实项目配齐记忆

以一个「TypeScript + Express + Prisma 的博客后端」为例,从零搭好完整记忆体系。

步骤 1:用户级偏好(一次性,跨项目)

cat > ~/.claude/CLAUDE.md << 'EOF'
# 个人偏好
- 默认中文回复
- 修改前先读文件
- 不自动 commit,不自动建文档
- 包管理器:pnpm
- TypeScript:禁止 any,开启 strict
EOF

步骤 2:进入项目,跑 /init

cd ~/code/blog-api
claude
# 在会话内输入:
/init

Claude 扫描后生成初稿,你精修为 .claude/CLAUDE.md:

# 博客后端 blog-api

## 技术栈
- Node.js 20 + TypeScript 5.4(strict 模式)
- Express 4 + Prisma 5(PostgreSQL 16)
- 测试:Vitest
- 部署:Docker

## 目录
- src/routes/    路由
- src/services/  业务逻辑
- src/prisma/    schema 与迁移
- tests/         测试

## 规范
- 所有 handler 必须用 zod 校验入参
- 数据库访问只通过 service 层,禁止 route 直接调 Prisma
- 错误统一抛 AppError,由中间件格式化

@.claude/rules/testing.md
@.claude/rules/api.md

步骤 3:拆分规则文件

.claude/rules/testing.md:

# 测试规则
- 每个 service 方法必须有对应单测
- 测试用 in-memory SQLite,不连真实 PG
- 命名:describe('方法名') + it('行为')

.claude/rules/api.md:

# API 规范
- 路径:/api/v1/资源,复数
- 响应统一:{ code, message, data }
- 分页参数:page(从1)、pageSize

步骤 4:个人本地记忆

cat > .claude/CLAUDE.local.md << 'EOF'
# 本地(不提交)
- 本地 PG:postgresql://dev:dev@localhost:5432/blog
- 我在重构 /posts 路由,目标是去掉 any
EOF
echo ".claude/CLAUDE.local.md" >> .gitignore
echo ".claude/settings.local.json" >> .gitignore

步骤 5:权限配置

.claude/settings.json:

{
  "permissions": {
    "allow": ["Bash(pnpm test)", "Bash(pnpm run lint)", "Bash(prisma validate)"],
    "deny": ["Bash(rm -rf:*)", "Read(**/.env*)"],
    "ask": ["Bash(git commit:*)", "Bash(prisma migrate:*)"]
  }
}

步骤 6:验证记忆生效

新开一个会话测试:

你:我们用什么数据库?测试怎么跑?
Claude:PostgreSQL 16(生产),测试用 in-memory SQLite。跑测试执行 pnpm test。

如果 Claude 答对了,说明记忆链路打通。如果答错(比如建议用 npm 而非 pnpm),检查对应层级的 CLAUDE.md 是否生效。


八、完整工作流程

flowchart LR
    A["新会话启动<br/>干净上下文"] --> B["加载企业/用户级<br/>CLAUDE.md"]
    B --> C["加载项目级<br/>CLAUDE.md + @import 展开"]
    C --> D["读取 MEMORY.md<br/>auto memory 索引"]
    D --> E["按需加载<br/>子目录 CLAUDE.md"]
    E --> F["应用 settings.json<br/>权限与行为"]
    F --> G["开始交互"]
    G --> H{"发现新事实?"}
    H -- 是 --> I["写入<br/>.claude/memory/"]
    H -- 否 --> J["正常工作"]
    I --> J

    style A fill:#fef3c7,stroke:#b45309
    style G fill:#d1fae5,stroke:#047857
    style I fill:#c7d2fe,stroke:#4338ca

九、常见问题排查

Q1:改了 CLAUDE.md 不生效? 用 /memory 编辑可即时生效;用外部编辑器改的,重启会话或运行 /memory 重新加载。注意确认改的是正确的层级——项目根的 CLAUDE.md 而非别处。

Q2:记忆太多,每次启动都吃很多 token? - 把大段规则拆到子目录,靠「按需加载」而非全量加载。 - 用 @import 让无关模块不被同时展开。 - 清理过时的 auto memory。

Q3:CLAUDE.md 该写多详细? 写「会重复出现的、需要约束的」,不写「一次性的任务」。一次性任务直接在对话里说,别污染记忆。

Q4:CLAUDE.local.md 误提交了怎么办? 立即 git rm --cached CLAUDE.local.md,加入 .gitignore,并轮换其中暴露的任何密钥。

Q5:auto memory 记错了怎么办? Claude 写的记忆是「写入时为真」的快照。直接编辑或删除 .claude/memory/ 下对应文件即可纠正。


十、记忆配置清单(抄作业)


延伸阅读


训练营适用性评估


参考来源

  1. How Claude remembers your project — Claude Code Docs — 官方记忆系统文档,CLAUDE.md 与 auto memory 双机制的权威来源
  2. Claude Code settings — Claude Code Docs — settings.json 全局/项目层级与权限配置官方参考
  3. Using CLAUDE.md files: Customizing Claude Code for your codebase — Anthropic Blog — 官方实战博客,讲解如何为代码库编写有效记忆文件
  4. The Definitive Guide to Every Claude Code Configuration File — 第三方深度指南,梳理 CLAUDE.md / CLAUDE.local.md / rules / settings / auto memory 的分工
  5. The Complete .claude Directory Guide for Claude Code [2026] — 2026 年 .claude 目录结构与模块化 rules 的全景指南

[!tip] 51学通信知识星球 星主:爱卫生(微信:gprshome201101)——公众号「51学通信」创办者,19 年通信行业运维与讲师经验,著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书(各大电商平台有售)。 星球定位:深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域,主打运维岗位与信令分析。 当前规模:5200 篇主题 / 990 个回答,198 元/年。 加入福利:加入星球后请加爱卫生微信,拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题,另有群内分享。 AI 加持:51学通信知识星球已作为 skill 接入 WorkBuddy,使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例,做总结、找文档和 PPT 等场景全覆盖。

51学通信知识星球海报-扫码加入