自分のツールからメモリを利用
任意の TypeScript SDK は、スコープを指定した MCP 呼び出しでメモリの保存、検索、引き継ぎを行います。条件付き書き込みで同時編集を検出できます。npm では公開されていないため、リポジトリからビルドします。
プロダクト
ふだん使うのは引き継ぎと検索です。ここでは、1つのサーバーに置かれた記憶にできるその他のことを紹介します。プロジェクト間で作業を渡すことから、クライアントごとの記憶を分けておくことまでです。
APIを介して連携する2つのリポジトリがあり、それぞれに自分のエージェントと自分の記憶があるとします。フロントエンドのエージェントはプロトコルを知っています。APIリポジトリ全体を読む代わりに、完結した依頼を書いて、そのプロジェクトの受信箱に入れます。
プロジェクトA
send
受信箱、受取は1回
プロジェクトB
pop
API仕様
信頼できない入力
コンテキスト非共有
フロントエンドのリポジトリで
> default/api のエージェントに、NDJSONをストリーミングする /v1/export エンドポイントの追加を依頼して。既存の認証ミドルウェアはそのまま。ai-memory 経由で送って。
エージェントは自己完結した本文でmemory_message_sendを呼びます。読む側はこのプロジェクトを見られないので、依頼はそれだけで意味が通る必要があります。
あとで、APIのリポジトリで
📬 ai-memory: このプロジェクトの受信箱にプロジェクト間メッセージが1件届いています。
> ai-memory の受信箱を確認して。
エージェントはmemory_message_popを呼び、送信元つきの依頼を受け取って、それをもとに作業します。2回目のpopは何も返しません。
# 現在のプロジェクトから送る
ai-memory message send --to-workspace default --to-project api \
--subject "export endpoint" "Add a /v1/export endpoint that streams NDJSON…"
# 相手のプロジェクトで:消費せずに一覧する、または最も古いものを受け取る
ai-memory message list
ai-memory message pop
# 受け取られる前なら取り消せる
ai-memory message cancel --id <message-id>
メッセージはワークスペースとプロジェクト宛てで、登録済みのエージェント一人を指定することもできます。指定されたメールはそのエージェントだけが回収できます。両方のプロジェクトへアクセスできれば、ブラウザーで保留中のメッセージを送信・編集できます。
セッション開始時の通知にあるのは件数だけです。メッセージ本文は、意図したpopによってのみエージェントに届き、フェンスで囲まれて信頼できない入力と明示されます。送信元はフェンスの外に表示されます。 プロジェクト単位で、同じ件数だけの通知をプロンプト時にも受け取るよう設定できます。
宛先のプロジェクトは存在している必要があるので、タイプミスは誰も読まない受信箱に落ちるのではなく拒否されます。1つの受信箱に保留できるのは256件までです。
送信者は、受け取られるまでメッセージを取り消せます。送信時にシークレットは取り除かれ、本文にはサイズ上限があり、共有サーバーではすべてのメッセージに送信者が記録されます。
記憶はワークスペースとプロジェクトごとに整理されます。gitのリモートがあるチェックアウトはそのリモートで管理されるため、同じリポジトリを2回クローンしても記憶は1つになり、リモートのないフォルダはその名前を使います。それ以外を変えるには、小さなファイルを1つ置きます。
client-a
client-b
personal
ワークスペース
.ai-memory.toml
モノレポ
ルール
金曜に期限切れ
フィードバック
~/work/client-a/に.ai-memory.tomlを置くと、その配下のリポジトリが同じワークスペースを使います。記憶を保存し、通常検索する場所を指定する設定です。アクセス制御のルールではないため、明示的なプロジェクト横断検索や共有プロファイルは別途検討してください。
projectを指定したマーカーは、すべてのサブディレクトリをそのプロジェクトに固定するので、パッケージ同士が1つの記憶を共有します。projectを省くと、パッケージごとに別の記憶になります。
リンクされたワークツリーはメインのリポジトリに解決されるので、別の場所にチェックアウトしたブランチも同じ記憶を使います。
呼び出し元ごとのルーティングで利用者を分離します。同じ人の並行セッションには、明示的な workspace/project 引数か、フックのセッション ID を渡すクライアントが必要です。静的な MCP 設定では区別できない場合があります。
各サーバーはai-memory server addで登録し、マーカーにserver = "team-b"のように名前を書きます。そのツリー配下のフックはそのサーバーだけに送られ、名前が解決できなければ何も送られません。
identity = "acme/platform"を指定すると、リモートがなくても、そのチェックアウトはどこにあってもこのキーの下に記録されます。
# このディレクトリ配下のリポジトリはすべてclient-aワークスペースに入る
workspace = "client-a"
何かをずっと覚えておくようエージェントに伝えると、それはwikiのページになります。ルールは事実とは別に整理され、セッションのブリーフィングが最初のプロンプトより前にエージェントへ提示できます。
「覚えておいて:決済のコードに触る前にPCIのメモを読むこと」。エージェントは永続的なページを書きます。グローバルなルールとして頼めば、すべてのプロジェクトに適用されます。
プロジェクトのマーカーファイルで inject_on_session_start = true を設定すると、固定ページ、ルール、スロットからブリーフが始まります。収まらなかったページは memory_read_page 用に一覧表示します。Claude Code のサブエージェントにも同じ上限付きブリーフを渡すには、inject_on_subagent_start = true を別に設定します。
ルールが十分に永続的だと見なされると、memory_lintがCLAUDE.mdやAGENTS.mdへのコピーを提案します。ai-memory自身がこれらのファイルを編集することはありません。
サーバーはリポジトリのファイルを読み書きしません。エージェントやローカルの設定コマンドは読み書きできます。ADR はリポジトリで管理してください。[capture] ignore_paths はツール経由の記録を抑えますが、プロンプトの除外や完全な遮断を保証しません。
# ピン留めページ、ルール、スロットをすべてのセッションの先頭に加える
[briefing]
inject_on_session_start = true
expires_at を指定したページは、その日を過ぎると通常の検索から外れます。保持処理で削除されるまでは、期限切れページを含めて検索できます。ピン留めしていても削除対象です。
memory_feedback は「役立つ」「役立たない」「古い」「誤り」を記録します。保持処理の対象となるセッションページの保持に影響し、「古い」と「誤り」は lint の確認対象にもなります。検索順位を変えたり、直接ページを削除したりはしません。
作業用ディレクトリにcdしたあとで別のプロジェクトにキャプチャされたセッションは、ai-memory move-sessionで付け直せます。オブザベーションとページも一緒に移ります。
コンテキスト圧縮のあと、Claude Code、Codex、Factory Droidは通常の起動パケットの代わりに、セッション最初と最新のプロンプトを収めた短いアンカーを受け取ります。どのエージェントにも、自分のプロンプトを読み直し、要約よりそちらを信頼するというルールが入ります。reload contextは今までどおり、手動で範囲を限った振り返りを取得します。
組み込みダッシュボードにはプロジェクト、取得状況、エージェントの活動、応答ごとの使用量が表示されます。ナレッジタブには見出し、被リンク、版ごとの根拠と検索があり、ガイドは /web/docs にあります。
各ページにはバージョンへのリンクがあり、任意の2つの間の差分を見られます。各セッションでは、オブザベーションをキャプチャ順に並べたタイムラインを開けます。rootには、フックのカウンターと、失敗している項目の対処法を載せたヘルスページが表示されます。
各プロジェクトはOpen Knowledge Formatのバンドルです。ai-memory export-okfでOKFを読めるツール向けにまとめられ、それ以外のツールにとってもファイルはプレーンなmarkdownです。
ai-memory install-mcpは、短いルーティング用スニペットとマネージドなAgent Skillsも一緒にインストールするので、エージェントは「これ、話したことある?」に答えるツールと、メッセージを送るツールを区別できます。
ai-memory runはメモリサーバーを通じてエージェントを起動します。ハーネスを切り替える際、このマシン上の前のエージェントの可視履歴を、非公開の一時ファイルで渡すこともできます。パスと内容はローカルに留まり、子プロセス終了時に削除されます。利用できるローカル記録がなければ、共有のポータブル台帳とハンドオフを使います。
ai-memory run
サンドボックス案
自己更新
セッション終了
Webサインイン
ai-memory upgradeは、対応するリリースをダウンロードし、チェックサムを確認し、バイナリを入れ替え、フックを更新し直します。Docker、Homebrew、AUR、RPMでのインストールは、それぞれ自分の経路でアップグレードします。
ai-memory run --yoloは、これから無効化する内容を伝えます。LinuxとmacOSでai-jailが使える場合は、jailに何を見せるかのチェックリストとともに、サンドボックス内でセッションを実行し直すことも提案します。--jailは妥当なデフォルトのまま直接jailへ入ります。
--env KEY=VALUEと--env-fileは、起動されたエージェントとai-memory自身のセッション検索の両方に渡るので、アカウントごとのCLAUDE_CONFIG_DIRにラッパースクリプトは要りません。
セッション終了フックを持たないエージェント(Command Code、Kiro CLI、Antigravity CLI)は、ランチャーが終了したときに要約と引き継ぎを受け取ります。そのあとも会話が続いた場合はfinalize-session --reopenで対応できます。
組み込みのwikiには、パスワード利用者向けのログインページとパスワード変更ページがあり、全プロジェクトの保留中の自動改善提案を承認または却下するroot専用ページもあります。
[search.fts] stopwordsには、自分の言語の機能語を列挙します。ポルトガル語のwikiで全文検索の順位がdeやqueに引っ張られることがなくなります。
はい。呼び出し元にアクセス権があれば、明示的なプロジェクト横断クエリで読めます。通常のクエリは現在のプロジェクトを使います。メッセージ機能は自己完結した依頼を別プロジェクトの受信箱に届けますが、送信元のファイルへのアクセス権は与えません。
いいえ。取り出したメッセージは、信頼できないプロジェクト間の入力としてフェンスで囲まれ、その旨の注意書きが付きます。エージェントはそれをタスクの依頼としてあなたと一緒に評価します。送信元はフェンスの外に表示されるので、先に信頼できるか判断できます。
最初のpopがメッセージを受け取り、2つ目は何も受け取りません。メッセージを受け取れるのは一度だけで、引き継ぎと同じルールです。
いいえ。マーカーファイルがなければ、すべてdefaultというワークスペースに入り、gitのリモートがプロジェクトになります。リモートがなければディレクトリ名になります。.ai-memory.tomlを追加するのは、クライアントを分けたい、モノレポを1つのプロジェクトにしたい、仕事と個人の記憶を分けたい、または2つ目のサーバーを使いたいときだけです。
任意の TypeScript SDK は、スコープを指定した MCP 呼び出しでメモリの保存、検索、引き継ぎを行います。条件付き書き込みで同時編集を検出できます。npm では公開されていないため、リポジトリからビルドします。
任意の ai-memory-wikisync は、選択した共有ページ群をリポジトリ内の Markdown と同期します。編集の競合を報告し、条件付き書き込みを使います。削除は明示的な有効化が必要です。サーバーや非公開のセッション履歴を複製するものではありません。
任意のai-memory-importerは、指定したローカルファイル1件を読み込みます。markdown、テキスト層のあるPDF、DOCX、PPTX、XLSX、CSV、VTT、SRTに対応します。出典を記録したページを1枚書き、既定はdry run、ファイルのdigestを残し、自分のものでないページを置き換えることはありません。OCR、画像、音声には対応しません。 読み取り専用スナップショットからclaude-memのデータベースも取り込めます。プロジェクトの対応付けは明示的に指定し、まずドライランで実行します。
MITライセンスの無料オープンソースです。デフォルトの記憶機能にモデルのAPIキーは不要ですが、コーディングエージェントには別途アカウントが必要な場合があります。