無人運用のデスクトップ CLI と MCP
無人アクセスは、選択した稼働中の保管庫に対する、明示的でローカル限定の読み取り専用機能です。通常および非公開の記憶/カード、元のバイナリファイル、リビジョン履歴、明示的に要求された認証情報の平文を含みます。受信側クライアントに、それらの保管庫のすべてのアセットとシークレットを託せる場合にのみ有効にしてください。通常の MCP 権限や永続的な sudo セッションではありません。
登録と保管方式の選択
別のターミナルでデーモンを起動し、すべてのコマンドで同じ専用の絶対パスのホームを使用します。まず通常の方法でライブラリを初期化し、保管庫を作成してください。以下のパスは例です。各プラットフォームで自分専用の非公開ディレクトリを使用してください。
memories --home /absolute/private/home daemon
対話型ターミナルでバックエンドを明示的に選択します。
memories --home /absolute/private/home unattended enable --backend linux-secret-service
登録時には、クライアントが保存済みパスワードを読み取れることを警告し、ENABLE の入力を求め、ロック解除のためにローカルパスワードを、その後 sudo のためにもう一度入力するよう求めます。この同意/パスワード設定は登録時に一度必要であり、無人読み取りのたびに必要なわけではありません。パスワードを引数や環境変数で渡さないでください。その後の管理には引き続き、通常のパスワードでロック解除され、sudo 認可されたターミナルが必要です。
| バックエンド | 保管方式と要件 |
|---|---|
windows-dpapi |
現在のユーザーの Windows DPAPI。保護されたファイルは所有者のみの権限を使用します。マシン全体のスコープや認証 UI はありません。 |
macos-keychain |
同期しない macOS Keychain エントリ。ロック中または承認が必要なアクセスは、プロンプトを出す代わりに拒否します。 |
linux-secret-service |
すでにロック解除されたコレクション/項目を持つセッションバスの Secret Service。Unlock を要求せず、Prompt を呼び出しません。 |
owner-file |
デスクトップで保護水準が低い方式を明示的に選択。所有者専用ファイル内の平文ラッピング素材であり、OS アカウントに対する暗号学的保護ではありません。 |
たとえば、保護水準が低い選択肢を意図的に選ぶには unattended enable --backend owner-file を使用します。ネイティブバックエンドが利用できない場合や対話が必要な場合、自動フォールバックはありません。Secret Service はローカルの OS アカウント/D-Bus の境界に依存します。クライアントは任意のプロバイダー固有の UI 動作を制御できません。バックエンドの選択は作成時のみです。切り替えるためにメタデータを編集しないでください。保管方式は正規化されたストアパスと現在のヘッダー ID に結び付くため、別のストアにコピーしても登録にはなりません。
パスワードラッパーは、通常のロック解除と復旧のために引き続き利用できます。登録では、ラッピングキーをデータベース外に保持する別のマスターキーラッパーを追加します。パスワード認証を置き換えるものではありません。
クライアントファイルの発行
同じ認可済みターミナルで、クライアントに必要な保管庫の許可を発行します。
memories --home /absolute/private/home unattended mint --vault VAULT_ID --client-file /absolute/private/home/client.json
# Repeat --vault VAULT_ID to include another vault in this grant.
親ディレクトリはすでに存在し、所有者専用である必要があります。発行は既存ファイルを上書きせず、ファイルを原子的に公開し、安全でない所有権、権限、リンクを拒否します。公開に失敗すると、新しい許可の取り消しを試み、取り消し失敗を報告します。出力には許可 ID とファイルパスが含まれ、Bearer トークンは含まれません。取り消しのために ID を保持してください。
このクライアントファイルは通常の MCP 許可ファイルとは別です。パスワードと同様に保護し、内容を表示、コミットしたり、トークンをコマンド引数に入れたりしないでください。CLI/MCP の読み取りには、明示的な --client-file の選択と同じホーム/ストアが必要です。スコープは選択した保管庫の read_only_all_assets であり、アセット単位や通常コンテンツ限定の許可ではありません。各読み取りで、現在のローカルデバイスの所属と保管庫スコープを再確認します。
起動と読み取り
登録後にデーモンを再起動し、キーのみの起動を使用してください。memories lock を実行せずに停止し、同じホームで再起動します。起動に成功すると無人用キーが読み込まれますが、通常の状態は unlocked: false と報告されます。通常の読み取り、書き込み、sudo、クラウド処理、RAG は、パスワードによるロック解除までロックされたままです。バックエンドの失敗時には無人用キーは読み込まれず、パスワードや暗黙の認証へのフォールバックもありません。
Unix では強制終了によりホームディレクトリに service.sock が残ることがあります。そのデーモンが停止したことを確認してから、古いソケットを削除してください。
memories --home /absolute/private/home unattended list VAULT_ID --client-file /absolute/private/home/client.json
memories --home /absolute/private/home unattended history VAULT_ID ASSET_ID --client-file /absolute/private/home/client.json
memories --home /absolute/private/home unattended read VAULT_ID ASSET_ID --client-file /absolute/private/home/client.json
memories --home /absolute/private/home unattended credential-bytes VAULT_ID CREDENTIAL_ID --client-file /absolute/private/home/client.json
一覧は非公開、ファイル、認証情報アセットを含むメタデータを返しますが、本文は返しません。削除済みマーカーは省略されます。履歴は現在版/削除/隔離フラグを含むリビジョンのメタデータを返し、認証情報の本文は返しません。現在のアセットが競合している場合は、明示的に一致するリビジョンが必要です。過去のリビジョンと削除済みリビジョンは明示的に読み取れますが、隔離されたリビジョンは拒否されます。この経路は稼働中の保管庫の履歴を読み取り、復旧アーカイブは読み取りません。
read は記憶/カードの Content JSON バイトまたはファイルの元のバイトを返します。認証情報は拒否します。credential-bytes は認証情報のみを受け付け、保存された本文の UTF-8 バイトを返します。明示的に選択した場合は過去の値も含みます。任意のバイナリ認証情報ストレージを追加するものではありません。保護されたカードや Wiki のシークレット参照は参照のままです。必要なら参照先の認証情報を別途要求してください。
全バイトの再構成
応答は、パディングなしの base64url を含む data、0 起点の offset、バイト数の total、next(完了時は null)、実際の revision、encoding(content_json または raw_bytes)を使用します。全コンテンツを取得するには、次の手順に従います。
- オフセット 0 を要求し、
--limitは 1-65536 バイト(既定 65536)にします。 - 各応答の
dataを、パディングなしの base64url として個別にデコードします。 nextを次の--offsetとして使用し、以降のすべてのリクエストで--revision REVISION_IDを指定して、最初に返されたリビジョンに固定します。nextが null になるまで続け、デコードしたバイト範囲を順番に連結します。必要な場合の UTF-8/JSON デコードは、その後にのみ行ってください。範囲は UTF-8 文字を分割する場合があります。
たとえば、後続の範囲には次を使用します。
memories --home /absolute/private/home unattended read VAULT_ID ASSET_ID --client-file /absolute/private/home/client.json --revision REVISION_ID --offset NEXT_OFFSET --limit 65536
credential-bytes にも同じオプションを使用します。エンコード済み文字列を連結したり、最初の範囲をアセット全体として扱ったりしないでください。一覧/履歴は --offset と 1-100 項目の --limit(既定 100)を使用します。ページはスナップショットではなく現在の状態を反映するため、リクエスト間の変更で順序や合計が変わることがあります。
MCP を通じた AI クライアントの接続
同じホームとクライアントファイルで、別の stdio サーバーコマンドを設定します。
memories --home /absolute/private/home mcp serve-unattended --client-file /absolute/private/home/client.json
公開するツールは unattended_list、unattended_history、unattended_read、unattended_credential_bytes のみです。ツール引数は vault、asset(一覧を除く)、任意の revision(バイト読み取り)、offset、limit です。ツール結果は MCP テキストコンテンツに同じページ/範囲付き JSON を含み、完全なダウンロードは前述のバイト範囲の契約に従います。アセットの変更、実行、管理、同期、バックアップダンプ、検索/モデル実行、OTP カウンターの進行ツールはありません。読み取りは出力を返す前に署名済み配信意図を保存し、監査/ストレージの失敗時には出力を拒否します。
通常の mcp serve --grant-file は変わらず、非公開コンテンツ、ファイル、認証情報の読み取りを引き続き除外します。どちらのサーバーもターミナルの sudo を継承しません。Center 管理のストアは無人アクセスの登録/起動/使用を拒否します。HTTP/WebSocket、リレー RPC、モバイル FFI/共有、WebUI は無人アクセス権限を使用できません。グローバルのリモートオプションが実行ファイルのヘルプに表示されても、これらのコマンドはリモートフラグ、環境の接続オプション、保存済みリモート既定値を拒否します。
認証情報の base64 はエンコードであり、暗号化ではありません。 無人 MCP は意図的に受信側クライアントへシークレットのバイトを渡します。AI プロバイダー、会話記録、ツールログ、キャッシュ、プラグインは、エンコードされた値やデコード済み平文を保持または送信する可能性があります。読み取り専用スコープは、この機能を通じた変更を防ぎますが、コピーされたシークレットの開示や他の場所での使用を防ぎません。テストには合成シークレットを使用してください。
ロック、再開、取り消し、無効化
memories --home /absolute/private/home lock
手動ロックはキーを消去し、再起動後も無人起動を永続的に抑止します。パスワードによるロック解除だけでは再開しません。永続書き込みに失敗するとロックはエラーを返します。書き込めないデバイスで抑止が永続化されたと考えないでください。アイドル/終了時のクリーンアップは手動の抑止ではありません。
管理には、ローカルターミナルでパスワードによるロック解除と sudo が必要です。
memories --home /absolute/private/home unlock
memories --home /absolute/private/home sudo
memories --home /absolute/private/home unattended status
memories --home /absolute/private/home unattended resume
状態は有効/抑止の状態と許可 ID を報告し、トークンは報告しません。再開後、手動でロックせずにデーモンを再起動すると、キーのみの状態に戻ります。1 つのクライアントを削除するか、すべての無人アクセスを無効にするには、次を実行します。
memories --home /absolute/private/home unattended revoke GRANT_ID
memories --home /absolute/private/home unattended disable
取り消しは永続的で冪等です。無効化はバックエンドのクリーンアップ前に権限を永続的に無効化し、すべての許可を取り消します。誰かがコピーしていた場合、クライアントファイルの削除だけでは取り消しになりません。ロック、取り消し、無効化では、すでに配信した平文を取り戻せません。露出した認証情報はプロバイダーでローテーションしてください。
復旧と検証の限界
無人用ラッパー/権限レコードは、論理エクスポートバックアップ、デバイスのペアリング、保管庫同期に含まれません。論理バックアップを復元しても無人アクセス登録は復元されません。ローカルデータベース全体の生のコピーには引き続き補助テーブルが含まれ、ファイルシステムのバックアップはクライアントファイルや保管素材をコピーする場合があります。同一アカウントのプロセス、OS 管理者、プロセスメモリ、デバイス全体のロールバック、セキュア消去は、引き続き SECURITY.md の保証範囲外です。
実装済みアダプターは Windows DPAPI、macOS Keychain、Linux Secret Service、owner-file の保管方式に対応しています。Linux のエンドツーエンド検証は、実際のデーモン、非公開の記憶、元のバイナリファイル、合成 UTF-8 認証情報とともに owner-file の保管方式を使用します。キーのみの再起動、CLI/標準入力-標準出力の MCP、通常/クラウド/RAG の拒否、再起動後も続く手動抑止、再開、取り消し、無効化を網羅します。Linux 保管方式のテストと隔離された D-Bus プロトコルのフィクスチャも追加の検証範囲を提供しますが、このフィクスチャは実際のデスクトップキーリングのテストではありません。
Windows/macOS のネイティブの往復処理、ネイティブのロック/承認要求時および UI なしの動作、実際のデスクトップキーリングの検証は、引き続きリリースゲートです。クロスターゲットのビルドやエラー変換のテストは、これらのネイティブ動作を証明しません。独立したレビューは未実施であり、テスト合格はセキュリティ監査ではありません。対象を絞った検証コマンドについては、CLI の実装ノートとcore の契約を参照してください。