我给 omp 装上了跨设备记忆:两台电脑,一个大脑

你用的 AI 编程助手,换个电脑就「失忆」——它记得你在 Mac 上的一切,换到 Windows 却连你是谁都不知道。这就是我遇到的第一个 omp 尴尬。
omp(Oh My Pi)是最近很火的终端 AI 编程 agent,GitHub 16.7K stars,四个月从 3.4K 涨上来。它有个好用的内置记忆系统:会话中沉淀的项目信息、偏好、踩坑经验,会提炼成记忆,下次会话直接可用。但默认情况下,这套记忆只活在单台电脑上。
我在 Mac 上让 omp 记住了我的项目、偏好、踩坑记录,第二天在 Windows 上打开它,它一脸茫然。同一个 agent,两台电脑,两个脑子。
这篇文章记录我怎么用一台 1核2G 的便宜 VPS,让两台电脑上的 omp 共享同一个大脑。
omp 的记忆机制:三选一

omp 的记忆后端(memory.backend)有三个选项:
- local:项目级
learned.md文件,零部署,但单机 - mnemopi:本地 SQLite,全自动,还是单机
- hindsight:远程服务器,唯一能跨设备共享的方案
hindsight 是 vectorize-io 的开源项目(MIT,近两万 star),专门给 AI agent 做长期记忆,支持自托管。它内部用嵌入模型做语义检索,用 LLM 做事实提炼。也就是说,记忆不是原样存储对话,而是提炼成「事实」再按语义召回,recall 的效果比关键词搜索好得多。
方案很清晰:VPS 上自托管 hindsight,两台电脑的 omp 都连它。
一台 1核2G VPS 就够
我用的是一台 DMIT 的 1核2G 20G 小机器(Debian 13),一个月 10.9 美元。部署就是一条 Docker 命令:
docker run -d --name hindsight --restart unless-stopped \
-p 8888:8888 \
-e HINDSIGHT_API_LLM_PROVIDER=deepseek \
-e HINDSIGHT_API_LLM_API_KEY=<你的key> \
-e HINDSIGHT_API_LLM_MODEL=deepseek-v4-flash \
-e HINDSIGHT_API_EMBEDDINGS_PROVIDER=onnx \
-e HINDSIGHT_API_EMBEDDINGS_ONNX_MODEL_ID=intfloat/multilingual-e5-small \
-e HINDSIGHT_API_DB_POOL_MIN_SIZE=1 \
-e HINDSIGHT_API_DB_POOL_MAX_SIZE=5 \
-v hindsight-data:/home/hindsight/.pg0 \
ghcr.io/vectorize-io/hindsight:latest几个配置点,都是实测后定下来的:
- LLM 用 deepseek-v4-flash:记忆提炼是高频低量调用,deepseek 便宜到可以忽略。实测一次 retain 大概 3000/200 tokens,每天几分钱。
- 嵌入用 multilingual-e5-small:默认的 bge-small-en 是英文模型,我的记忆中英混合,中文召回效果差,换多语言模型后中文查询正常命中。
- 连接池调成 1/5:默认 min=5/max=100 是为高并发设计的,在 2G 内存上纯浪费,调小后内存占用明显下降。
- API token 认证:服务暴露给两台电脑用,必须加认证,
HINDSIGHT_API_TENANT_EXTENSION+HINDSIGHT_API_TENANT_API_KEY一行开启。
把 8888 从公网藏起来
服务跑起来后,第一反应是改防火墙、加 TLS。后来发现有个更省的办法:让 VPS 加入我的 Tailscale 网络。
我的 Mac、Windows、iPhone 本来就在同一个 Tailscale 网里,把 VPS 也拉进来(tailscale up,浏览器点一下授权),它就拿到一个 100.x 的内网地址。然后把 Docker 的端口绑定从 8888:8888 改成 100.75.6.111:8888:8888,公网上的 8888 直接消失。
效果:不需要域名、不需要证书、不需要改防火墙,WireGuard 隧道本身加密,token 明文传输的问题也顺带解决。公网攻击面归零,成本为零。
架构总览

omp 接入:三行配置
Mac 和 Windows 的 ~/.omp/agent/config.yml 各加三行:
memory:
backend: hindsight
hindsight:
apiUrl: http://100.75.6.111:8888
apiToken: <你的token>重启 omp 生效。然后验证:
- 在 Mac 上让 omp 记住一件事,等一分钟(后台要跑 LLM 提炼),在 Windows 上问它,答得出来。
- 反过来一样。
有个细节:hindsight 默认按项目标签隔离记忆(per-project-tagged),两台电脑在同一个项目目录(同名)下开会话,记忆才互通。这不是 bug,是特性,防止跨项目串记忆。
手工记忆和规则,也要跨设备
自动记忆走 hindsight 解决了,但我还有一堆手工维护的东西:memory/ 经验库、AGENTS.md 规则、RULES.md 粘性规则。这些是文件,和自动记忆是两条线。
方案是「唯一真源 + 链接」:
- 所有文件的真源放在
~/omp-shared/,用 Syncthing 双向同步到 Windows - 两台电脑上 omp 的加载位置(
~/.omp/agent/memory等)全部改成软链接,指向共享目录
这样 Windows 上的 omp 读到的规则、记忆库,和 Mac 上是同一份文件。维护只改一处,Syncthing 自动分发。顺带把 Hermes(另一个助理型 agent)的记忆文件也收进来统一管理。
原则:文件只有一份真源,所有程序通过链接引用。敏感的东西(API key)不进共享,各机自己留。
备份:三级冗余,丢失上限一天

记忆数据在 VPS 的 Docker volume 里,裸奔等于没备份。我的方案:
- VPS 每天凌晨 3 点(北京时间):停容器 3 秒,打包整个数据卷(41MB),保留最近 7 份
- Mac 每天凌晨 4 点:从 VPS 拉一份到
~/omp-shared/omp-backups/ - Windows:Syncthing 自动同步过去
三级冗余,VPS 磁盘全毁也不丢数据(最近一天内最多)。恢复流程:停容器、解包、启动,记忆全部回来。
这个备份方案踩过一个时区坑,见下面的清单。
踩坑清单

- omp 的 daemon 不热重载:改完
config.yml必须完全退出所有 omp 会话再重开,不然新配置不生效。我一度以为配置写错了,查了半天才发现是常驻进程的问题。 - CRON_TZ 不生效:给 VPS 的 cron 加了
CRON_TZ=Asia/Shanghai,结果备份还是按洛杉矶时间跑了,把记忆服务的容器停在用户正在用的时候。cron 3.0pl1 不认这个变量,直接timedatectl set-timezone Asia/Shanghai改系统时区,一了百了。 - 默认连接池太大:hindsight 默认 min=5/max=100,在 1核2G 上跑出慢查询和 swap,调成 1/5 后稳了。
- deepseek 慢调用别慌:记忆提炼偶尔要 27-55 秒,服务自带重试,日志里看到 WARNING 不代表坏了,等它重试完就行。
- 备份撞上写入:某次备份恰好赶上 retain 写入,客户端报「连接被关闭」。停容器的那 3 秒是有感知的,把备份时间放在凌晨,问题就没了。
成本账

- VPS:$10.9/月(1核2G 20G,顺带还能干别的)
- deepseek API:记忆提炼每天几分钱
- 域名/证书:0(全程走 Tailscale,没有公网服务)
- 备份:41MB/天,磁盘和带宽都忽略不计
合计:每月 11 美元,换来两台电脑共享一个大脑。
不止记忆
做完之后回头看,这套「唯一真源 + 链接 + 自动分发」的思路不止适用于记忆:规则文件、agent 人设、配置文件覆盖层,全都可以收进来。两台电脑、三个 agent,维护点只有一个。
给 omp 装上一个跨设备的大脑之后,它终于在两台电脑上认识我了。