AI 编程助手每天都在往你硬盘上写对话记录。Claude Code 的 JSONL、Codex 的 session 文件、opencode 的 SQLite 数据库——几个项目下来轻松破 GB,里面塞满了你曾经 debug 三小时终于搞定的诡异问题、试过又放弃的方案、以及某个凌晨两点灵光一现的配置组合。
问题是你再也找不到了。
这就是 Vladislav Shulcz 写 deja-vu 的原因。一个零依赖的 Go 二进制文件,把你的 agent 历史变成一个本地可搜索的记忆层。
用法简单到只有一行:deja "connection pool exhausted"。7 到 9 毫秒扫完几个 GB,告诉你三个月前 Claude Code 在哪个项目里修过连接池耗尽的问题,以及当时是怎么改的。

这比 grep 快了不止一个数量级。grep 对 JSONL 全文搜索是 O(n) 的线性扫描,deja 维护了一个本地倒排索引,搜索走 token bucket → postings list → intersect 的路线,只读命中的 record。索引体积约为原始语料的 2.4%,增量更新——会话文件变长时只重读那一部分。
但单纯的搜索不是这个工具真正的看点。真正有意思的是 MCP recall。
装好 deja install --all 之后,Claude Code、Codex 和 opencode 里会多出一个 MCP 工具。你的 agent 可以在新会话中主动调用 recall 去查历史记忆——"这个问题我们三周前解决过"——而不是重新 debug 一遍。如果再开 --auto,还会装一个 SessionStart hook:每个新会话开始之前,agent 已经预先拿到了当前项目最近的记忆摘要,上限 2KB,不阻塞启动。
换句话说,agent 带着"上次在这个项目里发生了什么"的上下文进来,不用你开口。
安全和数据所有权方面,deja 没有任何网络请求,索引全程本地。API key、JWT、PEM 私钥、GitHub token(ghp_)、OpenAI key(sk-)等 8 类敏感数据在写入索引之前就被替换为 [redacted:<kind>],不会进入缓存。如果你想把一段会话上下文发给同事,deja share <id> 会生成脱敏后的 markdown 摘要。
多机场景也考虑到了。deja sync export/import 把索引变成 JSONL 批次文件,支持增量导出和水印去重,扔进 Syncthing 或 iCloud 目录就能跨机共享。deja sync ssh mini 是一行命令的 ssh 同步方案。
横向对比的话,cass 是一个更"重"的方案:Rust 写的,支持 22 种 agent provider,可选语义嵌入,带 TUI。deja 走的是相反的路:一个 Go 二进制、纯词法搜索、三种 harness、零配置。而跟 MemPalace、Mem0、Letta 这些"记忆平台"比,deja 没有 capture step——它不需要你提前配好 hook 来捕获记忆,而是直接索引 agent 已经写下的文件。你装上它的时候,历史数据就直接可搜了。
安装:
curl -fsSL https://raw.githubusercontent.com/vshulcz/deja-vu/main/install.sh | sh
# 或
brew install vshulcz/tap/deja-vu
# 或
npx @vshulcz/deja-vu "你的查询"
MIT 协议开源。目前支持的三种 harness 都是当下 AI coding 场景的主力工具,aider 和 Gemini CLI 的支持在 roadmap 上。
参考来源: