本文へスキップ
メニュー

プロダクト

ソリューション

連携

開発者

言語

プロダクト

もっとできること

ふだん使うのは引き継ぎと検索です。ここでは、1つのサーバーに置かれた記憶にできるその他のことを紹介します。プロジェクト間で作業を渡すことから、クライアントごとの記憶を分けておくことまでです。

あるエージェントが別プロジェクトのエージェントに依頼する

APIを介して連携する2つのリポジトリがあり、それぞれに自分のエージェントと自分の記憶があるとします。フロントエンドのエージェントはプロトコルを知っています。APIリポジトリ全体を読む代わりに、完結した依頼を書いて、そのプロジェクトの受信箱に入れます。

図:プロジェクトAのエージェントが、封をした依頼を記憶サーバー経由でプロジェクトBの受信箱に送り、そこでエージェントが一度だけ取り出してAPI仕様を読む。プロジェクト間の壁はコンテキストが共有されないことを示し、受け取ったメッセージは信頼できない入力として扱われる。
境界を越えるのは封筒だけです。プロジェクトAがプロジェクトBのファイルを読むことも、その逆もありません。

実際の流れ

  1. フロントエンドのリポジトリで

    > default/api のエージェントに、NDJSONをストリーミングする /v1/export エンドポイントの追加を依頼して。既存の認証ミドルウェアはそのまま。ai-memory 経由で送って。

    エージェントは自己完結した本文でmemory_message_sendを呼びます。読む側はこのプロジェクトを見られないので、依頼はそれだけで意味が通る必要があります。

  2. あとで、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つ置きます。

図:.ai-memory.tomlマーカーを持つ3つのフォルダが、1つの記憶サーバー内の別々のワークスペースに対応している。1つのワークスペースにはモノレポがあり、その中のディレクトリは1つのプロジェクトを共有する。脇には、ピン留めされたルールのページ、金曜に期限が切れるメモ、フィードバックの付いたページがある。
サーバーは1つ、棚は別々。どの棚にディレクトリが入るかはマーカーファイルが決めます。
  • クライアントごとに1ワークスペース

    ~/work/client-a/に.ai-memory.tomlを置くと、その下のリポジトリはすべてそのワークスペースに入ります。クライアントBの作業中に、クライアントAの記憶が出てくることはありません。

  • モノレポを1つのプロジェクトに

    projectを指定したマーカーは、すべてのサブディレクトリをそのプロジェクトに固定するので、パッケージ同士が1つの記憶を共有します。projectを省くと、パッケージごとに別の記憶になります。

  • gitのワークツリー

    リンクされたワークツリーはメインのリポジトリに解決されるので、別の場所にチェックアウトしたブランチも同じ記憶を使います。

  • 1つのプロジェクトに2つのエージェント

    現在のプロジェクトを指すポインターは呼び出し元ごとに分離されているので、Claude CodeとCodexを同じディレクトリで並行して動かしても、互いを取り違えません。

  • 1台のノートPCに2つの勤務先

    各サーバーはai-memory server addで登録し、マーカーにserver = "team-b"のように名前を書きます。そのツリー配下のフックはそのサーバーだけに送られ、名前が解決できなければ何も送られません。

  • アイデンティティを固定する

    identity = "acme/platform"を指定すると、リモートがなくても、そのチェックアウトはどこにあってもこのキーの下に記録されます。

~/work/client-a/ の .ai-memory.toml
# このディレクトリ配下のリポジトリはすべてclient-aワークスペースに入る
workspace = "client-a"

マーカーファイルガイド

すべてのセッションに届くルール

何かをずっと覚えておくようエージェントに伝えると、それはwikiのページになります。ルールは事実とは別に整理され、セッションのブリーフィングが最初のプロンプトより前にエージェントへ提示できます。

  • 一度言えばよい

    「覚えておいて:決済のコードに触る前にPCIのメモを読むこと」。エージェントは永続的なページを書きます。グローバルなルールとして頼めば、すべてのプロジェクトに適用されます。

  • ブリーフィングが運ぶ

    プロジェクトのマーカーファイルにinject_on_session_start = trueを書くと、ピン留めページ、ルール、スロットが新しいセッションのコンテキストの先頭に加わります。

  • lintが昇格を提案する

    ルールが十分に永続的だと見なされると、memory_lintがCLAUDE.mdやAGENTS.mdへのコピーを提案します。ai-memory自身がこれらのファイルを編集することはありません。

  • 決定記録はあなたのもの

    ai-memoryがリポジトリに書き込むことはありません。ADRのディレクトリはそのまま持ち、[capture] ignore_pathsに載せておけば、wikiが古いコピーを抱えることもありません。

.ai-memory.toml
# ピン留めページ、ルール、スロットをすべてのセッションの先頭に加える
[briefing]
inject_on_session_start = true

期限の切れるメモと、順位を変えるフィードバック

  • 金曜まで覚えておいて

    expires_at付きで書いたページは、その日を過ぎると検索に出なくなります。期限切れのページを含めるよう指定した検索では、引き続き見つかります。

  • そのページは間違っていた

    memory_feedbackは、ページに対して「役に立った」「役に立たなかった」「古い」「間違い」を記録します。「古い」と「間違い」は以後のランキングで順位を下げ、エイジングを早めます。フィードバックで削除されることはありません。

  • セッションを移す

    作業用ディレクトリにcdしたあとで別のプロジェクトにキャプチャされたセッションは、ai-memory move-sessionで付け直せます。オブザベーションとページも一緒に移ります。

  • コンパクションからの復帰

    Claude CodeやCodexがコンテキストをコンパクションするとき、フックが先に新しいセッションページを書くので、コンパクションで消えた内容をあとから呼び出せます。

ブラウザで読む、どこへでも持ち出す

  • 読み取り専用のWeb UI

    --enable-webを付けてサーバーを起動すると、すべてのプロジェクトのページをconcepts、decisions、gotchas、sessionsに分けてブラウザで閲覧でき、/api/v1にJSON APIも付きます。

  • オープンなフォーマット

    各プロジェクトはOpen Knowledge Formatのバンドルです。ai-memory export-okfでOKFを読めるツール向けにまとめられ、それ以外のツールにとってもファイルはプレーンなmarkdownです。

  • エージェント用のスキル

    ai-memory install-mcpは、短いルーティング用スニペットとマネージドなAgent Skillsも一緒にインストールするので、エージェントは「これ、話したことある?」に答えるツールと、メッセージを送るツールを区別できます。

ランチャーが引き受ける雑務

ai-memory runは、記憶サーバー経由でエージェントを起動します。バイナリを最新に保ち、セッションを閉じ、何かを無効化する前にはそのことを伝えます。

図:中央にai-memory runを実行しているターミナル。その周りに、安全確認を無効化する前にランチャーが提案するサンドボックス、自己更新用のチェックサム付きダウンロード、エージェント終了時に閉じるセッションページ、Web UI用のブラウザサインインが配置されている。
中心にあるのはコマンド1つ。残りはその周りで、別のツールなしに起きます。
  • コマンド1つでアップグレード

    ai-memory upgradeは、対応するリリースをダウンロードし、チェックサムを確認し、バイナリを入れ替え、フックを更新し直します。Docker、Homebrew、AUR、RPMでのインストールは、それぞれ自分の経路でアップグレードします。

  • ガードレールを外す前に警告

    ai-memory run --yoloは、これから無効化する内容を伝えます。LinuxとmacOSでai-jailが使える場合は、jailに何を見せるかのチェックリストとともに、サンドボックス内でセッションを実行し直すことも提案します。--jailは妥当なデフォルトのまま直接jailへ入ります。

    GitHubのai-jail
  • ハーネス用の環境変数

    --env KEY=VALUEと--env-fileは、起動されたエージェントとai-memory自身のセッション検索の両方に渡るので、アカウントごとのCLAUDE_CONFIG_DIRにラッパースクリプトは要りません。

  • 終了時にセッションを閉じる

    セッション終了フックを持たないエージェント(Command Code、Kiro CLI、Antigravity CLI)は、ランチャーが終了したときに要約と引き継ぎを受け取ります。そのあとも会話が続いた場合はfinalize-session --reopenで対応できます。

  • Web UIにサインインする

    組み込みのwikiには、パスワード利用者向けのログインページとパスワード変更ページがあり、全プロジェクトの保留中の自動改善提案を承認または却下するroot専用ページもあります。

  • 自分の言語のストップワード

    [search.fts] stopwordsには、自分の言語の機能語を列挙します。ポルトガル語のwikiで全文検索の順位がdeやqueに引っ張られることがなくなります。

よくある質問

あるプロジェクトのエージェントは、別のプロジェクトの記憶を読めますか?

いいえ。記憶はプロジェクトごとに整理され、メッセージングだけが意図的に境界を越える手段です。プロジェクトに見えるのは、自分宛てか自分が送ったメッセージだけです。読む側は送信元のファイルを見られないので、メッセージ本文は自己完結している必要があります。

受け取ったメッセージは指示として扱われますか?

いいえ。取り出したメッセージは、信頼できないプロジェクト間の入力としてフェンスで囲まれ、その旨の注意書きが付きます。エージェントはそれをタスクの依頼としてあなたと一緒に評価します。送信元はフェンスの外に表示されるので、先に信頼できるか判断できます。

2つのセッションが同じ受信箱を確認するとどうなりますか?

最初のpopがメッセージを受け取り、2つ目は何も受け取りません。メッセージを受け取れるのは一度だけで、引き継ぎと同じルールです。

ワークスペースの設定は必要ですか?

いいえ。マーカーファイルがなければ、すべてdefaultというワークスペースに入り、gitのリモートがプロジェクトになります。リモートがなければディレクトリ名になります。.ai-memory.tomlを追加するのは、クライアントを分けたい、モノレポを1つのプロジェクトにしたい、仕事と個人の記憶を分けたい、または2つ目のサーバーを使いたいときだけです。

今日からエージェントに記憶を。

MITライセンスの無料オープンソースです。アカウントもAPIキーも要りません。