本教程面向已装好 Claude Code、想让它"记住"项目约定与个人偏好的开发者。你将掌握 Claude Code 的两层记忆机制——你手写的 CLAUDE.md 与 Claude 自动积累的 Auto Memory,学会在用户级、项目级、子目录级精准投放指令,用 /init、@ 导入、.claude/rules/ 路径规则和 /memory 把"每次都要重说的话"变成一次配置、长期生效。全程配有可复制的命令、文件示例与排错清单。
claude --version如尚未安装,先在终端执行 claude --version 确认版本;低于 2.1.59 时升级后再启用 Auto Memory 相关章节。
每次启动 Claude Code,上下文窗口都是全新的——上一轮对话的内容不会自动带过来。让知识跨会话存活,靠两套互补机制:
| 维度 | CLAUDE.md 文件 | Auto Memory(自动记忆) |
|---|---|---|
| 谁来写 | 你手写 | Claude 自己记 |
| 内容 | 指令与规则(编码规范、构建命令、架构) | 学到的模式(调试心得、偏好、坑) |
| 作用域 | 项目 / 用户 / 组织 | 单仓库(同 repo 的所有 worktree 共享) |
| 加载时机 | 每次会话启动全量加载 | 每次会话加载 MEMORY.md 前 200 行或 25KB |
| 典型用途 | "用 2 空格缩进""提交前跑 make lint" |
"这个项目的 API 测试需要本地 Redis""我习惯 pnpm 不用 npm" |
一句话区分:CLAUDE.md 是"你定的规矩",Auto Memory 是"Claude 自己的笔记本"。两者都作为上下文注入,而非硬性执行的配置——要强制拦截某个动作,应改用 PreToolUse 钩子,而不是只写在 CLAUDE.md 里。
理解这一点能避免最常见的误解:很多人以为写在 CLAUDE.md 里的"禁止提交 main 分支"会被铁板钉钉地执行,实际上它只是"强烈建议"。需要强制时,请走 settings.json 的 permissions.deny 或钩子。
CLAUDE.md 可放在多处,按作用域从宽到窄依次加载,越具体的越靠后(也越优先):
| 作用域 | 位置 | 用途 | 共享范围 |
|---|---|---|---|
| 托管策略(组织级) | macOS: /Library/Application Support/ClaudeCode/CLAUDE.mdLinux/WSL: /etc/claude-code/CLAUDE.mdWindows: C:\Program Files\ClaudeCode\CLAUDE.md |
全公司编码标准、安全策略 | 机器上所有用户 |
| 用户级 | ~/.claude/CLAUDE.md |
跨所有项目的个人偏好 | 仅你自己 |
| 项目级 | ./CLAUDE.md 或 ./.claude/CLAUDE.md |
团队共享的项目约定 | 经版本控制共享给团队 |
| 本地级 | ./CLAUDE.local.md |
本机、本项目的私有偏好(加入 .gitignore) |
仅你、当前项目 |
加载顺序口诀:从文件系统根向下,先宽后窄,最后是当前工作目录。同一目录内,CLAUDE.local.md 总是追加在 CLAUDE.md 之后——也就是说,你写在 local 里的个人注释,是 Claude 在该层级最后读到的内容。
如果你在 foo/bar/ 启动 Claude,它会逐级向上检查:foo/bar/CLAUDE.md、foo/CLAUDE.md,连同各级的 CLAUDE.local.md。所有命中文件会被拼接进上下文,而非互相覆盖。
而子目录里的 CLAUDE.md 不会在启动时加载——只有当 Claude 真去读那个子目录里的文件时,才会按需把对应 CLAUDE.md 带进来(懒加载)。
/init 一键生成项目 CLAUDE.md最省事的起步方式是让 Claude 自己分析代码库。
在你的项目根目录启动 Claude Code,输入:
/init
Claude 会派出子代理扫描代码库,提取构建命令、测试方式、约定,生成一份初稿 CLAUDE.md。如果文件已存在,/init 会给出改进建议而非覆盖。
生成类似下面的文件:
# 项目:payment-api
## 构建与测试
- 安装依赖:`pnpm install`
- 跑测试:`pnpm test`
- 启动开发服务器:`pnpm dev`
## 代码风格
- 使用 2 空格缩进
- 函数命名用 camelCase,类型用 PascalCase
## 架构
- 路由处理在 src/api/handlers/
- 数据访问层在 src/repositories/
想要更结构化的交互式流程,设置环境变量后再跑:
export CLAUDE_CODE_NEW_INIT=1
claude
# 会话内输入 /init
CLAUDE_CODE_NEW_INIT=1 会启用多阶段流程:先问你要不要设置 CLAUDE.md、skills、hooks,再用子代理探索代码库、追问补全缺口,最后给出可审阅的提案才落盘。
/init 没生成文件:确认你在项目根目录而非子目录启动,且目录可写。/init 只能"猜",把不准的地方手动改掉——它的价值在于提供一个起点。CLAUDE.md 在每次会话启动时连同对话一起消耗 token。越具体、越精简、越结构化,遵循率越高。官方建议:单文件控制在 200 行以内。
| ❌ 模糊 | ✅ 具体 |
|---|---|
| "格式化代码" | "用 2 空格缩进" |
| "测试你的改动" | "提交前跑 pnpm test" |
| "保持文件整洁" | "API handler 放在 src/api/handlers/" |
.claude/rules/,删掉过时或冲突的内容。# payment-api 项目约定
## 角色
本项目是处理支付的 Node.js 服务,运行在 Node 20+,TypeScript 严格模式。
## 命令
- 安装:`pnpm install`
- 测试:`pnpm test`(含单测与集成测试,集成测试需本地 Redis)
- Lint:`pnpm lint` —— 提交前必须通过
- 构建:`pnpm build`
## 编码规范
- 缩进 2 空格;行尾分号
- 函数 camelCase,接口/类型 PascalCase
- 所有金额用分(整数)存储,禁止用浮点
## 架构与禁区
- 路由:src/api/handlers/
- 数据访问:src/repositories/,禁止在 handler 里直接写 SQL
- 金额计算必须走 src/lib/money.ts 的封装
## 工作流
- 不要自动 git commit,除非我明确说"提交"
- 改动 src/billing/ 下文件前先用 plan 模式
@ 导入拆分大文件@path/to/file 语法可以把其它文件导入 CLAUDE.md。导入的文件会在启动时展开并入上下文。
# payment-api
See @README.md for overview and @package.json for npm commands.
# 附加约定
- git 工作流见 @docs/git-instructions.md
关键细节:
- @~/.claude/my-project-instructions.mdClaude Code 读的是 CLAUDE.md,不读 AGENTS.md。若仓库已用 AGENTS.md 服务其它工具,建一个 CLAUDE.md 导入它即可,避免双份维护:
@AGENTS.md
## Claude Code 专属
- 改动 src/billing/ 前用 plan 模式
或直接软链(Windows 需管理员/开发者模式,否则用 import):
ln -s AGENTS.md CLAUDE.md
注意:拆分到
@导入只改善组织,不减少上下文占用——导入的文件照样在启动时进上下文。要真正省 token,看下一步的路径规则。
.claude/rules/ 按需、按路径投放规则大项目里,并非每条规则都要常驻上下文。.claude/rules/ 目录让你把指令拆成单主题文件,还能用 YAML frontmatter 的 paths 字段只在处理匹配文件时才加载。
payment-api/
├── .claude/
│ ├── CLAUDE.md # 主项目指令(每次加载)
│ └── rules/
│ ├── code-style.md # 无 paths → 每次加载
│ ├── testing.md # 无 paths → 每次加载
│ ├── api.md # paths → 只在动 src/api 时加载
│ └── security.md # paths → 只在动敏感文件时加载
.claude/rules/api.md)---
paths:
- src/api/**/*.ts
- src/api/**/*.tsx
---
# API 开发规则
- 所有端点必须做入参校验
- 使用统一错误响应格式 src/lib/errors.ts
- 必须写 OpenAPI 注释
| 模式 | 匹配 |
|---|---|
**/*.ts |
任意目录的 TypeScript 文件 |
src/**/* |
src 下所有文件 |
*.md |
项目根的 Markdown |
src/**/*.{ts,tsx} |
src 下的 ts 与 tsx(花括号展开) |
路径规则在 Claude 读取匹配文件时触发,而非每次工具调用都触发。需要"调用时才上"的任务型指令,请改用 Skills(只在被调用或被判定相关时加载)。
.claude/rules/ 支持软链,可维护一套共享规则链到多个项目,循环软链会被安全处理:
ln -s ~/shared-claude-rules .claude/rules/shared
ln -s ~/company-standards/security.md .claude/rules/security.md
个人全局规则放 ~/.claude/rules/,对机器上所有项目生效,且先于项目规则加载(项目规则优先级更高)。
Auto Memory 让 Claude 在工作过程中自动积累知识——构建命令、调试心得、架构笔记、风格偏好。它不会每次都记,而是判断"这条信息在将来是否有用"才落盘。
要求 Claude Code ≥ v2.1.59。claude --version 确认。
默认就是开的。要关:
/memory → 用开关切换.claude/settings.json:
json
{ "autoMemoryEnabled": false }export CLAUDE_CODE_DISABLE_AUTO_MEMORY=1每个项目一个目录:
~/.claude/projects/<project>/memory/
├── MEMORY.md # 简洁索引,每次会话加载前 200 行 / 25KB
├── debugging.md # 详细调试模式(按需读)
├── api-conventions.md # API 设计决策(按需读)
└── ...
MEMORY.md;主题文件(如 debugging.md)启动时不加载,Claude 需要时才用文件工具按需读想换存储位置,在任意 settings.json 设:
{ "autoMemoryDirectory": "~/my-custom-memory-dir" }
值必须是绝对路径或以 ~/ 开头。
直接说人话即可:
记住:这个项目的 API 测试需要本地 Redis 实例
永远用 pnpm,不要用 npm
Claude 会写入 auto memory。想写进 CLAUDE.md 而非 auto memory,就明说:"把这条加到 CLAUDE.md"。
/memory/memory 命令一屏看清当前会话加载了哪些 CLAUDE.md、CLAUDE.local.md、rules 文件,可切换 auto memory 开关,并提供打开 auto memory 文件夹的链接。选中任一文件即在编辑器中打开。看到界面里出现 "Writing memory" / "Recalled memory",就是 Claude 正在读写记忆目录。
flowchart TD
A[启动 Claude Code] --> B[读取托管策略 CLAUDE.md<br/>不可被排除]
B --> C[读取用户级 ~/.claude/CLAUDE.md<br/>+ ~/.claude/rules/*.md]
C --> D[向上遍历目录树<br/>逐级拼接各层 CLAUDE.md]
D --> E[当前目录 CLAUDE.md<br/>.claude/CLAUDE.md]
E --> F[CLAUDE.local.md<br/>每层最后追加]
F --> G[展开 @ 导入<br/>最多 4 跳]
G --> H[加载 .claude/rules/*.md<br/>无 paths 字段者常驻]
H --> I[加载 auto memory<br/>MEMORY.md 前 200 行 / 25KB]
I --> J[会话开始]
J --> K{Claude 读取子目录文件?}
K -->|是| L[按需加载该子目录<br/>CLAUDE.md + 匹配的路径规则]
K -->|动到匹配路径文件| M[触发对应 paths 规则]
L --> N[正常工作]
M --> N
目标:把"团队约定 + 个人偏好 + 按目录规则 + 自动积累"全部跑通。
payment-api 是 TypeScript 服务,团队 5 人共用,你个人习惯用 pnpm,且 src/api/ 有特殊的校验要求。
mkdir payment-api && cd payment-api
git init
claude
# 会话内输入 /init,让它扫描并生成 .claude/CLAUDE.md
.claude/CLAUDE.md# payment-api
## 命令
- 安装:`pnpm install`
- 测试:`pnpm test`(集成测试需本地 Redis)
- Lint:`pnpm lint`,提交前必过
- 构建:`pnpm build`
## 规范
- 缩进 2 空格;行尾分号
- 金额用分(整数),禁止浮点
- 数据访问必须经 src/repositories/,禁止 handler 里写裸 SQL
## 工作流
- 不要自动 commit
- 改 src/billing/ 前用 plan 模式
提交到 Git,团队共享。
CLAUDE.local.md(不入库)echo "CLAUDE.local.md" >> .gitignore
.claude 之外的项目根新建 CLAUDE.local.md:
# 个人本地偏好
- 我的沙箱地址:http://localhost:8080
- 测试数据用 fixtures/local-seed.json
.claude/rules/api.md---
paths:
- src/api/**/*.ts
---
# API 规则
- 所有端点必须入参校验
- 用 src/lib/errors.ts 的统一错误格式
- 必须写 OpenAPI 注释
这样只有动 src/api/ 下的 TS 文件时才吃 API 规则,平时不占上下文。
会话里直接说:
记住:CI 里 pnpm install 会因为 lockfile 不一致失败,改完依赖务必跑 pnpm install --frozen-lockfile 验证
Claude 写入 ~/.claude/projects/<本项目>/memory/MEMORY.md。下次新会话,前 200 行自动加载,这条坑就不再踩。
/memory
应能看到:项目 CLAUDE.md、本地 CLAUDE.local.md、.claude/rules/api.md、auto memory 文件夹入口。
/memory,确认文件真的被列出来——没列出就等于看不见超 200 行会降遵循度。用路径规则把"只在动某类文件时才需要"的指令挪走;或删掉并非每次会话都需要的。注意:拆成 @ 导入只改善组织、不省 token,因为导入文件照样启动时进上下文。
/compact 之后指令"丢了"/compact 后 Claude 会重新从磁盘读取并再注入/memory → 选 auto memory 文件夹,纯 Markdown,可读可改可删。
--add-dir 加进来的目录默认不加载其 CLAUDE.md。要加载:
export CLAUDE_CODE_ADDITIONAL_DIRECTORIES_CLAUDE_MD=1
claude --add-dir ../shared-config
这会从额外目录加载 CLAUDE.md、.claude/CLAUDE.md、.claude/rules/*.md、CLAUDE.local.md。
把文件放到托管策略位置(如 Linux 的 /etc/claude-code/CLAUDE.md),用 MDM/Ansible/组策略下发。该文件无法被任何个人设置排除,确保安全策略必达。
也可把内容直接写进 managed-settings.json:
{
"claudeMd": "提交前务必跑 `make lint`。\n永远不要直接 push 到 main。"
}
claudeMd只在托管/策略层生效,写在用户/项目/本地 settings 里无效。
分工:技术强制(拦截工具/命令/路径、沙箱、环境变量、登录锁定)走 managed settings;行为引导(代码风格、合规提醒)走托管 CLAUDE.md。
claudeMdExcludes 排除噪音大型 monorepo 里,别的团队的 CLAUDE.md 可能干扰你。在 .claude/settings.local.json:
{
"claudeMdExcludes": [
"**/monorepo/CLAUDE.md",
"/home/user/monorepo/other-team/.claude/rules/**"
]
}
按绝对路径 glob 匹配,各层 settings 的数组合并。托管策略 CLAUDE.md 不可被排除。
.claude/ 目录与上下文窗口:理解 CLAUDE.md 在启动上下文中的位置,配合 Prompt caching 看 token 占用。settings.json 与 Permission modes:权限拦截、沙箱、--setting-sources 等配置项,与 CLAUDE.md 形成"强制 + 引导"双轨。/init、三层文件、路径规则、auto memory 全流程动手);进阶组织级管理可再加 30 分钟。.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 等场景全覆盖。
