本地优先
你的记忆是你和 AI 之间最私密的东西:你说过的焦虑、没睡好的夜、没完成的计划。这样一份东西,有些人就是不想让它经过任何部署——哪怕部署目标是你自己的 Vercel 项目。本地客户端就是为这种人准备的:同一颗内核跑在你自己的机器上,记忆从第一天起就躺在你拥有的硬件上,对话不出你的机器。
内核是一个 npm 包
Previously 只有一颗内核,两种跑法。本地形态里,内核被打包成 npm 包 @previously-lab/kernel,随客户端精确锁版分发——你机器上跑的和云端部署跑的是同一份代码。
安装整个产品只需要:
npm i -g @previously-lab/client
previously
没有 Docker,没有编译工具链,不需要装 git。npm 是这个星球上被验证过最多次的分发渠道——我们刻意选择无聊的技术,因为"在你的机器上跑起来"这件事不应该是一场冒险。
你的机器上有两份东西
装完之后,你的硬盘上会出现两个目录,它们的分工是刻意的:
~/.previously是运行区:内核版本、日志、进程状态、转录游标。删了它,重装一遍就回来了。~/Documents/Previously是记忆本身:纯 Markdown 文件,附带一个本地 git 仓库。这才是值钱的那一份——它的样子你在记忆是一个文件夹里会看到。
运行区可以随时重建,记忆区永远只属于你。这个区分不是洁癖:它意味着升级、重装、换电脑,都碰不到你的记忆。
升级就是升级
内核版本被客户端精确锁定——不是"兼容 ^0.9",而是逐字节对应的那一个版本。这是一次刻意的保守:你的记忆格式和内核行为绑定,我们不接受"大概兼容"。
所以升级永远只有一句话:
npm i -g @previously-lab/client
新版本的内核随依赖一起到来,装进 ~/.previously/kernel/versions/<版本号>/,指针原子切换。旧版本原地保留。没有原地迁移脚本,没有"升级中请勿关机"。
本地和云端不矛盾
本地形态不是反云端。两种跑法共用同一颗内核、同一种记忆格式:本地记忆仓库可以直接推送成你的私有 GitHub 仓库做备份,也可以反过来——把云端部署的记忆仓库克隆回本机,本地客户端会直接领养它,历史原样保留。区别在于主语:备份与迁移永远是你主动的推送,而不是我们默认的保管。
一句话:Previously 把"你的记忆归你"当成架构约束,而不是隐私政策里的一句话——本地形态是这条约束最彻底的表达。