Engineering · アーキテクチャ

セッションをまたぐ永続メモリ — ファイルシステム型実装・監査ログ・名前空間設計

チャットが終わると、エージェントはすべてを忘れる。永続メモリ層はこの「セッション境界問題」を解決するアーキテクチャ的回答で、Anthropic の Memory for Managed Agents(2026-04-23)が示したファイルシステム型実装と設計原則を解説します。

要点

  • コンテキストウィンドウはセッション終了でリセットされる一時記憶。永続メモリ層はセッション外のストレージに状態を書き込み、次のセッション開始時に注入することでセッション境界を越えた継続性を実現する。
  • Anthropic の Memory for Managed Agents(2026-04-23)は /mnt/memory/ ファイルシステム型実装で、エージェントが直接ファイルを読み書きする。書き込みごとに監査ログを生成し、同一オーケストレーション下の複数エージェントがメモリを共有できる。
  • 読み取り時注入(read-time injection)が現在の主流パターン。セッション開始時にメモリ内容をシステムプロンプトに埋め込む設計で、エージェントはメモリを「最初から知っていること」として扱える。
  • 書き込み監査ログはメモリのトレーサビリティを担保する。どのエージェントが・いつ・何を書いたかがエージェント単位で追跡でき、不正な更新の検出や巻き戻しによる復旧を可能にする。
  • エージェントが複数になると名前空間の設計が重要になる。各エージェントの専用名前空間(/agent-a/)と共有名前空間(/shared/)を分離することで書き込み競合を防げる。

セッション境界問題 — コンテキストは消え、仕事の文脈も消える

エージェントが持つ「記憶」は、大きく2層に分かれます。1つはコンテキストウィンドウ——今のセッションで起きたことをすべて覚えている作業記憶で、数十万トークンを保持できます。問題は、セッションが終わると全内容がリセットされることです。次のセッションでエージェントは「初対面」の状態から再開します。

これは単純な不便にとどまりません。長期にわたる業務自動化では、セッションをまたいで引き継ぐべき文脈が大量に生まれます。「先月承認された変数名ルール」「過去3回の試行で判明した制約」「顧客Aが優先するコミュニケーション形式」——これらはどのセッションでも参照できるべき知識ですが、コンテキストウィンドウだけでは次のセッションに渡せません。

エージェントが複数になると、この問題は深刻化します。異なるエージェントが互いの作業結果を知らないまま、同じ顧客情報を重複して収集する。矛盾する結論を出す。先のエージェントが判明した制約を後のエージェントが踏む——こうした非効率が生まれます。永続メモリ層は、エージェント間の「引き継ぎ」を体系的に解決するアーキテクチャ的回答です。

2層のメモリ構造

セッション 1コンテキスト消失セッション 2コンテキスト消失セッション 3メモリ注入済み書き込み書き込み注入(起動時)永続メモリ層/mnt/memory/ — セッション間で維持永続メモリ層はセッション終了後も維持され、次のセッション起動時にシステムプロンプトへ注入される
コンテキストウィンドウ(一時)は各セッション終了でリセットされるが、永続メモリ層(/mnt/memory/)はセッション間で維持され、次のセッション起動時にシステムプロンプトへ注入される。

ファイルシステムとして見せる実装(Anthropic、2026-04-23)

Anthropicは2026年4月23日、「Memory for Managed Agents」として永続メモリの仕組みを公開しました。最も特徴的な設計判断は、メモリをファイルシステムとして提供する点です。エージェントは /mnt/memory/ 以下にファイルを作成・読み書きする通常のファイル操作でメモリを扱います。専用のメモリAPIを学ぶ必要はありません。

ファイルシステムとして見せることには設計上の利点があります。エージェントはすでにファイル操作ツール(read_file・write_file・list_directory)を習熟しています。メモリ管理を「特別な操作」として扱わず、既存のツールセットで自然に扱えます。エンジニア側も、メモリの内容を直接ファイルとして検査・修正できます。

(B)ファイル形式の選択はユースケースによって変わります。Markdown 形式は、エージェントが自然言語で読み書きする際の可読性が高く、構造化と散文のバランスが取れています。設定値・ルール・承認リストなどは YAML が扱いやすく、キーバリュー構造が明確です。どの形式を選ぶかは「誰が書き、誰が読むか」で決まります——人間が確認するなら Markdown、複数エージェントが参照するなら構造化形式が適しています。

書き込みと注入のフロー

書き込みフローエージェントタスク実行中書き込み永続メモリ/mnt/memory/file.md自動生成監査ログ誰が・いつ・何を書いたか注入フロー(次セッション起動時)セッション起動次の実行開始読み込みメモリ読み込み関連ファイルを選択注入システムプロンプトメモリ内容が埋め込まれる書き込みごとに監査ログが生成され、次のセッション起動時にシステムプロンプトへ注入される
エージェントが /mnt/memory/ にファイルを書き込むと監査ログが自動生成される。次のセッション起動時にファイルが読み込まれ、システムプロンプトへ注入されてエージェントが文脈を引き継ぐ。

読み取り時注入(read-time injection)と背景合成

永続メモリを「いつ、どのように」コンテキストに取り込むかは実装の核心です。現在の主流は読み取り時注入(read-time injection)パターン——セッション開始時(または推論開始直前)にメモリファイルを読み込み、内容をシステムプロンプトに埋め込む設計です。エージェントはメモリを「最初から知っていること」として扱えるため、タスク実行中に別途メモリ参照ツールを呼び出す必要がありません。

(B)背景合成(background synthesis)は補完的なアプローチとして注目されています。セッション終了後にバックグラウンドプロセスがセッション内容を分析し、重要な情報を抽出してメモリを更新する仕組みです。エージェント自身が「何を覚えるか」を判断するのではなく、専用の合成プロセスが要約・整理して書き込む分業構造になります。読み取り時注入と背景合成は競合するのではなく、前者が「読む効率」を、後者が「書く品質」を担保する補完的な役割を担います。

(B)注入量には上限があります。メモリが際限なく積み重なると、注入されたメモリがコンテキストウィンドウの大半を占め、実際のタスクのための余地が圧迫されます。よく使われる対策は2つです。重要度スコアによる選択的注入——すべてのメモリを注入するのではなく、現在のタスクとの関連度が高いものだけを選ぶ。そして古いメモリの段階的アーカイブ——更新が古く参照頻度が低いファイルを別ディレクトリへ移し、通常の注入対象から外します。

複数エージェントのメモリ共有と名前空間設計

(A)Anthropic の Memory for Managed Agents では、同一オーケストレーション下の複数エージェントが同じメモリ領域を参照できます。顧客情報を収集したエージェントAのメモリファイルを、翌日に別の業務を担当するエージェントBが読み取る。前回のエラー分析結果を次の修正エージェントが引き継ぐ——こうしたクロスエージェントの知識共有が永続メモリの共有によって実現します。

エージェントが増えるほど、名前空間の設計が重要になります。/mnt/memory/ をフラットに共有すると、エージェント同士が互いの書き込みを上書きするリスクがあります。実践的なパターンはエージェントごとの専用名前空間(/memory/agent-a/、/memory/agent-b/)と共有名前空間(/memory/shared/)を分離することです。専用名前空間は該当エージェントのみが書き込み権限を持ち、共有名前空間は全エージェントが読み書きできる——この所有権の明確化が、スケール時の競合を防ぐ基本設計になります。

(A)書き込み監査ログは名前空間を横断したトレーサビリティを提供します。/memory/shared/customer-rules.md が更新されたとき、どのエージェントが・いつ・何を書き込んだかが記録されます。これにより、意図しないメモリ更新の原因特定が容易になり、タスク単位の巻き戻しで特定時点の状態を復元できます。

名前空間による所有権の分離

エージェント Aエージェント B/mnt/memory/ の名前空間所有読み書き可読み書き可所有/agent-a/A専用/shared/共有名前空間/agent-b/B専用エージェントごとの専用名前空間と共有名前空間で書き込み競合を防ぐ
エージェントごとの専用名前空間(/agent-a/、/agent-b/)と共有名前空間(/shared/)を分離することで書き込み競合を防ぐ。RBACで名前空間ごとのアクセス権限を制御できる。

🛡 agens との関係

(A)agens はサンドボックス内でエージェントの永続メモリを管理し、書き込みごとに監査ログを生成します。タスク単位の巻き戻しによってメモリの変更を特定時点に戻せます。(A)同一オーケストレーション下の複数エージェントがメモリを共有でき、RBAC により名前空間ごとのアクセス権限を制御できます。(B)注入量の最適化や選択的注入はユースケースの規模に応じた設計が必要です。(C)メモリの長期ライフサイクル管理(TTL・世代管理・自動アーカイブポリシー)は、将来の拡張として設計段階にあります。

よくある質問

コンテキスト管理(compaction)と永続メモリは何が違いますか?
コンテキスト管理(compaction)はセッション中のコンテキストウィンドウが膨張したときに内容を圧縮・要約する技術で、セッション終了とともに消えます。永続メモリはセッション外のストレージ(/mnt/memory/)に書き込むため、セッションをまたいで維持されます。2つは補完的で、compaction が「今のセッション内での記憶効率」を高め、永続メモリが「セッション間の継続性」を担います。コンテキスト管理の詳細は「コンテキスト管理・メモリ設計」の記事で解説しています。
エージェントはメモリに何を書くべきですか?
(B)書き込む価値があるのは「次のセッションでも必要になる情報」です。典型例はユーザー設定・承認済みのルール・完了したタスクの要約・外部サービスの接続設定などです。逆に書き込まない方がよいのは、そのセッション限りの中間計算結果・デバッグ情報・一時的なフラグです。メモリが大きくなるほど注入コストが上がるため、「次のセッションで参照するか?」を基準にすると不要なメモリの蓄積を防げます。
複数のエージェントが同じファイルを同時に更新するとどうなりますか?
(B)書き込みの競合はファイルシステム型実装の既知の課題です。対策の基本は名前空間の所有権を明確にすること——各エージェントが専用ディレクトリを持ち、共有領域への書き込みは明示的な調停ロジックを設けます。(A)監査ログは競合が発生した際の追跡を可能にし、タスク単位の巻き戻しで特定時点の状態を復元できます。
永続メモリに機密情報を保存しても安全ですか?
(A)agens の永続メモリはサンドボックス内に格納され、RBAC によりどのエージェントがどの名前空間を読み書きできるかを制御できます。書き込みは監査ログに記録されます。機密情報を扱う場合は、専用名前空間を設けて権限を絞ることを推奨します。(C)静止時の暗号化や詳細なデータ保持ポリシーについては、agens のエンタープライズ設定を参照してください。
メモリが古くなったらどう管理しますか?
(B)メモリのライフサイクル管理は、スケール時に設計が必要になる領域です。代表的なパターンは2つあります。世代管理——ファイル名や内部メタデータに更新日時を記録し、注入時に直近N世代のみを使う。アーカイブ移動——更新が古く参照頻度が低いファイルを別ディレクトリへ移し、通常の注入対象から外す。どちらも「古くなったら削除する」のではなく、段階的に優先度を下げる設計です。

最終更新: 2026-06