Coding Agent 记忆横评
Claude Code 记忆机制:精读: Claude Code 记忆系统 Codex 记忆机制:精读: Codex 记忆系统 OpenClaw flush:精读: OpenClaw Memory Flush MCP 拓扑:精读: MCP 记忆拓扑 Profile/MCP 基础:MCP 记忆集成层
调研元信息
| 项目 | 值 |
|---|---|
| 调研日期 | 2026-06-22 |
| 横评对象 | Claude Code、Codex、OpenClaw、Cursor、Cline、Aider |
| 涉及研究轴 | B(Coding Agent)为主 |
| 证据等级 | [源码] [文档] [社区] [已有] 混合 |
一句话定位
六大 Coding Agent 的记忆能力呈现三个梯队:Claude Code / Codex / OpenClaw 拥有完整的自动记忆系统,Cursor 刚起步(Memories Beta),Cline 和 Aider 依赖社区方案或手动配置——记忆能力正在成为 Coding Agent 的核心竞争力分水岭。
记忆类型标注
本文覆盖全部四类记忆:Working(上下文管理)、Profile(规则/配置)、User(自动提取的持久记忆)、External(MCP 外部服务)。
横评总表
| 维度 | Claude Code | Codex | OpenClaw | Cursor | Cline | Aider |
|---|---|---|---|---|---|---|
| User memory | 完整(memdir) | 完整(Phase1/2) | 完整(flush+dreaming) | Beta(1.0+) | 无 | 无 |
| Profile | CLAUDE.md 链式 | AGENTS.md 链式 | MEMORY.md + SOUL.md | .cursor/rules 4 模式 | .clinerules/ | CONVENTIONS.md |
| 写触发 | 每次响应后 hook | session 启动批量 | compaction 前 | AI 自动 + 用户触发 | 无 | 无 |
| 读路径 | 全量索引 + Sonnet 语义选取 | memory_summary 全量注入 | MEMORY.md + 近 2 天日记 | 向量搜索注入 | 全量 Rules 注入 | –read 手动加载 |
| 与 compaction | 独立(extract 不绑 compaction) | 独立(Phase1 不绑 compaction) | 双轨(flush 前置 compaction) | 不确定 | Auto Compact(无记忆写入) | /compact(无记忆写入) |
| MCP 扩展 | 原生支持 | 沙箱内支持 | Host-Adapter | 原生支持 | 原生支持 | 无 |
| 遗忘机制 | 硬截断 200行/25KB | 隐式(30天未引用淘汰) | Budget compaction 10K字符 | 用户手动删除 | 不适用 | 不适用 |
| 多模型 | Sonnet sideQuery | reasoning=Low/Medium | 可配独立 flush 模型 | gemini-2.5-flash | 不适用 | 不适用 |
逐 Agent 记忆分析
1. Claude Code — 索引+按需检索
Claude Code 的记忆设计围绕 memdir(memory directory)展开:MEMORY.md 是纯索引文件(每条约 150 字符、上限 200 行),实际内容存在 topic-name.md 文件中。读路径分两阶段——启动时全量索引注入 system prompt,每 turn 用 Sonnet 做 sideQuery 从最多 200 个文件中选取 ≤5 个最相关的注入上下文。写路径通过 extractMemories hook 在每次无工具响应后 fire-and-forget,使用 forked agent 提取四类信息(user/feedback/project/reference)[已有]。
核心特色:LLM 驱动的语义检索(非向量搜索),代价是每 turn 需要额外一次 Sonnet 调用。
2. Codex — AI Pipeline 双阶段
Codex 采用异步两阶段 AI pipeline:Phase1 在 session 启动时并行处理最近的 rollout(最多 8 并发),用 reasoning=Low 模型提取结构化 JSON 到 SQLite;Phase2 用一个隔离沙箱中的 consolidation agent(reasoning=Medium)将 top-256 条 Phase1 输出合并为 ~/.codex/memories/ 下的文件系统工件(MEMORY.md + memory_summary.md + skills/)。读路径简单粗暴——memory_summary.md 全量作为 developer instruction 注入 [已有]。
核心特色:全局共享记忆(不按项目隔离),citation 正反馈循环(被引用越多的记忆越不容易被淘汰)。
3. OpenClaw — Pre-Compaction Flush
OpenClaw 的创新在于 pre-compaction flush——在上下文压缩前运行一个静默嵌入式 agent,将重要信息写入 memory/YYYY-MM-DD.md(日记层)。后台 Dreaming 系统将日记中的候选内容晋升到 MEMORY.md(长期层),预算上限 10,000 字符。三层文件布局(MEMORY.md / daily / DREAMS.md)提供了清晰的时间维度 [源码]。
核心特色:唯一一个显式将 flush 前置于 compaction 的方案,解决了”压缩=遗忘”的直接矛盾。
4. Cursor — 从纯 Profile 到 Memories Beta
Profile 详见 MCP 记忆集成层
Cursor 在 1.0 版本(2025-06)引入 Memories Beta,结束了长期只有 Profile(.cursor/rules)的状态。记忆存储在云端、按 Git remote URL 隔离。使用 gemini-2.5-flash 对聊天记录做两段分析——先提取再打分(1-5 分),达标后写入。读路径通过向量搜索从记忆库中选出相关条目,注入系统提示的 <memories> 标签 [文档]。
核心特色:云端存储(非本地文件),四种 Rule apply 模式提供了最灵活的 Profile 系统。
局限:仍是 Beta,仅记录编程偏好而非项目上下文,需关闭 Privacy Mode,不跨项目共享。
5. Cline — 无内建记忆,社区 Memory Bank 填补
Cline 系统提示明确声明 “my memory resets completely between sessions”——没有任何内建的跨会话记忆持久化。社区通过 Memory Bank 模式弥补:用户手动将指令文本放入 .clinerules/memory-bank.md,指示 Cline 在每个 task 开始时读取 memory-bank/ 目录下的 6 个 markdown 文件(projectBrief、techContext、systemPatterns、activeContext、progress),会话结束前说 “update memory bank” 触发更新 [社区]。
Cline 有一个值得关注的设计:PreCompact hook——允许在 Auto Compact 之前运行用户自定义脚本。这原本用于通用扩展,但社区将其用于自动更新 Memory Bank 文件,变相实现了类似 OpenClaw flush 的效果 [源码]。
核心特色:PreCompact hook 提供了社区自建 flush 的扩展点,但不是内建功能。
6. Aider — 显式文件驱动,无自动学习
Aider 完全没有自动记忆——它的”记忆”是显式的、文件驱动的 [文档]:
- CONVENTIONS.md:手动编写的编码规范文件,通过
--read加载为只读上下文 - Repo Map:使用 tree-sitter 解析 AST + PageRank 变体算法,自动生成代码库结构摘要(约 1/10 token)
.aider.conf.yml:配置文件,可设置自动加载的只读文件/compact命令:压缩对话但不做记忆写入
核心特色:Repo Map 是独特创新——用图算法代替记忆系统来理解代码库。但这是代码结构理解,不是学习用户偏好。
记忆写入策略对比
flowchart TB
subgraph trigger["写入触发时机"]
CC_T["Claude Code<br/>每次无工具响应后"]
CX_T["Codex<br/>session 启动时"]
OC_T["OpenClaw<br/>上下文将满时"]
CU_T["Cursor<br/>聊天过程中"]
end
subgraph process["处理方式"]
CC_P["forked agent<br/>fire-and-forget"]
CX_P["并行 worker<br/>→ consolidation agent"]
OC_P["嵌入式 agent<br/>静默轮次"]
CU_P["后台模型<br/>两段分析"]
end
subgraph output["产出"]
CC_O["topic.md 文件<br/>(按主题分)"]
CX_O["SQLite → MEMORY.md<br/>(全局合并)"]
OC_O["memory/YYYY-MM-DD.md<br/>(按天分)"]
CU_O["云端记忆条目<br/>(按项目分)"]
end
CC_T --> CC_P --> CC_O
CX_T --> CX_P --> CX_O
OC_T --> OC_P --> OC_O
CU_T --> CU_P --> CU_O
记忆读取策略对比
| Agent | 读取方式 | 检索算法 | 延迟 | Token 成本 |
|---|---|---|---|---|
| Claude Code | 双阶段:全量索引 + Sonnet sideQuery 选 ≤5 文件 | LLM 语义匹配 | 高(1-3s LLM 调用) | 高(额外 Sonnet 调用) |
| Codex | memory_summary.md 全量注入 | 无检索 | 极低(文件读取) | 中(全文注入) |
| OpenClaw | MEMORY.md 全量 + 近 2 天日记 | 无检索(时间窗口) | 极低 | 低-中 |
| Cursor | 向量搜索选出相关条目 | 向量余弦相似度 | 低(100-200ms) | 低(只注入相关条目) |
关键洞察:四种读取策略反映了不同的工程权衡——Claude Code 花最高成本追求精准(LLM 做检索),Codex 用最低成本做全量注入(代价是 token 浪费),OpenClaw 用时间窗口做近似(假设近期信息最相关),Cursor 用向量检索做中间路线。
Compaction 与记忆的关系
这是区分 Coding Agent 记忆成熟度的关键维度:
| Agent | Compaction 时做什么 | 信息保留策略 |
|---|---|---|
| Claude Code | 独立——extractMemories 在响应后触发,与 compaction 无关 | 持续学习,compaction 不影响记忆写入 |
| Codex | 独立——Phase1 在 session 启动时回顾历史 rollout | 回顾式学习,从历史中提取 |
| OpenClaw | 耦合——flush 显式前置于 compaction | 抢救式保存,compaction 前紧急持久化 |
| Cursor | 不确定——Memories Beta 实现细节未公开 | — |
| Cline | 仅压缩,无记忆写入(除非用 PreCompact hook) | 压缩 = 丢失(除非社区方案) |
| Aider | 仅压缩(/compact),无记忆写入 | 压缩 = 丢失 |
Profile 系统对比
详细对比见 MCP 记忆集成层 · Profile 机制对比
| 维度 | CLAUDE.md | AGENTS.md | .cursor/rules | .clinerules/ | CONVENTIONS.md |
|---|---|---|---|---|---|
| 格式 | Markdown | Markdown | MDC(frontmatter) | Markdown | Markdown |
| 条件注入 | 无 | 无 | 4 种模式 | glob 匹配 | 手动 –read |
| 本地覆盖 | CLAUDE.local.md | AGENTS.override.md | 无 | 无 | 无 |
| 跨工具兼容 | 仅 Claude Code | 30+ 工具联合标准 | 仅 Cursor | 兼容 .cursorrules | Aider 专用 |
| 全局层 | ~/.claude/CLAUDE.md |
用户级 instructions | Settings → User Rules | 全局 Rules | ~/.aider.conf.yml |
三个梯队的演进预测
flowchart LR
subgraph t1["第一梯队:完整自动记忆"]
CC["Claude Code"]
CX["Codex"]
OC["OpenClaw"]
end
subgraph t2["第二梯队:刚起步"]
CU["Cursor Memories Beta"]
end
subgraph t3["第三梯队:无内建记忆"]
CL["Cline"]
AD["Aider"]
end
t3 -->|"MCP 外挂<br/>弥补差距"| EXT["MCP 记忆服务<br/>supermemory / DB-Agent-Memory"]
t2 -->|"内建增强"| t1
t1 -->|"MCP 扩展<br/>互补增强"| EXT
预测:
- 第三梯队(Cline/Aider)将通过 MCP 外挂弥补记忆空缺——Cline 已有 MCP 原生支持,接入 supermemory 或 DB-Agent-Memory 即可获得完整记忆能力
- Cursor 会继续完善 Memories Beta,可能从项目级扩展到跨项目
- 第一梯队内部,OpenClaw 的 Host-Adapter 架构使其最适合与 DB-Agent-Memory 深度集成,形成”内建+外部”双轨记忆
局限性
- Cursor Memories Beta 信息有限:实现细节基于公开文档和社区分析,内部架构不确定
[文档]。 - OpenClaw 源码分析基于单次 clone:可能遗漏最新变更
[源码]。 - Aider 分析基于文档:未深入源码验证
[文档]。 - 延迟数据为估算:未做实测对比
[推导]。
证据等级汇总
| 论点 | 证据等级 |
|---|---|
| Claude Code memdir + extractMemories 架构 | [已有] deep-dive-claude-code-memory.md |
| Codex Phase1/2 pipeline | [已有] deep-dive-codex-memory.md |
| OpenClaw pre-compaction flush | [源码] /tmp/openclaw |
| Cursor Memories Beta + Rules 4 模式 | [文档] cursor.com/changelog + docs |
| Cline 无内建记忆 + Memory Bank 社区模式 | [源码] /tmp/cline + [社区] |
| Aider CONVENTIONS.md + Repo Map | [文档] aider.chat/docs |
| 三梯队演进预测 | [推导] 基于现状分析 |