每次开新会话,AI 编程助手就当你是陌生人。上午刚跟 Claude Code 讲清楚项目用的是什么框架、测试命令是什么、哪些目录不能乱动,下午新开一个会话,它又问一遍“这是什么项目”。这个场景我用过多少次就烦了多少次,后来终于想明白一个事:不是这些工具笨,是我从来没给它们留过一张“项目交接便签”。
今天要聊的就是给 Claude Code、Codex、VS Code 里挂的 AI 扩展,以及 Qoder 这类 AI IDE 配一份“长久记忆”。原理不复杂,操作也快,核心就一件事:在固定的位置放一个规则文件,每次 AI 启动时会自动读取,把项目背景、技术栈、编码偏好、常用命令一次性装进它的上下文。
我实测下来,只要知道文件放哪、写什么、怎么写,两分钟真的能搞定。下面把这个过程从原理到实操完整拆开讲,顺便把我踩过的坑也一并交代清楚。
1. 先搞明白:AI 的“记忆”到底存在哪
1.1 会话记忆和文件记忆是两回事
很多人在对话里反复叮嘱 AI“记住我们项目用的是 Vue3”,当时它是记住了,可会话一关,这个记忆就没了。原因很简单:AI 的上下文窗口是临时的,它只对当前这轮对话负责,不会把内容自动写盘。你指望聊天记录能跨会话生效,等于指望一个临时工不靠交接文档就能续上上一个员工的工作——偶尔行,大部分时候不靠谱。
真正能做到“长久记忆”的,是文件系统。AI 助手在启动时会主动去固定的位置读一些规则文件,把这些文件里的内容当作“项目交接班记录”来看待。Claude Code 读的是 CLAUDE.md,Codex 读的是 AGENTS.md,Qoder 有内置的规则配置,VS Code 里取决于你挂的是哪个 AI 扩展。换句话说,你要做的不是让 AI 记住你,而是给 AI 一份它每次上班都能看到的交接文档。
这个机制理解起来像什么?像给新员工入职第一天准备一份“岗位说明书”。你不可能指望新员工靠入职那天的聊天记住所有流程,但一份写在纸上的说明,他随时能翻,不会忘。CLAUDE.md 就是 AI 的那份岗位说明书。
1.2 四种工具各自的“记忆入口”
不同工具读的文件不同,但思路是一模一样的。我先把我验证过的入口列出来,后面每个工具的配置细节再单独展开。
| 工具 | 记忆文件/入口 | 作用范围 |
|---|---|---|
| Claude Code | 项目根目录的 CLAUDE.md | 项目级 |
| Claude Code | ~/.claude/CLAUDE.md | 全局级,所有项目生效 |
| Codex | 项目根目录的 AGENTS.md | 项目级 |
| Codex | ~/.codex/AGENTS.md | 全局级 |
| VS Code + Claude Code 扩展 | 读取同一份 CLAUDE.md | 跟随项目 |
| Qoder | 设置中的 Rules/规则配置 | 全局或项目粒度 |
看清楚这个表你就明白了,很多人在 VS Code 里装了一堆 AI 插件,却不知道怎么配记忆,其实就是没找到对应插件读的是哪个文件。下面我从最常用的 Claude Code 讲起,把每一个工具的配置过程都过一遍。
2. 两分钟起步:给 Claude Code 建一个 CLAUDE.md
2.1 最小可用的记忆文件长什么样
先说最简单的情况。你已经装好了 Claude Code,在终端里敲claude能正常启动,然后你想让它记住项目的基本信息。操作如下:
进入项目根目录,新建一个文件,名字必须叫 CLAUDE.md,注意大小写。打开文件,写几行最核心的信息:
# 项目名称 ## 项目概述 这是一个电商后台管理系统,面向内部运营人员,当前处于功能迭代阶段。 ## 技术栈 - 前端:React 18 + TypeScript + Vite - 后端:Node.js + Express - 数据库:PostgreSQL 15 ## 常用命令 - 启动开发环境:npm run dev - 运行测试:npm test - 构建生产包:npm run build ## 代码规范 - 组件文件用 PascalCase 命名 - API 请求统一走 src/api/client.ts 封装 - 数据库变更必须写迁移脚本,不允许直接改表保存退出,重新启动 Claude Code,随便问一句“这个项目用什么技术栈”,它就能准确回答你。整个过程真的不到两分钟。
这个文件的值不在于长,而在于准。我见过不少人一开始就写上千字的记忆文件,结果 AI 被一堆信息淹没,关键内容反而抓不住。CLAUDE.md 的定位是“速记”,不是“文档库”。写它的时候问自己一个问题:如果明天一个新人来接手这个项目,最需要知道的那三五件事是什么?把这些写进去就够了。
2.2 应该写在记忆文件里的几类信息
根据我这段时间整理多个项目的经验,一份高质量的 CLAUDE.md 通常覆盖这么几块:
第一,项目概述。一句话能说清楚的事情,不要写背景论文。比如“这个项目是给仓库管理人员用的进销存系统,后面要对接财务模块”,这就够了。AI 有了这个定位,回答问题的角度就不会跑偏。
第二,技术栈和目录结构。技术栈决定了 AI 写出来的代码风格,目录结构决定了它改文件时去哪找。这两样是 AI 的“地图”,没有地图它就只能瞎猜。第三,常用命令。启动、测试、构建、代码检查,这些命令写清楚,AI 就能在你让它“跑一下测试”的时候直接给出正确指令,不用你再去纠正。
第四,编码约定和约束。这是最容易被忽略但最有价值的部分。比如“错误处理必须走统一的异常类”“样式用 CSS Modules 不要用 Tailwind”“第三方 API Key 禁止硬编码,放环境变量”。AI 遵守了这些约定,产出的代码质量会明显不一样。
第五,当前待办或近期计划。这个不是必需,但有奇效。比如你最近在迁移老接口,把这个写进去,AI 写新代码的时候会自动避开老接口,优先用新的。
2.3 写记忆文件的几个原则
写一份好的记忆文件,比我上面说的“能说清项目是什么”要多花点心思。我有几个原则,一直按这个来:
- 每条尽量短。能一句话说清就不写两句话,AI 的上下文窗口是有限的,被废话占满就亏了。
- 用具体命令和文件名,不要用模糊描述。写“构建产物在 dist 目录”,比写“构建后在输出目录里”强一百倍。
- 事实和偏好分开。事实是“数据库在 PostgreSQL”,偏好是“所有表名用蛇形命名”。AI 对两者都会采纳,但你自己回顾维护的时候,分开放更好改。
- 不要写 AI 自己知道的事。比如“Python 是一种编程语言”这种废话,写了只是浪费一个 token。
还有个小技巧,Claude Code 自带一个/init命令,你在项目目录里敲这个,它会根据现有代码自动生成一份 CLAUDE.md 草稿。草稿不一定准确,但可以作为起点,你再手动修正补充。自动生成加人工校验,比我纯手写要省不少时间。
3. Codex、VS Code、Qoder 的记忆配置对照
3.1 Codex 的 AGENTS.md 怎么配
Codex 用的记忆文件名叫 AGENTS.md,作用和 CLAUDE.md 几乎一样,都是放在项目根目录作为项目级指令。你把我刚才那份模板里的内容拷贝到一个新文件,改名为 AGENTS.md,放在项目根目录,Codex 启动时就会自动读取。
全局记忆方面,Codex 会读取用户主目录下~/.codex/AGENTS.md这个文件。注意,Codex 对不同层级文件的优先级处理是:离当前工作目录越近的规则文件优先级越高。所以如果全局文件里写了“代码注释用中文”,项目文件里写了“代码注释用英文”,那在项目里工作时,以项目文件为准。这个优先级设计挺合理,全局管习惯,项目管特例。
我实际用下来的感受是,Codex 对 AGENTS.md 的加载历史比 Claude Code 短,但它是认真对待这个文件的,尤其是在执行任务前会先读一遍。所以你把项目背景和常用命令写得清楚,它的整体表现会有肉眼可见的提升。
3.2 VS Code 里装 Claude Code 扩展后怎么共用记忆
很多人是在 VS Code 里用的 Claude Code,而不是在终端里直接敲命令。这个场景下,扩展本质上还是在读取项目目录下的 CLAUDE.md,所以你只需要照常维护项目根目录的 CLAUDE.md 文件,VS Code 里的 Claude Code 一样能读到,不需要额外配置。
至于 VS Code 里的其他 AI 扩展,情况稍微有些不同。Continue 这类插件通常有自己的 rules 配置入口,在扩展设置里可以找到;GitHub Copilot 有专门的 instruction 文件。这些和 CLAUDE.md 不能互通,但思路是一样的:在设置里指定一个文件路径,AI 启动时加载。我给 VS Code 配置记忆的通用方法是,先看这个扩展有没有“Rules”“Instructions”这类设置项,有就直接指定到你维护的 CLAUDE.md 文件上,这样你只需要维护一份,多个扩展共享。
3.3 Qoder 的规则配置与记忆恢复
Qoder 作为 AI IDE,不需要像命令行工具那样创建特定命名的文件,它是在设置里提供规则配置的地方。我在 Qoder 里用的方法是:打开设置,找到全局规则或项目规则配置入口,把记忆内容粘贴进去。全局规则适合放个人偏好,比如“回答尽量简洁”“代码优先用 TypeScript”这类;项目规则就放具体项目相关的,比如技术栈、目录结构、注意事项。
和 CLI 工具相比,Qoder 这类 IDE 的规则配置有一个优点,它有图形界面,不容易出现“文件名打错导致文件没被读取”的问题。但也有一个坑:不同版本的入口名称可能不一样,有的叫 Rules,有的叫 AI 设置,有的叫提示词配置。如果你找不到,直接在设置里搜“规则”或者“rule”,一般都能定位到。
另外我建议在 Qoder 的新建项目中直接预置一份自己的项目规则模板,这样每次开新项目不用从零写,复制一份改改项目名就能用。这个小习惯能帮你在换工具的时候少掉很多头发。
4. 一份可以直接抄走的长久记忆模板
4.1 项目级记忆文件模板
写了不少原则,直接给一份我最近在用的项目级模板。这份模板覆盖了最常见的需求,你复制到 CLAUDE.md 或 AGENTS.md 里,把内容替换成你自己的项目信息就行:
# 项目名称 ## 项目概述 一句话说清楚:这个项目是做什么的,给谁用,当前在什么阶段。 ## 技术栈 - 前端:React 18 + TypeScript + Vite - 后端:Node.js + Express - 数据库:PostgreSQL 15 - 部署:Docker + Nginx ## 常用命令 - 安装依赖:npm install - 启动开发环境:npm run dev - 运行测试:npm test - 代码检查:npm run lint - 构建生产包:npm run build ## 目录结构要点 - src/components:通用UI组件 - src/pages:路由页面 - src/api:接口请求层 - src/hooks:自定义 Hooks - 不要把业务逻辑直接写在组件里,统一放到 src/services ## 代码规范与约定 - 组件文件用 PascalCase 命名,变量和函数用 camelCase - 样式用 CSS Modules,不使用 Tailwind - API 请求统一走 src/api/client.ts 里的封装,禁止直接 fetch - 错误处理顺序:先捕获、再记录日志、最后抛给上层 - 数据库表结构变更必须写迁移脚本,禁止直接改表 ## 已知约束和注意事项 - 第三方接口的 API Key 统一放环境变量,禁止硬编码 - 线上环境日志级别是 warn,开发环境是 debug - 老接口 /api/v1 正在迁移中,新代码请优先使用 /api/v2 - 项目里有一些历史遗留代码在 legacy/ 目录,不建议继续扩展 ## 当前待办 / 近期计划 - 迁移老接口到新网关 - 完善错误码文档 - 准备 2.0 版本的上线检查清单这份模板的核心逻辑是“AI 干活前需要知道的上下文”。你仔细过一遍,每一条都是能直接指导 AI 行动的,而不是介绍性废话。我建议你把责任人和日期也加到文件末尾,方便之后维护的时候知道是谁在什么时候改的。
4.2 全局记忆文件模板
项目文件管项目,全局文件管个人习惯。这里放一份适合放在用户主目录的全局模板(Claude Code 是 ~/.claude/CLAUDE.md,Codex 是 ~/.codex/AGENTS.md):
# 全局工作偏好 ## 沟通方式 - 回答问题先给结论,再展开细节 - 不确定的信息要明说,不要编造 - 给出的代码要能直接运行,不要留伪代码 ## 代码风格 - 前端优先选 TypeScript,不要用 JavaScript 裸写 - 组件和函数尽量小,拆开写,方便测试 - 复杂逻辑必须补注释,注释说清楚"为什么"而不是"是什么" - 依赖包要克制,能不用新依赖就不用 ## 项目操作习惯 - 修改代码前先给出简要方案,再动手 - 大改动要分步骤提交,不要一次性替换整个文件 - 改动完成后总结改了哪些文件、影响范围是什么 - 遵守项目的既有风格,不按个人偏好硬改代码 ## 工具偏好 - 优先使用项目自带的命令执行测试和构建 - 命令行工具多用 git status 确认当前状态,不要盲目操作 - 遇到报错先看日志,再猜测原因全局文件的威力在于,不管你开哪个项目,AI 都会先读这一层再进项目。我经常给不同项目配不同的 CLAUDE.md,但这个全局文件从配好那天起就没怎么动过,因为它管的是“我怎么跟 AI 协作”这件跨项目通用的事。
4.3 记忆文件的版本管理与团队共享
CLAUDE.md 和 AGENTS.md 本质上就是普通文本文件,所以它们也应该纳入 Git 管理。项目级的记忆文件建议提交到仓库里,这样团队成员拉下代码的同时就拿到了项目的 AI 配置,大家调教 AI 的经验也能沉淀到代码库里。我见过一个团队把 CLAUDE.md 写成了一个活的运维手册,新人进来先让 AI 教他项目结构,体验比看几十页旧文档好太多。
全局记忆文件不建议提交到仓库,它是高度个人化的东西,放自己电脑就行。如果你有多个设备,可以用云同步工具同步 ~/.claude 和 ~/.codex 这两个目录,不用手动复制。
这里有个建议:项目级的规则文件,改动要走 review。因为它会影响所有用这个仓库的 AI 行为,如果某人写了一条“所有接口都用 mock 数据”这种临时规则,没及时删除,后面所有 AI 生成的代码都会被带偏。让更新走一次 code review,能省掉不少返工的时间。
5. 进阶玩法:让记忆从“能用”到“好用”
5.1 用子目录记忆文件控制生效范围
Claude Code 和 Codex 都支持在子目录里再放规则文件,作用范围限定在该目录及其子目录。这个特性特别适合项目里有多个模块、不同模块约定不一致的情况。
我举个实际例子。有一个项目的根目录 CLAUDE.md 写的是“技术栈 React”,但项目里有个 tools/ 目录,里面是 Python 脚本。你可以在这个 tools/ 目录下放一个 CLAUDE.md,写上:
# tools 目录专用规则 - 本目录是 Python 脚本,不是前端项目,不要在此目录执行 npm 命令 - 脚本运行方式:python3 tools/xxx.py --env=dev - 代码风格遵循 PEP 8,但行宽可以放宽到 120 字符 - 不要在这个目录里引用前端的代码规范这样当 AI 在分析 tools 目录下的文件时,会自动加载这一层规则,不会被根目录的 React 规范误导。这相当于给 AI 配了一张“分层地图”,到哪块区域看哪块规则。我实测下来,对多语言混排仓库效果特别明显。
5.2 用 @ 引用保持记忆文件轻量
记忆文件不设限地长下去,早晚会因为占满上下文窗口拖累 AI 性能。我的解法是用 @ 引用,把细节挪到外部文档。
Claude Code 的 CLAUDE.md 支持@路径语法,比如你在文件里写一行:
## 详细接口文档 @docs/api-conventions.md启动时 Claude Code 会把引用的这个文件内容一并加载进来。更灵活的是,引用路径可以是 glob 模式,比如@docs/*.md。用这种方式,CLAUDE.md 本身保持精简,详细信息放独立文档,按需加载,不占每一轮对话的上下文。
实际操作中,我会做一个分级策略:核心信息(技术栈、命令、规范)直接写在 CLAUDE.md 里,不管什么场景都要用;扩展信息(接口约定、部署流程、权限说明)放在 docs 目录下,用 @ 引用。这样记忆文件始终保持在 80 到 120 行以内,AI 加载得快,执行也稳。
5.3 把对话历史沉淀成记忆的“复盘”流程
前面说的都是“事前配置”,这里讲一个“事后维护”的习惯。每次和 AI 合作完成一个任务后,花两分钟复盘一下:这次对话里有没有哪些信息是下次还会用到的?如果有,就追加到相应的记忆文件里;如果没有,就保持原样。
比如有一次我让 Claude Code 帮我排查一个上传功能的问题,折腾了半天,最后发现是 Nginx 的 client_max_body_size 太小。这个信息太有用了,我直接追加到 CLAUDE.md 的“已知约束”里:上传接口部署后如果报 413,先检查 Nginx 配置。之后再有类似问题,AI 第一反应就能想到这个方向,排查时间缩短了一半。
这个习惯比任何技术方案都重要。记忆文件不是写一次就能一劳永逸的,它需要跟着项目的演化持续更新。我会在每个迭代周期结束的时候统一 review 一次记忆文件,删掉过时的,补充新发现的坑。一个项目的 CLAUDE.md 从最开始写的那天起,会被我反复改很多次,每一版都比前一版更接近“AI 一看就懂”的状态。
5.4 更自动化的思路:借助记忆服务
如果你想更进一步,不想手动整理记忆文件,现在的生态里有一些专门做 AI 记忆的服务和 MCP 组件。它们的思路是:把每次对话的关键信息自动抽取出来,存到向量数据库里,下次对话时根据当前上下文检索并注入相关记忆。
这种方案的优点是完全自动,不依赖你主动维护;缺点是需要额外搭一套服务,对于大多数单项目场景来说有点重。我的建议是,先把 CLAUDE.md 这类文件式记忆用好,它零成本、全局生效、可控可改。等你的记忆量真的达到手动维护不过来时,再考虑上记忆服务不迟。小项目用文件,大项目上服务,这才是不走弯路的路线。
6. 常见问题与排查实录
6.1 记忆文件为什么不生效
遇到最多的问题是文件名或位置不对。CLAUDE.md 就认这个大小写拼写,你写个 claude.md 或者 Claude.md 它就完全不认。位置方面,项目文件必须放在项目根目录,放子目录只对子目录生效。全局文件要放在用户主目录下,Windows 上是 C:\Users\你的用户名.claude\CLAUDE.md,macOS 和 Linux 上是 ~/.claude/CLAUDE.md。
还有一个容易忽略的点,改了记忆文件之后,已经启动的会话不会自动重新加载。你必须重启一下工具,或者新开一个会话,改动才会生效。很多人改完文件发现没效果,不是改错了,是没重启。
6.2 记忆文件太长会拖垮 AI 表现
记忆文件越长,AI 的上下文窗口被占用的就越多。我之前有一次把整个项目的架构文档全塞进去,结果 AI 写代码时上下文不足,经常出现“忘了自己的输出格式”的情况。所有规则文件加在一起,建议控制在 150 行以内,超过这个量就要考虑分层了。
判断记忆文件是否过长的标准很直接:你问 AI 一个项目里很简单的问题,如果它回答的内容里混入了大量无关的细节,那多半是记忆文件太杂。这时候把不常用的内容挪到 @ 引用的外部文档里,或者直接删掉。
6.3 多个工具之间记忆不互通怎么办
如果你同时用 Claude Code 和 Codex,维护两份记忆文件确实烦人。我的做法是维护一份母版,放到项目根目录,比如叫 AI_CONTEXT.md,然后 CLAUDE.md 和 AGENTS.md 都引用它:
# CLAUDE.md 内容 此文件是入口,实际内容见 @AI_CONTEXT.md# AGENTS.md 内容 此文件是入口,实际内容见 @AI_CONTEXT.md这样你只需要维护 AI_CONTEXT.md 一份文档,两个工具都能加载到。对于 Qoder 这类有自己的规则配置工具的,可以把同样的内容粘贴到它的规则设置里,没法自动同步,但至少内容来源是同一个。
6.4 记忆被“过度遵守”怎么办
记忆文件写得太绝对,有时候会反过来害你。比如你写了“样式用 CSS Modules,不使用 Tailwind”,结果后来项目引入了 Tailwind,AI 还是会遵守旧规则,拒绝使用 Tailwind,这时候你就得手动修正。
我一般给规则加有效期,特别是那些临时性很强的约束。比如“当前在迁移老接口,新代码请优先使用 /api/v2”,后面补一句“迁移完成后删除此条”。或者定期清理,每次项目有大变动,就过一遍记忆文件,把所有过时的、不再适用的规则删掉。记忆文件的价值在于它是“活的”,跟项目同步演化,而不是一份写了就封存的历史档案。
6.5 常见问题排查速查表
| 症状 | 可能原因 | 解决办法 |
|---|---|---|
| 记忆文件完全不生效 | 文件名拼写或者位置不对 | 检查文件名是否为 CLAUDE.md/AGENTS.md,位置是否为项目根目录 |
| 改了文件但没有反应 | 当前会话没有重新加载 | 重启工具或新开一个会话,不要继续用旧会话 |
| 记忆文件内容没完全被采用 | 文件太长,部分内容超出加载范围 | 精简到 150 行以内,关键信息往文件前部放 |
| 多个工具回答不一致 | 各工具读取的是不同文件 | 统一出一份母版,让不同规则文件都引用它 |
| AI 坚持旧的过时规则 | 记忆文件里有过期条目 | 定期 review,删除临时性规则,给规则加有效期 |
| 某一子目录的规则覆盖了全局 | 子目录规则优先级更高 | 确认子目录规则确实是你想要的,否则删除该文件 |
| 本地模型接入时,AI 回复不稳定 | 本地推理服务未正常启动或配置不对 | 检查本地服务的监听端口和配置,重启后重新测试 |
每次排查这类问题,我都有一个固定套路:先确认文件有没有被读到,再确认读到的内容是不是最新版,最后确认是不是被某个更高优先级的规则覆盖了。按这个顺序走,大部分问题都能在几分钟内定位。
我个人在实际操作中越来越觉得,配置记忆文件这事的收益被严重低估了。它不花什么钱,不占什么资源,却直接决定了你每次和 AI 协作的起始水平。与其天天在对话里反复叮嘱同样事情,不如花两分钟把它写下来。真正用顺手之后,你会发现这些工具不像是“每次都失忆的新人”,反而更像一个越用越懂你的老搭档。