Codex 项目记忆管理实践:让每个项目都有自己的上下文
Codex 项目记忆管理实践:让每个项目都有自己的上下文
我在使用 Codex 处理多个项目时,遇到一个很现实的问题:每个项目都有自己的技术栈、目录结构、发布流程和长期约定,但这些信息如果只靠对话临时说明,很容易在新线程、新任务或长时间中断后丢失。
所以更稳的做法不是只依赖“模型记住”,而是把项目记忆拆成几层,分别放到合适的位置。
一、为什么要做项目记忆
在日常开发中,很多信息不是代码本身能完整表达的,例如:
- 这个项目常用哪些命令?
- 哪些文件不能随便改?
- 发布文章前要先检查什么状态?
- 哪些目录只是草稿收件箱,不能直接提交?
- 哪些 manifest 文件决定了后续是否会重复发布?
- 最近做过哪些改动,下次继续时应该先看哪里?
这些信息如果每次都重新解释,会浪费时间;如果不解释,又容易让 Agent 做出错误操作。
项目记忆的目标就是:让 Codex 每次进入项目时,先读到稳定、明确、可版本管理的上下文。
二、不要只依赖 Codex Memories
Codex 的 Memories 可以辅助记住偏好、工作流、技术栈和已知坑点,但它更像一个后台回忆层。
真正需要长期、稳定、可控、可提交的规则,应该写进项目文件里。
我的分工是:
全局 AGENTS.md 个人通用规则项目 AGENTS.md 当前项目的协作规则CONTEXT.md 项目长期事实和架构上下文PROJECT_MEMORY.md 面向后续任务的快速记忆Codex Memories 辅助回忆,不作为唯一依据这样做的好处是:即使换线程、换环境,只要项目文件还在,规则就不会丢。
三、全局 AGENTS.md:记录个人通用偏好
全局文件一般放在:
C:\Users\你的用户名\.codex\AGENTS.md它适合记录所有项目都通用的规则,例如:
- 默认使用中文回答。
- Git 默认只读,不自动
git add、commit、push。 - PowerShell 命令使用
pwsh,脚本里设置$ErrorActionPreference = 'Stop'。 - 敏感信息、token、cookie、OAuth 凭据不能直接输出。
- 修改文件后要做最小验证,不能把“未验证”说成“已通过”。
这类规则和某个具体项目无关,应该放在全局层。
四、项目 AGENTS.md:记录项目专属协作规则
每个项目根目录可以放一个:
AGENTS.md这个文件适合告诉 Codex:进入这个项目后应该怎么工作。
例如:
# 项目协作指令
## 项目概况
- 本项目是 Astro 静态博客。- 文章位于 `src/content/posts`。- 项目长期上下文记录在 `docs/CONTEXT.md`,任务入口记忆记录在 `docs/PROJECT_MEMORY.md`。
## 常用命令
- 安装依赖:`pnpm install`- 本地开发:`pnpm dev`- 类型检查:`pnpm run type-check`- 构建:`pnpm run build`
## 修改规则
- 开始任务前先读取 `docs/CONTEXT.md` 和 `docs/PROJECT_MEMORY.md`。- 不做无关重构。- 不进行全项目格式化。- 修改发布流程、构建命令、目录结构后,同步检查项目记忆是否需要更新。项目 AGENTS.md 不应该塞太多临时记录,它更像“项目协作规范”。
五、CONTEXT.md:记录稳定的项目事实
docs/CONTEXT.md 适合放长期稳定的信息。
例如:
- 项目定位
- 技术栈
- 运行方式
- 重要目录
- 内容模型
- 发布流程
- 部署方式
- manifest 路径
- 已知长期坑点
- 推荐验证方式
它回答的是:这个项目到底是什么,以及长期应该怎么维护。
一个简单结构可以这样写:
# 项目长期上下文
## 项目定位
- 本项目是个人博客发布目标。- 项目不仅包含主题代码,还包含内容发布脚本。
## 技术栈与运行方式
- 包管理器:pnpm。- 框架:Astro、Svelte、TypeScript。- 构建命令:`pnpm run build`。
## 重要目录
- `src/content/posts`:正式文章。- `src/config`:站点配置。- `scripts`:发布脚本和工具脚本。
## 何时更新本文档
- 改了架构、部署方式、发布流程、目录结构或关键命令时更新。CONTEXT.md 不是日志,不需要记录每一次小改动。
六、PROJECT_MEMORY.md:记录后续任务入口
docs/PROJECT_MEMORY.md 更适合放“下次接着做时最应该先想起来的东西”。
它可以记录:
- 最近的重要改动
- 后续任务入口
- 容易忘的维护提醒
- 当前项目的高频坑点
- 哪些测试命令最常用
- 哪些文件改动时要格外谨慎
比如:
# 项目记忆
## 当前任务入口
- 常见任务主要是发布文章、维护发布脚本、调整主题配置。- 发布文章前必须先看状态,不能凭文件名直接复制。
## 近期重要记忆
- 最近新增了项目 `AGENTS.md`、`docs/CONTEXT.md`、`docs/PROJECT_MEMORY.md`。- 最近发布脚本依赖 manifest 判断文章是否已经发布。
## 维护本文件的规则
- 只记录未来任务会反复用到的信息。- 不记录一次性命令输出、临时调试步骤或未验证猜测。如果说 CONTEXT.md 是项目档案,那么 PROJECT_MEMORY.md 就是后续任务的便签。
七、什么时候更新记忆
我现在采用的规则是:
改了项目长期事实 → 更新 CONTEXT.md新增近期维护提醒 → 更新 PROJECT_MEMORY.md两者都影响 → 两个都更新具体来说,下面这些情况应该更新:
- 改了架构或目录职责。
- 改了启动、构建、测试、部署方式。
- 改了内容发布流程。
- 改了 manifest 路径或发布状态机制。
- 新增一个以后会反复踩的坑。
- 做了长期有效的设计决策。
- 修改了项目级
AGENTS.md规则。
下面这些情况通常不需要更新:
- 只修了一个很小的 bug。
- 临时调试命令。
- 一次性的错误输出。
- 还没确认的猜测。
- token、cookie、账号凭据等敏感信息。
八、我的推荐工作流
以后每次进入项目,可以按这个流程:
1. 读取全局 AGENTS.md2. 读取项目 AGENTS.md3. 按项目 AGENTS.md 要求读取 docs/CONTEXT.md4. 读取 docs/PROJECT_MEMORY.md5. 开始处理任务6. 任务结束前判断是否需要更新项目记忆7. 运行必要验证8. 给出本轮修改摘要和建议 commit message当我明确知道这次改动会影响长期记忆时,可以直接对 Codex 说:
这次改动会影响项目记忆,帮我更新 docs/CONTEXT.md 和 docs/PROJECT_MEMORY.md如果只是新增一个提醒,可以说:
把这个注意事项记录到 PROJECT_MEMORY.md如果是稳定项目规则,可以说:
把这个发布流程变化同步到 CONTEXT.md九、以 Firefly 项目为例
在 Firefly 博客项目里,我最终整理了三类文件:
AGENTS.md项目协作规则,告诉 Codex 如何处理这个仓库。
docs/CONTEXT.md项目长期事实,包括技术栈、目录结构、发布流程、manifest 位置和验证方式。
docs/PROJECT_MEMORY.md后续任务入口,包括近期改动、发布提醒、UI 行为记忆和常用测试命令。这个项目里有文章发布流程,所以尤其要记录:
Firefly-docs是本地草稿收件箱,不是 Astro content collection。- 发布前必须运行
node scripts\publish-firefly-doc.js --list。 Firefly-docs/data/firefly-docs-publish-manifest.json必须保留。- 外部 LeetCode 题解目录默认只读。
- 发布图片时要复制到
public/assets/...并重写成站点根路径。
这些规则如果只靠记忆,很容易在后续任务中漏掉;写进项目文档后,Codex 每次进入项目都能先读到。
十、总结
让 Codex 对每个项目保持记忆,不是让它“凭空记住所有事”,而是把上下文放到正确的位置。
我的最终做法是:
个人习惯 → 全局 AGENTS.md项目规则 → 项目 AGENTS.md长期事实 → docs/CONTEXT.md近期提醒 → docs/PROJECT_MEMORY.md辅助回忆 → Codex Memories这样既能保持自动化协作的连续性,也能让项目规则变得可检查、可提交、可迁移。
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!