开源编码代理实现SSH同步记忆
速览
该开源项目为编码AI代理引入了持久化记忆能力,支持通过SSH协议在不同设备间同步记忆状态。这使得AI代理能在多会话中保持上下文,提升编码协作效率。项目开源特性允许开发者自定义记忆存储与同步策略,推动AI编程助手向更智能、更个性化的方向发展。
AI 深度解读
背景
当前流行的 AI coding agents(如 Claude Code、Codex、opencode)会在本地磁盘上记录每一次对话——这些文件包含海量的调试记录、设计决策历史,但缺乏有效的检索手段。开发者面对的是数 GB 的本地日志,无法快速回溯“之前是否遇到过某个问题”或“当时是如何解决的”。这种记忆断层导致重复劳动和效率损失。
deja 正是为解决这一问题而生的开源工具:它读取这些 agent 已写入本地文件的历史记录,构建一个轻量、可搜索的内存层,并支持通过 SSH 在不同机器间同步。
核心内容
deja 是一个零依赖的 Go 二进制文件,无需下载模型、无需运行后端服务,所有数据不出本地机器。它支持的三种 agent 是 Claude Code、Codex 和 opencode,其索引构建过程完全在本地完成。
安装与集成
安装方式灵活,支持多种包管理器和手动脚本:
curl -fsSL https://raw.githubusercontent.com/vshulcz/deja-vu/main/install.sh | sh
# 或
go install github.com/vshulcz/deja-vu/cmd/deja@latest
# 或
npx @vshulcz/deja-vu "query" # 无需安装
# 或
brew install vshulcz/tap/deja-vu
安装后,只需一条命令即可将 deja 接入当前使用的 agent,并自动备份原配置文件(.bak):
deja install --all # 同时为 claude-code、codex、opencode 启用 MCP recall
deja install claude-code --auto # 额外启用 SessionStart 自动回溯钩子
--auto 参数会在每个 agent 会话启动时自动注入当前项目最近的历史记忆(只读、上限 2KB,不阻塞启动)。
使用方式
在 agent 会话中,开发者可以直接提问:
“have we dealt with jwt refresh rotation before? check your memory”
如果启用了 --auto,agent 启动时已自动知晓该项目中之前解决过的问题,无需手动提问。
也可以直接在终端中搜索:
$ deja "jwt refresh token"
[claude] api · Jul 8 · 8f31c0a9 — 2 matches
login started failing after refresh token rotation; jwt kid mismatch in tests
fixed by reloading jwks cache after rotateKey and adding a clock-skew test
[codex] web · Jul 1 · b77d91e2 — 1 match
refresh token cookie needed SameSite=Lax in local callback flow
多机同步
deja 支持通过共享文件夹(如 Syncthing、iCloud、git 仓库)同步:
deja sync export ~/Sync/deja # 机器 A:导出新批次
deja sync import ~/Sync/deja # 机器 B:导入未见过的内容
也支持直接通过 SSH 同步:
deja sync ssh mini # 推送本机记录到 mini 并导入
deja sync ssh mini --pull # 拉取 mini 的新记录到本机
同步数据以纯 JSONL 格式传输,导出时会重新脱敏。导入是幂等的,可重复执行。--full 参数可强制重新导出所有记录(不受水印限制)。
隐私与安全
deja 在索引时自动脱敏:AWS 密钥、api_key=/token= 赋值、Bearer token、原始 JWT、PEM 私钥块、GitHub token 等均被替换为 [redacted:<kind>],周围文本仍可搜索。可通过 DEJA_NO_REDACT=1 关闭(不安全)。deja share 和 deja sync export 在输出时也会重新脱敏。
工具本身不包含任何网络代码,索引和搜索全部在本地完成。同步时只负责将文件写入你指定的目录,文件传输由你自行处理。
架构与性能
deja 的索引是增量式的:只重新读取发生变化的文件。本地索引存储在 ~/.cache/deja,包含 records.bin、token buckets 和 manifest.json。实测在约 1250+ 会话(约 3.3GB 数据)上,索引构建迅速。MCP 服务器、统计、分享、同步功能均读取同一份索引。
与其他工具的区别
- cass:功能更全面(22 个 provider、Rust、语义嵌入、TUI),但 deja 更轻量——纯 Go 二进制、纯词法搜索、仅三个 harness、零配置,并围绕记忆层提供自动回溯、脱敏、分享、同步等功能。
- MemPalace / Mem0 / Letta:这些是记忆平台,需要嵌入、向量存储、捕获钩子或 API 来记录未来内容。deja 不包含任何捕获步骤,它直接索引 agent 已经写入磁盘的历史记录,包括安装之前数月的数据。两者可以共存。
已知限制与未来计划
- 目前不支持 Windows 的充分测试(但已构建并运行 CI)。
- 暂不支持按项目排除(计划中)。
- 可通过
DEJA_*_ROOT环境变量自定义目录。 - 卸载和清理:
deja uninstall --all后删除~/.cache/deja即可。
关键要点
- 零依赖:单一 Go 二进制文件,无需模型、数据库或后台服务。
- 本地优先:所有数据不出本地,索引和搜索无网络路径。
- 增量索引:只读取变化文件,支持大规模历史记录高效检索。
- 自动脱敏:索引时自动识别并脱敏常见凭证(API key、JWT、token 等),确保安全。
- 多机同步:通过共享文件夹或 SSH 双向同步记忆,批次以 JSONL 格式传输且幂等。
- 自动回溯:
--auto模式可在 agent 会话启动时自动注入当前项目最近记忆,无需手动查询。 - 兼容主流 agent:直接支持 Claude Code、Codex 和 opencode 的本地存储格式。
- 无侵入性:不修改 agent 自身的记录文件,不添加捕获步骤,仅读取已有数据。
- 开源 MIT 许可:代码完整开放,易于扩展(添加新 harness 只需一个 parser 文件)。
意义与影响
deja 填补了 coding agents 生态中一个关键的缺失环节——记忆的持久化与可检索。当前大多数 agent 设计为无状态会话,历史记录虽然保存在本地,但缺乏有效利用手段。deja
