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 で選択するデータディレクトリ。ローカル ID、パスワード保護、複数の保管庫を含みます。デーモンとクライアントは同じディレクトリを選ぶ必要があります |
| 保管庫(vault) | 資料や共同作業の範囲ごとに分ける集合。独自のメンバー、ロール、デバイス権限、署名履歴があります。共有するのは保管庫であり、使用中のデータベースディレクトリではありません |
| 記憶(memory) | ノートや日誌などの自由形式テキスト |
| 知識カード(card) | タグ、出典、分類、関係を持つ wiki 形式の知識。保護されたカードは認証情報への参照を持つ別種のカードです |
| ブレインカード(brain) | 要約と型付きリンクを持つ構造化知識。保管庫をまたぐ参照が可能です。モデルや推論エンジンではありません |
| ペルソナカード(persona) | ID の中核、関連記録、世界の状態、行動イベント。一般的な知識要約ではありません |
| ワークフローカード(workflow) | 順序付きステップと状態、または担当者、概要、目標、受入条件からなるチェックリストテンプレートとタスク |
| ファイル(file) | 生のバイナリアセット。認可に従いインポート・エクスポートし、検索用のテキストを自動抽出しません |
| 認証情報(credential) | 個別に保護するパスワード、トークン、鍵。認可された操作で使用し、通常のテキストとして検索・出力しません |
unlock はローカルストアをロック解除し、権限内の通常操作を許可します。memories sudo は同じパスワードで短時間の権限昇格セッションを作り、プライベートコンテンツ、ファイル、認証情報、機密管理操作に使用します。OS の管理者権限ではなく、保管庫の権限を迂回しません。
通常の MCP は保管庫、期限、読み書き範囲に基づき認可され、端末の権限昇格を継承せず、プライベートコンテンツや認証情報を公開しません。別途明示的に有効化する無人 CLI/MCPもあります。ローカル限定で読み取り専用ですが、認可された保管庫内のプライベートコンテンツ、生ファイル、明示的に要求した認証情報の平文を読めます。通常の MCP の既定動作ではなく、受信側クライアントやログに秘密が残る可能性があります。
実装済みの機能
保管庫、記憶、知識カード
ユーザーはローカルパスワードでストアを初期化し、その中に保管庫を作成します。通常の記憶と知識カードは書き込み、読み取り、検索、履歴表示、削除が可能です。カードはタグ、出典、別名、備考、分類、有向関係、バックリンクに対応し、グラフも表示できます。ブレイン(brain)カードは平文の要約と保管庫をまたぐ型付きリンクを持つ構造化知識カードで、要約は保管庫の権限内で検索でき、保護された秘密にはなりません。ペルソナ(persona)カードは製品をまたぐ ID の中核文と関連記録(日記、契約など)を保存し、行動イベントを追記できます。保管庫のコピーが正本です。ワークフロー(workflow)カードはリビジョンに順序付きステップと状態を保存します。チェックリストテンプレートは担当者、概要、目標を記録し、タスクに複製して他のワークフローやアーカイブ記憶に関連付けられます。リストはタイプや分類で絞り込み・グループ化でき、よく使う保管庫、ペルソナ、タイプなどをクライアントの既定値として保存できます。プライベートファイルはインポート・エクスポートできます。明示的に非公開と指定したコンテンツへのアクセスにはローカル権限昇格が必要で、通常検索には入りません。
コマンド、MCP、モバイルは短い通常の16進 ID を使います。通常は6文字で、例は 0b0668 です。ID にタイプ接頭辞はなく、機密区分も表しません。既存の8文字 ID も有効です。衝突時は返される ID が2文字ずつ延長され、最大16文字になります。デバイス公開鍵とセキュリティフィンガープリントは短縮しません。
UI 言語は英語、簡体字中国語、日本語、ドイツ語、フランス語です。モバイルと CLI は手動選択を記憶でき、システム設定に戻すこともできます。
ローカルでは 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 は永続カウンターを使い、コードを生成するたびに同じコミットで1増やします。CLI は単一の otpauth://totp/...、otpauth://hotp/...、または Google Authenticator の otpauth-migration://offline?data=... をインポートできます。card otp-import --image は純 Rust デコーダーで QR コード画像からこの2種類の URI を読み取ります。ワンタイムコードの生成にはローカル権限昇格が必要で、コード自体は監査記録に書きません。検索と MCP はコードを生成せず、シードも返しません。
デーモンは SSH、FTP、TCP、MySQL、Redis、PostgreSQL のセッションを保持できます。各命令はまず提案し、APPROVE で承認してから1回実行します。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分、再委譲は最大2階層です。受信者は既存メンバーで、ロールは発行者以下でなければなりません。同時に有効な認可は最大10000件で、ローカルデーモンとホスト型 Center は同じ上限を使います。トークンは発行または受領時に1回だけ表示し、ストアにはハッシュだけを保存します。ロックは認可を一時停止し、取り消しません。認可は同期とバックアップに含まれません。
現在のメンバーは誰でも自身のスコープ拡大を申請できます。ローカルではロールも申請できますが、ホスト型 Center はスコープ申請のみです。承認は境界だけを記録し、トークンを発行しません。申請者が自身のメンバー認証情報で1回受領します。自分の申請は承認・拒否できません。保留上限は1人1保管庫20件、1保管庫200件です。7日を超えると失効し、決定後30日で削除します。
通常の MCP にも認可ツールがありますが、端末の権限昇格を継承せず、プライベートコンテンツや認証情報を公開しません。モバイルのローカル FFI は認可管理と権限申請を公開しません。
ホスト型 Center と封印された秘密
チケットモードの Center は登録、MCP 認可、ロック解除のチケットだけを発行します。ロック解除チケットはローカルでデバイス自身のパスワードによる解除だけを許可し、sudo や MCP 権限昇格は付与しません。
ホストモードは memories-center --data でサーバー暗号化ストアを実行します。設定に mode = "saas" がちょうど1つある場合、デーモンのコンテンツ要求はその Center に転送され、ローカルはコンテンツバックエンドになりません。運営者の管理者トークンはロック、解除、メンバー管理に使い、直接コンテンツを読み書きできません。ホスト型コンテンツは運営者に見えます。
サーバーに見せたくない秘密は、先に CLI と保管庫管理者のモバイルをペアリングし、封印されたエンベロープに入れます。モバイルは5分有効なペアリング QR コードをスキャンするか、コードを手入力し、フィンガープリントと6桁 SAS を照合できます。Center は公開鍵と暗号文だけを保存します。デバイスは認可の発行や承認ができません。取り消しはそのデバイスのエンベロープを削除しますが、すでに届いた平文は回収できません。先に秘密を変更し、引き続き承認されたデバイス向けに再封印してください。
これはローカル保管庫のデバイスペアリングとは別の経路です。ローカルは招待、フィンガープリント照合、承認ファイルを使い、カメラを使いません。OTP の otpauth QR コードもモバイルカメラでインポートできず、CLI の card otp-import --image を使います。
デバイス、クラウド、復旧
デバイスペアリングは同じ人の新デバイス向けです。自身のパスワードで初期化し、招待、フィンガープリント照合、承認を経て既存の ID に参加します。メンバー招待は別の人向けで、承認者のロール上限内で指定保管庫のロールを付与し、相手を自身のデバイスにはしません。Admin は Admin、Editor、Reader を管理できますが、Owner の追加、削除、変更やデバイス取り消しはできません。各保管庫の所有者はちょうど1人で、招待で追加できません。現所有者は memories member transfer VAULT_ID USER_PUBLIC_KEY で既存メンバーに所有権を移し、移転後は管理者になります。デバイス取り消しは保管庫ごとで、所有者だけが実行できます。
保管庫は暗号化ファイルにエクスポートするか、ユーザー自身の WebSocket リレーでオンラインの全体転送ができます。リレーはアセットの平文を保存せず、オフラインデバイス向けにキューを持ちません。同時編集では複数のヘッドを保持し、明示的に解決する必要があります。期限切れのエポックの未知の書き込みは隔離領域に入り、ローカルで再署名します。
デスクトップはユーザー自身が登録した OAuth アプリで OneDrive や Google Drive にログインできます。トークンはローカルに暗号化保存し、バックアップやデバイス交換に含めません。memories cloud sync は対応するアプリフォルダー経由で不変の暗号文オブジェクトをアップロード・ダウンロードします。
3つの経路の用途は異なります。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 に接続します。後者2つは事前のローカルストア作成が不要で、サービスアドレスとメンバートークンをそれぞれ保存します。切り替えでデータは移行しません。
Center / SaaS はホスト型知識のリスト、検索、詳細、通常知識の編集、作成、確認付き削除、認可申請の承認、ペアリング済みデバイス管理を提供します。読み取り専用アカウントは閲覧、書き込み専用アカウントは作成でき、削除は対応する認可が必要です。構造化カードとエンドツーエンドカードは専用エディターで変更します。ホスト型 Store はディスク上で暗号化されていますが、運営者はパスワードを持ち、コンテンツを読めるため、UI に「サーバー側で読み取り可能」と表示します。ペアリング QR コードはカメラでスキャンし、拒否時はコードを入力できます。知識編集の失敗時は再試行用に下書きを保持し、未保存内容から離れるときは確認します。バックグラウンドのロックは下書きを消去します。手順はモバイルモードの選択と切り替えを参照してください。
現在提供していない機能
以下は利用可能な機能としてまだ提供していません。
- 実際の OneDrive や Google Drive アカウントでの同意、更新、ログアウト、2デバイスの収束、オフライン再試行、取り消しの検証。デスクトップログインと
cloud syncは実装済みでローカルフィクスチャでテストしていますが、実アカウント検証は引き続きリリース条件です。 - モバイルのモデル検索 UI。モデル設定とモデル推論 UI はなく、ベクトル、ハイブリッド検索、引用付き質疑応答は設定済みデスクトップデーモンを使います。モバイルが提供するのは改良したキーワード検索と BM25 検索です。
- Linux ネイティブトレイ。Linux は CLI、デーモン、リレー、FFI ライブラリ、
memories webuiを使えます。ネイティブトレイは現在 Windows と macOS のみです。 - モバイルのバックグラウンド同期。本バージョンでは有効化しません。
- モバイルカメラによる OTP インポート。ホスト型デバイスペアリングではペアリング QR コードをスキャンできます。
otpauth://とotpauth-migration://は引き続き CLI のmemories card otp-import --image PATHまたは URI の直接指定を使います。モバイルはこの2種類の OTP QR コードをカメラで読めません。
また、リレーのオンライン同期は明示的な保管庫全体の転送で、自動増分同期ではありません。これは cloud sync のクラウドオブジェクト同期経路と異なります。リレーはオフラインデバイス向けにパケットを保存できません。Cookie の期限切れ処理、JWT 更新、自動ログインは未実装です。
構成
| コンポーネント | パス |
|---|---|
| 暗号技術、ストレージ、認可、検索、サービス | crates/core |
| CLI、ローカル IPC、MCP、デスクトップ状態、リレークライアント | crates/cli |
| ステートレス WebSocket リレー | crates/relay |
| 認可センター:チケット、ホスト型ストア、メンバー、封印エンベロープ | crates/center |
| モバイル C ABI | crates/ffi |
| Android / iOS クライアント | mobile |