本文へスキップ
メニュー

プロダクト

ソリューション

連携

開発者

言語

プロダクト

何を保存し、何がマシンの外に出るのか

デフォルトのインストールは、自分のマシン上でのみ待ち受け、書き込む前にシークレットを取り除きます。テレメトリはありません。データを外部へ送る経路は、有効にするまですべてオフです。このページには、プロジェクトが防御の対象としていないものも載せています。

デフォルトはローカル。

インストールして起動した時点で、サーバーと通信できるのは自分のマシンだけです。

  • ループバックのみ

    サーバーは127.0.0.1:49374にバインドします。マシンの外のプロセスからは到達できないので、デフォルトではパスワードが要りません。

  • テレメトリなし

    バイナリには、アクセス解析、クラッシュレポート、利用状況の追跡のいずれもありません。キャプチャと検索はネットワーク呼び出しを一切行いません。

  • 自分で管理する1つのディレクトリ

    wikiのページとSQLiteファイルは、1つのデータディレクトリの下にあります。Unixでは、新規ディレクトリは0700、新規ファイルは0600で作成されます。

  • 保存時の暗号化なし

    バージョン1はファイルシステムのパーミッションに依存します。既存のインストールに対するchmodは行いません。ノートPCで必要なら、ディスク暗号化を使ってください。

サニタイズ前のデータは保存されません。

フックのペイロードは信頼できないテキストです。ストアに届く経路は1つの関数だけで、それを型システムが強制します。

図: キーやパスワードを含む生のフックペイロードが、sanitize()と書かれた1つのゲートに入る。シークレットはゲートの下に落ちる。反対側から、サイズ制限のかかった小さなオブザベーションが出てきて保存される。
フックのペイロードがストアに入る経路は、サニタイザーだけです。
  • 入口は1つ

    保存用の型はsanitize()でしか生成できません。プライバシー用の除去処理を飛ばすコードは、コンパイルが通りません。

  • シークレットは置き換える

    一致した箇所は、[REDACTED:github_token]や[REDACTED:jwt]のような型付きマーカーになります。JSON内のシークレットとWindowsの資格情報パスも対象で、ターミナルのエスケープシーケンスは取り除きます。除去はベストエフォートです。

  • サイズに上限がある

    ツール出力の抜粋は2 KB、プロンプトは16 KiBまでです。墨消し後の保存本文には、一律で16 KiBの最終上限がかかります。

  • ツールの入力は残さない

    PreToolUseイベントは、コマンド、引数、パス、入力本文を一切保持しません。オブザベーションは監査証跡で、完全なトランスクリプトになることはありません。

特定のパスやリポジトリを対象外にする

  • .ai-memory.toml[capture]ブロックに、無視するパスを列挙します。一致したイベントは自分のマシン上で破棄され、スプールにもネットワークにもログにも届きません。
  • allowlistモードはこれを反転させます。このファイルがないリポジトリは、イベントを一切送りません。
  • ルールセットが不正な場合は、メタデータのみの記録にフォールバックします。ポリシーが半分だけ適用されることはありません。
  • マッチングは字句ベースです。シンボリックリンクは解決されず、プロンプトやシェルコマンドをパスに結びつけることもできません。これはキャプチャの境界で、完全なDLPではありません。
  • アシスタントの出力は、デフォルトでは保存されません。保存するには、サーバー側とクライアント側の両方のフラグが必要です。
リポジトリごとのキャプチャルール
# リポジトリ内の.ai-memory.toml
[capture]
ignore_paths = ["private/**", "~/personal-notes/**"]

# または、オプトインしたリポジトリだけをキャプチャする
ai-memory install-hooks --apply --capture-mode allowlist

1段ずつ足していく。

各ステップは、特定の状況のためにあります。自分の状況に合う段で止めてください。

  1. 1人、1台

    ループバック、認証なし

    デフォルトです。ほかに接続できるものがないので、設定することはありません。

  2. ホームラボのマシンや2台目のマシン

    LAN向けのベアラートークン

    ai-memory generate-auth-tokenでトークンを作り、AI_MEMORY_AUTH_TOKENに設定します。トークンは定数時間で比較され、/mcp/hook/handoff、管理用とAPIのルートを保護します。AI_MEMORY_ALLOWED_HOSTSも設定してください。これはDNSリバインディングを防ぐもので、トークンの代わりにはなりません。

  3. 書き込む人が2人以上

    アカウントとAPIキー

    パスワードはArgon2idのハッシュとして保存されます。マシンごとにaim_キーを発行します。キーは一度だけ表示され、二度と表示されません。ai-memory api-key rotate <id>を実行すると、古いキーはただちに401を返すようになります。最初のアカウントを作成すると、すべての/admin/*ルートがroot専用になります。

  4. チームですでにKeycloak、Okta、Entra IDを使っている

    フック向けのOIDCデバイス認証

    ネイティブフックとCLIは、ai-memory auth login oidc-deviceで取得したトークンを送信できます。サーバー自身はOIDCトークンを検証しないので、手前にOIDC対応のゲートウェイが必要です。これはゲートウェイを介したフックとCLIの認証で、サーバーに組み込みのSSOログインはありません。

  5. ループバックの外に出るすべての構成

    リバースプロキシでTLSを終端する

    ai-memoryは設計上、TLSを終端しません。ベアラートークンは通信経路上で暗号化されないので、手前にCaddy、nginx、Cloudflare Tunnelのいずれかを置いてください。リポジトリにはCaddyとcloudflared用のcomposeテンプレートが入っています。別のマシンからサインインする人がいる場合は、AI_MEMORY_AUTH__SECURE_COOKIE=trueを設定します。

何が、いつマシンの外に出るのか。

データを外部へ送れる経路は4つあります。4つともデフォルトでオフです。

図: フック、wikiとインデックス、ローカルの埋め込み処理が「あなたのマシン」と書かれた囲いの中にあり、実線でつながっている。クラウドの埋め込み、クラウドLLM、LLMリランクへの破線は、「オプトイン、既定はオフ」と書かれた開いたスイッチを通って壁を越える。
実線は内側にとどまります。破線は、設定を変えて初めて存在します。
経路送信されるもの有効にする方法デフォルト
リモート埋め込み保存されているすべてのページの全文。あとから切り替えた場合は、既存のコーパスも遡って送信されます。この経路には、ほかの経路のようなサニタイズがかかりません。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オフ

どれも有効にしていなければ、データの経路に第三者はいません。クラウドプロバイダーを設定すると、そのプロバイダーが、あなた自身との契約に基づく処理者になります。GDPRの観点での整理はDATA_HANDLING.mdにあります。これは法的助言ではありません。

誰が書いたか、どう削除するか。

作業者の記録と監査

  • アカウントを有効にすると、書き込みごとに作成者が記録されます。ページのフロントマターにはauthor_idlast_modified_byブロックが入ります。
  • すべての変更はaudit_logテーブルに記録され、作業者が記録された行にはユーザーのIDが入ります。
  • wikiはgitリポジトリなので、ページの変更はすべてコミットでもあります。diffを取ることも、復元することもできます。
  • アドミッションWebhookはアクターを受け取り、操作を拒否できます。
  • 監査ログの画面はまだありません。行はSQLiteに入っています。

パージで消えるもの

パージは論理削除です。スコープが限定されており、プロジェクトAからプロジェクトBのファイルを削除することはできません。ページが期限を設定しない限り、データに有効期限はありません。

パージ
# セッションを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のアクションはレビュー済みのコミットに固定されています。

脅威モデルとポリシーはSECURITY.mdに

よくある質問

ai-memoryは、コードやプロンプトをどこかに送信しますか?

いいえ。テレメトリはなく、キャプチャと検索はネットワーク呼び出しを行いません。データがマシンの外に出るのは、リモート埋め込み、クラウドLLMを使ったアシスタント出力のキャプチャ、LLMリランク、統合用のクラウドLLMプロバイダーのいずれかを有効にした場合だけです。どれもデフォルトではオフです。

デフォルトのインストールはネットワークリクエストを行いますか?

1回だけ行います。2.0以降、デフォルトのローカル埋め込み処理が、初回起動時に約87 MBのall-MiniLM-L6-v2モデルをHugging Faceからダウンロードします。ユーザーデータは送信しません。避けるには、embedding_provider = "none"を設定するか、モデルファイルを自分で配置してください。

シークレットは保存されますか?

フックのペイロードはすべて、保存前にサニタイザーを通ります。認識できた認証情報は型付きの[REDACTED:kind]マーカーに置き換えられ、本文にはサイズ上限がかかります。サニタイザーによる認証情報の除去はベストエフォートで、保証はありません。

セッションを完全に削除できますか?

パージは論理削除です。内容には到達も検索もできなくなりますが、テキストはwikiのgit履歴と以前のバックアップに残ります。--compactフラグはSQLiteの空きページを消去しますが、フォレンジックレベルの消去ではありません。

ai-memoryはマルチテナントですか?

いいえ。シングルテナントのサービスです。アカウントで分かるのは誰が書いたかで、認証済みのユーザーは全員、そのサーバー上のすべてのプロジェクトを読めます。互いのデータを見せてはいけない相手とは、サーバーを分けてください。

まずはループバックで試す。

アカウントもAPIキーも要りません。到達できるのは自分のマシンだけです。