remem:给 Codex 和 Claude Code 一个本地记忆层
长期使用 coding agent 时,真正烦人的不是它完全不会做事,而是它每次都像刚入职一样。你要重新解释这个仓库的约定、上次为什么改成这种结构、某个测试为什么不能删、部署脚本在哪里、review 里已经排除过什么方向。把这些写进 AGENTS.md 有用,但文件会越来越像备忘录垃圾场;只靠聊天历史,又很难跨工具、跨会话稳定复用。
今天看的是 majiayu000/remem。它把自己做成一个本地优先的 coding-agent memory layer:Rust 单二进制,默认用本地 SQLite 和 SQLCipher,给 Claude Code、OpenAI Codex / Codex CLI、以及部分 Cursor 场景提供 hooks、MCP tools、CLI 和 localhost REST API。它的目标不是替代项目文档,而是把“项目决策、bug 修复原因、偏好、工作模式”这些会话之间容易丢的工程记忆,放进一个可搜索、可审计、能被 agent 注入上下文的本地存储里。
按 GitHub repository API、repository page、README、中文 README、Release 页面、Cargo.toml、LICENSE 和默认分支 Git 历史在 2026-08-10 能核验的公开信息,majiayu000/remem 当前有 23 stars、3 forks。仓库主语言是 Rust,许可证是 MIT。仓库创建于 2026-02-20 17:35:19 UTC,最近公开 push 是 2026-08-10 09:45:05 UTC。默认分支 main 当前 HEAD 是 75021d3,提交时间 2026-08-10 09:20:02 UTC,提交信息是 feat(context): persist SessionStart bundle audits。最新 GitHub Release 是 v0.6.65,发布时间 2026-08-10 09:54:37 UTC;Cargo.toml 里的 crate version 也是 0.6.65。
项目概览
| 属性 | 详情 |
|---|---|
| 仓库 | majiayu000/remem |
| 定位 | Codex / Claude Code 的本地优先项目记忆层 |
| Stars | 23 |
| Forks | 3 |
| 主要语言 | Rust |
| 许可证 | MIT |
| 创建时间 | 2026-02-20 17:35:19 UTC |
| 最新 push | 2026-08-10 09:45:05 UTC |
| 当前默认分支提交 | 75021d3,2026-08-10 09:20:02 UTC |
| 最新 GitHub Release | v0.6.65,2026-08-10 09:54:37 UTC |
| 关键词 | Codex、Claude Code、MCP、hooks、SQLite、SQLCipher、local-first、agent memory |
它补的是“会话之间的工程记忆”
remem 的 README 开头就把问题说得很直接:不要在每个新的 coding-agent session 里重新解释项目。它希望自动捕获、提炼、搜索并注入项目记忆,让 agent 在新会话开始时能拿到和当前仓库有关的决策、bug 背景和偏好,而不是从空白上下文重新摸索。
这和普通 README.md 或 AGENTS.md 的关系不是替代,而是分工。文档适合稳定规则,比如部署路径、代码风格、不要碰的服务。remem 更适合那些在工作过程中产生、但又不值得每次手工写进项目文档的东西:某个 flaky test 的根因、某次 refactor 被拒绝的理由、一个模块约定的历史来源、某个维护者偏好的来源和适用范围。
它提供的入口也比较贴近实际 agent 工作流。安装后可以给 Codex CLI 或 Claude Code 配置 SessionStart / Stop hooks 和 MCP 注册;会话开始时注入相关记忆,会话结束后总结可持久化的内容。你也可以用 remem search "last decision" 这类命令直接查,或者通过 MCP / REST 从其他本地工具接入。
安装路径比较朴素
README 给出的主路径是 Homebrew:
brew install majiayu000/tap/remem
REMEM_INSTALL_BINARY="$(brew --prefix remem)/bin/remem" remem install --target codex
不用 Homebrew 时,也可以走仓库里的 install.sh,再执行 ~/.local/bin/remem install --target codex。remem install 会检测 Claude Code、Codex CLI 和 Cursor 的配置目录;首次安装时可以明确指定 --target codex、--target claude 或 --target all。
对 Codex CLI 来说,README 写到它会创建或更新 ~/.remem/.key、加密的 ~/.remem/remem.db、~/.remem/config.toml、~/.codex/config.toml 里的 MCP 注册,以及 ~/.codex/hooks.json 里的 SessionStart / Stop hooks。这个部署模型的好处是清楚:没有托管数据库,没有额外服务栈,记忆默认留在本机。
可审计性是这个项目的重点
很多 memory 工具只强调“能记住”,但对 agent 来说,更关键的问题经常是“为什么这条记忆被拿出来了”。remem 的 README 里反复出现 provenance、citation、injection audit、current-memory contract 这些词。它不只是把旧内容塞回 prompt,而是希望暴露 staleness、temporal / as-of truth、引用使用情况和注入审计状态。
这点很实用。Agent 记错一次路径,可能只是浪费几分钟;记错一次部署约束,可能就会影响线上服务。可审计的记忆层至少让你有机会追问:这条建议来自哪次会话?它是不是过期了?为什么它被选中?还有哪些记忆被丢弃?如果 memory 系统不能回答这些问题,它很容易变成一个看不见的隐式 prompt。
最新的默认分支提交也和这个方向一致:feat(context): persist SessionStart bundle audits。从公开提交信息和 README 看,项目正在把 SessionStart context bundle 的选择、预算、降级、截断和原因元数据持久化下来,而且不存储记忆标题、正文或渲染后的 hook 输出。这说明它在努力把“注入了什么上下文”这件事做成可检查的运行记录,而不是临时黑箱。
Cursor 支持要单独看
remem 现在也提到 Cursor,但 README 把边界写得比较细。remem install --target cursor 在 macOS / Linux 上会注册 MCP server,并管理用户级 ~/.cursor/hooks.json 和 ~/.cursor/mcp.json;不过 Cursor v1 安装面还不会注册 Cursor hook 条目,所以自动记忆捕获没有启用,SessionStart 注入也不支持。
这不是坏事,反而是一个值得保留的 caveat。很多工具会把“支持某平台”说得很满,结果实际只有一半链路可用。remem 至少把 Codex / Claude Code 与 Cursor 的能力差异列出来了。对读者来说,最稳的试用路径还是先从 Codex CLI 或 Claude Code 开始,把 doctor、search、SessionStart 注入和 Stop 总结跑通,再考虑 Cursor 的 MCP-only 用法。
适合谁
remem 适合已经把 agent 当日常开发伙伴的人。比如你在同一个仓库里反复让 Codex 做维护任务,希望它记住上次事故的排查路径、已验证过的命令、某些目录不能直接改、某个依赖升级为什么暂缓。又或者你在 Claude Code 和 Codex 之间切换,希望它们共享一份项目级记忆,而不是各自维护一段不同的会话总结。
它也适合对隐私和可控性比较敏感的团队或个人。SQLite 文件、本地 key、可选本地 embeddings、MCP 和 REST 都在本机,至少比把所有 session summary 扔给远端服务更容易解释边界。当然,这不等于可以随便存秘密。数据库、key 文件、备份、导出 Markdown、日志和索引都要一起纳入安全考虑。
不适合的场景也明确。如果只是偶尔让 agent 改一个小文件,AGENTS.md、issue 描述和普通上下文就够了。记忆层的价值来自长期积累和跨会话召回;没有这个需求,引入 hooks 和持久存储只会增加复杂度。
需要注意的边界
第一,项目还很小。23 stars、3 forks,虽然最近 push 和 release 都很新,但社区验证有限。最合适的试法是个人仓库、内部工具或低风险项目,不要一开始就让它影响生产决策。
第二,自动捕获会带来 memory pollution。失败的假设、临时路径、一次性命令、半截 debug 结论如果都被长期保存,下次 agent 可能会被旧噪声带偏。remem 提供 search、why、doctor 和审计方向,但使用者仍然需要清理、纠错和过期策略。
第三,hook 修改本身值得谨慎。任何能改 ~/.codex/config.toml、~/.codex/hooks.json、~/.claude/settings.json 的工具,都应该先在干净环境里跑一遍 doctor,最好保留配置备份。记忆系统越接近 agent 的启动路径,越应该像开发基础设施一样被管理。
总结
majiayu000/remem 有意思的地方,是它没有把 agent memory 简化成“会话结束时写一段总结”。它更像一个本地工程记忆运行时:hooks 负责捕获和注入,MCP / CLI / REST 负责访问,SQLite / SQLCipher 负责存储,audit 负责解释记忆为什么出现。
昨天写过的 Perseus Vault 更像通用的本地 MCP 记忆库;remem 的切入点更贴近 Codex 和 Claude Code 的日常开发会话。对于经常在同一批项目上反复调用 agent 的程序员,这个方向值得观察:把重复解释项目背景的成本降下来,同时保留足够多的本地控制和审计线索。