AI coding assistant 最浪费时间的地方,经常不是“不会改”,而是每次会话都要重新确认同一批事实:这个服务的入口在哪里、某个类型被谁引用、上次为什么没有改这条路径、一个 diff 会不会影响下游调用。人类开发者会把这些线索留在脑子里、issue 里、commit 里,agent 却很容易在下一次会话重新从 rg 和读文件开始。

今天推荐的 cogniplex/codemem 就是为这个问题做的一套本地记忆引擎。它用 Rust 写成,把 AI assistant 在代码库里发现过的文件、符号、编辑、决策和提交历史组织成一张可查询的知识图谱,再用向量检索和 MCP tools 暴露给 agent。GitHub 页面当前显示项目约 14 stars6 forks,主要语言是 Rust,许可是 Apache-2.0;最新 release 是 v0.18.0,发布时间为 2026-05-20

项目概览

属性详情
仓库cogniplex/codemem
定位AI coding assistant 的本地代码记忆与知识图谱引擎
Stars约 14
Forks6
主要语言Rust
许可Apache-2.0
最新版本v0.18.0
核心接口CLI + MCP server

它想解决的不是聊天记忆

很多“AI 记忆”工具关注的是对话摘要:用户喜欢什么、上次说了什么、某个项目有哪些偏好。Codemem 的切入点更偏工程化。它关心的是 agent 在代码库里已经探索过什么,以及这些探索能不能在下一次修改时变成结构化依据。

README 里的思路很明确:agent 不应该只保存一段长文本总结,而应该有一张能被查询的代码知识图谱。提交可以是节点,符号可以有 typed edges,某次编辑和某个决策也可以留下痕迹。这样下一次会话开始时,assistant 不只是拿到“上次做了什么”的摘要,而是可以问“这个函数的上下游是谁”“最近两周哪些关键文件变化过”“这个 diff 触及了哪些高中心性符号”。

这也是它和普通 RAG 工具的差别。普通 RAG 常常把代码切块后做语义检索,适合找相关片段,但不一定理解调用关系、提交时间、符号影响范围。Codemem 试图把 vector search、graph traversal、BM25、时间信息和 repo/branch scope 放在一起,让 recall 更贴近真实代码修改场景。

一条比较完整的 agent 记忆链路

Codemem 的入口是 codemem init。初始化会下载本地 embedding 模型,注册生命周期 hooks,并为支持的 AI coding 工具配置 MCP server。README 当前提到它会自动检测 Claude Code、Cursor 和 Windsurf。

这条链路大致分成四层:

  1. 捕获上下文:通过 session start、user prompt、tool use、stop、subagent、pre-compact 等 hooks 记录 agent 看过什么、搜索过什么、改过什么。
  2. 建立结构:用 tree-sitter、manifest 解析和可选的 SCIP indexer 把代码符号、文件、提交和跨服务关系变成图。
  3. 混合检索:把向量相似度、图强度、BM25、scope、时间、重要性和置信度合成一个 recall 分数。
  4. 回到 agent:通过 32 个 MCP tools 提供 memory CRUD、代码搜索、图遍历、时间查询、diff review、session context 等能力。

这不是简单的“给 agent 多塞一些上下文”。更重要的是,agent 能在需要时主动调用工具,而不是每次都被动吞一个越来越长的摘要。

32 个 MCP tools 覆盖了哪些问题

Codemem README 把 MCP tools 分成几类。对实际开发最有用的,是下面几组。

记忆类工具负责写入、召回、删除、关联、拆分、合并和 refine memory。它们适合记录“这个模块为什么这么设计”“某个绕路方案为什么被放弃”“一次排查里确认过哪些事实”。这些信息如果只在会话末尾压成一段摘要,很容易丢失细节。

代码与图结构类工具包括 search_codeget_symbol_infoget_symbol_graphgraph_traversefind_important_nodesfind_related_groups 等。它们把“找文件”提升到“查节点、查边、查相关群组”的层次。对大型仓库来说,这比让 agent 从目录树重新猜结构更可靠。

时间类工具也很有意思。what_changedgraph_at_timefind_stale_filesdetect_driftsymbol_history 让 agent 可以从时间维度看代码库,而不是只看当前工作区快照。比如一次重构前先问“这个高中心性文件最近 90 天是否没人动过”,就比只看当前文件内容多了一层风险判断。

代码评审类工具则通过 review_diff 把 diff 映射到符号和影响范围。它不是替代测试,而是帮 agent 在 merge 前先问一个很实际的问题:我改到的符号有哪些直接和间接依赖?有没有看起来也应该跟着改、但 diff 里没出现的调用点?

SCIP enrichment 让图谱更接近 IDE 视角

Codemem 默认可以用 tree-sitter 和 ast-grep 这类结构化工具建图,但 README 也强调了可选的 SCIP enrichment。SCIP 是 Source Code Intelligence Protocol,可以把语言索引器产生的调用、引用、导入、类型关系等信息接进来。

它当前列出的 indexer 覆盖 Rust、TypeScript/JavaScript、Python、Go、Java/Kotlin、C# 和 Ruby。Codemem 会根据 Cargo.tomlpackage.jsonpyproject.tomlgo.mod 等 manifest 判断语言,并检查 PATH 里是否有对应 indexer。没有 SCIP indexer 时也能工作,只是边的来源更多依赖 ast-grep pattern;有 indexer 时,图谱会更接近 IDE 和 language server 看到的结构。

这对 agent 很关键。AI 在代码里最容易犯的错之一,是把相似文本当成相同语义,把局部调用当成全局影响。SCIP 不能消除所有风险,但能把“引用关系”这类问题从猜测变成更可验证的数据。

Diff blast radius 是最容易落地的场景

如果只挑一个场景试 Codemem,我会先看 codemem review。它可以读取 diff,然后输出变更符号、直接依赖、间接依赖、风险分数和可能漏改的位置。这个能力很适合放在 agent workflow 的“提交前”阶段。

例如 agent 改了认证、计费、权限、schema 迁移这类高影响区域,普通代码 review 往往需要 reviewer 手动追调用链。Codemem 的价值不是替 reviewer 下结论,而是先把“可能受影响的范围”整理出来,让 reviewer 和 agent 都少漏几个方向。

它也适合长会话之后的自检。AI agent 可能在前半段探索了很多文件,后半段只改了两三个点。review_diff 能把最终 diff 重新拉回代码图谱里看一遍,避免“过程里知道过、最后忘了用”的情况。

本地优先,但不是零成本

Codemem 的一个优点是默认偏本地。它是单 binary 思路,使用 SQLite、HNSW vector search 和 petgraph 这类本地组件;embedding 默认可以走 Candle,本地模型一次性下载大约 440MB。README 也提供了 Ollama、OpenAI-compatible API、Gemini 等可配置 embedding provider。

这类设计对企业仓库和私有项目比较友好,因为代码记忆不必默认发到外部服务。但它也不是完全“装上就无成本”。第一次索引、embedding、SCIP enrichment 和 graph analysis 都需要时间;如果仓库很大,还要考虑缓存、重建频率和 team scope。把它接进自动化流程前,最好先在一个中型 repo 上验证召回质量和运行成本。

另外,Codemem 当前仍是很小众的项目,stars 很少,生态成熟度不能和常见 IDE/LSP 工具相比。把它用于生产工作流时,适合作为辅助上下文层,而不是把架构判断、风险判断完全交给它。

和最近的 agent 工具放在一起看

过去几个月,AI coding 工具的方向大致有三条:

  • 让 agent 更会调用现有工具,比如 MCP、LSP、浏览器和测试框架。
  • 让 agent 更理解代码结构,比如 code graph、symbol search、blast radius。
  • 让 agent 更能跨会话延续上下文,比如 memory、session summary、长期项目状态。

Codemem 正好站在第二和第三条交界处。它不是一个新的 coding agent,也不是一个聊天 UI,而是试图成为“agent 背后的代码记忆层”。如果一个团队已经在用 Claude Code、Cursor、Windsurf 或其他 MCP client,它提供的是一组可插入的结构化工具。

我最看重的是它把“记忆”从聊天层拉回了工程层。对开发者来说,有用的记忆不是“用户上次说想重构”,而是“哪个符号被改过、为什么这么改、哪些下游依赖这个返回值、上一次尝试为什么失败”。如果 Codemem 能把这些信息稳定地存下来并在下一次修改时被 agent 召回,它就能减少很多重复探索。

适合谁尝试

Codemem 适合这几类场景:

  • 你经常用 AI agent 修改同一个中大型仓库,重复探索成本很高。
  • 你想给 agent 加一个本地优先的 MCP memory server,而不是只靠会话摘要。
  • 你关心 diff 影响范围、符号历史、架构漂移和代码热点。
  • 你的项目语言能被 tree-sitter 或 SCIP indexer 较好覆盖。
  • 你愿意接受早期工具的调试成本,用它辅助而不是替代 review。

如果只是小脚本或很短的单文件项目,Codemem 可能显得过重。它真正有价值的地方,是让 agent 在复杂仓库里把“我刚刚看过什么”和“这个代码库本来是什么结构”都保存下来。

小结

cogniplex/codemem 是一个值得关注的小众 Rust 项目。它把 AI coding assistant 的记忆问题拆成更工程化的几块:本地代码图谱、跨会话记录、混合检索、MCP tools、时间查询和 diff 风险分析。它不保证 agent 一定改得对,但能让 agent 少一点重复探索,多一点结构化证据。

对现在的 AI 编程工作流来说,这类工具的方向很重要。上下文窗口再大,也不等于代码库记忆足够可靠。真正有用的下一步,可能不是继续把更多文本塞进 prompt,而是让 agent 能查询一张会随项目演化的代码记忆图谱。