Memories / ドキュメント

このページの内容

Memories 利用ガイド

本書では、現在の CLI で実装済みの主要なタスクを実行する方法を説明します。例中の VAULT_ID、ASSET_ID などの大文字の識別子は、コマンドが実際に返した短い ID に置き換えてください。パスワードは対話型端末から非表示で読み取ります。パスワード用の引数や環境変数はありません。ローカルパスワードとバックアップパスワードの長さに制限はなく、空の入力も可能です。確認が必要な手順では再入力を求められます。

データを扱うすべてのコマンドには、同じデータディレクトリを使う実行中のデーモンが必要です。グローバルオプション:

オプション 用途
--home PATH または MEMORIES_HOME データディレクトリを選択します。既定は OS のアプリケーションデータディレクトリです
--config PATH または MEMORIES_CONFIG TOML 設定を選択します。コマンドライン、環境変数、設定ファイル、組み込みの既定値の順に優先されます
--lang en\|zh\|ja\|de\|fr 今回のコマンドの表示言語だけに影響します

コマンドの出力はバージョン付き JSON です。失敗時の終了コードは非ゼロです。確認語 USE と APPROVE は英語のままで、表示言語によって変わりません。

Linux では CLI、デーモン、リレー、FFI、および後述のステータスページを実行できます。Linux にネイティブのトレイはありません。モバイルにはモデル検索画面、バックグラウンド同期、カメラによる OTP QR コードのインポートはありません。ホスト型のデバイスペアリングではペアリングコードをスキャンできます。デバイス間のエンドツーエンド秘密同期を参照してください。実際のクラウドアカウントでのエンドツーエンド検証は未完了です。CLI では HOTP、otpauth://、otpauth-migration:// をインポートでき、--image で OTP QR コード画像をデコードできます。

タスク別の入り口

やりたいこと 参照先
初めてノートを保存する 起動と初期化、続いて書き込み、読み取り、検索
メモリ、brain、persona、ファイルを選ぶ 製品の概念
文書を検索し、引用付きの回答を得る 検索と質問応答
パスワード、トークン、鍵、OTP を保存する 認証情報と保護されたカード
デバイスを移行し、他人と共有し、バックアップを復元する デバイス、同期、バックアップ
AI クライアントに接続する MCP と skill
手順やチェックリストで作業を追跡する ワークフローカードとチェックリストテンプレート
組織で認可を一元発行する 認可センター
モバイルの初回利用、自前のサービスや SaaS への接続 モバイルのモード選択と切り替え

引数が不明な場合は、全体のヘルプからサブコマンドのヘルプへ順に確認してください。ヘルプにデーモンは不要です:

memories --help
memories --lang zh memory --help
memories --lang zh memory put --help

--lang zh はヘルプとプロンプトの言語だけを切り替え、コマンド名や引数の書式は変えません。本書の sh の例は POSIX shell を使います。複数行コマンドの行末の \ は行継続文字です。PowerShell/CMD では 1 行にまとめてください。

デーモンの起動と保管庫の初期化

端末でサービスを起動します。接続を受け付けるのは現在の OS ユーザーだけです。Windows は名前付きパイプ、Linux と macOS は Unix ソケットを使います。

memories daemon

別の端末を開き、デバイスの初期化、保管庫の作成、ロック、再度のロック解除を行います:

memories init --name laptop
memories vault create Personal
memories vault list
memories lock
memories unlock
memories status
memories identity

--name は省略可能で、既定のデバイス名は local-device です。identity はこのデバイスの公開 ID を表示します。初期化、ロック解除、sudo には対話型端末でのパスワード入力が必要です。--home に既存の一般フォルダーを指定しないでください。プログラムがそのディレクトリの権限を厳しく制限します。

ここでいうローカルストレージ(store)は --home で選ぶデータディレクトリです。初期化によってローカル ID とパスワード保護を設定します。保管庫(vault)は、その中でメンバーと権限によって区切られるデータの集合で、1 つのストレージに複数の保管庫を持てます。独自のディレクトリを使う場合、サービスと各クライアントコマンドに同じ --home PATH を指定してください。既存のストレージには unlock だけを使い、init を繰り返さないでください。新しいデバイスを既存の ID に参加させる場合は、先にデバイスのペアリングを完了し、Personal や「このデバイス」の保管庫を先に作成しないでください。

上の手順が完了したら、エディターで UTF-8 ファイル notes.md を作成し、「项目」を含むテスト用ノートを 1 文記入します。次の例の VAULT_ID を vault create または vault list が返した id に置き換えると、最初のメモリを保存して検索できます:

memories memory put VAULT_ID --title "项目笔记" --input notes.md
memories memory search VAULT_ID "项目"

保存結果の id が、以後の読み取りに使う ASSET_ID です。通常のノートには memory、タグ、分類、関係が必要な場合は card、元の PDF などのファイルには file を使います。ファイルが自動的に検索可能なテキストになることはありません。秘密には credential を使い、通常のノートには入れないでください。

通常の unlock は権限の範囲内で通常データの操作を許可しますが、非公開の内容、ファイル、認証情報へのアクセスは許可しません。 sudo はローカルの認可セッションであり、OS の管理者権限ではありません。同じローカルパスワードを使い、最長 15 分間、アイドル状態が 5 分間続くと失効し、その端末の親プロセスにだけ属します。ロックまたはサービスの再起動で消去されます。通常のロック解除はアイドル状態が 15 分間続くと失効します。

秘密を含まない設定の表示と作成:

memories config path
memories config init
memories config init --output ./development.toml
memories --config ./development.toml config show

config init は既存ファイルを上書きしません。config show は暗号化保管庫を開きません。設定項目には storage_dir、relay_url、[desktop]、[rag] があります。パスワード、秘密鍵、OAuth トークン、MCP 認可をこのファイルに書かないでください。ストレージディレクトリやモデル設定を変更したら、デーモンも再起動してください。

メモリとカードの書き込み、読み取り、検索

通常のメモリを書き込みます。本文は UTF-8 ファイルに入れ、--input で渡します:

memories memory put VAULT_ID --title "项目笔记" --input notes.md
memories memory search VAULT_ID "项目"
memories memory read VAULT_ID ASSET_ID
memories memory history VAULT_ID ASSET_ID
memories memory diff VAULT_ID ASSET_ID FROM_REVISION
memories memory diff VAULT_ID ASSET_ID FROM_REVISION --to TO_REVISION
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 は大文字と小文字を区別しません。非公開文書、競合バージョン、カード、ファイル、認証情報は照合対象外です。通常検索と同様に非公開内容を除外します。一致がなければ何も出力しません。

FROM_REVISION と TO_REVISION は、どちらも history が返す revision フィールドから取得します。id フィールドではありません。基準バージョンは位置引数であり、--from ではありません。--to を省略すると現在の head と比較します。

作成や更新のたびに、保管庫の署名付きリビジョン DAG にバージョンが追加されます(通常メモリ、知識/brain カード、保護カードのメタデータ、ファイル、認証情報)。memory / card / file の history はバージョン(revision、タイムスタンプ、作成者、head かどうか、要約)を一覧表示し、read --revision は過去の本文を読み取り、diff はタイトルとカードメタデータを含む unified 形式のテキスト差分を出力します。ファイルの diff はバイナリ本文を省き、メタデータと長さだけを比較します。認証情報の秘密本文は diff/read では返しません。リビジョンは保管庫とともに長期間保持され、自動削除はありません。

特定の過去バージョンを読むには --revision REVISION を付けます。既存レコードの置き換えには --id ASSET_ID を付けます。未マージのバージョンが複数ある場合は履歴を確認し、--id ASSET_ID --resolve で、それらの親バージョンすべてを参照する新しいバージョンを送信します。現在表示されるレコードの削除:

memories memory delete VAULT_ID ASSET_ID

削除しても署名付き履歴は消えません。--private はレコードを非公開にします。非公開レコードには sudo が必要で、通常検索と MCP から除外されます。

知識カードは同じアセットサブコマンドを使い、タグ、出典、別名、メモ、分類、関係を付けられます。card list(トップレベルの memories list / memories ls も使用可能)は保管庫 ID を省略でき、アクセス可能な全保管庫を走査します(各結果に vault を含みます)。--type knowledge|brain|persona|workflow|account|env|token|totp|hotp|otp は summary.type で絞り込みます(knowledge は通常の知識カード、brain は要約と型付きリンクを持つ構造化知識カード、otp は totp+hotp)。--otp は --type otp と同じです。--category は分類で絞り込み、--group-by-category は分類別にグループ化します:

memories card put VAULT_ID --title "一个想法" --input notes.md --tag design --source "会议" --alias "设计备忘" --notes "工作坊" --category design
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 --category design
memories card list VAULT_ID --group-by-category
memories card brain VAULT_ID --title "Alice" --abstract "连接设计与工程的产品负责人" \
  --link CARD_A=reports-to --link "OTHER_VAULT/CARD_B=collaborates|共同路线图" \
  --alias "Alice" --notes "组织图" --category people
memories card brain VAULT_ID --id BRAIN_ID --title "Alice" --abstract "更新后的摘要" --link CARD_B=partner
memories card link VAULT_ID CARD_A CARD_B --relation supports
memories card unlink 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 list VAULT_ID
memories card read VAULT_ID CARD_ID
memories card delete VAULT_ID CARD_ID

card delete は memory delete と同様に、現在のビューからカードを除去するだけです。以前のバージョンは署名付き履歴に残ります。非公開カードや保護カードの削除には sudo が必要です。

brain カードは、検索可能なプレーンテキストの abstract(保護された秘密としては扱いません)と、保管庫をまたぐこともできるリンク { vault?, card, role?, note? } を保存します。--link の書式は [VAULT/]CARD[=ROLE][|NOTE] です。| や空白を含む場合は、shell がパイプとして扱わないよう値全体を引用符で囲みます。summary.type は brain で、link_count を含みます。一覧/グラフ/読み取りでは、権限が許す場合にリンク先のタイトルと型を解決します。存在しない、または権限のない対象は broken と表示されます(連鎖削除はしません)。検索ではタイトル、要約、リンクの役割/メモ、同じ保管庫内の公開対象の要約をインデックス化し、秘密は一切インデックス化しません。同じ保管庫内の brain リンクは card graph にも表示されます。

モバイルエディターは手書き入力と写真/画像の文字認識に対応し、すべてデバイス上で処理します。詳しくは手書きと文字認識を参照してください。

ワークフロー(workflow)カードとチェックリストテンプレート

ワークフローカードの summary.type は workflow です。順序付きの手順はカードのリビジョンに保存され、各手順の状態は pending、active、done、skipped のいずれかです。カード自体にも全体の状態があります。--step の書式は TITLE または ID:TITLE で、末尾に =CARD を付けてカードを関連付けられます。手順ごとに繰り返し指定します:

memories card workflow VAULT_ID --title Release --step "Write notes" --step Ship
memories card workflow-update VAULT_ID WORKFLOW_ID --advance
memories card workflow-update VAULT_ID WORKFLOW_ID --step STEP_ID --step-status done
memories card list --type workflow

--advance は指定した手順を進めます。指定がなければ現在 active の手順、それもなければ最初の pending の手順を進めます。

チェックリストテンプレートも workflow 型のカードで、データ内の template が true です。テンプレート作成時の --template は値を取らず、--assignee、--summary、--goal が必要です。--assignee は persona カード ID、persona ID、任意の名前を指定できます。--assignee-name は表示名で、persona カードを参照する場合は既定で persona の表示名を使います。--template TEMPLATE_ID はテンプレートのチェックリスト項目とワークフローリンクをタスクにコピーします:

memories card workflow VAULT_ID --template --assignee PERSONA_ID --summary "每周发布检查" --goal "按时发布"
memories card list --type workflow --template
memories card workflow VAULT_ID --template TEMPLATE_ID --workflow WORKFLOW_ID --archive MEMORY_ID
memories card workflow-update VAULT_ID TASK_ID --acceptance "已发布并通知" --status done

--workflow は同じ保管庫の別のワークフローカードを関連付け、--archive はメモリやカードをアーカイブします。繰り返し指定できます。workflow-update の --clear-workflow と --clear-archives は、それぞれのリンクを削除します。タスク自体に手順がない場合、--advance、--step、--step-status、--status は関連するワークフローに作用します。完了報告 --acceptance はタスク完了前であれば空でも構いません。

ペルソナ(persona)カード

ペルソナカードは Grok Bot / Muse などの製品間で性格と行動を同期するために使います。保管庫内のペルソナカードと、それに関連するアーカイブが正本です。

memories persona import VAULT_ID /path/to/xiaoya-persona
memories card list --type persona
memories card read VAULT_ID PERSONA_ID
memories card history VAULT_ID PERSONA_ID
memories card diff VAULT_ID PERSONA_ID REVISION_ID
memories persona append-event VAULT_ID PERSONA_ID --text "行为记录" --kind note
  • コア(core):話し方や演じ方を定義し、persona put / persona_card で改訂します。
  • アーカイブ(archives):契約、日記、衣装、視点などの独立した知識カードです。persona の archives からリンクし、コアに書き戻さないでください。
  • 行動イベント:append-event で events アーカイブに追記します(追記専用)。

世界の状態、アイテム、自動化、ペルソナ間のチャットも persona サブコマンドで管理します。VAULT_ID PERSONA_ID を省略すると、クライアントの既定値の persona を使います:

memories persona world-get VAULT_ID PERSONA_ID
memories persona world-set VAULT_ID PERSONA_ID --place "书房" --weather-condition "多云" --weather-temp-c 26
memories persona world-rollover VAULT_ID PERSONA_ID
memories persona thing put VAULT_ID PERSONA_ID --id notebook --name 笔记本 --count 1 --attrs '{"color":"blue"}'
memories persona thing list VAULT_ID PERSONA_ID
memories persona thing attr set VAULT_ID PERSONA_ID --id notebook --path color --value '"red"'
memories persona dice-roll VAULT_ID PERSONA_ID --sides 6
memories persona schedule-list VAULT_ID PERSONA_ID
memories persona automation list VAULT_ID PERSONA_ID
memories persona automation trigger VAULT_ID PERSONA_ID --id morning --source manual
memories persona chat send VAULT_ID PERSONA_A PERSONA_B --text "你好"
memories persona chat history VAULT_ID PERSONA_A --with PERSONA_B --limit 20
  • 世界の状態:world-set で場所、姿勢、衣装、アイテム数、天気、サイコロ、ルーレット、予定などを更新します。world-rollover は日付が変わったときに新しい記録日を明示的に開始し、meals、orders_done、短い look の要約、counters_today など当日の項目だけを消去して累計を保持します。
  • アイテム(things):thing put/get/list/delete/image で任意のアイテムを管理し、thing attr get/set/delete でドット区切りパスまたは JSON Pointer を使って個々の属性を読み書きします。attrs は自由形式の JSON です。
  • 自動化:automation put/list/run/trigger/delete で世界の状態に格納される hook を管理します。タイムゾーンは persona の timezone を使います。送信 webhook_out は許可リストと完全一致する URL にだけ送信できます。既定の空リストは送信 POST をすべてブロックします。automation webhook-allow --add URL / --remove URL で管理します。webhook トークンは応答に返さず、webhook_token_set だけを表示します。
  • チャット:同じ保管庫の 2 枚の persona カード間のメッセージです。送信時に双方の chat_message 自動化 hook を呼び出します(ペイロードにメッセージ本文は含みません)。chat list で会話を確認します。history を読んでも既読にはならず、chat mark-read が必要です。

詳しくは英語のペルソナカードガイドを参照してください。

通常カードを作成する際も --link TARGET_ID=RELATION を繰り返し指定できます。この関係は同じ保管庫のカードを参照する必要があります。グラフでは削除済み、競合、未認可のノードと、それらにつながる辺を省略します。--include-private には sudo が必要です。

プライベートファイル:

memories sudo
memories file import VAULT_ID document.pdf
memories file export VAULT_ID FILE_ID exported.pdf
memories file history VAULT_ID FILE_ID
memories file diff VAULT_ID FILE_ID FROM_REVISION

file import は --title と --id、file export は --revision を使えます。file history はファイルの署名付きリビジョンを一覧表示し、file diff はタイトル、メタデータ、長さだけを比較してバイナリ本文は出力しません。

file exec で管理対象の設定をローカルプログラムに渡します。コマンド引数の {file} は一時ファイルの絶対パスに置き換えられます:

memories sudo
memories file import VAULT_ID ./Caddyfile
# 将返回的文件 ID 填入 FILE_ID;这里使用 Caddy 2 的 Caddyfile 格式。
memories file exec VAULT_ID FILE_ID -- caddy run --config "{file}" --adapter caddyfile

権限は file export と同じで、ロック解除、保管庫へのアクセス権、同じ端末での memories sudo が必要です。 -- の前に --revision REVISION を付けると過去バージョンを使えます。リモートまたはホスト型の daemon から読み取る場合でも、 プログラムは CLI のローカルマシン上で現在のユーザーとして実行します。コマンドは Shell を介さず直接プログラムを起動し、作業ディレクトリ、 環境変数、標準入出力、終了コードを維持します。5 分の実行上限はなく、成功を示す JSON 応答も出力しません。

一時ディレクトリとファイルには現在のユーザーだけがアクセスできます(Unix 権限は 0700/0600、Windows はユーザー ACL)。 プログラムはフォアグラウンドで実行してください。一時ファイルは子プロセス終了まで保持され、起動失敗時にも削除されます。Windows の Ctrl+C/Ctrl+Break と Unix の SIGINT/SIGTERM/SIGHUP は終了時のクリーンアップを開始し、最長 10 秒待ってから 直接の子プロセスを終了します。Unix シグナルは子プロセスに転送し、Windows のコンソールイベントは同じコンソールのプロセスが受信します。

実行中の設定は平文で、プログラムやプラグインはそれを読み取り、出力できます。出力はマスクされません。保管庫のロックや認可の取り消しでは、 渡したコピーを回収したりプログラムを停止したりできません。Memories の強制終了、停電、Windows コンソールを閉じる操作によって、 一時ファイルが残る可能性があります。削除は安全な消去ではなく、親から独立したバックグラウンドの子孫プロセスも管理しません。各実行では、 config という名前の固定スナップショット 1 つだけを使い、自動更新、reload、テンプレート展開、関連ファイルのインポートは行いません。相対パスは 対象プログラム自身の規則で解釈します。関連する設定や証明書には絶対パスを推奨し、必要に応じて設定形式を明示してください。

一覧や検索が返す短い ID はそのまま使ってください。長い UUID、完全なリビジョンハッシュ、接頭辞付き ID は拒否します。入力が曖昧な場合はコマンドが失敗するため、一覧や検索をやり直してください。

Python をローカルだけに記録する:

memories local-python
memories local-python --program /path/to/python

選んだインタープリターを隔離モードで実行し、バージョンと実行ファイルのディレクトリを記録します。環境変数は収集しません。結果は local_only の付いた「このデバイス」保管庫に書き込みます。

検索と引用付き回答

まずデーモンに [rag] を含む同じ設定を使わせます。UTF-8 テキストまたは Markdown をインポートすると通常の知識カードを作成し、推定チャンク数を返します:

memories rag ingest VAULT_ID notes.md --title "研究笔记" --source "本地文件"
memories memory search VAULT_ID "中文 关键词"
memories rag search VAULT_ID "关键词" --mode bm25 --match-mode all

rag search と rag ask のオプション:

オプション 値
--mode bm25、vector、hybrid。検索と質問応答の既定値はいずれも hybrid
--match-mode any、all、phrase。既定は any
--limit 1 から 100、既定は 10
--no-rerank 任意の結果再ランキングをスキップ
--cards-only 知識カードだけを検索

組み込みの EmbeddingGemma の重みをインストールし、メモリ内のベクトルインデックスを構築します:

memories rag model-install
memories rag index VAULT_ID
memories rag status VAULT_ID
memories rag search VAULT_ID "这段文档在说什么" --mode vector
memories rag search VAULT_ID "找出证据" --mode hybrid --limit 8
memories rag ask VAULT_ID "根据证据概括"

model-install は暗号化保管庫を初期化しません。重みの既定のインストール先は選択したデータディレクトリ内の models/embeddinggemma です。ローカル推論は Memories プロセス内で実行し、Ollama は不要です。ベクトル検索とハイブリッド検索では、インデックスが未完成でも必要に応じて埋め込みを計算します。

rag ask には設定内の生成エンドポイントが必要です。字句検索だけなら --mode bm25 を使いますが、質問応答を呼ぶ場合には生成エンドポイントが必須です。証拠がなければ生成サービスを呼ばず、結果の insufficient_evidence が真になります。回答内の [S1] は今回の結果だけで使う引用ラベルです。原文を開くには結果のアセット id を使い、チャンクハッシュをアセット ID として使わないでください:

memories memory read VAULT_ID ASSET_ID

PDF、DOCX、バイナリファイルからテキストは自動抽出しません。先に UTF-8 テキストに変換してインポートしてください。秘密にすべきテキストを通常カードとしてインポートしないでください。モデル設定の変更後はデーモンを再起動します。

リモートの埋め込み、生成、再ランキングは、設定の [rag.embedding]、[rag.generation]、[rag.rerank] に記述します。API キーは api_key_env = "GEMINI_API_KEY" のように環境変数名だけを指定し、値はデーモンの環境に置きます。[rag.embedding] を省略すると埋め込みはローカルモデルのままです。Gemini Embedding はオンライン API であり、オフラインの EmbeddingGemma とは異なります。

認証情報と保護カードの取り込みと使用

先に同じ端末で memories sudo を実行します。

非表示入力で認証情報を追加するか、既存ファイルからインポートします。インポートで元ファイルは削除しません:

memories credential add VAULT_ID "API 令牌"
memories credential import VAULT_ID "SSH 身份" existing-private-key

取り込みコマンド memories catch は memories credential catch と同じです。入力元を指定しないと非表示入力を求めます:

memories catch VAULT_ID "数据库密码"

パイプから読み取るには --stdin を付けます。--regex は一意の一致を抽出します。キャプチャグループが 1 つならそのグループ、なければ一致全体を保存します。--json-pointer は JSON 文字列を選択します。両者は同時に使えません:

secret-tool | memories catch VAULT_ID "数据库密码" --stdin --regex "password=([^\r\n]+)"
memories catch VAULT_ID "API 令牌" --stdin --json-pointer /token < response.json
memories catch VAULT_ID "API 令牌" --exec secret-tool --json-pointer /token -- issue --format json

--exec PROGRAM はプログラムを直接起動して標準出力を取り込み、子プロセスの標準入力を閉じて標準エラーを破棄します。-- の後はプログラム引数です。引数、正規表現、タイトルに本物の秘密を入れないでください。--timeout は 1 から 300 秒で、既定は 30 秒です。パイプの標準入力は EOF まで待ち続け、タイムアウトしません。入力上限は 1 MiB です。成功結果は認証情報 ID だけを含みます。既存の認証情報を置き換えるには --id CREDENTIAL_ID を使います。

保管庫内で鍵を生成します。秘密鍵は表示しません:

memories credential generate VAULT_ID "笔记本 SSH"
memories credential generate VAULT_ID "笔记本 SSH" --algorithm rsa --bits 4096
memories credential generate VAULT_ID "数据库 CA" --kind tls-ca --algorithm rsa --subject memories-ca
memories credential generate VAULT_ID "数据库服务器" --kind tls --ca CA_ID --algorithm rsa --name db.example.test
memories credential public VAULT_ID KEY_ID

--kind は ssh、tls-ca、tls、--algorithm は ed25519、rsa、ecdsa を指定できます。credential public は SSH 公開鍵または TLS 証明書だけを返します。

絶対パスで指定したプログラムに認証情報を渡します。既定では標準入力に注入し、--env で環境変数 1 つを明示的に許可します。プログラムの SHA-256 を対話的に確認するか、事前に --approve-digest で承認する必要があります。子プロセスの両方の出力を抑制します:

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

実行バインディングは認証情報をプログラムのフィンガープリントに固定し、コーディングエージェントがユーザーの端末の sudo なしで使用できるようにします。credential bind gh には sudo と USE の入力による確認が必要です。PATH から gh を探して SHA-256 を記録し、バインディングはローカルの暗号化状態だけに保存します。同期せず、バックアップ復元時にも消去します。--hours 時間後に失効し(既定 8、最大 720)、保管庫のロック解除中だけ使えます。その後 run --binding gh -- 参数 は現在のディレクトリでプログラムを起動し、指定した環境変数に認証情報を入れます。出力はそのまま返しますが、出現する認証情報はすべて [REDACTED] に置き換えます(--suppress-output を付けると出力を破棄)。プログラム自身の終了コードで終了します:

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

--deny 词 は、オプション以外の引数にその語が指定順で含まれるコマンドを拒否します。--ask 词 は実行前に hook が確認を求めるようにします。gh では既定で auth、alias、extension(別名 extensions、ext も)を拒否し、pr merge、repo delete、release delete の確認を求めます。--no-default-rules で無効にできます。ルールは入力された語だけを照合し、以前 gh alias set で定義した別名は展開しません。バインディングの失効までは、ユーザーの ID で動くどのプログラムも認証情報を使ってこのプログラムを実行できますが、memories 経由で認証情報自体を読むことはできません。プログラム自身、その拡張機能、子プロセスは読めるため、信頼できるプログラムだけをバインドしてください。--credential と --env のないバインディングはルールだけを適用します。

hook install --commands gh は項目を表示して APPROVE の入力を求めた後、Claude Code のユーザー設定に PreToolUse hook を書き込みます。Claude Code が Bash または PowerShell で gh ... を実行するとき、hook はそのコマンド語を memories run --binding gh -- に書き換え、残りのコマンドラインは維持します。$( )、バッククォート、sh -c、xargs などのラッパー内で実行する gh は理由を示して拒否します。heredoc の本文や、引数としてのコマンド置換(例:--body "$(cat <<'EOF' ... EOF)")には影響しません。パイプやリダイレクトの入力は --stdin で転送します(最大 16 MiB)。プログラムはデーモンの環境で動くため、NAME=value gh ... のような接頭辞は拒否します。プログラム自身の引数を使ってください。実行時に展開する引数($var、ワイルドカード)はルールで検査できず、hook が先に確認を求めます。コマンド全体がバインドされたプログラムの呼び出しだけの場合に限り、hook が直接許可します。他のプログラムの実行やファイル書き込みも含む場合は、Claude Code の通常の確認を使います。バインドされたプログラムが残したバックグラウンドプロセスが出力パイプを占有し続ける場合、そのパイプを読むスレッド数には上限があり、超えると新しいバインディング実行を拒否します。Claude Code 自身の deny / ask 権限ルールも有効ですが、書き換え後のコマンドが見える場合があるため、機密性の高いサブコマンドはバインディングルールに記述してください。バインドされたプログラムはサービスロックの外で動くため、長時間の gh run watch で他のクライアントをブロックしませんが、5 分の上限は変わりません。

認証情報を使用できるホストを制限し、デーモンからステータスコードだけを返す HTTPS リクエストを送信します:

memories credential allow-host VAULT_ID CREDENTIAL_ID api.example.com
memories credential http VAULT_ID CREDENTIAL_ID https://api.example.com/status

credential http は HTTPS の 443 ポートだけを使い、リダイレクトを追わず、プロキシも引き継ぎません。

保護カードも秘密を非表示入力から読み取り、引数には入れません:

memories card account VAULT_ID --title "示例邮箱" --email user@example.test --smtp smtp.example.test
memories card env VAULT_ID ./app.env --title "应用配置"
memories card token VAULT_ID --title "API 会话" --host api.example.test
memories card token VAULT_ID --title "浏览器会话" --host app.example.test --cookie
memories card request VAULT_ID TOKEN_CARD_ID https://api.example.test/session
memories card otp VAULT_ID --title "示例 OTP" --issuer Example --account user@example.test
memories card otp VAULT_ID --title "示例 HOTP" --issuer Example --account user@example.test --hotp --counter 0
memories card otp-import VAULT_ID --title "导入的 OTP" "otpauth://totp/Example:user@example.test?secret=GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ&issuer=Example"
memories card otp-import VAULT_ID --image ./ga-export.png --title "GA import"
memories card otp-code VAULT_ID OTP_CARD_ID

アカウントの SMTP は既定で SSL ポート 465 を使い、--port と --no-ssl で調整できます。設定を記録するだけでメールは送信しません。--cookie はトークンカードを Cookie ヘッダーとして保存します。card request の --method は既定で GET、GET または POST だけを受け付けます。OTP は --algorithm sha1|sha256|sha512、--digits、--period を使えます。--hotp は HOTP に切り替えます。--counter は初期カウンターで、省略時は 0 です。TOTP はカウンターを無視します。otp-import は引数の URI を受け付け、URI も --image もなければ標準入力から 1 行読み取ります。単一アカウントには otpauth:// を使います。URI 内の totp または hotp は自動認識し、型がなければ counter を含むものは HOTP、それ以外は TOTP です。Google Authenticator の移行には otpauth-migration://offline?data=... を使い、複数カードを一度に作成する場合があります。--image PATH は画像内の最初の otpauth:// または otpauth-migration:// QR コードをデコードし、URI と併用できません。--title は省略可能で、カード 1 枚ならタイトル、複数ならタイトルの接頭辞になります。省略時は「発行者 / アカウント」です。--id は 1 枚のカードだけを置き換えられ、複数アカウントを含む移行インポートには使えません。otp-code は短期間の認証コードを返し、シードは返しません。HOTP の結果には次のカウンターを含みます。上の secret は公開 RFC テストベクトルです。本物のシードに置き換えないでください。

既存の保護カードを置き換えるには --id CARD_ID を付けます。認証情報 ID とカードリンクは保持されます。指定しない --alias / --notes / --category は元の値を維持し、空文字列を渡すと消去できます。通常の card put では保護された参照を置き換えられません。OTP のタイトルは issuer / account のままにし、表示名は別名やメモに別途保存できます。

文書本文中に完全一致で現れる秘密を保護します。ラベルは 1 から 64 文字の ASCII 英字、数字、アンダースコア、ハイフンで構成し、その文書で未使用のものを指定します:

memories memory protect-secret VAULT_ID DOCUMENT_ID API_KEY
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

protect-secret は秘密の入力を求めます。文書の参照をコピーするときは --label が必須です。コピー結果は "copied": true だけです。Windows はシステムクリップボード、macOS は pbcopy、Linux は Wayland の wl-copy または X11 の xclip が必要です。保護されたアカウント、トークン、環境、OTP カードも直接コピーできます。OTP でコピーするのはシードであり、ワンタイムコードではありません。

モバイルには「保護カード」「.env をインポート」「ログイン情報をインポート(CSV)」があり、otpauth:// URI を貼り付けて TOTP や HOTP をインポートすることもできます。文書メニューの「データ内の鍵を置き換える」と「鍵をコピー」は上の操作に対応します。OTP の「OTP を生成」はワンタイムコードを生成します。モバイルにはカメラによる OTP QR コードのインポートはありません。OTP 画像や移行 URI には上の CLI を使ってください。ホスト型デバイスのペアリングでのスキャンは別の経路です。デバイス間のエンドツーエンド秘密同期を参照してください。

Web サイトのログイン情報のインポートとエクスポート

Web サイトのログインは login 保護カードに保存します(サイトアドレスとユーザー名は公開、パスワードは独立した認証情報)。通常はまとめてインポート/エクスポートします。どちらにも memories sudo と書き込み可能な役割が必要です:

memories sudo
# 浏览器 CSV(Chrome/Edge/Brave,或 Firefox 的 about:logins);自动识别表头。
memories login import VAULT_ID --from chrome passwords.csv
memories login import VAULT_ID --from firefox firefox-logins.csv --with-notes
# 直接读取 Firefox 配置文件(现代 key4.db,会提示输入主密码,没有则留空)。
memories login import VAULT_ID --from firefox-profile "/路径/Profiles/xxxx.default"
# Windows 凭据管理器的通用凭据(仅 Windows)。
memories login import VAULT_ID --from windows --filter github
memories login import VAULT_ID --from windows --all
# 之前导出的加密文件。
memories login import VAULT_ID --from memories logins.mlx

# 导出:便携加密文件(推荐)或浏览器兼容的 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 に限定され、先に警告します。所有者だけが読める未作成のファイルに書き込み、= + - @ で始まるセルには数式インジェクション対策を適用します。使用後は削除してください。このデバイス専用の保管庫はエクスポートできません。

リモートセッションとループバックプロキシ

先に credential allow-host で対象ホストを許可します。SSH にはプローブで取得したホスト鍵のフィンガープリントも必要で、信頼できる経路で照合してください:

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 sessions
memories remote run SESSION_ID -- uname -a
memories remote propose SESSION_ID -- uname -a
memories remote approve TICKET_ID
memories remote exec TICKET_ID
memories remote close SESSION_ID

remote run は提案、対話的承認、実行を一度に行います。スクリプトで分ける必要がある場合は、remote propose でキューに入れてチケットを取得し、remote approve で承認します(sudo が必要で、チケットは 1 回だけ使用可能)。その後、同じ権限昇格済みの呼び出し元が remote exec で実行します。

データベースは既定で TLS を有効にし、ホスト名を検証します。--tls-ca CA_ID は保管庫内の PEM CA を追加し、--no-tls は TLS を明示的に無効にします。--database は MySQL/PostgreSQL のデータベース名、または Redis の論理データベース番号です:

memories remote open mysql --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 redis --vault VAULT_ID --credential CREDENTIAL_ID --host redis.example.test --user default
memories remote run SESSION_ID --op query -- SELECT 1

remote open のプロトコルは ssh、ftp、tcp、mysql、redis、postgres です。FTP はファイル操作、SSH とデータベースセッションは exec または query を使います。各命令はまず提案し、その後承認します。remote run は提案、対話的承認、実行を連続して行います。承認語は APPROVE です。MCP はリモートセッションの開始や承認を行えません。

ループバックプロキシは 127.0.0.1 で待ち受けます。返される command はデーモンのマシンの端末で実行でき、保存されたパスワードや秘密鍵を含みません:

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

プロキシのプロトコルは ssh、mysql、redis、postgres だけです。--listen-port は任意で、0 はシステムがポートを選ぶことを示します。--certificate、--tls-ca、--tls、--no-tls も指定できます。このローカルポートに接続できるどのプロセスも、認可済みのリモートアカウントを使えます。ロック、保管庫のアイドルロック、proxy stop、デーモン終了は待ち受けと既存接続を閉じます。プロキシは最長 30 分、最大 4 つで、各プロキシの接続は最大 16 個です。MCP はプロキシの開始、一覧表示、停止を行えません。

暗号処理ジョブの実行

メールと署名のツールは別途インストールします。ID とパスワードは 2 つの認証情報に分けてインポートします。--credential、--password_id、--key-password はすべて認証情報 ID で、秘密そのものではありません。--password と --password-id は --password_id の別名です。

まず --dry-run を付けます。入力とツールを読み取り、計画と approval の要約を表示します。デーモンは不要で、出力ファイルも書きません。確認後は同じ端末で sudo を実行し、--dry-run を外した同じコマンドを実行します。非対話実行では代わりに --approve-digest DIGEST を付けます。出力先は既存ディレクトリ内の新しいパスでなければなりません。

S/MIME は OpenSSL を使います。PKCS#12 の ID には --pkcs12 を付けます。暗号化は受信者の公開鍵だけを使うため、ID の認証情報は渡しません:

memories crypto smime-sign --vault VAULT_ID --input message.eml --output signed.eml --credential IDENTITY_ID --password_id PASSWORD_ID --pkcs12 --tool openssl=/path/to/openssl --dry-run
memories crypto smime-encrypt --vault VAULT_ID --input signed.eml --output encrypted.eml --recipient recipient.pem --tool openssl=/path/to/openssl --dry-run
memories crypto smime-decrypt --vault VAULT_ID --input encrypted.eml --output decrypted.eml --credential IDENTITY_ID --password_id PASSWORD_ID --pkcs12 --tool openssl=/path/to/openssl --dry-run

OpenPGP には対となる gpg と gpgconf が必要です。--identity は完全なフィンガープリントです。Git for Windows の MSYS 版 GnuPG には --msys-gpg を付けます:

memories crypto pgp-sign --vault VAULT_ID --input message.eml --output message.sig.asc --credential KEY_ID --password_id PASSWORD_ID --identity FULL_FINGERPRINT --tool gpg=/path/to/gpg --tool gpgconf=/path/to/gpgconf --dry-run
memories crypto pgp-encrypt --vault VAULT_ID --input message.eml --output message.eml.asc --recipient recipient.asc --identity FULL_FINGERPRINT --tool gpg=/path/to/gpg --tool gpgconf=/path/to/gpgconf --dry-run
memories crypto pgp-decrypt --vault VAULT_ID --input message.eml.asc --output decrypted.eml --credential KEY_ID --password_id PASSWORD_ID --tool gpg=/path/to/gpg --tool gpgconf=/path/to/gpgconf --dry-run

Android の署名はインストールパッケージを生成せず、アプリストアにも接続しません。apksigner のパスは SDK の lib/apksigner.jar です:

memories crypto android-apk --vault VAULT_ID --input unsigned.apk --output signed.apk --credential KEYSTORE_ID --password_id STORE_PASSWORD_ID --identity release --tool java=/jdk/bin/java --tool zipalign=/sdk/build-tools/35.0.0/zipalign --tool apksigner=/sdk/build-tools/35.0.0/lib/apksigner.jar --dry-run
memories crypto android-bundle --vault VAULT_ID --input unsigned.aab --output signed.aab --credential KEYSTORE_ID --password_id STORE_PASSWORD_ID --identity release --tool jarsigner=/jdk/bin/jarsigner --dry-run

鍵のパスフレーズとキーストアのパスワードが異なる場合は --key-password KEY_PASSWORD_ID を使います。

iOS の署名は macOS だけで利用できます。入力は一致する embedded.mobileprovision をすでに含む .app です:

memories crypto ios-app --vault VAULT_ID --input Unsigned.app --output Signed.app --credential APPLE_P12_ID --password_id PASSWORD_ID --identity CERTIFICATE_SHA1 --entitlements App.entitlements --tool openssl=/path/to/openssl --tool security=/usr/bin/security --tool codesign=/usr/bin/codesign --dry-run

これらのコマンドはメール送信やアプリ公開を行いません。MCP とモバイルでは実行できません。

デバイスのペアリング、同期、バックアップ

デバイスのペアリングは同じ人の新しいデバイスを既存の ID に参加させます。メンバー招待は別の人に特定の保管庫の役割を付与します。どちらもリクエストと承認ファイルを使いますが、互換ではありません。

新しいデバイスは自分のパスワードで init を行い、参加前に保管庫が存在してはいけません。その後:

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
memories device list

リクエストは 10 分後に失効し、1 回だけ使用できます。

別の人に保管庫のメンバー資格を承認する:

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 member transfer VAULT_ID USER_PUBLIC_KEY
memories device revoke VAULT_ID DEVICE_PUBLIC_KEY

招待承認の --role と member role の役割引数には admin、editor、reader を使い、操作者の権限による制限を受けます。所有者は管理者を管理し、管理者は通常の読者と編集者だけを管理できます。編集者は書き込み、読者は読み取りと使用が可能です。CLI は owner も受け付けますが、保管庫ポリシーは所有者がちょうど 1 人であることを求めるため、招待や通常の役割変更で所有者を追加できません。所有権を譲渡するには現在の所有者が memories member transfer VAULT_ID USER_PUBLIC_KEY を実行します。対象は既存メンバーで、元の所有者は管理者になります。デバイスの取り消しは関連する各保管庫で実行してください。メンバーの削除で相手がすでに持つコピーは消去されません。

リレーを使わないファイル交換:

memories sync export VAULT_ID RECIPIENT_DEVICE_PUBLIC_KEY packet.json
memories sync import packet.json

オンライン転送では、まず TLS リバースプロキシの後ろで memories-relay を実行し、sync room でルーム番号を生成します。受信側が先に待機し、送信側が送信します:

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

リモートリレーは wss:// だけを受け付けます。ws:// はローカルの開発用アドレスだけで使えます。URL にユーザー名やパスワードを含めてはいけません。設定ファイルの relay_url を既定のアドレスにでき、コマンドの --relay が優先します。--slot の既定値は送信が a、受信が b です。送信成功はパケットをリレーに渡したことだけを示し、相手がインポートしたことは示しません。リレーはオフラインデバイス向けにキューを保持しません。sync export/import とリレーの sync send/receive はどちらも明示的な保管庫全体の転送であり、クラウドオブジェクト同期やリモート RPC ではありません。

隔離領域の表示、旧エポックのリビジョンを現在のエポックに再署名する操作、双方の所有者 ID が有効な場合にローカルのポリシー分岐を保持する操作:

memories sync quarantine VAULT_ID
memories sync reapply VAULT_ID REVISION
memories sync resolve-policy VAULT_ID packet.json --keep-local

クラウドアカウントには自分で登録した OAuth アプリを使います。ログイン前に保管庫を解除し、同じ端末で 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 sync onedrive
memories cloud logout onedrive

cloud login は --no-browser と --port を使えます。0 はローカルのコールバックポートを自動選択します。ステータスはトークンを表示しません。ログアウトはローカルの認可だけを削除します。cloud sync はトークンを更新し、接続済み OneDrive または Google Drive のアプリフォルダーを通して不変の暗号文をアップロード/ダウンロードします。モバイルにはクラウド接続とフォアグラウンド同期の操作があります。実際の OneDrive と Google Drive アカウントでのエンドツーエンド検証は未完了です。モバイルのバックグラウンド同期は無効です。データベースディレクトリをクラウドドライブクライアントの同期フォルダーに入れないでください。

監査とオフラインバックアップ:

memories audit VAULT_ID --verify
memories sudo
memories audit VAULT_ID
memories backup offline-backup.memories

復元には新しいデータディレクトリを使い、そのディレクトリでデーモンを起動する必要があります:

memories --home NEW_DIRECTORY restore offline-backup.memories --name replacement
memories --home NEW_DIRECTORY sudo
memories --home NEW_DIRECTORY archive list
memories --home NEW_DIRECTORY archive history VAULT_ID
memories --home NEW_DIRECTORY archive read VAULT_ID REVISION
memories --home NEW_DIRECTORY archive audit VAULT_ID

復元結果は、現在のアセットと競合 head を含む独立した保管庫です。元のバージョン、削除マーカー、署名付き監査は読み取り専用アーカイブに残ります。過去の認証情報の値は通常インターフェースでもアーカイブインターフェースでも表示できません。デバイス専用保管庫とクラウドトークンはバックアップに含みません。

デスクトップのステータス画面を開く

Windows の配布パッケージでは memories.exe と同じ場所の memories-tray.exe をダブルクリックします。macOS ではパッケージ内の Memories.app を開きます。端末では:

memories tray
memories webui
memories --home /path/to/development-home webui --no-open --port 0
memories webui --open
memories-tray --home /path/to/development-home --no-open

tray はネイティブのトレイまたはメニューバーとステータスページを開きます。webui はブラウザーのダッシュボードだけを開き、フォアグラウンドで動き続けます。--port 0 は空いているループバックポートを選びます。--no-open はブラウザーを自動で開きません。--open は設定で自動起動を無効にしていても開きます。--config と --lang はどちらのコマンドにも memories-tray にも使えます。

トレイはオフライン、初期化が必要、ロック中、ロック解除済みを表示し、デーモンを起動できます。初期化、ロック解除、権限昇格は行いません。ステータスページは約 2 秒ごとに更新し、保管庫数、プロキシとリモートセッションの数、設定済みクラウドプロバイダーの種類、アップロード/ダウンロード/同期待ちの件数を表示します。本文、保管庫名、認証情報、アカウント、パス、トークンは表示しません。トレイを終了するかフォアグラウンドの webui を中断すると、そのステータスページだけが停止し、実行中のデーモンは停止しません。

Linux では memories webui を使います。Linux にネイティブのトレイはなく、Linux 配布パッケージにもトレイランチャーは含みません。

MCP の認可と AI skill のインストール

本節ではまず通常の MCP を説明します。保管庫、期間、操作範囲を指定して AI クライアントに能力を付与し、端末の sudo は引き継ぎません。認可はファイルに書き込み、表示しません。ファイル自体が bearer 認証情報なので保護が必要です。既定は読み取り専用で、--scope read_write は通常データの読み書き、--scope read_write_delete は削除も許可します。--write は read_write の互換用の省略形です。期間は --minutes で指定し、例では 15 分です:

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

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 で、さらに英語のペルソナカードガイドに記載された persona ツールがあります。workflow_card は手順ワークフロー、チェックリストテンプレート、テンプレートからコピーしたタスクを作成し、workflow_update はチェックリスト項目の変更や手順の進行を行います。どちらも書き込み権限が必要です。workflow_read と workflow_list は読み取り権限だけが必要です。各呼び出しには認可済みの保管庫 ID を含めます。memory_retrieve は既定でローカル BM25 を使い、vector と hybrid はデーモンに設定された埋め込みプロバイダーを使います。memory_ask は生成エンドポイントを設定すると回答を生成し、検索の証拠に含まれない引用を拒否します。

通常の MCP には、非公開メモリ、ファイル、認証情報、プロセス実行、リモートセッション、プロキシ、暗号処理ジョブ、メンバー管理、デスクトップステータスは含みません。--scope allow_all を選んでもこの境界は越えません。認可の発行、一覧表示、取り消し、権限申請は別の MCP ツールであり、それらも sudo を引き継ぎません。ロックすると認可は一時的に使用不能になり、有効期限内ならロック解除後に復活します。プロトコルバージョンは 2024-11-05 です。秘密への参照を持つカードは現在の card_write では更新できません。このツールは参照マッピングを保持しないため、CLI またはモバイルで編集してください。

無人で読み取る必要がある場合は、別途無人 CLI/MCPを参照してください。この経路では鍵保管バックエンドを明示的に選び、ENABLE を入力してパスワード認可を完了し、保管庫の範囲内のクライアントファイルを作成する必要があります。使うのは mcp serve-unattended --client-file PATH で、通常の mcp serve ではありません。ローカル限定の読み取り専用ですが、非公開データ、元のファイル、履歴、明示的に要求した認証情報の平文を含み、sudo は引き継ぎません。AI クライアントとそのログが秘密を保持する場合があります。Base64 は暗号化ではありません。手動ロックは、パスワード認可付きの unattended resume までアクセスを継続してブロックします。リモート転送、モバイル、Center 管理のストレージでは使えません。

memories unattended enable --backend windows-dpapi
memories unattended mint --vault VAULT_ID --client-file /private/dir/client.json
memories unattended list VAULT_ID --client-file /private/dir/client.json
memories unattended history VAULT_ID ASSET_ID --client-file /private/dir/client.json
memories unattended read VAULT_ID ASSET_ID --client-file /private/dir/client.json
memories unattended credential-bytes VAULT_ID CREDENTIAL_ID --client-file /private/dir/client.json
memories mcp serve-unattended --client-file /private/dir/client.json
memories unattended status
memories unattended resume
memories unattended revoke GRANT_ID
memories unattended disable

バックエンドは windows-dpapi、macos-keychain、linux-secret-service、または明示的な選択が必要で保護の弱い owner-file を指定できます。クライアントファイルのディレクトリは既存で、所有者だけがアクセスできる必要があります。mint は既存ファイルを上書きしません。read と credential-bytes は base64url のバイト列を分割して返します。--offset 0 から開始し、毎回前回の応答の next を新しい --offset に使い、--revision で最初に返されたリビジョンを固定します。next が null になるまで続け、デコードしたバイトを順に連結します。list / history は 1 ページ最大 100 件です。status、resume、revoke、disable には、ロック解除済みで sudo 済みの端末が必要です。

プログラムに同梱された skill をインストールします。インストール自体は保管庫を開かず、MCP も設定しません:

memories inject all --dry-run
memories inject all
memories inject codex
memories inject opencode claude
memories inject all --project /path/to/project

all は Codex、OpenCode、Claude Code を含みます。claude-code は claude の別名です。--project は既存のプロジェクトディレクトリにインストールします。CLI の更新後は、--force で以前インストールした異なる内容を置き換えます:

memories inject all --force

--force は SKILL.md だけを置き換えます。同じ内容は変更しません。skill ファイルやディレクトリへのリンクは拒否します。

Memories の操作方法を説明する AGENTS.md、または Cursor/Codex 形式の skill ディレクトリをプロジェクト用に生成できます。任意で persona カードのコア概要を埋め込めます。agents は skill の別名です:

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 を使います。persona を含む場合はデーモン経由でカードを読むため、先にロック解除が必要です。含まない場合はオフライン生成し、デーモンは不要です。--force は内容の異なる既存ファイルを置き換え、--dry-run はプレビューだけで書き込みません。

クライアントの既定値

秘密を含まないコマンドラインの既定値は、データディレクトリ(--home / MEMORIES_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 persona コマンドで保管庫とアセットを省略した場合に使う VAULT/ASSET
vault list / card list と、引数が 1 つの persona コマンドの既定の保管庫
type 一覧コマンドの既定の --type フィルター
category 一覧コマンドの既定の --category フィルター
daemon 既定の --daemon URL
daemon_relay 既定の --daemon-relay URL
daemon_room 既定の --daemon-room

明示的な引数が常に優先します。保管庫とアセットを受け取る persona サブコマンド(world-get、thing、append-event など)は省略した位置引数に既定値を使います。persona import では引き続き skill パスの前に保管庫 ID を明記する必要があります。

認可センター(Center)

Center は外部の認可制御面で、各端末に登録チケットと能力チケットを配布します。設定ファイルに [[centers]] が 1 つでも記載されると、その端末は Center 管理になります。ローカルの init / restore による初期設定とローカル MCP 認可は禁止され、Center 発行チケットを使います。保管庫のロック解除は引き続きローカルでデバイスパスワードを使って行い、Center は保管庫の鍵や秘密の平文を取得できません。待ち受けトークン、Center の署名鍵、管理トークンは TOML に記載しません。

# 管理员:生成写入配置的公钥并签发票据(或使用 memories-center HTTP 服务)
export MEMORIES_CENTER_SECRET="…"   # 32 字节,URL 安全 base64 或 64 位十六进制
memories center public-key
memories center issue-bootstrap --center corp --device-name laptop
memories center issue-grant --center corp --vault VAULT_ID --scope read --minutes 15

# 终端(守护进程已按含 centers 的配置运行)
memories center list
memories center enroll --ticket "$BOOTSTRAP_TICKET"
memories sudo
memories center import-grant --ticket "$GRANT_TICKET"

認可範囲(read、write、read_write、read_write_delete、allow_all とその別名)、設定形式、脅威モデルは英語の Authorization Center を参照してください。

ホスト型保管庫(SaaS)

memories-center --data DIR(または環境変数 MEMORIES_CENTER_DATA)は Center を完全なホスト型保管庫として実行します。サーバーは運営者が保有するパスワードで Store を暗号化して保存し、デーモンと同じサービスインターフェースを再利用します。設定内の唯一の mode = "saas" エントリーはローカルデーモンを SaaS モードにし、内容の操作はその Center が制御します(トークンは MEMORIES_CENTER_TOKEN から取得)。管理者は /v1/admin/lock、/v1/admin/unlock でリモートのロック/解除、/v1/admin/members でメンバー管理を行えます。ホスト型のデータは運営者に見え、エンドツーエンド暗号化ではありません。リクエストのメタデータは DIR/requests.json、ハッシュチェーン監査は DIR/audit.jsonl に保存します。

認可チェーン

保管庫の役割は Owner、Admin、Editor、Reader です。認可を発行または委任できるのは Admin 以上だけです。発行にはロック解除済みの保管庫だけが必要で、端末の権限昇格は不要ですが、役割リクエストの承認には権限昇格が必要です。認可範囲は発行者の役割(および上位認可)を超えず、受領者の役割は発行者より上にはできません。center-admin は受領者にできません。委任の深さは最大 2 段です。範囲を省略すると既定は read で、allow_all ではありません。ローカルデーモンとホスト型 Center は、同時に最大 10000 件の有効な認可を保持できます。

権限リクエストは資格のある全承認者に配信するか、--approver で承認者を指定できます。承認または拒否はできますが、自分自身のリクエストを決定できません。承認時にトークンは返さず、申請者が 1 回受け取る必要があります。memories request claim VAULT ID、memories center request claim ID、MCP request_claim、または POST /v1/requests/{id}/claim を使います。申請者ごとの保留リクエストは保管庫あたり最大 20 件、保管庫全体では最大 200 件です(Center は HTTP 429 を返します)。保留中および承認済み未受領のリクエストは 7 日後に失効し、終了済みのリクエストは 30 日間保持します。

memories access list VAULT          # 按级别列出成员、设备、待处理与已批准未领取的请求
memories grant list VAULT
memories request create VAULT --scope read --approver MEMBER_ID
memories request approve VAULT ID
memories request claim VAULT ID

メンバーを削除すると、そのメンバーが発行した認可も連鎖的に取り消します(メンバーの世代で無効化)。認可はハッシュだけを永続保存し、監査ログはハッシュチェーンです。詳しくは英語の Authorization を参照してください。

言語の選択

モバイルのロック画面と保管庫画面には言語メニューがあります。既定ではシステムに従い、手動の選択は再起動後も保持します。

CLI の優先順位は --lang、MEMORIES_LANG、保存済み言語、次に最初の空でない LC_ALL、LC_MESSAGES、LANG です。Windows はこれらの変数がすべてない場合、OS の言語も参照します。認識できないロケールは英語にフォールバックします。zh-CN と fr_FR.UTF-8 は認識できます。

memories --lang zh --help
memories language zh
memories language
memories language system

language の後の引数は省略でき、保存済みの言語と現在有効な言語を表示します。system は選択を消去し、再びシステムに従います。保存する言語は --home ごとに分かれ、デーモンは不要です。コマンド名、オプション名、JSON フィールド、エラーコード、USE と APPROVE は翻訳しません。ユーザーの内容も翻訳しません。

リモートデーモン(HTTP/WebSocket / リレー RPC)

任意のトークン認証 HTTP/WebSocket 待ち受けと WSS リレー RPC は、同じ WebSocket バイナリ JSON フレーム(AuthFrame の後に Wire)を使い、ローカル IPC の service::Request プロトコルと一致します。 RPC はリモートホストのストレージでコマンドを実行し、呼び出し側に保管庫のコピーを作りません。コピーの交換には sync、OneDrive/Google Drive の永続クラウドオブジェクトキューを通す同期には cloud sync PROVIDER を使います。RPC または保管庫全体の転送を運ぶ場合でも、リレーはオフラインのアセット保管庫ではありません。 待ち受けトークンはフラグまたは環境変数だけで提供し、TOML には書けません。既定の平文 HTTP/WS に証明書は不要です。必要なら --tls-cert / --tls-key で HTTPS/WSS を有効にします。デスクトップデーモンはリモートのロック解除/権限昇格後にローカル IPC と同じ全機能を提供します(権限昇格の名前空間は ws:remote / relay:remote)。モバイルの Share は引き続き FFI の拒否リストに従います。詳しくは remote-daemon.md を参照してください。

リレーはペルソナ自動化 webhook も転送できます。POST /v1/persona/{room}/{vault}/{persona}/automation/trigger の本文と webhook トークンはデーモンと同じで、リレーは接続済みホストへ転送するだけで外部へ POST しません。

グローバル TLS オプション:--ca-file PATH(MEMORIES_CA_FILE)は送信 TLS クライアントに PEM CA を追加します。--insecure は証明書とホスト名の検証を省略しますが TLS は使います。開発/自己署名環境に限定し、--ca-file を優先してください。

memories daemon --listen http://127.0.0.1:7900 --listen-token "$TOKEN"
export MEMORIES_DAEMON=http://127.0.0.1:7900
export MEMORIES_DAEMON_TOKEN="$TOKEN"
memories status

モバイルのモード選択と切り替え

初回起動時にモードを選びます。モード設定のない旧版から更新した場合も選択画面を表示します。アプリは選択を記憶し、次回は対応するモードに直接入ります。

モード データの場所 利用開始
スタンドアロンモード モバイル端末内の暗号化保管庫。オフライン利用可能 保管庫を作成するか、既存の保管庫を解除
Center モード ユーザーが自前のサーバーで運用するホスト型保管庫 完全な HTTPS サービスアドレスとメンバートークンを入力し、「接続」を押す
SaaS モード https://memories.ivjn.us のホスト型保管庫 アドレスは固定。このサービスのメンバートークンを入力して接続

ここでいう Center モードは自前のホスト型サービスであり、サーバーで memories-center --data DIR を有効にする必要があります。デバイスと権限のチケットだけを発行する認可 Center とは異なります。モバイルでは config.toml の編集、mode = "saas" の設定、先にローカル保管庫を解除する操作は不要です。これらの TOML 設定はデスクトップデーモン用です。

Center のアドレスには https://center.example.com のようにサーバーのオリジンだけを入力し、/v1/rpc、クエリパラメーター、ユーザー名とパスワードは追加しないでください。ループバック以外のアドレスには HTTPS が必須です。モバイルの localhost はモバイル端末自身を指します。メンバートークンはサービス運営者が提供し、実行可能な操作は保管庫、役割、範囲、有効期限に依存します。運営者の管理トークンは、内容の読み書きにメンバートークンの代わりとして直接使用できません。

利用中の切り替え

メイン画面上部の双方向矢印が「モードを切り替え」です。ログイン前後のどちらでも使えます。ダイアログは現在のモードを示し、別のモードを選ぶと切り替えます。キャンセルすると現在のセッションを保持します。編集画面では先に保存するか退出してください。未保存の内容には確認を求めます。

操作 結果
モードの切り替え ローカル保管庫をロックし、共有を停止し、現在のホスト接続を閉じてページ内容を消去し、新モードを記憶
スタンドアロンに戻る 元の保管庫は保持され、再度ロック解除が必要
Center または SaaS に再び入る 接続情報が保存されていれば対応する接続の復元を試行
切断 現モードの保存済みトークンを削除し、アドレスは保持。他のモードの接続情報には影響しない
アプリがバックグラウンドに移る ローカルアクセスをロックし、ホストセッションと機密ページを閉じ、未保存の下書きを破棄
バックグラウンドから戻る ホストページで「保存済みセッションに再接続」を押すか、トークンを再入力して接続

切り替えでは保管庫のデータをアップロード、移動、統合、削除しません。切断してもサーバーのトークンは取り消しません。Center と SaaS のアドレスとトークンはシステムの安全なストレージに別々に保存します。旧版の接続は対応するモードだけに移行し、正式 SaaS アドレスは SaaS、その他のアドレスは Center に移行します。

各モードの機能範囲

スタンドアロンモードはローカルデータの閲覧、検索、編集、バックアップ復元、共有、クラウド接続の入り口を保持します。Center / SaaS はホスト型の知識一覧、検索、詳細、編集、作成、削除、および認可リクエストの承認とペアリング済みデバイス管理を提供します。接続後は現在の保管庫と認可範囲を確認し、「ホスト型の知識」から内容を管理できます。新規カードにはまだタグ、出典、関係を指定できません。既存の通常カードの編集はそれらの項目に対応し、その他のメタデータも保持します。通常メモリは本文エディターを使います。構造化設定、保護カード、型テンプレート、エンドツーエンドカードはここでは閲覧専用で、変更には専用エディターが必要です。

認可ページは「保留中」と「履歴」に分かれます。承認または拒否前に申請者、保管庫、範囲、期間、完全な理由を確認でき、確認操作が必要です。承認後も申請者が別途認可を受け取ります。履歴には現在の接続内の処理記録とサーバーが返す承認済みリクエストを含みますが、完全な監査ログではありません。接続失敗時はネットワーク、証明書、アドレス、メンバートークン、自前の Center でホスト型ストレージが有効かを確認してください。

モバイルのホスト型モード(Hosted Center)

検索はサーバーで実行し、非公開内容、認証情報、ファイルは含みません。キーワードを消去すると知識一覧に戻り、読み取り権限があれば一覧中の非公開カードを閲覧できます。読み取り専用アカウントには変更の入り口を表示せず、書き込み専用アカウントは直接作成できます。削除には削除権限と再確認が必要です。保存失敗時は下書きを保持し、サーバーが削除を確認してから詳細画面を閉じます。現在の保存には期待バージョンに基づくアトミックな競合検査がなく、複数人が同じカードを同時編集すると互いの最新項目を上書きする場合があります。

アプリの更新時は自前の Center も更新し、/v1/session インターフェースを提供してください。セッションが失効または取り消されたら、切断して有効なトークンで再接続してください。権限不足はサービス管理者に連絡し、サービス停止中や保管庫がロック中の場合は後で再試行してください。

Center と SaaS は FFI memories_call の hosted_* インターフェースを共用します。接続、リクエスト一覧と承認、アクセス一覧、切断、制限された hosted_rpc です。接続は hosted_status で検証し、GET /v1/session に対応します。現在の保管庫、範囲、役割、有効期限、読み書き削除能力を返し、トークンは返しません。hosted_rpc は一覧、読み取り、検索、削除、カード型、知識カード作成、フィールド、認証情報の操作に対応します。put は memory、card、credential に対応します。完全な許可リストとデバイスインターフェースはモバイルのホスト型インターフェースを参照してください。FFI が対応するすべての操作に Flutter の画面があるとは限りません。

ホスト型モードはサーバー側で読み取り可能です。Store はディスク上で暗号化しますが、運営者が解除パスワードを保有し、ホスト型の内容を読めます。アプリは「サーバー側で読み取り可能」と表示します。有効なトークンは Rust クライアントがメモリに保持し、Flutter は各モードの接続情報をシステムの安全なストレージに保存します。デバイス間の密封された秘密には独立したエンドツーエンド保護の境界があります。次節を参照してください。

デバイス間のエンドツーエンド(E2E)秘密同期

ホスト型 Center の通常内容はサーバー側で読み取れます。サーバーに見せられない秘密には、デバイスをペアリングして密封エンベロープを送信してください(X25519 暗号化、送信者の Ed25519 署名)。Center は公開鍵と暗号文だけを保存します。

ペアリングの手順: 1. PC:memories device hosted init --backend … でシステムの鍵保管にデバイス ID を生成します。 2. PC(メンバートークン):memories device hosted pair --vault V を実行します。Center はデバイスのフィンガープリント付き権限リクエストを作り、使い捨てペアリングコードと QR コード内容(Center id を含む)を返します。ペアリングコードは 5 分で失効します。端末(stderr)の QR コードも使い捨てコードを含み、モバイルでスキャンできます。stdout JSON は変わりません。有効化済みデバイスを再度ペアリングすると 409 を返し、取り消し後は同じ鍵で再ペアリングできます。 3. モバイル(管理者):ペアリングコードを入力/スキャンしてデバイスの公開鍵を取得します(1 回だけ取得でき、失敗が多いとレート制限されます)。 4. モバイルは /v1/requests/{id}/approve で承認し、モバイルの Ed25519 鍵で署名したデバイス証明(attestation)を添付します。 5. PC:memories device hosted claim --request-id ID でデバイス認可を 1 回受け取ります。トークンはシステムの鍵保管に保存し、Center はハッシュだけを保存します。 6. SAS の照合:モバイルは承認前にグループ分けした数字(例:123 456)を表示します。承認後に PC で memories device hosted sas --pairing-id P を実行すると同じ数字を表示する必要があります。異なればデバイスを取り消して再ペアリングしてください。

モバイルのスキャンでは、Memories のペアリングコードでない QR コード、Center id が現在の接続と異なるもの、デバイスのフィンガープリントが異なるものを拒否します。権限は Android CAMERA(カメラは任意の機能)、iOS NSCameraUsageDescription です。カメラ権限を拒否するとシステム設定で有効にするよう案内し、コードの手入力もできます。CLI とモバイルは Center のステータスコードを行動につながる案内に変換します(404 は期限切れ/使用済み/別 Center、409 は処理済みまたはペアリング済み、403 は権限なしまたはデバイス取消済み、422 は e2e 内容の拒否、429 はリクエスト過多)。

SAS の定義:SHA-256("memories/device-sas/v1\0" ‖ 手机公钥 ‖ "\0" ‖ 电脑公钥 ‖ "\0" ‖ pairing_id) の先頭 8 バイトをビッグエンディアン整数に変換し、10^6 で剰余を取り、ゼロ埋めした 6 桁にします。式の「手机公钥」はモバイルの公開鍵、「电脑公钥」は PC の公開鍵です。不一致は公開鍵の置き換えを示すため、直ちに取り消してください。

規則:デバイス認可はデバイスとメンバーの世代に結び付き、委任の深さは ≤ 2 です。デバイスは認可発行やリクエスト承認を行えません。メンバーの変更はデバイスを無効にし、エンベロープを削除します。e2e: true のカードはホスト型 Center で平文の秘密を拒否します。アクセス一覧にはデバイスを含みます。MCP は device_list と、明示的な意図(intent: "reveal_plaintext" と理由)を必要とする sealed_reveal を提供します。

脅威モデル:Center は密封された秘密を読めませんが、メタデータを見ることができ、エンベロープを留め置く可能性もあります。取り消してもデバイスに届いた平文は回収できません。取り消し後は元のサービスでその秘密を更新してください。

E2E の強化(P2)

  • e2e フラグは黙って取り消せない:カードが e2e: true になった後、そのフラグを除く書き込みは拒否します(422)。Owner 認可(デバイス認可ではない)だけが、秘密を一切含まない書き込みで解除できます。
  • OTP のパラメーター:密封された OTP は Base32 シード(SHA1/6 桁/30 秒)または完全な otpauth://totp/... URI にできます。sealed-get --otp はその algorithm(SHA1/SHA256/SHA512)、digits(6/8)、period(30/60)に従います。device hosted pair は端末(stderr)にペアリング QR コードを表示します。
  • 取り消し後の再暗号化:デバイスの取り消しはエンベロープを削除し、関連カードを needs_rotation にします(sealed 一覧、/v1/sealed/rotation、アクセス一覧、モバイルの再暗号化ページで確認可能)。届いた平文は回収できません。先に元のサービスで秘密を更新し、モバイルで「すべてのデバイス向けに再暗号化」を実行してください。現在承認済みのデバイスだけに送信し、フラグを消去します。
  • モバイル ID の復元:Center はモバイル ID を保存しません。初回作成時に使い捨て復元コード(32 バイトのシードと 2 バイトのチェック値の Base32、4 桁ずつのグループ)を表示します。書き留めてください。「復元コードで復元」で同じ ID を復元できます。
  • ID のローテーション:「新しいモバイル鍵に移行」は新しい ID を生成し、新旧両方の鍵で署名したローテーション記録を送信します(管理者メンバーだけが送信でき、古い鍵はすでにあるデバイスに信頼されている必要があります)。CLI は初回使用時に承認したモバイルの公開鍵を固定します(hosted-device-trust.json)。そのルートから検証済みローテーションチェーンで到達できる署名者だけを受け入れます。
  • ハードウェアストレージ:モバイルのシードは flutter_secure_storage の最も強い組み込みオプションで保存します。iOS/macOS のキーチェーンは passcode(ローカル専用、同期なし、デバイスパスワード必須)、Android は Keystore でラップし、生体認証またはデバイス認証情報を要求します。resetOnError: false を使います。制限:署名/暗号化時にはシードがアプリのメモリに入る必要があります(Secure Enclave/StrongBox は X25519/Ed25519 に非対応)。静止状態のストレージだけを保護します。
  • 透明性ログ:Center は追記専用のハッシュ連鎖デバイスログ(ペアリング、承認、ID ローテーション、取り消し)を保持します。GET /v1/devices/log で取得します。memories device hosted log --verify はチェーン、すべての署名、前回検証したチェーン先頭からログが継続しているかを検証します(hosted-device-log.json)。

モバイルの生体認証とデバイスロック

スタンドアロンモードで保管庫を解除した後、その他のメニューから「生体認証/デバイスロックで解除」を有効にできます。有効化には最初にシステム認証を 1 回通す必要があります。この安全スイッチはホスト型の承認などの機密操作にも使います。

  • Android:システムの BiometricPrompt(指紋/顔)を使い、デバイスの PIN、パターン、パスワードにもフォールバックできます。クイック解除用の保管庫パスワードは Android Keystore に結び付いた鍵で保存します。この鍵はユーザー認証を要求し(setUserAuthenticationRequired)、指紋/顔の追加や削除で自動的に無効になります(setInvalidatedByBiometricEnrollment(true))。
  • iOS:Face ID/Touch ID を使い(デバイスパスワードへのフォールバック可能)、キーチェーン項目はデバイスにパスワードが設定されている場合だけ使えます。
  • 保護される操作:保管庫の解除、認証情報の平文の表示/コピー、保護カードの使用/OTP 生成、ペアリングデバイスの承認、ホスト型リクエストの承認、密封(seal)と再密封(re-seal)。
  • 生体認証情報の変更:鍵が無効になった場合はアプリが明示的に案内し、保管庫やデータは削除しません。デバイス認証情報で認証し、保管庫パスワードを 1 回入力すると鍵を再作成できます。
  • 生体認証がない場合、またはスイッチが無効の場合:使用可能な生体認証/デバイスロックがない、またはスイッチが無効の場合は従来のパスワード手順を使います。無効化すると保存したクイック解除情報を削除します。

新しい内容の作成(モバイル)

メモリ、認証情報、ホスト型 Center の項目の新規作成は共通のエディターを使います。ファイルからインポートでき(既定のタイトルはファイル名で、変更可能)、.env などの設定内容は自動的に等幅の複数行編集に切り替わります(手動切り替えも可能)。名前は空のままでもよく、保存時にファイル名、最初の空でない行の順で推定し、それでも空の場合だけ入力を求めます。

知識カードは全画面フォームで、保存ボタンを下部に固定します。「本文を編集」は共通の本文エディターを開き、ファイルのインポート、手書き、スキャンができます。メモリと知識カードは保存成功後だけ閉じ、失敗時は再試行用に下書きを保持し、重複送信を防ぎます。インポートで既存本文を上書きする場合と、未保存の内容を残して離れる場合には確認が必要です。下書きはメモリだけに保存し、バックグラウンドでロックした後には復元しません。スタンドアロンカードとホスト型の通常カードの編集は、タグ、出典、関係、カスタム項目を保持します。ホスト型の新規作成では現在の作成インターフェースが受け付けるメタデータだけを提供します。

複数フィールドの認証情報

1 つの認証情報に、独立していていずれも空にできる複数フィールドを保存できます。ユーザー名/アカウント、パスワード、OTP(otpauth:// URI または base32 シードとパラメーター)、API Key、URL、メモ、カスタムフィールド(秘密に指定可能)です。パスワード、OTP、API Key、秘密に指定したカスタムフィールドは暗号化本文だけに保存します。ユーザー名、URL、メモ、秘密でないカスタムフィールドは直接閲覧できます。

memories credential set VAULT [ASSET] --username 我 --url https://example.com --password --otp --field 团队=core --secret-field PIN
memories credential show VAULT ASSET
memories credential get VAULT ASSET --field username
memories credential get VAULT ASSET --field password --reveal
memories credential copy VAULT ASSET --field api_key
memories credential otp VAULT ASSET
memories credential migrate VAULT ASSET

秘密の値は非表示入力だけで登録し、コマンドライン引数にはしません。古い単一フィールドの認証情報も直接読めます。otpauth:// または OTP: で始まるタイトルは OTP、HTTP 認証や許可ホストを持つものは API Key、それ以外はパスワードとして扱います。初めて credential set で変更するか credential migrate を実行すると構造化形式に書き換えます。旧バージョンは履歴に保持し、データは失われません。従来の単一秘密を使う機能(HTTP 注入、実行バインディング、--field なしのコピー)は「主要な秘密」を使います。パスワードが最優先で、次に API Key、OTP、最初の秘密カスタムフィールドの順です。

複数フィールドの認証情報:MCP、ホスト型 Center、エンドツーエンド同期

  • MCP credential_fields(読み取り権限)は秘密でないフィールドと秘密フィールドの名前だけを返します。credential_reveal(allow_all 認可)は intent: "reveal_plaintext" と理由を要求し、フィールドごとに返して監査します。
  • ホスト型 Center:エンドツーエンド(e2e)認証情報は Center に説明情報だけを保存し、秘密フィールドはデバイスの密封エンベロープだけに存在します。
  • ペアリング済みデバイス:memories device sealed-get --vault V --card C --field password --reveal と、認証コードを生成する --otp を使えます。
  • モバイル:認証情報の新規作成は区分されたフォーム(ログイン情報、ワンタイムコード、API、その他、カスタムフィールド)を使い、すべて空にできます。秘密フィールドのコピーと、カウントダウン付きのリアルタイムコードの閲覧にはシステムのロック解除認証が必要です。