Codex、Claude、Trae 会话上下文管理与记忆系统对比
核对时间:2026-10-21
范围:OpenAI Codex、Claude / Claude Code、TRAE IDE
口径:优先采用官方文档;Claude Code 深层算法参考源码分析;Codex 部分实现结合当前本机 0.163 版本观察。
一、先说结论
三家都不是简单地把“聊天记录全部塞回模型”,而是在解决四个不同问题:
- 当前任务需要知道什么:系统提示、用户消息、工具结果、打开的文件。
- 长会话超过上下文窗口怎么办:裁剪、摘要、压缩、重读关键文件。
- 跨会话应该记住什么:用户偏好、项目事实、纠正反馈、外部资料入口。
- 哪些内容现查比记忆更可靠:代码、Git 历史、数据库、线上状态。
可以用一个统一模型理解:
flowchart LR
A[当前任务 Prompt] --> G[上下文组装器]
B[会话历史 / 摘要] --> G
C[项目规则文件] --> G
D[长期记忆与检索结果] --> G
E[代码索引 / 工具结果] --> G
G --> F[模型上下文窗口]
F --> H[模型决策与工具调用]
H --> I[新消息 / 工具结果]
I --> G
H --> J[会话持久化]
H --> K[记忆提取与更新]核心差异:
| 产品 | 最核心的上下文路线 | 记忆观 |
|---|---|---|
| Codex | 仓库优先 + 会话持久化 + 自动压缩 + 可检索的本地记忆 | 记忆是辅助,显式指令和当前代码优先 |
| Claude Code | CLAUDE.md + Auto Memory + 分层压缩 + 子 Agent 隔离 | 指令与经验分开,项目记忆高度文件化 |
| TRAE | 手动指定上下文 + 工作区索引 + 规则 + 记忆文件 + 自动压缩 | 强调“你明确给它看什么” |
一句话概括:
- Codex:工程任务连续性和本地记忆仓库。
- Claude Code:规则、自动记忆、分层压缩做得最系统。
- TRAE:显式上下文选择最直接,工作区索引和记忆文件最好理解。
二、不要把四个概念混为一谈
1. 上下文窗口
模型单次请求能看到的 Token 总量,包括:
- 系统提示和开发者指令;
- 项目规则;
- 用户历史消息;
- 模型历史回复;
- 工具调用参数与结果;
- 文件内容;
- 检索到的记忆。
上下文窗口不是硬盘,也不是数据库。窗口大不等于记得久。
2. 会话历史
一次对话的完整记录,通常可以恢复、继续或分支。它解决的是:
- 关闭应用后还能继续;
- 可以回看工具调用过程;
- 可以从历史节点 Fork;
- 可以对长历史做压缩。
3. 上下文压缩
当历史消息接近窗口上限时,把旧内容变成摘要、删除冗余工具结果,或只保留当前任务需要的信息。
压缩后的内容仍然只属于当前会话,不等于长期记忆。
4. 长期记忆
跨会话或跨任务保存的知识,常见形式包括:
- 用户偏好;
- 项目背景;
- 曾经纠正过 AI 的规则;
- 外部资料入口;
- 历史会话的可检索索引。
长期记忆通常需要主动写入、自动提取、检索召回和过期清理。
三、OpenAI Codex
1. 上下文来源
Codex 更偏“仓库是一个可持续工作区”,上下文通常来自:
- 当前线程消息;
- 工作区路径、Git 状态和平台环境;
- 根目录及子目录的
AGENTS.md; - 项目或全局
config.toml; - Skills、Plugins 和 MCP 工具;
- 实际读取的文件与命令输出;
- 历史线程和记忆检索结果。
AGENTS.md 是 Codex 最重要的稳定规则入口。它适合放:
- 构建、测试、格式化和部署命令;
- 团队代码规范;
- 不能破坏的架构边界;
- 必须遵循的验收方式。
嵌套 AGENTS.md 会按目录层级生效,越靠近当前工作目录的规则越具体。
2. 会话管理方式
当前 Codex CLI 明确支持:
codex resume:恢复历史会话;codex fork:从历史会话分叉出独立任务;- 本地 thread history 和归档;
- 线程级别的名称、状态和输出摘要。
因此 Codex 的会话模型不只是“一串消息”,更接近可管理的任务线程:
任务线程
├── 当前消息序列
├── 工具调用和结果
├── 自动压缩摘要
├── 工作区与环境快照
├── 关联的子 Agent
└── 可恢复 / 可分支的历史3. 上下文压缩
当上下文耗尽时,Codex 会自动压缩并继续任务。压缩后不会保留每个原始 Token,而是保留:
- 用户真实意图和约束;
- 已确认的决策;
- 已修改文件和关键错误;
- 待办与当前进度;
- 继续任务所需的最小事实。
这意味着:
- 压缩后细节可能丢失;
- 关键约束最好同时写进
AGENTS.md或任务文件; - 代码事实应重新读文件验证,不能只相信摘要。
4. 长期记忆实现
当前本机 Codex 0.163 可见以下结构:
~/.codex/memories/
├── raw_memories.md
├── rollout_summaries/
├── extensions/
│ └── ad_hoc/
│ └── instructions.md
└── phase2_workspace_diff.md从当前二进制和本地工作区可以观察到:
- 记忆有生成开关、使用开关和独立工具;
- 记忆工具包含
list、read、search、ad_hoc_note; - 有“原始记忆提取”和“第二阶段记忆整合”;
- 会使用历史 rollout 摘要作为输入;
- Phase 2 通过工作区 diff 管理整合结果;
- 不是把所有记忆无条件塞进每次请求,而是具有可检索的仓库特征。
可以用下面的分层理解:
原始会话
↓ Phase 1:提取候选记忆
raw memories / rollout summaries
↓ Phase 2:去重、归并、整理
长期记忆工作区
↓ 运行时按需读取或检索
当前 Codex 任务注意:这是当前版本的实现观察,不是稳定的公开产品契约,后续版本可能调整。
5. Codex 的边界感
Codex 的优先级通常是:
当前用户明确指令
> 当前代码和工作区事实
> AGENTS.md / 项目配置
> 历史记忆与推断这也是使用 Codex 时最稳妥的策略:
- 长期规则写
AGENTS.md; - 当前任务约束直接写 Prompt;
- 项目状态以代码、配置和 Git 为准;
- 记忆只用来减少重复沟通,不作为外部事实来源。
四、Claude 与 Claude Code
Claude 要分成两个层面看:
- Claude 聊天产品:跨聊天记忆、历史聊天搜索、Project Memory;
- Claude Code:项目规则、自动记忆、上下文压缩、子 Agent 隔离。
1. Claude 聊天产品的记忆
官方当前机制包括两套能力:
历史聊天搜索
Claude 可以按需搜索过去聊天,检索使用 RAG,并以工具调用形式出现。
搜索边界:
- 普通聊天可以搜索项目外的历史会话;
- Project 内的聊天通常只检索当前 Project;
- 搜索结果会带原始聊天引用;
- Incognito Chat 不进入历史和记忆。
自动记忆
Claude 会把记忆保存成一组独立主题,而不是简单保存完整聊天摘要。记录内容包括:
- 用户角色、项目和专业背景;
- 人物、地点和工作上下文;
- 沟通偏好、技术偏好;
- 项目详情和进行中的工作。
控制能力较完整:
- 全局开关;
- 单次聊天关闭记忆;
- Project 独立记忆;
- 查看、编辑、删除单条记忆;
- 支持敏感主题开关和禁止保存的信息类型;
- 支持导入、导出记忆。
Claude Project Memory 的隔离逻辑是:
Project A Memory
├── 使用 A 的项目记忆
├── 可叠加账号级普通记忆
└── 不读取 Project B 的记忆2. Claude Code 的两套记忆
Claude Code 每次会话开始时仍是一个新的上下文窗口,但会加载两类持续信息:
人工编写的 CLAUDE.md
加载顺序从广到窄:
组织统一策略
↓
用户全局 ~/.claude/CLAUDE.md
↓
项目 ./CLAUDE.md 或 .claude/CLAUDE.md
↓
项目本地 CLAUDE.local.md特点:
- 同一目录树的文件会拼接,不互相覆盖;
- 子目录规则按需加载;
@path/to/file可以导入其他文件,最多四层;.claude/rules/*.md可以按路径 glob 生效;CLAUDE.md是上下文,不是强制安全策略;- 强制阻止某类操作应使用 Hook。
Claude 自动写入的 Auto Memory
Auto Memory 默认开启,按仓库隔离,存储在:
~/.claude/projects/<project>/memory/
├── MEMORY.md
├── user_role.md
├── feedback_testing.md
├── project_deadline.md
└── reference_issue_tracker.md四类记忆:
| 类型 | 记录内容 |
|---|---|
user | 用户角色、经验和偏好 |
feedback | 用户纠正过什么、确认过什么方法 |
project | 代码和 Git 中无法推导的项目状态、决策、截止时间 |
reference | Linear、Grafana、Dashboard 等外部资料入口 |
加载策略:
MEMORY.md每次会话加载前 200 行或前 25KB;- 具体主题文件不全部加载,需要时再读;
- Auto Memory 是机器本地数据,不跨电脑同步;
- 同一 Git 仓库的 worktree 和子目录共享项目记忆;
- 子 Agent 默认不继承主会话 Auto Memory。
这是一个很典型的两级结构:
MEMORY.md = 轻量索引,常驻
topic files = 详细内容,按需读取3. Claude Code 的上下文压缩
Claude Code 的公开机制是:
- 接近窗口上限时自动压缩;
/compact可手动压缩;/compact focus on ...可以指定摘要重点;/context查看当前上下文组成;/memory打开记忆文件;- 子 Agent 使用独立上下文窗口,只把摘要带回主线程;
- 压缩后重新注入根目录
CLAUDE.md、Auto Memory、技能说明和 Plan; - 压缩后最多重新读取最近修改的 5 个文件。
从源码分析看,Claude Code 还有更细的分层防御:
- 工具结果预算;
- 旧历史裁剪;
- Microcompact 清理旧工具结果;
- Context Collapse 做增量投影摘要;
- Auto Compact 做 LLM 全量摘要;
- 超限硬停;
- 413 错误后的 Reactive Compact。
这部分属于源码分析结论,不应直接当成 Anthropic 对用户承诺的永久实现。
4. Claude 的设计特点
Claude Code 的设计重点不是“尽量多存”,而是:
- 人工规则与 AI 自动记忆分开;
- 索引常驻、详情按需;
- 压缩后重新注入稳定规则;
- 子 Agent 隔离大文件和高噪声调查;
- 记忆文件使用 Markdown,可审计、可编辑。
它的优势是体系完整;风险是规则文件和记忆文件会持续膨胀,需要定期清理。
五、TRAE
1. 显式上下文
TRAE 最强调的是“把需要的上下文明确加入对话”:
- 当前打开文件默认可见;
- 选中代码后可“添加到对话”;
- 终端输出可加入对话;
- 用
#添加:#Code#File#Folder#Workspace#Document#Web
这让 TRAE 更像一个“上下文可编排的 IDE”,而不是完全依赖模型自己猜该读什么。
2. 工作区代码索引
TRAE 可以为当前工作区建立代码索引。
使用 #Workspace 或 #Folder 时,AI 会结合索引理解整个项目。可设置:
- 自动索引;
- 代码变化后自动更新;
- 手动重建;
- 忽略文件,把敏感或无关文件完全排除。
这一层更接近“代码语义检索”,与长期记忆是两套东西:
代码索引 = 当前代码库是什么样
长期记忆 = 用户和项目过去沉淀了什么3. 上下文压缩
TRAE 每个对话有独立上下文窗口。
官方机制:
- 每轮对话显示上下文使用率;
- 接近或超过窗口上限时自动压缩;
- 用户可以手动点击“压缩”;
- 压缩会移除冗余信息,只保留与当前任务相关的内容;
- 新建会话后,先前上下文会清空。
所以 TRAE 的会话连续性主要依赖:
- 不关闭当前会话;
- 使用压缩延长当前会话;
- 把真正跨会话的内容写进 Rule 或 Memory。
4. 规则系统
全局规则:
~/.trae/user_rules项目规则:
项目/.trae/rules/*.md项目规则支持四种生效方式:
| 方式 | 行为 |
|---|---|
| 始终生效 | 当前项目所有对话加载 |
| 指定文件生效 | 匹配 globs 时加载 |
| 智能生效 | 根据 description 判断相关性 |
| 手动生效 | 使用 #Rule 显式引用 |
其他特点:
- 规则目录最多递归识别 3 层;
- 支持子目录专属规则;
- 支持导入
AGENTS.md; - 支持导入
CLAUDE.md和CLAUDE.local.md; - 规则适合项目约束,记忆更适合偏好和协作经验。
5. TRAE Memory
TRAE 有两类记忆:
| 类型 | 作用域 | 文件 |
|---|---|---|
| 全局记忆 | 当前用户所有本地项目 | ~/.trae/memory/user_profile.md |
| 项目记忆 | 当前用户当前项目 | ~/.trae/memory/projects/{project_path}/project_memory.md |
限制:
- 只保存在本地;
- 不跨电脑同步;
- Agent Window 中只有本地任务和工作树任务支持生成记忆;
- 新会话不会自动带走旧会话上下文,但可以重新读取 Memory。
不会自动保存:
- 一次性或临时指令;
- 含糊、不确定的偏好;
- 密码、个人隐私等敏感信息。
管理方式:
- 设置页打开记忆开关;
- 直接编辑 Markdown 文件;
- 对话中要求 AI 创建、更新、删除记忆;
- AI 根据上下文自动创建和更新。
6. TRAE 的设计特点
TRAE 的优势是可见性和可控性:
- 文件、代码、终端、网页可以精确加入上下文;
- 代码索引和记忆分得比较清楚;
- 规则和记忆都是 Markdown,用户容易检查。
主要边界:
- 记忆是机器本地数据;
- 新会话不会继承完整会话历史;
- 如果用户不主动
#File/#Folder,模型是否获得完整上下文取决于索引状态。
六、三家横向对比
1. 能力矩阵
| 维度 | Codex | Claude Code | TRAE |
|---|---|---|---|
| 当前会话历史 | 完整线程,可恢复、可 Fork | 完整会话,可恢复和回退 | 完整当前对话 |
| 项目规则 | AGENTS.md 层级生效 | CLAUDE.md 多级拼接 + .claude/rules | .trae/rules + 导入 AGENTS.md / CLAUDE.md |
| 自动上下文压缩 | 有 | 有,分层最细 | 有,自动 + 手动 |
| 长期记忆 | 本地记忆仓库,提取 + 整合 + 检索工具 | Auto Memory,索引 + 主题文件 | 全局 / 项目 Markdown 记忆 |
| 历史聊天检索 | 线程恢复与本地记忆检索 | Claude 聊天产品支持 RAG 搜索历史聊天 | 主要依赖当前会话与 Memory |
| 代码库检索 | 文件读取、搜索、Skills、MCP | 文件工具、按需规则、子 Agent | 工作区代码索引 + #Workspace |
| 团队共享 | AGENTS.md、Skills、Plugins | CLAUDE.md、Project、团队设置 | .trae/rules、仓库文件 |
| 记忆透明度 | 中,需看本地目录 | 高,MEMORY.md 与主题文件 | 高,两个 Markdown 文件 |
| 子上下文隔离 | 子 Agent 独立上下文 | 子 Agent 独立窗口,效果成熟 | 多 Agent / Agent Window |
| 最突出的强项 | 任务线程和工作区连续性 | 记忆体系完整、压缩精细 | 显式上下文选择、索引直观 |
2. 稳定规则放在哪里
| 需求 | 推荐位置 |
|---|---|
| 全团队必须遵守 | 仓库内 AGENTS.md 或 CLAUDE.md / .trae/rules |
| 个人跨项目偏好 | Codex Memory、Claude 用户级 CLAUDE.md、TRAE 全局记忆 |
| 当前仓库个人偏好 | Claude CLAUDE.local.md、Codex 本地 AGENTS.md、TRAE 项目记忆 |
| 当前任务一次性约束 | 直接写本次 Prompt |
| 大段外部资料 | 文件、文档集、MCP、RAG,不建议塞进 Memory |
| 可执行强制约束 | Hook、权限系统、CI,不应该只靠 Memory |
3. 记忆的可靠性排序
在编程任务中,建议始终采用下面的优先级:
代码与运行结果
> Git 历史和配置
> 当前用户明确指令
> 项目规则文件
> 自动记忆
> 模型推断原因很简单:
- 代码会变化;
- 记忆可能过期;
- 压缩摘要可能漏掉细节;
- 自动记忆可能把一次性偏好误判为长期偏好。
七、三者背后的共同趋势
1. 从“聊天记录”转向“分层上下文”
早期产品只保存消息。现在都拆成:
- 当前轮;
- 会话摘要;
- 项目规则;
- 检索内容;
- 长期记忆;
- 工具结果预算。
2. 从“全部常驻”转向“索引常驻、详情按需”
典型做法:
- Claude
MEMORY.md常驻,主题文件按需; - Codex Memory 使用
list/read/search工具; - TRAE
#Workspace依赖代码索引,再按需展开文件。
3. 从“模型自己记”转向“用户可审计”
三家都逐渐采用 Markdown 或类似透明存储:
- 用户能直接看;
- 能编辑;
- 能删除;
- 能放进 Git 管理;
- 不必依赖不透明的向量黑盒。
4. 子 Agent 成为上下文隔离手段
大文件调查如果都放主线程,会快速污染上下文。
更成熟的方式是:
主 Agent:
负责目标、决策和最终修改
子 Agent:
在独立窗口读取大量文件
只返回结论、证据路径和差异摘要5. 压缩不等于记忆
压缩解决“当前会话继续运行”; 记忆解决“下一个会话还能知道什么”。
把压缩摘要当长期记忆,会带来三个问题:
- 摘要没有稳定结构;
- 重要与不重要内容混在一起;
- 无法按主题更新和删除。
八、实践建议
1. 通用目录设计
可以在项目里保持一套跨工具可复用结构:
project/
├── AGENTS.md # Codex / TRAE
├── CLAUDE.md # Claude Code
├── .claude/
│ └── rules/ # Claude 路径规则
├── .trae/
│ └── rules/ # TRAE 路径规则
├── docs/
│ ├── architecture.md # 可由三端共同读取
│ ├── commands.md
│ └── decisions.md
└── .ai/
├── project-context.md
└── known-pitfalls.md不必把同一份内容复制三遍。更推荐:
- 公共事实放
docs/; - 各工具规则文件只保留入口和差异;
- 用
@docs/...、文件引用或显式上下文加载公共文档; - 项目规则保持短小,避免每次会话都消耗大量 Token。
2. 规则文件应该写什么
适合:
- 构建和测试命令;
- 代码分层与目录边界;
- 禁止修改的协议和接口;
- 提交和发布流程;
- 常见错误和验证方法。
不适合:
- 当前任务的临时需求;
- 大段源码;
- 频繁变化的库存、价格、URL;
- 密码、Token、用户隐私;
- 可以从代码直接看出的事实。
3. 记忆文件应该写什么
适合:
- “我更偏好简洁回答”;
- “这个项目的发布必须走 dev → main”;
- “这个仓库的时区固定为 Asia/Shanghai”;
- “遇到某类问题先看哪个 Dashboard”;
- “用户已经确认过某个设计取舍”。
不适合:
- “今天先改这个文件”;
- “这次测试使用 1.3.0”;
- “某函数在第 123 行”;
- “线上库存是 100”;
- “刚才那个临时 token”。
4. 长任务建议
- 任务开始前写清目标、边界和验收标准。
- 大调研交给子 Agent 或分批读取。
- 关键决策及时写入计划文件或决策记录。
- 上下文压缩后重新确认代码状态。
- 任务结束前把可复用经验沉淀到规则或记忆,不把全部聊天当知识库。
- 每月清理过期偏好、重复规则和失效路径。
5. 安全边界
- Memory 不能保存密钥、密码、身份证、银行卡等敏感数据。
- 向量检索和聊天搜索需要明确数据可见范围。
- 团队记忆可能进入仓库或云端,写入前先确认是否会随
git push上传。 - 记忆必须可删除、可导出、可关闭。
- 生产系统的事实必须实时查询,不能依赖模型记忆。
九、最终判断
更适合谁
| 场景 | 推荐 |
|---|---|
| 大型仓库、多线程任务、需要恢复和 Fork | Codex |
| 重视项目规则、自动记忆、长会话稳定性 | Claude Code |
| 希望自己精确选择文件、网页、终端上下文 | TRAE |
| 需要跨产品共享项目规范 | AGENTS.md + docs/,各工具做薄适配 |
| 只在当前任务内使用 | 会话历史 + 压缩,不必写长期记忆 |
| 要求强制执行安全规则 | Hook / 权限系统 / CI,而不是 Memory |
最重要的一句话
上下文管理决定模型“现在能看见什么”,记忆系统决定模型“下次还愿意相信什么”。
真正可靠的 AI 编程工作流,不是追求“记住全部”,而是建立:
- 少量稳定的项目规则;
- 可检索的长期记忆;
- 必要时重新读取代码;
- 关键决策显式落盘;
- 压缩后能够恢复任务主线。
十、参考来源
OpenAI Codex
- Codex 官方文档:<https://developers.openai.com/codex/>
AGENTS.md与定制机制:<https://developers.openai.com/codex/concepts/customization#agents-guidance>- Codex 配置参考:<https://developers.openai.com/codex/config-reference>
- 当前本机 Codex 0.163 的 CLI、thread history、memories 目录和二进制结构观察。
Claude
- Claude Code 记忆机制:<https://code.claude.com/docs/en/memory>
- Claude Code 上下文窗口:<https://code.claude.com/docs/en/context-window>
- Claude 聊天搜索与记忆:<https://support.claude.com/en/articles/11817273-use-claude-s-chat-search-and-memory-to-build-on-previous-context>
- Claude 记忆导入与导出:<https://support.claude.com/en/articles/12123587-import-and-export-your-memory-from-claude>
TRAE
- TRAE 记忆:<https://docs.trae.ai/ide/memories>
- TRAE 上下文基础用法:<https://docs.trae.ai/ide/basic-usage-of-context>
- TRAE 工作区代码索引:<https://docs.trae.ai/ide/codebase-indexing>
- TRAE 上下文压缩:<https://docs.trae.ai/ide/context-compaction>
- TRAE 规则:<https://docs.trae.ai/ide/rules>