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 解碼器從QR 碼圖片中讀出這兩種 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 分鐘有效的配對QR 碼,或手輸配對碼,並核對指紋和 6 位 SAS。Center 只儲存公鑰和密文。裝置不能簽發授權,也不能審批。撤銷會刪掉該裝置上的信封;已經送到裝置上的明文收不回來,要先更換秘密,再重新密封給仍獲批的裝置。
這和本機保險庫的裝置配對不是同一條路。本機配對仍用邀請、指紋核對和批准檔案,不使用相機。OTP 的 otpauth QR 碼也不能用手機相機匯入,指令列繼續用 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 遮住 App 切換器中的快照。
手機首次啟動可選擇單機、Center 或 SaaS,並可在主介面切換。單機使用本機加密資料庫;Center 連線客戶自建的託管伺服器;SaaS 固定連線 https://memories.ivjn.us。後兩者不要求先建立本機庫,分別儲存服務地址和成員權杖,切換不會搬遷資料。
Center / SaaS 提供託管知識清單、搜尋、詳情、普通知識編輯、建立和確認刪除,以及授權請求審批和已配對裝置管理。唯讀帳號可瀏覽,唯寫帳號可建立,刪除需對應授權;結構化和端到端卡片需使用專用編輯器修改。託管 Store 雖然在磁碟上加密,但營運者持有密碼、可以讀取內容,介面會標明「服務端可讀」。配對QR 碼用相機掃描;相機被拒絕時可以改輸配對碼。知識編輯失敗會保留目前草稿供重試,離開未儲存內容需確認;背景鎖定會清除草稿。操作步驟見手機模式選擇與切換。
目前未提供
下列事項尚未作為可用能力交付:
- 真實 OneDrive 或 Google Drive 帳號上的同意、更新、登出、雙裝置匯合、離線重試和吊銷驗證。桌面登入和
cloud sync已經實現,並用本機夾具測試過;真實帳號驗證仍是發布門檻。 - 手機端的模型檢索介面。手機端沒有模型設定,也沒有模型推理介面。向量、混合檢索和引用問答使用已設定的桌面常駐程式。手機端獲得的是改進後的關鍵字搜尋,以及 BM25 檢索。
- Linux 原生系統匣。Linux 可以使用 CLI、常駐程式、中繼、FFI 庫和
memories webui。原生系統匣目前只在 Windows 和 macOS 上提供。 - 手機背景同步。本版本不啟用背景同步。
- 手機相機匯入 OTP。託管裝置配對可以掃配對QR 碼。
otpauth://和otpauth-migration://仍用指令列memories card otp-import --image PATH,或直接傳入 URI。手機不能用相機讀取這兩種 OTP QR 碼。
另外,中繼線上同步是顯式的整庫傳輸,不是自動的增量同步;這不等於 cloud sync 的雲物件同步路徑。中繼不能替離線裝置儲存資料包。Cookie 過期、JWT 重新整理和自動登入沒有實現。
組成
| 元件 | 路徑 |
|---|---|
| 密碼學、儲存、授權、檢索與服務 | crates/core |
| 指令列、本機 IPC、MCP、桌面狀態、中繼用戶端 | crates/cli |
| 無狀態 WebSocket 中繼 | crates/relay |
| 授權中心:票據、託管庫、成員與密封信封 | crates/center |
| 行動端 C ABI | crates/ffi |
| Android / iOS 用戶端 | mobile |