Memories
リポジトリ:https://github.com/mbcc2006/memories。CLI は memories、リレーは memories-relay、ネイティブライブラリは memories_ffi です。
クライアントが所有する暗号化メモリ、プライベートファイル、認証情報を、Rust CLI、Android/iOS クライアント、ローカル MCP サーバー、メモリ内だけで動作する WebSocket リレーで扱います。
開発版、フォーマットバージョン 1。 このリポジトリには実行可能なコードとセキュリティ回帰テストが含まれます。独立した暗号技術またはアプリケーションのセキュリティレビューは受けていません。保証、信頼境界、現在の制限については セキュリティ方針 を参照してください。
全体の仕組み
スタンドアロンで使用する場合、Memories は各デバイスに暗号化されたローカルストアを保持します。検索可能な知識を保存し、AI ペルソナをクライアント間で持ち運び、明示的な認可によってプライベートファイルや秘密情報を使用できます。クラウドストレージは暗号文を保存し、リレーはオンラインのピアを接続するだけです。どちらも認可されたクライアントの代わりにはなりません。
モバイルアプリには Center(セルフホストサーバー)と SaaS(https://memories.ivjn.us)モードもあります。これらのモードは運営者が内容を読める別のホスト型ストアを使用します。モードを選択または切り替えても、既存のローカルライブラリはアップロード、移動、統合されません。モバイルモード を参照してください。
Memories Web は既存のホスト型 Center に接続し、ブラウザーでメモリ、カード、ファイルを管理します。新しい Center ビルドでは /app/ でも提供されます。アクセストークン、許可するオリジン、対応操作については Web クライアントガイド を参照してください。ホスト型 SaaS API は https://memories.ivjn.us で利用でき、そのサービス用に発行されたメンバートークンを使用します。
| 概念 | 用途 |
|---|---|
ストア(--home) |
このデバイスのデータディレクトリ、ローカルパスワード、ID。1 つのストアに複数のボールトを含められます。デーモンとクライアントは同じストアを選択する必要があります。 |
| ボールト | 独自のメンバー、ロール、デバイス権限、署名付き履歴を持つコレクション。共有するのはボールトであり、稼働中のストアディレクトリではありません。 |
| メモリ | メモや日記などのテキスト文書。 |
| ナレッジカード | タグ、出典、カテゴリ、関係を備えた Wiki 形式の知識。 |
| ブレインカード | 要約と型付きリンクを持つ構造化知識。ボールトをまたぐ参照も含みます。モデルや推論エンジンではありません。 |
| ペルソナカード | アーカイブ、世界の状態、行動イベントに結び付くアイデンティティの核。ペルソナ を参照してください。 |
| ワークフローカード | pending/active/done/skipped の状態を持つ順序付きステップと全体の状態。通常のカードリビジョンとして保存されます。 |
| ファイル | インポート/エクスポートする元のバイナリ内容。検索可能なテキストが自動抽出されるわけではありません。 |
| 認証情報 | 認可された操作で使用する保護された秘密情報。検索や表示のための通常テキストではありません。保護カードは安全なメタデータと別の認証情報を組み合わせます。 |
unlock はストアで通常の認可された作業を可能にします。memories sudo はプライベート内容、ファイル、認証情報、機密性の高い管理のために短時間のセッションを追加します。OS 管理者権限を付与したり、ボールト権限を回避したりはしません。通常のボールト限定 MCP グラントは別個の限定された AI 機能であり、端末の sudo 権限ではありません。無人アクセス は別途オプトインする読み取り専用機能で、プライベート内容や秘密値を公開できるものです。
ここから始める
| 作業 | ガイド | 現在の対応状況 |
|---|---|---|
| 最初のメモを保存して読む | ローカルクイックスタート | ストアの初期化、ボールト作成、テキストの記録と検索 |
| スマートフォンで開始する、または保存モードを切り替える | モバイルモード | Standalone、セルフホスト Center、SaaS。選択の記憶と別々の接続プロファイル |
| AI クライアントに範囲を限定した知識アクセスを与える | ローカル MCP | ボールト限定グラント。プライベート内容と認証情報は除外 |
| デスクトップサービスの状態を確認する | トレイと WebUI | Windows トレイ、macOS メニューバー、読み取り専用状態表示、制限付きカード編集 |
| ストレージとリレーの既定値を設定する | 設定 | Windows、Linux、macOS 共通の TOML 設定 |
| 文書を検索して質問する | 検索と RAG | 中国語 BM25、チャンク、ローカル EmbeddingGemma、ベクトル/ハイブリッド検索、出典付き回答 |
| メールを署名/暗号化する、またはアプリに署名する | 暗号処理ジョブ | S/MIME、OpenPGP、APK/AAB。macOS 上のプロビジョニング済み iOS .app |
| AI クライアントに Memories スキルを追加する | スキルの導入 | Codex、OpenCode、Claude Code。ユーザーまたはプロジェクト範囲 |
| 秘密情報を含むデスクトップの無人読み取りを許可する | 無人 CLI/MCP | オプトインのローカル読み取り専用権限。Linux のエンドツーエンドテスト済み。ネイティブ Windows/macOS と実際のキーリング確認は未実施 |
| AGENTS.md/ペルソナスキルを生成する | スキル生成 | CLI skill generate/agents generate。ペルソナは任意 |
| クライアント CLI の既定値を設定する | クライアントの既定値 | Memories ホーム配下の persona、vault、type、… |
| パスワードやコマンド出力を取り込む | 認証情報の取り込み | 非表示入力、標準入力、コマンド標準出力、正規表現、JSON 選択 |
| Wiki 文書内の秘密を保護またはコピーする | Wiki の秘密参照 | 本文の完全一致置換、暗号化認証情報、認可されたクリップボードコピー |
| OneDrive または Google Drive に接続する | クラウド認可 | デスクトップログイン、暗号化ローカルトークン、状態、ログアウト |
| デバイス間でボールトを転送する | デバイスのペアリング | 明示的なペアリングと暗号化ボールト転送 |
| クラウドストレージ経由で暗号文を同期する | ストレージ設計 | 永続的な送信/受信キュー、memories cloud sync、OneDrive/Google Drive アダプター。実アカウント検証は未実施 |
開発については リポジトリガイドライン、アーキテクチャ、検証結果 を参照してください。
製品紹介サイト:ウェブサイト。Cloudflare Pages のデプロイ手順を含む英語/中国語の静的サイトです。
ビルドと実行
Rust 1.88 以降とプラットフォームの C ツールチェーンをインストールしてください(SQLite はソースからコンパイルされます)。
cargo build --workspace --locked
cargo test --workspace --locked
cargo clippy --workspace --all-targets --locked -- -D warnings
cargo install --path crates/cli --locked
別の端末で memories daemon を起動します。Windows では名前付きパイプ、Linux/macOS では Unix ソケットを通じて現在の OS ユーザーだけにサービスを提供します。--home PATH または MEMORIES_HOME で専用のデータディレクトリを指定してください。既定値は OS のアプリケーションデータディレクトリです。--home に既存の汎用フォルダーを指定しないでください。ローカルサービス保護のため、そのアクセス許可が制限されます。
ローカルクイックスタート
memories をインストールしてデーモンを起動したら、2 つ目の対話型端末を使用します。新しいスタンドアロンストアの場合:
memories init --name laptop
memories vault create Personal
memories vault list
「project」を含む短いメモを記した UTF-8 ファイル notes.md を作成します。以下の VAULT_ID を vault create または vault list が返す id に置き換えて実行します。
memories memory put VAULT_ID --title "Project notes" --input notes.md
memories memory search VAULT_ID "project"
memories memory grep VAULT_ID 'project|release' -i -n
memory grep は、選択したボールト内の通常メモリ文書について、復号された本文の各行を正規表現と照合します。DOCUMENT_ID:LINE、または -n/--line-number 使用時には DOCUMENT_ID:LINE_NUMBER:LINE を表示します。-i/--ignore-case は大文字小文字を区別しません。通常検索のプライベート内容と同様に、プライベート文書、競合バージョン、カード、ファイル、認証情報は除外されます。一致がなければ何も出力しません。
ASSET_ID を保存したメモの id に置き換えます。FROM_REVISION には history が返す revision フィールドを使用します。差分はそのリビジョンと現在のヘッドを比較します。
memories memory read VAULT_ID ASSET_ID
memories memory history VAULT_ID ASSET_ID
memories memory diff VAULT_ID ASSET_ID FROM_REVISION
memories lock
memories unlock
次回以降は init ではなく unlock を使用します。新しいデバイスを既存の ID に参加させる場合、ボールトを作成する前に ペアリング してください。独自のストアを使用する場合、デーモンとすべてのクライアントコマンドに同じ --home PATH を渡します。
memories --help で操作を調べ、memories memory --help や memories memory put --help で詳細を確認します。中国語ヘルプには --lang zh を追加します。例:memories --lang zh memory put --help。ヘルプにデーモンは不要です。
パスワードは対話型端末から非表示で読み取ります。パスワード引数やパスワード環境変数はありません。ローカルおよびバックアップのパスワードには、空入力も含めアプリケーションレベルの長さ制限がありません。ただしパスワード確認と認証は適用されます。コマンドはバージョン付き JSON を出力し、失敗時には非ゼロの終了ステータスを返します。公開デバイスキーとフィンガープリントは意図的に表示されますが、通常コマンドは秘密鍵や認証情報の値を表示しません。明示的な無人認証情報読み取りは例外で、無人 CLI/MCP に説明されています。
リモートデーモン(HTTP/WebSocket/リレー RPC)
任意のトークン認証付き HTTP/WebSocket リスナーと WSS リレー RPC は、ローカル IPC と同じフレーム化された service::Request プロトコルを使用します(デスクトップは unlock/sudo 後に全機能を利用でき、モバイル Share は FFI 拒否リストを維持します)。memories daemon --listen http://127.0.0.1:7900 を使用します(HTTPS/WSS 用の --tls-cert/--tls-key は任意)。RPC はホストのストアで操作を実行し、ローカル複製を同期しません。リッスン/クライアントフラグ、残存リスク、モバイル Share については リモートデーモン を参照してください。
任意の 認可 Center はローカルの自己初期登録を禁止し、登録/MCP グラントチケットをエンドポイントに配布できます。memories-center --data DIR はさらに完全なホスト型ボールトを実行します。Center エントリが mode = "saas" のデーモンはその管理下に置かれ、運営者がリモートでロック解除でき、メンバーは Center で管理されます。
認可の連鎖
ボールトのロールは Owner、Admin、Editor、Reader です。グラントの発行または委任ができるのは Admin と Owner だけです。発行にはボールトのロック解除が必要ですが端末の権限昇格は不要で、ロール要求の承認には権限昇格が必要です。グラントは発行者のロール(および親グラント)の範囲に制限され、受領者はそれより高いロールを持てず、center-admin を受領者にはできません。委任の深さは最大 2 です。範囲を省略すると allow_all ではなく read になります。権限要求はすべての適格な承認者または --approver で指定したメンバーに送られ、誰も自分の要求を決定できません。承認時にトークンは返されず、要求者が一度だけ取得します(memories request claim、memories center request claim、MCP request_claim、または POST /v1/requests/{id}/claim)。制限は、ボールトごとに要求者あたり保留要求 20 件、ボールトあたり 200 件(Center は HTTP 429)、保留 TTL 7 日、保持期間 30 日、デーモンとホスト型 Center のいずれも有効グラント最大 10,000 件です。memories access list VAULT は階層別メンバー、デバイス、保留要求、承認済み未取得要求を表示し、memories grant list VAULT はグラントを一覧表示します。メンバーの削除はそのグラントも連鎖的に取り消します(メンバー単位の世代)。グラントはハッシュだけを永続保存し、監査ログはハッシュチェーン化されています(Center:DIR/audit.jsonl)。認可 を参照してください。
ペルソナチャット(memories persona chat send|list|history|mark-read)は chat_message 自動化フックを発火します。受信自動化 Webhook は memories-relay の POST /v1/persona/{room}/{vault}/{persona}/automation/trigger からも利用できます(ペルソナ、リモートデーモン を参照)。
Linux のビルドとパッケージ化
Debian/Ubuntu(WSL2 上の Ubuntu を含む)では、Rust 1.88+ とネイティブビルド依存関係をインストールします。
sudo apt-get update
sudo apt-get install -y build-essential pkg-config libssl-dev python3 git
bash scripts/build-linux.sh
# Optional development build:
bash scripts/build-linux.sh --debug
スクリプトはホスト GNU ターゲット x86_64 または aarch64 向けに Rust ワークスペースをビルドします。リリース出力は target/<host-target>/release/(または設定した Cargo ターゲットディレクトリ)、デバッグ出力は debug/ にあります。Flutter SDK は不要です。Linux は CLI、デーモン、リレー、FFI ライブラリ、memories webui に対応しています。ネイティブトレイは現在 Windows/macOS のみです。
変更がなくコミット済みのチェックアウトから、Linux リリースアーカイブを作成します。
bash scripts/package-linux.sh
リリースバイナリを再ビルドし、.tar.gz、BUILD-INFO.json、SHA256SUMS、設定例を dist/vVERSION-linux-ARCH/ に書き込みます。アーカイブには memories、memories-relay、libmemories_ffi.so、C ヘッダー、文書、ライセンスが含まれ、実行権限が保持されます。既存の出力ディレクトリは上書きしません。手動の デスクトップパッケージのビルド ワークフローも Linux x86_64 パッケージをビルドしてアップロードします。
これはネイティブ GNU/Linux ビルドであり、静的バイナリやクロスコンパイルしたバイナリではありません。互換性のある glibc/OpenSSL ランタイムを使用し、対応予定の最も古いディストリビューションでビルドしてください。システム TLS には ca-certificates、デスクトップブラウザーでダッシュボードを開くには xdg-utils が必要です。認証情報のクリップボードコピーにはさらに wl-clipboard(Wayland)または xclip(X11)が必要です。モデルの重みは memories rag model-install で別途インストールします。
設定
memories config init で TOML 設定を作成し、memories config path で場所を確認し、memories config show で有効な設定を調べます。リリースには保存ディレクトリ、リレー、デスクトップのオプションを含む memories.example.toml が付属します。別のファイルは --config PATH または MEMORIES_CONFIG で選択します。優先順位は CLI オプション、環境変数、設定、既定値の順です。設定ガイド を参照してください。
デスクトップトレイと状態ダッシュボード
Windows では展開したリリースディレクトリの memories-tray.exe をダブルクリックします。macOS では同梱の Memories.app を開くか、コマンドラインを使用します。
memories tray
memories webui
トレイ/メニューバーはデーモンとボールトの状態を表示し、ローカル WebUI を開き、デーモンを起動できます。ダッシュボードは保存内容を表示せず、ロック状態、ライブラリ数、接続数、クラウド同期キューを報告します。--home は CLI と同じストアを選択し、--no-open は起動時にブラウザーを開きません。初期化/ロック解除は通常どおり CLI で行います。動作とパッケージ化は デスクトップガイド を参照してください。
言語
モバイルクライアントと CLI は英語(en)、簡体字中国語(zh)、日本語(ja)、ドイツ語(de)、フランス語(fr)に対応しています。モバイルの言語メニューはロック画面とライブラリで利用できます。既定ではシステムに従い、手動選択は再起動後も記憶します。
memories --lang zh --help
memories cloud login --lang ja --help
memories --lang de status
memories language zh # Remember this language
memories language # Show saved and effective language
memories language system # Follow the system again
CLI の言語選択は --lang、MEMORIES_LANG、保存済み言語設定、空でない最初の LC_ALL、LC_MESSAGES、LANG の順です。設定は --home/MEMORIES_HOME ごとに保存され、デーモンなしでも動作します。Windows ではこれらの変数が未設定なら OS 言語も使用します。未対応のロケールは英語にフォールバックし、fr_FR.UTF-8 や zh-CN などの環境値も受け付けます。コマンド、オプション名、JSON フィールド、エラーコード、確認語 USE と APPROVE は変わりません。ユーザー内容は翻訳されません。翻訳のない低レベル診断は元の詳細を保持し、ローカライズされたエラー概要を添えます。保守については ローカライズガイド を参照してください。
短い ID
CLI、MCP、モバイルの要求は、通常 6 文字(例:0b0668)の単純な短い 16 進数 ID を使用します。ID に型や分類の意味はなく、接頭辞やアンダースコアもありません。vault list、card list、card search、履歴が返す ID を対応するコマンドでそのまま使用します。長い UUID、完全なリビジョンハッシュ、接頭辞付き ID は拒否され、長い ID の出力オプションはありません。
既存の 8 文字 ID は引き続き有効です。接頭辞が衝突すると自動的に 2 文字ずつ最大 16 文字まで延長し、曖昧な入力は拒否します。デバイスキーやセキュリティフィンガープリントは短縮しません。
memories card list eb7abf
memories card search eb7abf "claude relay"
memories card read eb7abf 0b0668
ID は各コマンド引数の範囲内で解決されます。衝突すると返される ID は 2 文字ずつ最大 16 文字まで延長し、曖昧な入力はオブジェクトを選択せず失敗します。衝突後は再度一覧または検索を実行してください。削除済みアセットも衝突インデックスに残ります。短い ID は参照であり認可ではありません。unlock、sudo、ボールト権限、MCP グラントは引き続き適用されます。
署名付き保存レコードは移行せず元の識別子を保持します。証明書、公開鍵、検証フィンガープリント、監査レコード、暗号化転送エンベロープは短縮も書き換えもしません。
検索と RAG
通常検索は中国語をトークン化し、複数キーワードに対応しています。BM25 インデックスはメモリ内にキャッシュされ、内容/ポリシー変更時に無効化され、ロック時に消去されます。高度な検索はチャンクオフセット、ベクトルスコア、ハイブリッド順位融合、軽量再ランキング、設定した URL 経由の任意の学習型再ランキングを追加します。認証情報とプライベート内容は引き続き除外されます。
memories rag ingest VAULT_ID notes.md --title "Research notes"
memories rag search VAULT_ID "Chinese and English keywords" --mode bm25
memories rag model-install
memories rag index VAULT_ID
memories rag search VAULT_ID "What does this document mean?" --mode hybrid
memories rag ask VAULT_ID "Summarize the evidence"
内蔵 CPU 推論エンジンは Memories プロセス内で EmbeddingGemma を実行し、Ollama などの推論アプリケーションは不要です。モデルファイルは公開データで、model-install で一度インストールするか rag.local_model_dir に指定します。Gemini Embedding は別のオンライン API です。リモート埋め込み、生成、任意の再ランキングには利用者が選択した URL を設定します。HTTP(S)/SOCKS プロキシ、タイムアウト、回数を制限した再試行を設定できます。RAG ガイド を参照してください。
プライベートファイルと認証情報
sudo は内部認可セッションであり、OS 管理者アクセスではありません。同じローカルパスワードを使用します。権限昇格は最大 15 分、アイドル状態が 5 分続くと失効し、端末の親プロセスに限定されます。サービスのロックまたは再起動で消去されます。通常のロック解除はアイドル状態が 15 分続くと失効します。
memories sudo
memories file import VAULT_ID document.pdf
memories file export VAULT_ID FILE_ID exported.pdf
memories file exec VAULT_ID FILE_ID -- caddy run --config "{file}" --adapter caddyfile
memories credential add VAULT_ID "API token"
memories credential import VAULT_ID "SSH identity" existing-private-key
memories credential generate VAULT_ID "laptop ssh"
memories credential generate VAULT_ID "laptop ssh" --algorithm rsa --bits 4096
memories credential generate VAULT_ID "db ca" --kind tls-ca --algorithm rsa --subject memories-ca
memories credential generate VAULT_ID "db server" --kind tls --ca CA_ID --algorithm rsa --name db.example.test
memories credential public VAULT_ID KEY_ID
memories run --vault VAULT_ID --credential CREDENTIAL_ID /absolute/program/path
memories run --vault VAULT_ID --credential CREDENTIAL_ID --env API_TOKEN /absolute/program/path
memories credential bind gh --vault VAULT_ID --credential CREDENTIAL_ID --env GH_TOKEN
memories credential bindings
memories credential unbind gh
memories run --binding gh -- pr list --state open
memories hook install --commands gh
memories hook uninstall
memories credential allow-host VAULT_ID CREDENTIAL_ID api.example.com
memories credential http VAULT_ID CREDENTIAL_ID https://api.example.com/status
memories remote probe example.test --port 22
memories remote open ssh --vault VAULT_ID --credential KEY_ID --host example.test --user alice --host-key HOST_KEY
memories remote open ssh --vault VAULT_ID --credential KEY_ID --certificate CERT_ID --host example.test --user alice --host-key HOST_KEY
memories remote open mysql --vault VAULT_ID --credential CREDENTIAL_ID --host db.example.test --user app --database appdb
memories remote open redis --vault VAULT_ID --credential CREDENTIAL_ID --host redis.example.test --user default
memories remote open postgres --vault VAULT_ID --credential CREDENTIAL_ID --host db.example.test --user app --database appdb
memories remote open postgres --vault VAULT_ID --credential CREDENTIAL_ID --tls-ca CA_ID --host db.example.test --user app --database appdb
memories remote open mysql --vault VAULT_ID --credential CREDENTIAL_ID --host db.example.test --user app --database appdb --no-tls
memories remote run SESSION_ID -- uname -a
memories remote run SESSION_ID --op query -- SELECT 1
memories remote propose SESSION_ID -- uname -a
memories remote approve TICKET_ID
memories remote exec TICKET_ID
memories remote close SESSION_ID
memories proxy start ssh --vault VAULT_ID --credential KEY_ID --host example.test --user alice --host-key HOST_KEY
memories proxy start postgres --vault VAULT_ID --credential CREDENTIAL_ID --host db.example.test --user app --database appdb
memories proxy list
memories proxy stop PROXY_ID
保存した設定ファイルでプログラムを実行する
memories file exec VAULT_ID FILE_ID -- PROGRAM ARGS... は認可されたファイルを読み、プログラム引数内のすべての {file} を一時ファイルの絶対パスに置き換えます。履歴バージョンを選択するには -- の前に --revision REVISION を指定します。ファイルエクスポートと同じロック解除、ボールトアクセス、端末の memories sudo が必要です。リモート/ホスト型デーモンからファイルを取得できますが、プログラムは常に CLI マシン上で CLI ユーザーのアカウントとして実行されます。
memories sudo
memories file import VAULT_ID ./Caddyfile
# Use the returned file ID. Caddy 2 Caddyfile syntax needs an explicit adapter.
memories file exec VAULT_ID FILE_ID -- caddy run --config "{file}" --adapter caddyfile
子プロセスは作業ディレクトリ、環境、標準ストリームを継承し、終了コードは JSON 成功エンベロープなしで返されます。シェルは挿入されず、5 分の実行制限もありません。プログラムはフォアグラウンドで実行してください。一時ディレクトリ/ファイルは所有者専用(Unix 0700/0600、Windows ユーザー ACL)で、子プロセス終了または起動失敗後に削除されます。Windows の Ctrl+C/Ctrl+Break、Unix の SIGINT/SIGTERM/SIGHUP は終了処理を開始し、10 秒待ってから直接の子プロセスを強制終了して後処理します。Unix シグナルは子プロセスに転送され、Windows コンソールイベントは同じコンソールを共有するプロセスに届きます。
子プロセスの存続中は平文をエクスポートします。プログラムとプラグインを信頼できる必要があります。出力は秘匿されません。ロック/取り消しによって渡したコピーを回収したり、子プロセスを止めたりはできません。Memories の強制終了、停電、Windows コンソールの閉鎖で一時ファイルが残る場合があります。削除は安全な消去ではありません。切り離された子孫プロセスは管理しません。各実行は config という固定ファイルスナップショットを 1 つ使用し、自動更新、再読み込み、テンプレート展開、関連ファイルのインポートは行いません。相対パスは対象プログラムの規則に従うため、外部インクルード/証明書には絶対パスを使い、通常ファイル名から形式を推測するプログラムでは形式を明示してください。
プロセスへの認証情報注入
認証情報の memories run プロセス注入は標準入力を使用します。--env は環境変数を明示的に許可します。プログラムの SHA-256 フィンガープリントを確認するか --approve-digest で指定する必要があります。子プロセスの両出力ストリームは抑制されます。ただし受信プログラムは認証情報をコピーまたは送信できるため、信頼できる必要があります。実行バインディングは 1 つの認証情報を 1 つのプログラムフィンガープリントに固定し、コーディングエージェントが端末の sudo セッションなしで使用できるようにします。credential bind gh(sudo、USE の入力)は PATH 上の gh を解決し、SHA-256 を記録し、このデバイスの暗号化状態だけにバインディングを保存します。同期はされず、復元時に消去されます。--hours(既定 8、最大 720)後に失効し、ライブラリがロック解除されている間だけ機能します。その後 run --binding gh -- ARGS は現在のディレクトリで選択した環境変数に認証情報を入れてプログラムを実行し、出力中の認証情報をすべて [REDACTED] に置き換えて表示し(--suppress-output なら破棄)、プログラムのコードで終了します。--deny WORDS はフラグ以外の引数にその語が順番どおり含まれるコマンドを拒否し、--ask WORDS は実行前にフックで確認します。gh では --no-default-rules がない限り auth、alias、extension(extensions と ext も)を拒否し、pr merge、repo delete、release delete を確認します。規則は入力された語と照合し、以前 gh alias set で定義したエイリアスは展開しません。バインディングが失効するまで、あなたとして動作する任意のプログラムは認証情報を使って対象プログラムを実行できますが、Memories 経由で認証情報を読むことはできません。対象プログラム、その拡張機能、子プロセスは読めるため、信頼するプログラムだけをバインドしてください。--credential と --env のないバインディングは規則だけを適用します。
hook install --commands gh は Claude Code のユーザー設定に PreToolUse フックを追加します(エントリを表示して APPROVE を求めた後)。Claude Code が Bash または PowerShell で gh ... を実行しようとすると、フックはそのコマンド語を memories run --binding gh -- に書き換え、残りのコマンドラインは維持します。$( )、バッククォート、sh -c、xargs などのラッパー内での gh 実行は理由付きで拒否します。ヒアドキュメント本文や引数として使用する置換(例:--body "$(cat <<'EOF' ... EOF)")は許可されます。パイプまたはリダイレクト入力は --stdin で転送します(最大 16 MiB)。プログラムはデーモンの環境で動くため NAME=value gh ... 接頭辞は拒否します。代わりにプログラムのフラグを使ってください。シェルが実行時に展開する引数($var、glob)は規則と照合できないため、実行前にフックが確認します。バインドされた実行だけのコマンドはフックが直接承認しますが、他のプログラム実行やファイル書き込みも含む場合は Claude Code の通常の確認を適用します。バインド先の残存子孫プロセスが保持するパイプを読み続けるワーカーには上限があり、残存数が多すぎる間は追加のバインド実行を拒否します。Claude Code 自身の拒否/確認規則も適用されますが、書き換え後のコマンドを見る場合があるため、機密性の高いサブコマンドはバインディングの規則にも保持してください。バインドされたプログラムはサービスロックの外で実行するため、長い gh run watch が他のクライアントを妨げることはありません。ただし 5 分の制限は適用されます。
HTTPS インターフェイスは、設定したホストに HTTPS/443 経由でのみ Bearer トークンを送信します。リダイレクトを追跡せず、プロキシ設定を継承せず、応答本文に認証情報が反映されないようステータスコードだけを返します。デーモン所有の SSH、FTP、TCP、MySQL、Redis、PostgreSQL セッションはサービス内に秘密情報を保持します。各命令は提案され、APPROVE で承認され、稼働中のセッションで一度だけ実行されます。remote run は 3 段階すべてを実行します。スクリプトでは remote propose(チケットをキューに入れる)、remote approve(sudo、単回使用)、remote exec(同じ権限昇格済み呼び出し元)に分けられます。SSH はパスワード認証情報、インポートした OpenSSH 秘密鍵(credential import)、ボールト内で生成した鍵(credential generate)を受け付けます。生成時に秘密鍵は表示せず、credential public は SSH 公開鍵または TLS 証明書だけを返します。2 つ目の OpenSSH 証明書認証情報を任意で追加できます(--certificate)。SSH は remote probe で取得したホストキーフィンガープリントの固定も必要です。MySQL、Redis、PostgreSQL セッションは既定でホスト名検証付き TLS を使用します。Redis と PostgreSQL は webpki ルート付き rustls、MySQL はプラットフォーム TLS ライブラリを使用します。--tls-ca はボールト認証情報内の PEM CA を追加します。これはファイルシステムの PEM CA バンドルをデーモン/リレー WSS と外向き HTTPS/データベースクライアントに追加するグローバル --ca-file PATH(MEMORIES_CA_FILE)とは別です。接続を行うプロセスに設定してください(デーモン所有の上流操作では、そのオプションでデーモンを起動)。グローバル --insecure は TLS を無効にせず証明書とホスト名検証を省略します。危険です。開発/自己署名の場合に限定し、--ca-file を優先してください。サーバー側 --tls-cert/--tls-key は変わりません。クライアント TLS の例 を参照してください。データベース TLS を無効にするには --no-tls を渡します。MCP はこの経路を使用できません。ファイル操作は FTP を使い、承認済み SSH セッションは exec のみを受け付けます。
Wiki 文書内の秘密情報を保護する
アプリでメモリ/カードメニューを開き、文書内の秘密情報を保護(中国語:資料内の秘密鍵を置換)を選択します。参照名(例:API_KEY)を指定し、非表示入力で正確な秘密値を入力して操作を認可します。その文書本文内の完全一致箇所はすべて {{secret:API_KEY}} に変わり、値は暗号化認証情報として保存されます。通常読み取り、検索、MCP には参照だけが見えます。
文書または認証情報メニューで 秘密情報をコピー(中国語:秘密鍵をコピー)を選択します。複数の参照がある文書ではまずラベルを選びます。確認して認可すると、現在の値を表示せずシステムクリップボードにコピーします。
CLI も同じ操作を提供します(list または search の短い ID を使用)。
memories sudo
memories memory protect-secret VAULT_ID DOCUMENT_ID API_KEY
# For a knowledge card, use: memories card protect-secret VAULT_ID CARD_ID API_KEY
memories credential copy VAULT_ID DOCUMENT_ID --label API_KEY
memories credential copy VAULT_ID CREDENTIAL_ID
置換コマンドは秘密値の入力を求めます。引数や参照名に秘密情報を入れないでください。ラベルは ASCII の英字、数字、アンダースコア、ハイフン 1-64 文字で、その文書で未使用である必要があります。文書参照のコピーには参照が 1 つでも --label が必要です。コピーはコピー状態("copied": true)だけを返します。Windows はネイティブクリップボード、macOS は pbcopy を使用し、Linux は wl-copy(Wayland)または xclip(X11)が必要です。保護された account/token/env/OTP カードも直接コピーできます。OTP のコピーはワンタイムコードではなくシードを返します。
置換は現在の文書本文だけに作用します。古い署名付きバージョン、バックアップ、他の文書、共有コピーは以前の内容を保持します。公開された鍵は提供元で取り消すかローテーションしてください。クリップボードの内容はロック後も残り、他のアプリや OS のクリップボード履歴から見える場合があります。使用後に消去してください。この機能は秘密情報の自動検出や鍵のローテーションを行いません。秘密参照を含む文書を同期する前にすべてのクライアントを更新してください。拒否条件、編集と認証情報更新、プラットフォーム要件、クリップボードの問題については 完全なガイド を参照してください。
パスワード不要の SSH とデータベースプロキシ
memories proxy start は端末の sudo と認証情報のホスト許可リスト確認後に 127.0.0.1 リスナーを開きます。id、listen アドレス、すぐ実行できる command を返します。そのコマンドをデーモンのマシン上のエージェント端末で実行してください。保存されたパスワードや秘密鍵は返されません。上流アカウント、ホスト、初期データベースはプロキシ開始引数で選択します。プロキシはそのアカウントのコマンドを個別承認なしで認可します。
memories sudo
memories proxy start ssh --vault VAULT_ID --credential KEY_ID --host example.test --user alice --host-key HOST_KEY
memories proxy start postgres --vault VAULT_ID --credential PASSWORD_ID --host db.example.test --user app --database appdb
memories proxy start mysql --vault VAULT_ID --credential PASSWORD_ID --host db.example.test --user app --database appdb
memories proxy start redis --vault VAULT_ID --credential PASSWORD_ID --host cache.example.test --user default
memories proxy list
memories proxy stop PROXY_ID
まず credential allow-host VAULT_ID CREDENTIAL_ID HOSTNAME で認証情報の接続先を認可します。remote probe で取得した SSH フィンガープリントを信頼できる経路で検証してから --host-key に渡してください。SSH プロキシは exec、shell、PTY、subsystem 要求を転送し、上流ホストキーは固定されたままです。ローカル SSH ホストキーは一時的なので、返されるコマンドはローカルエンドポイントだけでホストキーの永続保存を無効にします。
データベース上流は既定で検証付き TLS を使用し、任意で --tls-ca CA_ID を指定できます。ローカルデータベース接続は平文ループバックです。PostgreSQL は SCRAM-SHA-256、MD5、パスワード認証に対応します。MySQL は mysql_native_password と caching_sha2_password に対応し、完全な SHA-256 パスワード認証には TLS が必要です。PostgreSQL のキャンセル/起動オプション転送と MySQL 圧縮は未実装です。ローカルログイン名と初期データベース要求は設定済みの上流アカウント/データベースを上書きしません。
ローカルポートに到達できる任意のプロセスが、認可されたリモートアカウントを使用できます。ポートはローカルに限定してください。ロック、ボールトの自動アイドルロック、proxy stop、デーモン停止はリスナーと既存接続を閉じます。プロキシは使用中でも 30 分後に失効し、最大 4 プロキシ、各プロキシ最大 16 接続です。MCP はプロキシの起動、一覧、停止を行えません。ユーザーが起動した後、エージェントは通常の端末クライアントを使用します。
パスワードとコマンド出力の取り込み
memories catch(別名 memories credential catch)は UTF-8 の秘密値を取り込み、暗号化認証情報として保存します。まず同じ端末で memories sudo を実行します。入力元フラグがない場合、credential add と同じ非表示入力を求めます。
memories sudo
memories catch VAULT_ID "Database password"
パイプやリダイレクトファイルには --stdin を使用します。以下の例は Windows CMD で動作します。secret-tool は値を出力する独自のプログラムを表します。
secret-tool.exe | memories catch VAULT_ID "Database password" --stdin --regex "password=([^\r\n]+)"
memories catch VAULT_ID "API token" --stdin --json-pointer /token < response.json
memories catch VAULT_ID "API token" --exec secret-tool.exe --json-pointer /token -- issue --format json
--exec PROGRAM -- ARGS... は指定したプログラムを直接起動して標準出力を取り込みます。子プロセスの標準入力を閉じ、標準エラーを抑制します。CMD スクリプトには --exec cmd.exe -- /d /c script.cmd を使います。シェル演算子には明示的に選択したシェルが必要です。端末が必要な対話型外部プログラムはこのモードで対応していません。代わりに非表示入力または非対話型の出力コマンドを使用してください。
セレクターがない場合、末尾の LF/CRLF 1 つを除いた全文を保存します。正規表現はちょうど 1 回一致する必要があり、単一のキャプチャグループ、またはグループがない場合は一致全体を保存します。追加のグループ化には (?:...) を使用します。--json-pointer は JSON 文字列(例:/credentials/password)を選択し、--regex と併用できません。JSON オブジェクトは入れ子や password と pass\u0077ord のようなエスケープ等価表現も含め、キーが一意である必要があります。空値、不正な UTF-8、曖昧な一致、重複キー、失敗したコマンドは保存せず拒否します。認証情報の置換には --id CREDENTIAL_ID を使用します。
入力は 1 MiB までです。コマンドは 30 秒でタイムアウトし、必要なら --timeout を 1-300 秒に設定できます。タイムアウトや過剰出力時は直接の子プロセスを終了しますが、プロセスツリー全体の封じ込めは提供しません。パイプ標準入力は EOF を待ち、タイムアウトはありません。成功出力に含まれるのは認証情報 ID であり、取り込んだ値は含まれません。使用には memories run または認可された HTTP 操作を使います。実際の秘密情報をコマンド引数、正規表現、タイトルに入れないでください。取り込みは元ファイル、シェル履歴、元プログラムのログを消去しません。
デバイス、メンバー、同期
クラウドアカウントの認可
自分で登録した OAuth アプリケーションを使って、このデバイスで OneDrive または Google Drive を認可します。現在のデーモンを起動してライブラリをロック解除し、ログイン前に同じ端末で sudo を実行します。
memories sudo
memories cloud login onedrive --client-id YOUR_MICROSOFT_CLIENT_ID
memories cloud login google-drive --client-config /path/to/google-desktop-client.json
memories cloud status
memories cloud logout onedrive
ログインはブラウザーを開き、PKCE/state でローカルコールバックを検証します。トークンは暗号化されたデバイスローカル状態に保存し、バックアップ/デバイス交換から除外します。状態表示はトークンを表示しません。ログアウトはローカル認可を削除し、提供元の同意は別途管理します。memories cloud sync はトークン更新後、接続済み OneDrive または Google Drive のアプリケーションフォルダーを通じて不変の暗号文オブジェクトをアップロード/ダウンロードします。モバイルはクラウド接続とフォアグラウンド同期の操作を提供し、ネイティブ OAuth クライアント登録が必要です。モバイルクラウド設定 を参照してください。
提供元登録、リダイレクト URI、--no-browser、有効期限、トラブルシューティングについては クラウド認可ガイド を参照してください。
デバイスのペアリングとボールト転送
新しいデバイスを独自のパスワードで初期化し、実行します。
memories sudo
memories device invite request.json
要求を既存デバイスに転送します。承認前に 招待フィンガープリント全体を要求元デバイスと直接比較 してください。
memories sudo
memories device approve request.json approval.json --fingerprint REQUEST_FINGERPRINT
承認コマンドはその公開デバイスキーを返します。新しいデバイスで応答を受け入れる前に、信頼できる経路でそのキーを検証してください。受け入れ前に新しいデバイスの同じ端末で sudo を実行します。
memories sudo
memories device accept approval.json --sender APPROVING_DEVICE_PUBLIC_KEY
要求は 10 分で失効し、一度だけ使用できます。初期化したばかりのデバイスは、既存 ID に参加する前にボールトがない必要があります。各デバイスは独自の転送秘密鍵とデバイス署名鍵を保持し、ユーザー ID の署名権限は暗号化承認内でのみ転送されます。ユーザー署名証明書だけではボールトアクセスは得られず、ボールトの署名付きデバイス許可リストの承認も必要です。
別の人 の場合は、代わりに特定のボールトへの要求を承認します。
memories member approve VAULT_ID request.json approval.json --fingerprint REQUEST_FINGERPRINT --role reader
memories member list VAULT_ID
memories member role VAULT_ID USER_PUBLIC_KEY editor
memories member remove VAULT_ID USER_PUBLIC_KEY
memories device revoke VAULT_ID DEVICE_PUBLIC_KEY
所有者は管理者と所有権を管理し、管理者は通常メンバーを管理し、編集者はアセットを書き込み、閲覧者はアセットを読み取って使用します。デバイス取り消しはボールト単位です。影響するすべてのボールトに適用してください。メンバーを削除すると既存コピーも消えると思わないでください。
暗号化ファイル交換はリレーなしで動作します。
memories sync export VAULT_ID RECIPIENT_DEVICE_PUBLIC_KEY packet.json
memories sync import packet.json
オンライン転送では、TLS リバースプロキシの背後で memories-relay を実行し、memories sync room でルームを作成します。受信側、次に送信側で実行します。
memories sync receive --relay wss://relay.example.com --room ROOM
memories sync send VAULT_ID RECIPIENT_DEVICE_PUBLIC_KEY --relay wss://relay.example.com --room ROOM
リレーはオフラインデバイス向けにパケットを蓄積しません。送信成功はパケットがリレーに渡されたことを意味し、ピアが検証/インポートしたことではありません。受信側はインポート成功を別途報告します。sync export/import とリレー sync send/receive は明示的なボールト全体転送であり、自動的な増分クラウド同期ではありません。cloud sync PROVIDER は永続クラウドキュー経由で不変の暗号文オブジェクトを交換します。実アカウント検証は未実施です。リレー RPC はさらに別で、クライアントストアにボールトをインポートせずリモートデーモンを呼び出します。ユーザー所有の常時オンラインクライアントは複製を保持できますが、それは信頼するエンドポイントであり、信頼しないストレージサーバーではありません。
作成/更新のたびに、ボールト DAG に新しい署名付きリビジョンを書き込みます(メモリ、ナレッジ/ブレインカード、保護カードのメタデータ、ファイル、認証情報)。memory history/card history/file history でリビジョンを一覧表示します(revision、タイムスタンプ、作成者、ヘッド、概要)。read --revision で取得し、memory diff/card diff/file diff で比較します(タイトル、構造化メタデータ、本文の統一テキスト差分。ファイル差分はバイナリを省略し、認証情報の秘密本文は決して返しません)。リビジョンはボールトとともに無期限に保持され、自動削除はありません。同時編集は複数ヘッドとして残ります。memory history で確認した後、明示的に memory put --id ASSET_ID --resolve を実行します。以前未知だった古いエポックの変更は sync quarantine に入り、sync reapply は現在エポックの新しいリビジョンに署名します。分岐した権限チェーンは安全側に拒否します。両方の分岐で有効な所有者は確認後に sync resolve-policy VAULT_ID packet.json --keep-local を実行し、署名付き解決を配布できます。互換性のない所有権移転を含む競合は、いずれかに一方的な制御を与えずブロックされたままです。
監査と復元
memories audit VAULT_ID --verify
memories sudo
memories audit VAULT_ID
memories backup offline-backup.memories
バックアップには独立したパスワードを使用します。デバイス外にコピーを保管してください。復元には 新しい --home でデーモンを起動してから実行します。
memories --home NEW_DIRECTORY restore offline-backup.memories --name replacement
memories --home NEW_DIRECTORY sudo
memories --home NEW_DIRECTORY archive list
復元は現在のアセットと保持された競合ヘッドを含む独立したボールトを作成します。古い共有ボールト権限を復活させることはありません。元のバージョン、削除マーカー、署名付き監査レコードは暗号化された読み取り専用復元アーカイブに残ります(archive history、archive read、archive audit)。稼働中の共有ボールトには現在の認可済みメンバー経由で再参加してください。履歴の認証情報値は通常インターフェイスでもアーカイブインターフェイスでも表示できません。
AI クライアントへのスキル導入
同梱の memories スキルをインストールし、AI クライアントが Memories の知識を検索、取得、保存し、認可された文書から回答し、認可された認証情報操作を使用する方法を見つけられるようにします。
memories inject all --dry-run
memories inject all
memories inject codex
memories inject opencode claude
memories inject all --project /path/to/project
既定はユーザー全体へのインストールです。--project DIRECTORY は既存プロジェクトディレクトリだけにインストールします(現在のディレクトリには --project .)。claude は Claude Code を対象とし、claude-code も別名として受け付けます。
| クライアント | ユーザーの場所 | プロジェクトの場所 |
|---|---|---|
| Codex | ~/.agents/skills/memories/SKILL.md |
.agents/skills/memories/SKILL.md |
| OpenCode | ~/.config/opencode/skills/memories/SKILL.md |
.opencode/skills/memories/SKILL.md |
| Claude Code | ~/.claude/skills/memories/SKILL.md |
.claude/skills/memories/SKILL.md |
~ は OS ユーザーのホームで、Windows の %USERPROFILE% も含みます。OpenCode は OPENCODE_CONFIG_DIR、絶対パスの XDG_CONFIG_HOME に opencode を追加した場所、上記既定値の順に使用します。Claude Code は CLAUDE_CONFIG_DIR に従います。Codex は CODEX_HOME とは独立した、文書に記載された .agents/skills を使用します。プロジェクトへのインストールはこれらのグローバル上書きを無視します。OpenCode は Claude/agent 互換スキルディレクトリも検出するため、複数クライアントを使う場合は定義の競合を避けるようすべての場所で同じ memories スキル内容を保持してください。
インストールはオフラインで、デーモンや初期化済みストアは不要です。同梱スキルだけを書き込み、ボールト内容の読み取り/エクスポート、グラント作成、MCP/クライアント設定変更は行いません。--home/MEMORIES_HOME は通常操作の Memories データストアを選択し、スキルの保存先ではありません。インストールにそのパスは埋め込まれません。既定以外のストアを使う場合、クライアント環境または MCP コマンドに同じホームを設定してください。
同一内容の既存ファイルは変更しません。古い Memories バージョンのスキルも含め、異なる SKILL.md は --force なしでは拒否します。このオプションは兄弟ファイルを保持し、そのファイルだけを置き換えます。リンクされたスキルファイル/ディレクトリは --force でも拒否します。書き込み前にすべての対象の競合を確認し、各ファイルを原子的に公開します。後続のファイルシステム I/O エラーで先の対象だけインストール済みになる場合があります。エラーを修正して再実行してください。--dry-run は同じ確認を行い、何も書かず予定パス/操作を報告します。置換の確認には --dry-run --force を使用します。
クライアントの PATH に memories があることを確認してください。スキルをすぐに検出しない場合は新しいクライアントセッションを開きます。Codex は $memories、Claude Code は /memories を呼び出し、OpenCode は memories スキルを読み込むよう依頼します。ローカルインストールは Claude Desktop/Cowork やクラウドセッションにアカウントレベルのスキルをインストールしません。利用可能なら既に設定された MCP 接続を使用します。以下の説明に従って別途設定してください。
検出規約:Codex、OpenCode、Claude Code。
AGENTS.md/ペルソナスキルの生成
ボールト、カード、ペルソナ/世界/things、履歴/差分、リモートデーモンの基本など、Memories の操作方法を説明するプロジェクト AGENTS.md(または Cursor/Codex 形式のスキルディレクトリ)を作成します。任意でペルソナの核の概要を埋め込めます。
memories skill generate --out AGENTS.md
memories skill generate --out AGENTS.md --persona VAULT/PERSONA
memories agents generate --out ./skills/memories-persona --layout skill --persona VAULT/PERSONA
--layout agents(既定)は単一 Markdown ファイルを書き込みます。--layout skill は出力ディレクトリ内に SKILL.md を書き込みます(パスが既に .md で終わる場合はそのパス)。--persona を省略すると、設定済みならクライアント既定値 persona を使用します。ペルソナ付き生成はデーモン経由でカードを読みます(先にロック解除)。ペルソナなしの生成はオフラインでデーモン不要です。異なる既存ファイルの置換には --force、書き込まず計画を確認するには --dry-run を使用します。
memories inject は同梱の汎用スキルを Codex/OpenCode/Claude Code のパスへ導入する別のオフラインインストーラーです。
クライアント CLI の既定値
秘密でない既定値はボールト暗号文ではなく、Memories ホームディレクトリ(MEMORIES_HOME/--home)内の defaults.json に保存されます。
memories default set persona VAULT/PERSONA
memories default set vault VAULT_ID
memories default set type persona
memories default get
memories default get type
memories default delete type
| キー | 意味 |
|---|---|
persona |
ペルソナコマンドでボールト/アセットを省略した際の VAULT/ASSET |
vault |
list/card list および単一引数ペルソナ形式の既定ボールト |
type |
一覧コマンドの既定 --type フィルター |
category |
一覧コマンドの既定 --category フィルター |
daemon |
既定 --daemon URL |
daemon_relay |
既定 --daemon-relay URL |
daemon_room |
既定 --daemon-room |
明示的なフラグは常に優先されます。ボールト/アセットを受け取るペルソナサブコマンドは、省略位置引数を既定値として扱います(world-get、thing、append-event、…)。persona import は引き続きスキルパスの前に明示的なボールト ID が必要です(clap の位置引数順)。
ローカル MCP
この節は通常のボールト限定 MCP グラントを説明します。別途オプトインする 無人サーバー は、より広い読み取り境界を持ちます。
memories sudo
memories mcp grant VAULT_ID PRIVATE_GRANT_FILE --minutes 15
memories mcp serve --grant-file PRIVATE_GRANT_FILE
memories mcp revoke PRIVATE_GRANT_FILE
グラントはローカルのベアラー権限で、表示せずファイルに書き込みます。そのファイルを保護してください。グラントは既定で読み取りアクセスです。通常内容の書き込みには --scope read_write、削除も含めるには --scope read_write_delete を使います。--write は互換用の --scope read_write の短縮形です。これらの範囲はプライベート内容、ファイル、認証情報、sudo を付与しません。AI クライアントの stdio MCP コマンドは、実行中のデーモンと同じホームで memories mcp serve --grant-file ... に設定します。ツールは memory_search、memory_retrieve、memory_ask、memory_read、memory_read_revision、memory_history、memory_diff、memory_write、memory_delete、card_write、card_graph、card_link、workflow_card、workflow_read、workflow_update、workflow_list、および ペルソナカード に記載したペルソナツールです。workflow_card はステップワークフロー、チェックリストテンプレート、テンプレートから複製したタスクを作成し、workflow_update はチェックリストフィールドの編集やステップ進行を行います。どちらも書き込み範囲が必要です。workflow_read と workflow_list は読み取りアクセスで動作します。すべての呼び出しに認可されたボールト ID を含めます。memory_retrieve は出典付き文書チャンクを返します。既定モードはローカル BM25 で、vector と hybrid はデーモンの設定済み埋め込みプロバイダーを使用します。memory_ask は生成 URL が設定されている場合にその出典から回答し、取得した根拠にない引用を拒否します。検索と RAG を参照してください。プライベートメモリ、ファイル、認証情報アクセス、プロセス実行、ボールトメンバー変更は除外されます。グラント発行、一覧、取り消し、権限要求は別の MCP ツールで sudo を継承しません。ロックはメモリ内グラントを破棄し、有効期限内のグラントはロック解除後に再開します。MCP プロトコル:2024-11-05。MCP 読み取りは秘密参照を未解決のままにします。現在の card_write はマッピングを保持しないため秘密参照付きカードを更新できません。CLI またはモバイルアプリで編集してください。
デスクトップの無人 CLI/MCP
明示的な登録には ENABLE の入力による同意と、セットアップ時に一度のパスワードによる unlock/sudo が必要です。windows-dpapi、macos-keychain、linux-secret-service、または保護の弱い owner-file バックエンドを明示的に選び、ボールト限定クライアントファイルを発行します。unattended ... --client-file PATH または mcp serve-unattended --client-file PATH で選択します。これらのクライアントは通常/プライベート内容、元ファイル、履歴、明示的に要求した認証情報の平文を読めますが、アセットの変更や sudo の継承はできません。
デーモン起動は鍵だけを読み込み、通常の暗黙的認可は読み込みません。手動の lock は、パスワード認可された unattended resume まで無人アクセスを永続的に阻止します。revoke はグラントを削除し、disable はすべての無人権限を削除します。Center 管理ストア、リモート転送、モバイルでは使用できません。通常 MCP は変わりません。認証情報の base64 は符号化であって暗号化ではなく、AI クライアントやそのログに秘密値が残る場合があります。セットアップ、バイト範囲読み取り、セキュリティ制限 を参照してください。
ナレッジカードと保護カード
すべてのナレッジカードは カード型とカスタムフィールド に対応します。メモ、連絡先、リンク、コードスニペット、チェックリスト、イベント、認証情報、および再利用できるボールトテンプレートがあります。フィールドは順序付きで検証され、機密値は検証済み認可で明示的に表示するまでマスクされます。memories type と memories card field、または Flutter と制限付きデスクトップカードエディターを使用します。
カードはタグ、出典、任意の別名、メモ/備考、カテゴリ、有向関係、バックリンクに対応します。通常カード内容と安全なアカウント概要はローカル検索できます。通常のプライベートカード読み取りには sudo が必要で、通常検索と MCP から除外されます。別の無人権限は範囲内のプライベートカードを読めます。作成/更新時に --alias、--notes、--category を使います。card list(トップレベル memories list/memories ls も)はボールト ID を省略してすべてのアクセス可能なボールトを走査できます(各結果に vault を含む)。--type knowledge|brain|persona|workflow|account|env|token|totp|hotp|otp は summary.type で絞り込みます(knowledge は通常の Wiki/ナレッジカード、brain は要約と型付きリンクを持つ構造化知識、otp は totp+hotp)。--otp は --type otp の短縮形です。--category NAME は絞り込み、--group-by-category は出力をグループ化します。存在すれば一覧に別名、メモ、カテゴリを表示します。
memories card put VAULT_ID --title "An idea" --input notes.md --tag design --alias "Design note" --notes "from workshop" --category design
memories card list VAULT_ID
memories list
memories ls --type knowledge
memories card list --type brain
memories list --type otp
memories ls --otp --category security
memories card list VAULT_ID --type account
memories card list VAULT_ID --category design
memories card list VAULT_ID --group-by-category
memories card brain VAULT_ID --title "Alice" --abstract "Product lead bridging design and eng" \
--link CARD_A=reports-to --link "OTHER_VAULT/CARD_B=collaborates|shared roadmap" \
--alias "Alice" --notes "org chart" --category people
memories card brain VAULT_ID --id BRAIN_ID --title "Alice" --abstract "Updated abstract" --link CARD_B=partner
memories card link VAULT_ID CARD_A CARD_B --relation supports
memories card graph VAULT_ID
memories card graph VAULT_ID --include-private
memories card search VAULT_ID design
memories card unlink VAULT_ID CARD_A CARD_B --relation supports
memories card delete VAULT_ID CARD_ID
card delete(memory delete と同様)は現在の表示からカードを取り除き、署名付き履歴は以前のリビジョンを保持します。プライベートカードや保護カードの削除には sudo が必要です。
ブレインカードは平文の abstract(ボールト権限内で検索可能で、保護された秘密値ではありません)と、ボールトをまたげる型付きリンク { vault?, card, role?, note? } を保存します。--link 値に | や空白がある場合、シェルがパイプとして解釈しないよう値全体を引用してください。summary.type は brain で link_count を持ちます。一覧/グラフ/読み取りは許可される場合にリンク先タイトルと型を解決し、不在または未認可の対象は broken と表示します(連鎖削除なし)。検索はタイトル、要約、リンクのロール/メモ、同じボールトの公開対象概要を索引化しますが、秘密値は決して索引化しません。同じボールトのブレインリンクは card graph にも現れます。
ペルソナカード(summary.type = persona)は、リンクされたアーカイブアセットを持つ製品横断のアイデンティティの核、ローカル日付/時間帯推論(翌日/朝と夜の課程)用 IANA timezone、世界ドメイン(place/pose/look/自由な JSON 属性を持つ汎用 things/台帳/天気/サイコロ/スピナー/スケジュール)、UTC とローカル時刻付き追記専用行動イベントを保存します。docs/persona.md を参照してください。memories persona import VAULT_ID ./xiaoya-persona --timezone Asia/Shanghai でインポートし、memories persona world-set で世界状態を更新します。
ワークフローカード(summary.type = workflow)はカードリビジョン内に順序付きステップを保持し、各状態は pending、active、done、skipped のいずれかで、全体状態もあります。memories card workflow VAULT --title Release --step "Write notes" --step Ship で作成し、memories card workflow-update VAULT ASSET --advance でステップを進め、memories card list --type workflow で一覧表示します。
チェックリストテンプレートは memories card workflow VAULT --template --assignee NAME --summary OVERVIEW --goal GOAL で作成します(summary.type は workflow のままで、プロファイルフィールド template は true)。memories card list --type workflow --template で一覧表示し、memories card workflow VAULT --template TEMPLATE でタスクワークフローに複製できます。--workflow WORKFLOW で別のワークフローカードをリンクし、--archive MEMORY でメモリをアーカイブできます。
通常の有向リンク(card link)は同じボールト内のカードを参照します。グラフは削除済み、競合中、未認可のノードとそこに接続する辺を除外します。参照は暗号化履歴に残ります。復元は曖昧でないアセットの ID を保持し、復元された独立ボールトで関係や認証情報参照を引き続き使えます。競合アセットへの参照は修復が必要な場合があります。モバイルは出リンク、バックリンク、パン/ズームグラフを表示します(キャンバス上は最大 24 ノードで、完全なグラフ選択と関係一覧もあります)。
保護カードはメタデータと別の認証情報を 1 つのトランザクションで保存します。
| カード | 検索/表示 | 保護値 |
|---|---|---|
| メールアカウント | メール、SMTP ホスト、ポート、SSL | パスワード |
| ウェブサイトログイン | サイト URL、ユーザー名 | パスワード |
.env |
各変数名と後続の *** |
元の UTF-8 ファイル |
| Cookie/JWT | 正確に認可された HTTPS ホスト、ヘッダー型 | Cookie ヘッダー値またはベアラートークン |
| TOTP | 発行者、アカウント、アルゴリズム、桁数、周期 | Base32 シード |
| HOTP | 発行者、アカウント、アルゴリズム、桁数、カウンター | Base32 シード |
ウェブサイトログインは通常 1 件ずつ入力せず一括インポートします。ウェブサイトログインのインポートとエクスポート を参照してください。
memories sudo
memories card account VAULT_ID --title "Example mail" --email user@example.test --smtp smtp.example.test
memories card env VAULT_ID ./app.env --title "Application config"
memories card token VAULT_ID --title "API session" --host api.example.test
memories card token VAULT_ID --title "Browser session" --host app.example.test --cookie
memories card request VAULT_ID TOKEN_CARD_ID https://api.example.test/session
memories card otp VAULT_ID --title "Example OTP" --issuer Example --account user@example.test
memories card otp VAULT_ID --title "Example HOTP" --issuer Example --account user@example.test --hotp --counter 0
memories card otp-import VAULT_ID --title "Imported OTP" --alias "Work 2FA" --notes "laptop" --category otp 'otpauth://totp/Example:user@example.test?secret=GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ&issuer=Example'
memories card otp-import VAULT_ID --image ./ga-export.png --title "GA import" --category otp
memories card otp-code VAULT_ID OTP_CARD_ID
OTP タイトルはインポートした issuer / account 形式を維持し、--alias と --notes に表示名と備考を別々に保存できます。--category は card list でグループ化します。
パスワード、トークン、Cookie、OTP シードは非表示端末入力を使用し、コマンド引数にはしません。ベアラーモードは生の JWT、Cookie モードは name=value; other=value を入力します。アカウント SMTP は既定で SSL ポート 465 です。これは設定を記録するだけで、メールは送信しません。--id CARD_ID を追加すると保護カードのメタデータと秘密値を置換し、認証情報 ID とカードリンクは保持します。認証情報 ID は参照であり秘密値ではありません。汎用カード書き込みでは保護参照を置換できません。
dotenv インポーターは空値や秘密でない値も含め すべて の値をマスクし、値やコメントは決して索引化しません。1 行に 1 つの KEY=value、任意の export、空行、コメントを受け付けます。重複キーと複数行の引用値は拒否します。変数展開もファイル実行も行いません。元ファイルは元の場所に残り、インポートは権限変更も消去も行いません。自由形式のカードタイトル/メモは秘密情報の自動検出システムではありません。
HTTPS アダプターはクライアントで Authorization: Bearer ... または Cookie: ... を注入します。sudo、正確に承認されたホスト、HTTPS ポート 443、GET/POST が必要です。リダイレクトと環境プロキシは無効で、秘密値の反射出力を防ぐため応答本文/ヘッダーを抑制して状態だけを返します。これは認可された要求アダプターであり、汎用転送プロキシやブラウザー Cookie ジャーではありません。Cookie 期限、JWT 更新、自動ログインは未実装です。
TOTP は SHA-1/SHA-256/SHA-512(--algorithm)、6/8 桁(--digits)、30/60 秒周期(--period)に対応します。HOTP は --hotp と初期 --counter(otp-code ごとに進行)で同じアルゴリズムと桁数を使います。otp-import で Google Key URI(otpauth://totp/... または otpauth://hotp/...)、Google Authenticator 移行 URI(otpauth-migration://offline?data=...)、または --image による QR 画像(純 Rust の rqrr で復号)をインポートします。TOTP/HOTP の種別は URI または移行レコードから取得します。種別がない場合は counter があれば HOTP、その他のアカウントは TOTP になります。移行ペイロードは複数カードを作成でき、--title は単一カードのタイトルまたは一括処理の接頭辞です。otp-code は sudo 後に短時間有効なコードを返し、コードを監査レコードに保存せず生成を監査します。HOTP 応答は次のカウンターを含みます。検索と MCP はコード生成もシード返却も行いません。モバイルは期限切れコードを隠し、ロック/バックグラウンド時にダイアログを閉じます。TOTP のためデバイス時計を正確に保ってください。モバイルはカメラで OTP QR コードを読み取りません。CLI --image または otpauth:///移行 URI の貼り付けを使用します。ホスト型デバイスペアリングには別のカメラフローがあります。Center を参照してください。
モバイルには 保護カード、.env をインポート、ログインをインポート(CSV) 操作があります。アカウント/認証情報の基本情報は検索結果とカード詳細に直接表示されます。トークンと OTP カードには 認可された要求 と OTP を生成 メニューがあります。汎用カード編集は保護メタデータを保持し、秘密値の置換には現在 CLI を使います。
ウェブサイトログインのインポートとエクスポート
ウェブサイトログインは login 保護カードに保存され、一括移動できます。インポートとエクスポートには memories sudo と書き込み可能なロールが必要です。
memories sudo
# Browser CSV (Chrome/Edge/Brave or Firefox about:logins); the header is detected.
memories login import VAULT_ID --from chrome passwords.csv
memories login import VAULT_ID --from firefox firefox-logins.csv --with-notes
# Read a Firefox profile directly (modern key4.db; prompts for any primary password).
memories login import VAULT_ID --from firefox-profile "/path/to/Profiles/xxxx.default"
# Windows Credential Manager generic credentials (Windows only).
memories login import VAULT_ID --from windows --filter github
memories login import VAULT_ID --from windows --all
# A previous encrypted export.
memories login import VAULT_ID --from memories logins.mlx
# Export: portable encrypted file (recommended) or a browser-compatible CSV.
memories login export VAULT_ID --format encrypted logins.mlx
memories login export VAULT_ID --format csv logins.csv
既存カードとサイトホストおよびユーザー名が同じログインは、パスワードが一致するとスキップされ、異なると競合として報告されます。--update なら上書きします。不正な CSV 行はスキップして行番号を報告し、1 回のインポートは最大 2000 ログインです。ブラウザーの note 列は通常テキストとして索引化されるため --with-notes の場合だけインポートします。Firefox 直接読み取りは現行鍵形式(Firefox 58+)に対応します。古いプロファイルは about:logins から CSV をエクスポートしてください。一部プラットフォームでは保存パスワード読み取り時にブラウザーを閉じる必要があります。ブラウザーストアは決して変更しません。
暗号化エクスポートは独立したパスワードを使用し、任意のボールトにインポートできます。CSV エクスポートはブラウザーや別のパスワードマネージャーにログインを戻す平文形式です。ローカル CLI 専用で警告を表示し、既存でない所有者専用ファイルに書き込み、スプレッドシート数式注入を無害化します。使用後は削除してください。デバイス専用ボールトはエクスポートできません。
デバイス専用の設定
memories local-python
memories local-python --program /path/to/python
memories vault list
memories card search LOCAL_VAULT_ID Python
選択した Python インタープリターを分離モードで実行し、バージョンと実行ファイルディレクトリを記録します。環境変数は収集しません。呼び出すたびに local_only: true の暗号化された このデバイス ボールトへ新しい観測を記録します。ボールト全体をデバイス認可パッケージとエクスポートバックアップから除外し、メンバー招待、同期エクスポート/インポート、ポリシー同期は拒否します。このデバイスでは検索でき、ロック/再起動後も保持されますが、エクスポートバックアップからの復元では意図的に復元しません。他のローカル設定はこのボールトにナレッジカードを作って記録してください。デバイスペアリングは引き続き宛先に既存ボールトがないことを要求するため、ローカル設定の観測を作る前にペアリングします。
カード交換前にすべての参加クライアントを更新してください。古いクライアントは新しい card 種別と保護メタデータを理解しません。
モバイル
初回起動時に Standalone、Center、SaaS を選択します。Standalone は暗号化ローカルライブラリを使用します。Center はホストサーバー URL とメンバートークンを求め、SaaS は https://memories.ivjn.us を使用してメンバートークンを求めます。ホスト型モードはローカルライブラリの作成やロック解除が不要です。後から変更するにはメインツールバーの モード切替 を使用します。既存データは元のストアに残ります。接続手順、利用可能な機能、認可、編集、問題解決については モバイルガイド、または 中国語使用ガイド を参照してください。
モバイルクライアントのビルドと検証
Flutter 3.44.2(CI バージョン)、JDK 17+、Android SDK/NDK、cargo install cargo-ndk --locked を使用します。このチェックアウトは NDK 28.2.13676358 と SDK プラットフォーム 35、36、37.0 でビルドされました(Flutter SDK とプラグインがコンパイルプラットフォームを選択します)。ビルド前に Android SDK ライセンスに同意してください。PATH から flutter を実行できるようにし、rustup target add で aarch64-linux-android と x86_64-linux-android の Rust ターゲットをインストールします。
.\scripts\build-android.ps1 -Apk
ARM64/x86_64 ネイティブライブラリと mobile/build/app/outputs/flutter-apk/app-debug.apk のデバッグ APK をビルドします。リリース署名認証情報は含まれません。Xcode のある macOS では bash scripts/build-ios.sh を使用し、自分の開発チームで署名して実行します。Dart FFI シンボルを保持するため iOS 静的ライブラリは強制リンクされます。
ネイティブライブラリをビルド後、mobile から接続済みデバイスまたはエミュレーターで実際のモバイル ABI スモークテストを実行します。
flutter test integration_test/native_smoke_test.dart -d DEVICE_ID
このテストは一時ライブラリを使用し、Rust FFI 経由で暗号化ストレージ、認可、認証情報読み取り拒否、監査検証、ロック/ロック解除を確認します。Flutter 統合テストはデバッグ APK のエントリーポイントをテストランナーに置き換えるため、その後通常 APK を再ビルドしてください。
Standalone モードのモバイルクライアントは C FFI 経由で同じ Rust サービスを使用し、ローカル全文検索、ファイル選択、デバイス/メンバー承認ファイル、オンラインリレー転送、履歴、監査表示を提供します。Keychain/Keystore で保護されたローカル要素がパスワードを補強します。バックグラウンド移行は認可を消去して内容ダイアログを閉じます。Android はスクリーンショットをブロックし、iOS はアプリ切替スナップショットを覆います。このリリースではバックグラウンド同期は有効ではありません。
Center と SaaS は FFI 経由の Rust ホスト型クライアントで要求承認、知識閲覧、サーバー側検索、詳細、編集、削除、デバイスペアリングを行います。操作はトークン範囲に従い、構造化/封印カードには専用エディターが必要です。バックグラウンド移行でホスト型セッションを閉じます。戻ったら 保存済みセッションに再接続 を使うかトークンを再入力します。ワークフローを選ぶ前に モード比較 を参照してください。
リポジトリ
| コンポーネント | パス |
|---|---|
| 暗号技術、モデル、ストレージ、セッション、サービス | crates/core |
| CLI、OS 認証付き IPC、MCP、リレークライアント | crates/cli |
| ステートレス WebSocket リレー | crates/relay |
| モバイル C ABI | crates/ffi |
| Flutter Android/iOS クライアント | mobile |
| ビルド補助と検証 | scripts, .github/workflows |
実装と検証の詳細は アーキテクチャ と 検証結果 を参照してください。OneDrive/Google Drive のストレージと同期設計は クラウドストレージ設計 に記載されています。CLI 認可と cloud sync は実装済みです。プロバイダー転送は実アカウントを使わずローカルフィクスチャでテストしました。モバイルのログイン/同期操作は AppAuth と共有 Rust ワーカーを使用します。実際の同意フローとプラットフォーム検証は引き続きリリース条件です。