OpenCode vs Codex vs Claude Code 记忆 (Memory) 架构对比研究
OpenCode vs Codex vs Claude Code 记忆 (Memory) 架构对比研究
1. 概述与核心结论
随着 AI Agent 从单次对话辅助演变为长期项目协同者,记忆 (Memory) 架构成为决定 Agent 能否“越用越聪明”的核心设计。
对比 OpenCode、Codex 与 Claude Code 三款主流 Agent,它们在记忆设计理念上展现出了显著的区别:
- Codex:采用了后台 2-Phase 管道 + SQLite/Git 管理的硬核持久化记忆系统。支持跨会话提取、并行脱敏与全局锁整合,记忆归档具备原生的 Git 版本追溯能力。
- Claude Code:采用了独特的 Auto-Dream(潜意识梦境整理)+ Forked Subagent + Markdown 文件 机制。模仿人类大脑在闲置时通过“做梦/Dream”整理多 Session 遗留经验,写入
MEMORY.md并支持团队密钥脱敏同步。 - OpenCode:采用了静态 Rules 规则注入 + 单会话内 Compaction 蒸馏 方案。无离线跨会话记忆提炼队列,主要依赖
AGENTS.md/.opencode/rules/等静态文件与 Session 内存裁减。
2. 三方 Memory 架构对比矩阵
| 对比维度 | Codex | Claude Code | OpenCode |
|---|---|---|---|
| 记忆触发机制 | 根会话启动时异步 Phase 1/Phase 2 管道 | 后台 Triple-Gate 门禁(时间+会话数+锁)触发 Auto-Dream | 依赖启动时扫描 AGENTS.md 及 Session 溢出触发 |
| 提炼执行方式 | 并行任务队列 + 结构化 LLM 提取 | Forked Subagent 后台派生进程 运行 /dream | 无跨会话提炼,仅做单 Session Compaction |
| 物理存储载体 | SQLite state_5.sqlite + ~/.codex/memories/ (自带 .git 库) | MEMORY.md / .claude/memory/*.md | AGENTS.md / .opencode/rules/*.md |
| 脱敏与安全 | write_path 自动敏感信息过滤 (Redaction) | secretScanner + teamMemSecretGuard 扫描 | 无自动化敏感词过滤 |
| 注入与使用 (Read Path) | 启动时通过 codex-memories-read 匹配并注入 System Prompt | 匹配 MEMORY.md 索引并按需加载上下文 | 全量或分级扫描静态 Markdown 规则文件 |
| 团队协同支持 | 本地独立存储 | 支持 Team Memory Sync 组内同步 | 依赖 Git 提交项目级 AGENTS.md |
3. 各 Agent 记忆架构源码深度解构
3.1 Codex:Phase 1 / Phase 2 离线双阶蒸馏管道
在 Codex 的 Rust Core 源码 [codex-rs/memories](file:///Users/util6/fork-code/codex/codex-rs/memories) 和 [codex-rs/core/src/memories/](file:///Users/util6/fork-code/codex/codex-rs/core/src/memories/) 中,Codex 构建了高度严密的后台记忆流:
┌─────────────────────────────────────────────────────────┐
│ Phase 1: Rollout Extraction │
│ • 扫描 SQLite 近期空闲 Rollout │
│ • 并行 LLM 提取 raw_memory & rollout_summary │
│ • 自动脱敏并存回 State DB │
└────────────────────────────┬────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────┐
│ Phase 2: Global Consolidation │
│ • 获取全局 Phase 2 排他锁 (consolidation lock) │
│ • 聚合 Stage-1 产物并刷新 ~/.codex/memories/ │
│ • 自动建立 git 仓库记录历史变更 (`~/.codex/memories/.git`)│
└─────────────────────────────────────────────────────────┘- 读链路 (Read Path):位于
codex-rs/memories/read,在 Root Session 启动时检查依赖指令,注入记忆并捕获 Citation 归因指标。 - 写链路 (Write Path):位于
codex-rs/memories/write,负责 Prompt 渲染、Git 游标对齐与隐私词剔除。
3.2 Claude Code:Auto-Dream 梦境整理与 Forked Subagent
在 Claude Code 源码 [claude-code-rev/src/services/autoDream/](file:///Users/util6/fork-code/claude-code-rev/src/services/autoDream/) 及 [extractMemories/](file:///Users/util6/fork-code/claude-code-rev/src/services/extractMemories/) 中,展现了极具创造力的“潜意识梦境整理”架构:
// claude-code-rev/src/services/autoDream/autoDream.ts
// Gate 检查顺序(开销由低到高):
// 1. Time Gate: 自上次整理以来隔多长时间 (minHours)
// 2. Session Gate: 新积累的 Session 变化日志数 (minSessions)
// 3. Lock Gate: 当前无其他 Consolidation 任务在运行 (consolidationLock)- Forked Subagent:当三重门禁通过时,Claude Code 不在当前主交互进程中阻塞运行,而是派生出一个后台 Forked Subagent 独立执行
/dream提示词。 - Memory Markdown:提炼出的经验归纳为结构化 Markdown(包含用户习惯、代码规范、架构特征),落盘到
.claude/memory/目录。
3.3 OpenCode:静态指令与 Session 内降级蒸馏
位于 [opencode/packages/opencode/src/session/](file:///Users/util6/fork-code/opencode/packages/opencode/src/session/) 的设计更加轻量:
- 静态规则扫描 (
instruction.ts):依赖启动时扫描本地工作区中的AGENTS.md/.opencode/rules/文件,将其作为固定上下文填入系统提示词。 - Session 内裁减 (
summary.ts/compaction.ts):OpenCode 没有跨 session 的离线后台提取子进程。当单次 Session 耗尽 Context Window 时,通过summary.ts对当前对话 Parts 进行内联压缩,防止对话越界。
4. 总结与设计启示
如果要为个人 Agent 框架(如 util6-agents)设计 Memory 模块:
- 轻量与跨会话兼顾:借鉴 Claude Code 的 Memory Markdown(人类易读易编辑)+ Codex 的 Phase 1/2 离线异步蒸馏(不阻塞用户终端输入)。
- 脱敏机制必须前置:在记忆写入磁盘前,必须通过正则/模型拦截 API Key、Token 等敏感信息。
- 版本化管理:借鉴 Codex 为 Memory 目录自动初始化
.git库的做法,使记忆具备可回滚与变更对查的能力。