deja-vu
让 Claude Code、Codex、Cursor 等 23 个编码代理共享同一份记忆——直接索引磁盘上已有的会话历史,无需 LLM,只需一个本地 Go 二进制。
证据显示:本地索引、无网络监听,网络操作仅限 update/sync/doctor 版本检查;SECURITY.md 与 SECURITY-MODEL 文档化数据流与信任假设;go.mod 无第三方依赖且 CI 含 govulncheck、go mod verify、CodeQL。扣分点:核心 Go 源码未在证据中提供,'无监听器'仅为文档断言,无法静态核实;sensitive_data_handling 的脱敏实现同样只见文档,且文档自己承认'模式匹配不等于秘密检测',故不给满分。user_confirmation 得 1 分:`deja install --auto` 默认向 22+ 个 harness 的用户级配置文件写入引导内容,embed 功能还会自动探测 localhost:11434/1234,虽提供 --no-guidance 和 DEJA_EMBED_OFF 退出开关,但默认行为缺少逐项确认。external_effects 2 分:写入多个 harness 配置文件、注入 PreToolUse/PostToolUse hook 的影响范围有文档说明但范围偏广。rollback 2 分:tombstone/--unforget/promote --state 提供记忆回滚,cosign 签名支持发布校验,但客户端默认不验证签名(文档明言),且未见到配置写入的自动回滚机制。source_attribution 2 分:作者署名(LICENSE)、按 harness 标注的检索结果来源清晰,但发布者身份未经注册表验证,按规则不加分不扣分。
证据显示:README 内部高度自洽(矩阵、FAQ、基准数字互不矛盾),CI 有覆盖率下限与召回率回归底线、weekly canary;测试文件展示了对边界情况的系统性处理(argv 终结符、guarded 注册、空结果缓存重试)。扣分点:全部为静态阅读,未执行任何测试或基准;依赖可用性仅 2 分——sqlite3/zstd 等外部依赖在矩阵中已逐项标注但实际解析失败路径未验证;failure_messages 2 分:doctor/`not-wired` 报告设计合理,但核心二进制错误信息实现未在证据中。
证据显示:25 个 harness 的支持矩阵含逐项能力标注(✅/—/✕/⚠/?),⚠ 明确标注'上游 bug 阻塞';多安装路径(brew/go install/npx/scoop/mcpb/插件市场)覆盖不同用户;Windows、XDG_CONFIG_HOME、DEJA_*_ROOT、每 agent 的重定位变量均有说明。audience_and_scenarios、capability_boundaries、environment_fit 给满。trigger_precision 2 分:auto-recall 在会话开始/工具执行前后触发的行为描述详细,但实际触发精度属执行期表现,静态无法验证。
证据显示:信息架构优秀——README→docs 站点→SECURITY-MODEL→JSON 输出文档分层清晰;安装说明详尽含 Windows 退出信息与替代方案;FAQ 直接回答隐私、性能、差异对比;已知限制诚实(redaction 局限、⚠ 阻塞项、CI 注释中公开的历史事故 #1229/#838)。license 3 分(MIT 完整文本)。扣分点:naming_stability 2 分——六旧工具名仍可用是向后兼容的好实践,但'一个工具加 mode'的重构说明迁移期仍在;versioning_changelog 2 分——package. 0.20.5 与 release 徽章存在,但证据中未见 CHANGELOG 文件;maintenance_responsibility 2 分——72 小时漏洞响应承诺与活跃 CI 维护迹象良好,但仅最新版本获修复的承诺是明确的支持范围限制,且单人维护者(未验证发布者)。
证据显示:输出面向 agent 可用(4KB 上限、--、ctx Markdown 摘要、tier/total 字段在 SKILL.md 中说明);marginal_value 有明确差异化主张(回溯性记忆、无需 LLM);cost_benefit 给出具体数字(~0.4ms、索引约为语料 3%、200x token 对比)。扣分点:所有性能与召回数字均为作者自报,bench 工具虽随仓库发布但静态评审无法执行;output_usability 2 分——输出契约文档化良好但实际可用性未验证。
证据显示:claim_traceability 2 分——基准 harness 随仓库发布、CI 以 floor 形式固定召回率与覆盖率,README 邀请读者自行运行('Audit what relevant means before trusting any figure, ours included');fact_inference_separation 2 分——文档区分'测量值'与'设计意图'(CI 注释明言 measured, not assumed),并诚实标注 redaction 非完备。扣分点:cross_source_corroboration 1 分——85.3%/69.6% 等外部基准数字、1,551 会话的真实商店测量均为单方自报,证据集中无独立来源交叉印证;核心代码不在证据中,多项声明停留在文档层。
- `deja install --auto` 会默认写入 20 多个 agent 的用户级配置文件并注入 hook,安装前请确认是否接受这一范围,或使用 `--no-guidance` / `--all` 精确控制。
- 脱敏是基于模式的索引期处理,未知形态的密钥可能穿透到索引、share 与 sync 输出;含有高敏感代码或凭据的项目建议先用 `~/.config/deja/exclude` 排除。
- 语义召回默认自动探测 localhost:11434/1234(Ollama/LM Studio);若不需要请设置 DEJA_EMBED_OFF=1,避免请求发往未预期的端点。
- `deja update` 只校验 sha256,不校验 cosign 签名;对供应链有要求的用户应按 SECURITY.md 手动验证。
- 发布者身份未经独立验证,且仅最新版本获得修复;生产环境采用前请自行评估维护风险。
这个 Agent 能做什么,适合哪些场景?
deja-vu 是一个本地 Go 工具,它把 Claude Code、Codex CLI、Cursor 等 23 种编码代理已经写在磁盘上的会话记录(JSONL、SQLite 等)建成本地倒排索引,并通过 MCP 服务器、钩子和 CLI 供所有代理查询。它的核心差异化在于“回溯性”:安装后立即可以搜索几个月前甚至安装之前的会话,而不像 Mem0、Letta 等记忆工具那样从零开始记录。召回会话开场时自动注入、编辑文件前(PreToolUse 钩子)、命令失败后(PostToolUse 钩子)均可触发。索引时自动脱敏密钥、令牌和 JWT,全部索引与检索都在本地完成,不联网。在 LongMemEval-S 上 hit@1 为 85.3%,在真实 5.2 GB 历史上中位检索约 0.4 毫秒,索引体积约为语料 3%。
deja 解析各代理的会话存储(如 ~/.claude/projects 的 JSONL、~/.codex/sessions、Cursor 的 state.vscdb),在 ~/.cache/deja 建立增量倒排索引(records.bin + token buckets + manifest.gob),索引时脱敏 AWS 密钥、api_key=、token=、JWT、PEM 私钥块及高熵值。CLI 提供 deja <query> 全文检索、deja blame <path> 查文件决策史、deja fix <error> 查历史错误后操作、deja how <tool> 查真实调用方式、deja ctx 生成 Markdown 摘要、deja promote 提炼决策笔记、deja sync 跨机同步、deja forget 删除并写墓碑。deja install --auto 自动为检测到的代理配置 MCP 服务器(deja mcp,单工具 deja 按 mode 分发:recall/context/blame/fix/how/remember)、会话开场召回与 PreToolUse/PostToolUse 钩子。可选 deja embed 接本地 Ollama/LM Studio 或 OpenAI 兼容端点实现语义召回。
- 同时使用多个编码代理(如 Claude Code + Codex)的开发者,希望在一个代理里的修复方案在另一个代理的会话开场就自动出现
- 经常遭遇会话压缩丢失细节的人——deja 可以归还压缩丢掉的 99.8% 命令记录
- 接手旧项目时想检索‘这台机器上以前是怎么解决某个报错的’,包括安装 deja 之前的历史
- 在意隐私、不希望会话数据上云的团队:索引、检索、脱敏全部本地完成
- 想给同事分享某个会话结论的人,用 deja share 输出已脱敏的会话摘要
这个 Agent 有哪些优点和局限?
- 回溯性记忆:立即可索引并搜索安装前的全部历史,而 Mem0/Letta/engram 等记录型工具从零开始
- 无需 LLM 或嵌入密钥:纯本地词法索引,中位检索约 0.4 毫秒,几乎不增加代理延迟
- 自动脱敏:AWS 密钥、JWT、PEM 私钥等在索引时替换为 [redacted:<kind>],摘要和导出可安全外发
- 召回点覆盖全:会话开场、PreToolUse、PostToolUse(报错后)都会自动提供历史决策
- 提供可复现基准:仓库自带 LongMemEval-S 和 LoCoMo 评测工具,85.3% hit@1 可自行验证
- 默认词法检索对改写式提问命中率有限,语义召回需额外配置本地 Ollama/LM Studio 或 OpenAI 兼容端点
- 部分集成有外部依赖:Cursor、Zed、opencode 等需要 sqlite3,Zed 和 DeepSeek Harness 还需 zstd
- Windows 支持存在但成熟度低于 macOS/Linux,官方明确表示后者是久经考验的路径
- 模式匹配不等于真正的密钥检测——未知形态的秘密仍可能穿透索引
- aider 的 MCP 召回、Roo Code 的 auto-recall 等功能受上游 bug 阻塞(表格中标记 ⚠)
如何安装或部署这个 Agent?
macOS/Linux:curl -fsSL https://raw.githubusercontent.com/vshulcz/deja-vu/main/install.sh | sh && deja install --auto(约 10 秒安装、约 10 秒建首次索引)。其他方式:brew install deja-vu;go install github.com/vshulcz/deja-vu/cmd/deja@latest;npx @vshulcz/deja-vu "query" 免安装试用;Windows 用 scoop install deja-vu 或从 GitHub Releases 下载 deja.exe 放入 PATH。Claude Code 还可用:claude plugin marketplace add vshulcz/deja-vu && claude plugin install deja-vu@deja-vu。
如何使用这个 Agent?
安装后开一个新的代理会话,直接提问历史问题(如"我们之前处理过 jwt refresh 轮换吗?查一下你的记忆");开启 auto-recall 的话开场即自动召回。CLI 常用命令:deja "查询词" 搜索全部历史;deja blame <path> 查文件相关会话;deja fix <error> 查历史报错后的有效操作;deja ctx <query> 生成可粘贴进提示词的 Markdown 摘要;deja doctor 自检(--deep 校验索引);卸载用 deja uninstall --all && rm -rf ~/.cache/deja。纯二进制安装时 MCP 未接线,可用 deja mcp 手动配置。
这个 Agent 与同类方案有什么区别?
README 明确对比了三类方案:记忆平台(Mem0、Letta、memU)需要 LLM/嵌入密钥且从空库开始记录;会话搜索工具(cass)同样可回溯但不会在被询问前主动召回;记录型工具 engram 是该类中最强者但仍只记得代理主动保存的内容。deja 的差异点是无捕获步骤、无 LLM 依赖、且在会话开场和工具调用前后自动召回。