Memories 产品说明
Memories 是一套加密的记忆、私人文件和凭据系统。默认数据在本机加密,密钥留在用户设备上。可选的托管 Center 把内容放在服务器加密库里,运营者能读到已解锁的明文;标成端到端的秘密仍只在设备之间解开。命令行程序是 memories,无状态 WebSocket 中继是 memories-relay,授权中心是 memories-center,移动端通过 C ABI 调用的本地库是 memories_ffi。
这是开发版,存储格式版本为 1。已安装程序的版本可用 memories --version 查看。仓库包含可执行代码和安全回归测试。它还没有经过独立的密码学审查或应用安全审计。通过测试并不构成生产安全认证。
英文说明仍在仓库中:根目录 README.md、SECURITY.md,以及 docs/ 下的各专题指南。本文按当前已实现的行为概述产品,不把尚未完成的能力写成已经可用。
先选要完成的事
默认可检索的知识、跨客户端的人格资料和受保护的秘密放在用户自己的设备上,按保险库授权。云盘保存密文,中继连接在线设备。另行启用的托管 Center 会在服务器上保存可解密的内容,见下文。
| 任务 | 从哪里开始 |
|---|---|
| 保存第一条笔记 | 启动服务并初始化,再写入和搜索 |
| 整理知识、关系或人格 | 记忆与卡片,人格详见 persona |
| 让 AI 查资料 | MCP 与 skill,skill 本身不授予数据访问权 |
| 保存或使用密码、密钥和 OTP | 凭据与受保护卡片 |
| 换设备、共享资料或备份 | 设备、同步和备份 |
| 给成员发限时授权,或审批权限申请 | 授权链 |
| 把资料放到托管 Center | 托管保险库 |
| 让 Center 看不见的秘密在设备间传递 | 设备间端到端秘密 |
核心概念
所有知识卡片支持卡片类型与自定义字段:笔记、联系人、链接、代码片段、 清单、日期与事件、凭据,以及保险库内的可复用模板。字段支持验证、排序和重命名; 敏感值默认隐藏,显示需要明确授权与验证。
| 概念 | 用途与边界 |
|---|---|
| 本机存储(store) | --home 选择的数据目录,包含本机身份、密码保护和多个保险库。守护进程与客户端必须选择同一目录 |
| 保险库(vault) | 按资料或协作范围划分的集合,有独立的成员、角色、设备权限和签名历史。共享保险库,不是共享正在使用的数据库目录 |
| 记忆(memory) | 笔记、日志等自由文本 |
| 知识卡片(card) | 带标签、来源、分类和关系的 wiki 式知识;受保护卡片是另一类带凭据引用的卡片 |
| 脑图卡片(brain) | 带摘要与有类型链接的结构化知识,可跨保险库引用。它不是模型或推理引擎 |
| 人格卡片(persona) | 身份核心与关联档案、世界状态、行为事件,不是普通知识摘要 |
| 工作流卡片(workflow) | 有序步骤与状态,或指派、概述、目标和验收组成的清单模板与任务 |
| 文件(file) | 原始二进制资产,按授权导入导出,不自动抽取文本供检索 |
| 凭据(credential) | 单独保护的密码、令牌或密钥,通过授权操作使用,不作为普通文本搜索或打印 |
unlock 解锁本机存储,允许权限范围内的普通操作;memories sudo 用同一个密码建立短时提权会话,供私人内容、文件、凭据和敏感管理操作使用。它不是操作系统管理员权限,也不绕过保险库权限。
普通 MCP 按保险库、期限和读写范围授权,不继承终端提权,也不开放私人内容或凭据。另有显式启用的无人值守 CLI/MCP:仅限本机、只读,但可读取授权保险库中的私人内容、原始文件和明确请求的凭据明文。它不是普通 MCP 的默认行为,接收客户端和日志可能留存秘密。
已实现的能力
保险库、记忆与知识卡片
用户用本地密码初始化一个库,并在其中创建保险库。普通记忆和知识卡片可以写入、读取、搜索、查看历史和删除。卡片支持标签、来源、别名、备注、分类、有向关系和反向链接,也可以查看图谱。脑图(brain)卡片是带纯文本摘要与可跨库有类型链接的结构化知识卡片,摘要在保险库权限内可搜索,不升格为受保护机密。人格(persona)卡片保存跨产品身份核心文与关联档案(日记、契约等),并支持追加行为事件;保险库副本为权威来源。工作流(workflow)卡片在修订中保存有序步骤及其状态;清单模板记录指派人、概述和目标,可复制成任务并关联其他工作流或归档记忆。列表可以按类型或分类筛选或分组;常用的保险库、人格、类型等可以存为客户端默认值。私人文件可以导入和导出。显式标记为私有的内容需要本机提权后才能访问,并且不会进入普通搜索。
命令、MCP 和手机端使用普通的短十六进制 ID,通常是六个字符,例如 0b0668。ID 没有类型前缀,也不表示密级。已有的八字符 ID 仍然有效。发生冲突时,返回的 ID 按两个字符递增,最长 16 个字符。设备公钥和安全指纹不会被缩短。
界面语言包括英语、简体中文、日语、德语和法语。手机端和命令行都可以记住手动选择,也可以重新跟随系统。
本机还可以把 Python 解释器的版本和可执行文件目录记入「此设备」保险库。该库不进入设备授权包、备份或同步。
检索
普通搜索对中文做分词,并支持多个关键词。进阶检索在已授权的普通记忆和知识卡片上提供分块、BM25、进程内 EmbeddingGemma 向量、混合排序和带引用的回答。模型权重由 memories rag model-install 单独安装,或由配置指向本地目录。也可以改用客户自己配置的嵌入、生成和可选重排地址。凭据、私人内容和文件资产不进入检索。
MCP 在原有搜索和读写之外,提供 memory_retrieve 和 memory_ask。AI 客户端可以通过附带的 skill 使用这些工具。skill 可安装到 Codex、OpenCode 和 Claude Code 的用户目录或项目目录;memories skill generate 还能为项目生成 AGENTS.md 或带人格概要的 skill 目录。MCP 也提供工作流和人格工具。组织需要统一授权时,可以配置授权中心。票据模式由 Center 签发登记和 MCP 授权票据,内容仍在各设备自己的库里。
凭据与受保护卡片
凭据通过隐藏输入、管道、命令标准输出、正则或 JSON 指针捕获,并以加密形式保存。可以在库内生成 SSH 密钥或 TLS 证书,导出公钥或证书,按主机允许列表使用凭据,或把凭据注入一个已批准指纹的子进程。HTTPS 适配器只向已允许的主机发送 Bearer 令牌,并且只返回状态码。
文档可以把正文中的精确密钥替换为 {{secret:标签}}。普通读取、搜索和 MCP 只看见这个引用。经授权后可以把当前值复制到系统剪贴板,而不会把它打印出来。
受保护卡片把可搜索的摘要和单独的凭据放在同一次提交里:
| 卡片 | 可搜索或可显示的内容 | 受保护的值 |
|---|---|---|
| 邮箱账户 | 邮箱、SMTP 主机、端口、SSL | 密码 |
.env |
每个变量名,值显示为 *** |
原始 UTF-8 文件 |
| Cookie / JWT | 已授权的精确 HTTPS 主机和头类型 | Cookie 或 Bearer 令牌 |
| TOTP | 发行方、账户、算法、位数、周期 | Base32 种子 |
| HOTP | 发行方、账户、算法、位数、计数器 | Base32 种子 |
TOTP 和 HOTP 都支持 SHA-1、SHA-256、SHA-512,以及 6 或 8 位。TOTP 的周期是 30 或 60 秒。HOTP 使用持久计数器,每次生成验证码时在同一次提交中加一。命令行可以导入单个 otpauth://totp/... 或 otpauth://hotp/...,也可以导入 Google Authenticator 的 otpauth-migration://offline?data=...。card otp-import --image 用纯 Rust 解码器从二维码图片中读出这两种 URI。生成一次性验证码需要本机提权,验证码本身不写入审计记录。搜索和 MCP 不生成验证码,也不返回种子。
守护进程可以持有 SSH、FTP、TCP、MySQL、Redis 和 PostgreSQL 会话。每条指令先提议、再用 APPROVE 批准,然后执行一次。SSH、MySQL、Redis 和 PostgreSQL 还可以开一个只监听 127.0.0.1 的回环代理,让本机程序连接时拿不到保存的密码或私钥。
邮件与应用密码学作业
memories crypto 使用库内凭据和用户指定的本机工具,完成 S/MIME 与 OpenPGP 的签名、加密、解密,以及 Android APK/AAB 签名。在 macOS 上还可以为已经带有描述文件的 iOS .app 签名。执行前可以预览计划;真正执行需要本机提权,并批准该计划的精确摘要。这些操作不发送邮件,也不发布应用。MCP 和手机 FFI 不能调用它们。
角色、授权与权限申请
保险库角色是 Reader、Editor、Admin、Owner。能发出的最大范围分别是 read、read_write、read_write_delete、allow_all。省略范围是 read。Reader 和 Editor 不能签发。Admin 和 Owner 可以签发和转授;本机签发要保险库已解锁,不需要终端提权。一张授权不能超过签发人的角色,也不能超过调用者手里那张授权自己的范围,不能跨保险库,期限是 1–60 分钟,转授最多两层。接收人必须已是该库成员,角色不能高于签发人。同时有效的授权最多 10000 张,本机守护进程和托管 Center 用同一个上限。令牌只在签发或领取时出现一次,库里只存哈希。锁定会暂停授权,不会把它们撤销。授权不进入同步和备份。
任何当前成员可以为自己申请更大的范围。本机还可以申请角色;托管 Center 的申请只有范围。批准只记下边界,不发令牌,申请人再用自己的成员凭据领取一次。申请人不能批准或拒绝自己的申请。待决上限是每人每库 20 条、每库 200 条。超过 7 天作废,决定之后 30 天删除。
普通 MCP 有对应的授权工具,仍不继承终端提权,也不开放私人内容或凭据。手机本地 FFI 不开放授权管理和权限申请。
托管 Center 与密封秘密
票据模式的 Center 只签发登记、MCP 授权和解锁票据。解锁票据只允许本机用设备自己的密码解开,不给 sudo,也不给 MCP 提权。
托管模式用 memories-center --data 运行服务器加密库。配置里恰好一个 mode = "saas" 时,守护进程的内容请求转到该 Center,本机不再当内容后端。运营者的管理员令牌负责锁定、解锁和成员,不能拿这枚令牌直接读写内容。托管内容对运营者可见。
不能让服务器看见的秘密要先把 CLI 和该库管理员的手机配对,再放入密封信封。手机可以扫描 5 分钟有效的配对二维码,或手输配对码,并核对指纹和 6 位 SAS。Center 只保存公钥和密文。设备不能签发授权,也不能审批。撤销会删掉该设备上的信封;已经送到设备上的明文收不回来,要先更换秘密,再重新密封给仍获批的设备。
这和本机保险库的设备配对不是同一条路。本机配对仍用邀请、指纹核对和批准文件,不使用摄像头。OTP 的 otpauth 二维码也不能用手机摄像头导入,命令行继续用 card otp-import --image。
设备、云与恢复
设备配对用于同一个人的新设备:用自己的密码初始化后,通过邀请、指纹核对和批准加入已有身份。成员邀请用于另一个人:按批准者自己的角色天花板,在指定保险库中授予角色,不把对方变成自己的设备。Admin 可以管理 Admin、Editor 和 Reader,不能增减或改动 Owner,也不能吊销设备。每个保险库恰有一个所有者,不能通过邀请新增所有者;现任所有者须用 memories member transfer VAULT_ID USER_PUBLIC_KEY 将所有权转交给已有成员,转交后原所有者成为管理员。设备吊销按保险库生效,只有所有者可以吊销。
保险库可以导出为加密文件,也可以经用户自己的 WebSocket 中继在线整库发送。中继不保存资产明文,也不为离线设备排队。并发编辑保留多个头,需要显式解决。过期纪元的未知写入进入隔离区,再由本机重新签名。
桌面端可以用用户自己注册的 OAuth 应用登录 OneDrive 或 Google Drive。令牌加密保存在本机,不进入备份和设备交换。memories cloud sync 通过对应的应用文件夹上传和下载不可变密文对象。
这三条路径用途不同:sync export/import 和中继 sync send/receive 是显式整库交换;cloud sync PROVIDER 使用云对象与持久队列同步;远程守护进程 RPC 在主机上执行操作,不把保险库导入调用方的本机存储。中继不提供离线存储,云同步的真实账号验证仍未完成。
备份使用另一套密码。恢复在新的数据目录中建立独立保险库,并保留只读归档中的原始签名历史。
桌面、手机与 AI 客户端
Windows 提供托盘,macOS 提供菜单栏应用。两者和 Linux 上的 memories webui 都打开本机只读状态页,显示锁定状态、库数量、连接数和云同步队列,不显示库内容。状态页只监听 127.0.0.1。
Android 和 iOS 客户端通过同一套 Rust 服务工作,包含本地全文搜索、文件选择、成员批准文件、在线中继传输、历史和审计。平台安全存储中的本地因子补充密码。可选的生物识别或设备锁只解开本机库,不把设备密钥交给 Center。应用进入后台时清除授权并关闭内容对话框。Android 阻止截屏,iOS 遮住应用切换器中的快照。
手机首次启动可选择单机、Center 或 SaaS,并可在主界面切换。单机使用本地加密资料库;Center 连接客户自建的托管服务器;SaaS 固定连接 https://memories.ivjn.us。后两者不要求先建立本地库,分别保存服务地址和成员令牌,切换不会搬迁数据。
Center / SaaS 提供托管知识列表、搜索、详情、普通知识编辑、创建和确认删除,以及授权请求审批和已配对设备管理。只读账号可浏览,只写账号可创建,删除需对应授权;结构化和端到端卡片需使用专用编辑器修改。托管 Store 虽然在磁盘上加密,但运营者持有密码、可以读取内容,界面会标明“服务端可读”。配对二维码用摄像头扫描;相机被拒绝时可以改输配对码。知识编辑失败会保留当前草稿供重试,离开未保存内容需确认;后台锁定会清除草稿。操作步骤见手机模式选择与切换。
当前未提供
下列事项尚未作为可用能力交付:
- 真实 OneDrive 或 Google Drive 账号上的同意、刷新、登出、双设备汇合、离线重试和吊销验证。桌面登录和
cloud sync已经实现,并用本地夹具测试过;真实账号验证仍是发布门槛。 - 手机端的模型检索界面。手机端没有模型配置,也没有模型推理界面。向量、混合检索和引用问答使用已配置的桌面守护进程。手机端获得的是改进后的关键词搜索,以及 BM25 检索。
- Linux 原生托盘。Linux 可以使用 CLI、守护进程、中继、FFI 库和
memories webui。原生托盘目前只在 Windows 和 macOS 上提供。 - 手机后台同步。本版本不启用后台同步。
- 手机摄像头导入 OTP。托管设备配对可以扫配对二维码。
otpauth://和otpauth-migration://仍用命令行memories card otp-import --image PATH,或直接传入 URI。手机不能用摄像头读取这两种 OTP 二维码。
另外,中继在线同步是显式的整库传输,不是自动的增量同步;这不等于 cloud sync 的云对象同步路径。中继不能替离线设备保存数据包。Cookie 过期、JWT 刷新和自动登录没有实现。
组成
| 组件 | 路径 |
|---|---|
| 密码学、存储、授权、检索与服务 | crates/core |
| 命令行、本机 IPC、MCP、桌面状态、中继客户端 | crates/cli |
| 无状态 WebSocket 中继 | crates/relay |
| 授权中心:票据、托管库、成员与密封信封 | crates/center |
| 移动端 C ABI | crates/ffi |
| Android / iOS 客户端 | mobile |