凌晨两点,你的代码突然抛出一个JWT密钥轮换的错误。你记得上周Claude Code帮你修过同样的问题,可翻遍项目目录,那些对话记录散落在几十个JSON文件里,搜索无门。你需要的不是一个更快的搜索工具,而是一个记忆层。

这正是deja要做的事。它是一款零依赖的命令行工具,能把Claude Code、Codex、opencode这些AI编程代理留下的对话历史,变成可检索的本地记忆。这些工具会把每次会话写成本地文件,日积月累就是好几个GB的调试记录和设计决策,但之前你根本搜不到它们。deja就是来把这些文件里的知识翻出来,让你和你的代理都能再次利用。

打开网易新闻 查看精彩图片

deja的工作方式很简单。它只有一个二进制文件,不需要下载模型,不需要启动服务,所有数据都不离开你的机器。opencode的索引功能会调用系统自带的sqlite3命令行,这在macOS和大多数Linux发行版上都已经预装。安装也同样轻量:一条curl管道命令,或者通过Go、npm、Homebrew,随便你喜欢的方式。

装上之后,用deja为你的AI代理接线。`deja install --all` 会为Claude Code、Codex和opencode配置MCP召回功能,并编辑配置文件同时保留.bak备份。如果你只想针对单个工具,可以指定 `deja install claude-code --auto`,这样每次会话开始时,代理会自动加载当前项目最近的记忆,只读、上限2KB,不需要你手动查询。这种自动化的方式意味着代理一起手就已经知道这个项目的历史,你甚至不用开口问。

到了下一次会话,你可以直接问代理:“我们以前处理过JWT刷新轮换吗?查查你的记忆。”如果开了自动召回,你甚至不用问,代理从一开始就已经知道这个项目上你解决过的问题。搜索命令 `deja "jwt refresh token"` 会返回类似这样的结果:来自Claude的对话,7月8日,API项目,jwt kid不匹配导致登录失败,通过重载jwks缓存和添加时钟偏移测试修复;来自Codex的对话,7月1日,web项目,刷新令牌cookie需要设置SameSite=Lax。每条记录都带上了项目名、日期和会话ID,让你一眼就能判断这段经验的可信度。

如果没有MCP环境,还可以用上下文管道功能。在命令行里执行 `claude "前置上下文: $(deja ctx 'database migration')"`,就能把相关记忆作为提示传给Claude。这样即便不通过MCP,代理也能拿到历史上下文,让过去的经验直接进入当前对话的视野。

deja的同步功能让多台机器共享记忆成为可能。你可以指定一个共享文件夹——比如Syncthing、iCloud、甚至一个git仓库——然后分别执行导出和导入命令:机器A执行 `deja sync export ~/Sync/deja`,追加自上次导出后的新批次;机器B执行 `deja sync import ~/Sync/deja`,拾取它还没见过的记录。批次文件是纯JSONL格式,导出时已经做了脱敏,导入是幂等的,你可以把共享文件夹当作只追加的日志,甚至用cron定时运行两条命令。记录永远不会回传到来源机器,`--full` 选项可以无视水位线重新全量导出,适合在旧批次丢失后添加新机器。

更直接的方式是通过SSH同步。当另一台机器只需一跳SSH可达,用 `deja sync ssh mini` 就能把新记录推送到名为mini的远程主机