プロダクト
何を保存し、何がマシンの外に出るのか
デフォルトのインストールでは自分のマシンからだけ接続を受け付け、テレメトリーはありません。キャプチャした文章の保存前に、認識できた認証情報を墨消ししますが、機密情報を見逃す可能性があります。リモートサーバーや任意のクラウドプロバイダーを使うと、データの送信先が変わります。
デフォルトはローカル。
インストールして起動した時点で、サーバーと通信できるのは自分のマシンだけです。
ループバックのみ
サーバーは127.0.0.1:49374にバインドします。マシンの外のプロセスからは到達できません。新規インストールでは、ループバックでもベアラートークンを所有者専用のファイルに発行し、フックとCLIがそれを読むので、開きっぱなしの口はありません。
テレメトリなし
ai-memoryのバイナリには解析、クラッシュ報告、利用状況の追跡はありません。デフォルトのローカルキャプチャと検索は、プロジェクトの内容を外部のモデルプロバイダーに送りません。
自分で管理する1つのディレクトリ
wikiのページとSQLiteファイルは、1つのデータディレクトリの下にあります。Unixでは、新規ディレクトリは0700、新規ファイルは0600で作成されます。
保存時の暗号化なし
保存データの保護はファイルシステムの権限に依存します。既存のインストールの権限は自動変更しません。電源オフ時の保護が必要ならディスク暗号化を使ってください。
キャプチャした文章は保存前にフィルタリング。
フックのペイロードは信頼できない文章です。サニタイザーで認識できた認証情報を墨消しし、サイズを制限します。機密情報を見逃す可能性があります。
フックのペイロード
sanitize()
シークレットを除去
保存
サイズ上限あり
入口は1つ
保存用の型はsanitize()でしか生成できません。プライバシー用の除去処理を飛ばすコードは、コンパイルが通りません。
シークレットは置き換える
一致した箇所は、[REDACTED:github_token]や[REDACTED:jwt]のような型付きマーカーになります。JSON内のシークレットとWindowsの資格情報パスも対象で、ターミナルのエスケープシーケンスは取り除きます。除去はベストエフォートです。
サイズに上限がある
ツール出力の抜粋は2 KB、プロンプトは16 KiBまでです。墨消し後の保存本文には、一律で16 KiBの最終上限がかかります。
ツールの入力は残さない
PreToolUseイベントは、コマンド、引数、パス、入力本文を一切保持しません。オブザベーションは監査証跡で、完全なトランスクリプトになることはありません。 任意で有効にする
[ingest] index_file_pathsだけは1つのフィールドを追加します。保存されたファイル系ツール呼び出しが指した1ファイルの、チェックアウトからの相対パスだけで、内容は含みません。除外されたパスは引き続き何も送りません。
特定のパスやリポジトリを対象外にする
.ai-memory.tomlの[capture]ブロックに、無視するパスを列挙します。一致したイベントは自分のマシン上で破棄され、スプールにもネットワークにもログにも届きません。- allowlistモードはこれを反転させます。このファイルがないリポジトリは、イベントを一切送りません。
- ルールセットが不正な場合は、メタデータのみの記録にフォールバックします。ポリシーが半分だけ適用されることはありません。
- ファイルパスと認識できるシェル引数は字句解析で照合します。シンボリックリンク、シェル変数、ファイルから読み込むスクリプトは照合をすり抜ける場合があります。プロンプトはパスでフィルタリングしません。キャプチャのフィルタリングには限界があり、完全なDLPではありません。
- アシスタントの出力は、デフォルトでは保存されません。保存するには、サーバー側とクライアント側の両方のフラグが必要です。
- バックフィルと管理対象ワークストリームのインポートでも、ツール呼び出しと結果に同じキャプチャルールを適用します。除外対象の呼び出しは取り込まず、安全と判断できない呼び出しはツールの種類を示すメタデータだけを残します。
# リポジトリ内の.ai-memory.toml
[capture]
ignore_paths = ["private/**", "~/personal-notes/**"]
# または、オプトインしたリポジトリだけをキャプチャする
ai-memory install-hooks --apply --capture-mode allowlist
構成に合わせて保護する
リモートアクセスには LAN 内でも認証と TLS の両方が必要です。クライアントを接続する前に、構成に該当する要件をすべて満たしてください。
1人、1台
ループバック、ファイルにトークン
ai-memory initが<data_dir>/auth-tokens/defaultにトークンを作成し、フック、CLI、MCPブリッジはそこから読みます。3.0より前のインストールは、ai-memory auth enableを実行するまで認証なしで動き続けます。このコマンドがトークンを発行し、すべてのクライアントを再登録します。ホームラボのマシンや2台目のマシン
LAN向けのベアラートークン
ai-memory generate-auth-tokenでトークンを作り、AI_MEMORY_AUTH_TOKENに設定します。トークンは定数時間で比較され、/mcp、/hook、/handoff、管理用とAPIのルートを保護します。AI_MEMORY_ALLOWED_HOSTSも設定してください。これはDNSリバインディングを防ぐもので、トークンの代わりにはなりません。ループバックの外に出るすべての構成
リバースプロキシでTLSを終端する
ai-memoryは設計上、TLSを終端しません。ベアラートークンは通信経路上で暗号化されないので、手前にCaddy、nginx、Cloudflare Tunnelのいずれかを置いてください。リポジトリにはCaddyとcloudflared用のcomposeテンプレートが入っています。別のマシンからサインインする人がいる場合は、
AI_MEMORY_AUTH__SECURE_COOKIE=trueを設定します。書き込む人が2人以上
アカウントとAPIキー
パスワードはArgon2idのハッシュとして保存されます。マシンごとに
aim_キーを発行します。キーは一度だけ表示され、二度と表示されません。ai-memory api-key rotate <id>を実行すると、古いキーはただちに401を返すようになります。最初のアカウントを作成すると、すべての/admin/*ルートがroot専用になります。チームですでにKeycloak、Okta、Entra IDを使っている
フック向けのOIDCデバイス認証
ネイティブフックとCLIは、
ai-memory auth login oidc-deviceで取得したトークンを送信できます。サーバー自身はOIDCトークンを検証しないので、手前にOIDC対応のゲートウェイが必要です。これはゲートウェイを介したフックとCLIの認証で、サーバーに組み込みのSSOログインはありません。
何が、いつマシンの外に出るのか。
以下の設定はメモリの内容をモデルプロバイダーへ送信する可能性があり、既定では無効です。リモートサーバーへのフック、設定済みの受付 webhook、自分で指定したバックアップ先も、別の送信経路として確認してください。
| 経路 | 送信されるもの | 有効にする方法 | デフォルト |
|---|---|---|---|
| リモート埋め込み | 保存されているすべてのページの全文。あとから切り替えた場合は、既存のコーパスも遡って送信されます。この経路には、ほかの経路のようなサニタイズがかかりません。 | embedding_provider = openai | voyage | google | openai-compat | オフ |
| アシスタント出力のキャプチャ | アシスタントの最終ターンのテキスト。クラウドLLMも設定している場合に限ります。インストール全体に効く設定で、対象はClaude CodeとCodexのみです。 | サーバー側でcapture_assistant、クライアント側でinstall-hooks --capture-assistant | オフ |
| LLMリランク | 実行中の各クエリと、サイズ制限つきのページタイトルとスニペットを最大30件。クエリは墨消しされません。墨消しすると意味が変わるおそれがあるためです。 | AI_MEMORY_RERANKER=llm | オフ |
| LLMによる統合とlint | 保存済みのオブザベーションとページから組み立てたプロンプトが、選んだプロバイダーに送られます。ローカルモデルを指定すれば、何も外に出ません。 | AI_MEMORY_LLM_PROVIDER | オフ |
あなたのマシン
フック
wikiとインデックス
ローカル埋め込み
第三者
wikiとインデックス
クラウド埋め込み
クラウドLLM
LLMリランク
オプトイン、既定はオフ
既定のローカルでの記録と検索は、プロジェクトの内容をモデルプロバイダーに送りません。クラウドプロバイダーを選ぶ場合は、利用規約とデータの取り扱いを確認してください。プロジェクトのデータ取り扱いに関する説明。
誰が書いたか、どう削除するか。
作業者の記録と監査
- アカウントを有効にすると、書き込みごとに作成者が記録されます。ページのフロントマターには
author_idとlast_modified_byブロックが入ります。 - すべての変更は
audit_logテーブルに記録され、作業者が記録された行にはユーザーのIDが入ります。 - wikiはgitリポジトリなので、ページの変更はすべてコミットでもあります。diffを取ることも、復元することもできます。
- アドミッションWebhookはアクターを受け取り、操作を拒否できます。
- 監査ログの画面はまだありません。行はSQLiteに入っています。
パージで消えるもの
パージは選択したプロジェクトのデータを論理削除します。履歴や以前のバックアップにコピーが残ることがあります。別途、保持ルールで未使用のセッションページを取り除き、明示的な有効期限で他のページを削除できます。--confirmがなければ、パージは削除対象のプレビューだけを表示します。
# セッションを1つ削除する
ai-memory purge-session --workspace default --project my-app --session-id <uuid> --confirm
# プロジェクトを丸ごと削除する
ai-memory purge-project --project experimental --confirm
| パージ後 | デフォルト | --compactあり |
|---|---|---|
| APIやMCPツールから到達できる | いいえ | いいえ |
| 検索結果に出る | いいえ | いいえ |
| wiki内に有効なmarkdownファイルがある | いいえ(ベストエフォート) | いいえ(ベストエフォート) |
| memory.sqliteの中にバイト列が残る | はい(空きページ内) | いいえ |
| wikiのgit履歴にテキストが残る | はい | はい |
| 以前に取ったバックアップに含まれる | はい | はい |
--compactはフォレンジックレベルの消去ではありません。履歴からテキストを消すには、wikiのgit履歴の書き換えとバックアップの入れ替えを自分で行います。完全な手順はライフサイクル操作のページにあります。
守れる範囲はここまで。
脆弱性の報告
- 公開のIssueは立てないでください。GitHubで非公開のセキュリティアドバイザリを作成してください。
- 7日以内に返信します。パッチの目標は30日で、辞退されない限り変更履歴にクレジットを記載します。
- セキュリティ修正の対象は最新リリースのみです。
- リリースアセットにはSHA-256ファイルが付き、CIのアクションはレビュー済みのコミットに固定されています。
よくある質問
ai-memoryは、コードやプロンプトをどこかに送信しますか?
デフォルトでは、ai-memoryはキャプチャしたプロジェクトの内容を自分のマシンに保存します。共有サーバーに接続すると、内容をそのサーバーへ送ります。任意のクラウド埋め込みや言語モデル機能は、設定したプロバイダーにデータを送ります。コーディングエージェントには独自のデータ設定とプロバイダー接続があります。
ローカルの埋め込みモデルにネットワークは必要ですか?
初回起動時に、ローカルの埋め込み処理はHugging Faceから約87 MBのモデルファイルをダウンロードし、チェックサムを検証します。このダウンロードでプロジェクトの内容を送ることはありません。embedding_provider = "none"を設定するか、モデルファイルを自分で配置すれば回避できます。
シークレットは保存されますか?
フックのペイロードはすべて、保存前にサニタイザーを通ります。認識できた認証情報は型付きの[REDACTED:kind]マーカーに置き換えられ、本文にはサイズ上限がかかります。サニタイザーによる認証情報の除去はベストエフォートで、保証はありません。
セッションを完全に削除できますか?
パージは論理削除です。内容には到達も検索もできなくなりますが、テキストはwikiのgit履歴と以前のバックアップに残ります。--compactフラグはSQLiteの空きページを消去しますが、フォレンジックレベルの消去ではありません。
ai-memoryはマルチテナントですか?
いいえ。プロジェクト単位の権限付与でデータベースのユーザーアカウントを制限できますが、シングルテナントのサービスであることは変わりません。rootはすべてのプロジェクトにアクセスでき、信頼済みプロキシを使う構成ではプロキシ側でアクセスを制御します。独立した隔離が必要なチームには別々のサーバーを使ってください。
まずはループバックで試す。
ローカルの機密情報を含まないプロジェクトから始めてください。共有サーバーやクラウドプロバイダーに接続する前に、何がキャプチャされるか確認しましょう。
