MemoryGuard について
MemoryGuardは、コーディングエージェント間で共有する記憶を管理する、ローカル優先のMCPサーバーです。書き込みを整理して変更の根拠を保持し、リモートサーバーなしで取り消し可能な判断を支援します。
主な機能
- 01記憶の分類と重複排除
- 02根拠と変更履歴の保持
- 03スコープ別ガバナンスルール
- 04機密性が疑われる内容の隔離
- 05ロールバックと競合処理
活用シーン
- 01複数エージェント間の共有コンテキスト維持
- 02自動記憶更新の例外確認
- 03記憶項目の変更理由の追跡
- 04機密情報の可能性がある内容の隔離
MCP 対応
コーディングエージェント向けにローカルstdioのMCPサーバーを提供し、CLI、GUI、フックとも連携します。MCPクライアントからガバナンス付きの記憶機能を利用できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
MemoryGuard
コーディングエージェント向けの、ガバナンスが適用された共有メモリ。
自動整理、スコープ付きルール、エビデンス、ロールバックに対応したローカルファーストの MCP メモリ。
エージェントに書き込みを許可しながら、共有メモリが未レビューの寄せ集めにならないようにします。 MemoryGuard は書き込みのたびに自動で整理し、変更の根拠を保持して、 ガバナンス上の判断を取り消せるようにします。
アカウント不要。リモートサーバー不要。リモートテレメトリーなし。ローカルのみの利用状況テレメトリーは任意で、有界かつプライバシーに配慮した集計データをローカルに保存します。
クイックスタート · アップグレード · ナレッジライブラリ · アーキテクチャ · 対応ホスト · プライバシーと安全性
ガバナンス対象の合成投影です。生の会話テキストはグラフの外に保たれ、シグナルがメモリカテゴリ間を移動します。
v0.7.15 の新機能
- CodeGraph の自動ビルド: 信頼済みのブートストラップにより、プロジェクトの初回ビルドがバックグラウンドプロセスで開始されます。デフォルトおよびプロジェクトごとのスイッチは保持され、自動化を無効にしてもグラフは維持されます。対応するファイル書き込みイベントによって、増分更新が実行されます。
- わかりやすいグラフナビゲーション: ファイル概要とシンボルを切り替え、ファイルで絞り込み、隣接する関係を調べ、ズームコントロールを使用できます。
- 一時ストレージの使用量を制限: 通常のグラフクエリでは、データベース全体のコピーを保持せず、SQLite を直接読み取ります。検証とインストールの一時ファイルには、対象のプロジェクト/デプロイメントのキャッシュを使用し、処理の終了時にクリーンアップします。
v0.7.15 リリースノートと CodeGraph 自動化の詳細をご覧ください。アップグレードしてプロバイダー連携を修復した後、ホストを再接続するか、再起動してください。
以前のガバナンス改善
v0.7.13 では、必須ルールの置き換えと復旧を強化し、対象者に応じたアイデンティティ処理と競合解決を改善しました。
- 安全な必須ルールの置き換え: 置き換え時には、対象者の照合、正規ルール、重複排除、機密性チェック、公開上限に照らして、最終的な必須パッケージを検証します。同等のロックされていない先行ルールは同一トランザクション内で無効化され、検証に失敗すると更新全体がロールバックされます。詳しくは置き換えと復旧の詳細をご覧ください。
- ネイティブな Agent/グループの対象者照合: 照合と重複排除で、プロバイダーやランタイムの役割だけを理由に、同じネイティブ対象者を分割しなくなりました。異なる Agent アイデンティティは個別に維持され、プロジェクトスコープの対象者はプロジェクトの境界を維持します。プロバイダーの修復では、対象プロバイダーの検証済みアイデンティティを使用します。
- 可読性の高いアトミックな競合解決: 競合ビューでは相手側の情報を読みやすく維持し、解決時には相手側のグループを保持しながら、選択した変更をアトミックに適用します。曖昧な競合は未解決のまま維持されます。
- Cursor Hook の保護: Cursor MemoryGuard Hooks のタイムアウトを15秒から30秒に延長し、
failClosed: trueを設定しました。
v0.7.14 では、GitHub リポジトリ名の変更に伴うリリースメタデータのみを修正しており、ランタイムの動作に変更はありません。v0.7.14 のリリースノートをご覧ください。
v0.7.13 のリリースノートと リリース履歴をご覧ください。
以前のリリースの詳細は、変更履歴と GitHub のリリース記録に掲載されています。
トークンの根拠とデモ
使用状況イベントでは、measured_cached_input と
measured_cache_write_input を区別します。measured_cache_coverage.cache_read と
cache_write は、complete、partial、unavailable のいずれかを報告します。測定値がゼロの場合は
0 のまま維持され、プロバイダーのデータが欠落している場合は None/unavailable のままです。
文字数に基づく推定値には、プロバイダーのトークン数ではないことを明示するため、
estimated mg_deterministic_unit とラベルを付けます。
ベンチマークは、認可されたローカルワークスペースに対してのみ実行してください。
python scripts/benchmark_usage_telemetry.py --workspace . --window-days 7 --sync
測定値、推定値、導出値、未対応の意味については、ベンチマークガイドをご覧ください。サニタイズ済みの手順に沿って説明するには、デモ録画チェックリスト をご利用ください。リポジトリ内の合成グラフのアートワークは、実際の製品画面のキャプチャではなく、使用状況や節約効果の根拠にはなりません。
v0.6.0 における V2 の大規模なリファクタリング
v0.6.0 はストレージのみのアップグレードではなく、本番環境のデータプレーンのリファクタリングです。
- 権威ある V2 ドメイン: Memory、Rules、Evidence、Content、Runtime、Projection、Assets、CodeGraph、Skills、System の状態を、ガバナンスの境界が定められた明示的な SQLite ドメインに分離しました。
- 明示的な切り替え:
V1_ACTIVE → V2_BUILDING → V2_READY → V2_ACTIVEはフェイルクローズ方式です。V2 は READY/ACTIVE 以降、レガシーストアへの暗黙的なフォールバックや二重書き込みを行いません。 - 損失のない移行: 凍結したソースの準備には、整合性のある SQLite オンラインバックアップを使用します。ソースとターゲットのエビデンスを検証し、稼働中のソースのドリフトを再確認して、ロールバック用に V1 データと移行バックアップを保持します。
- ネイティブルーティング: MCP、CLI、GUI、Hook の各サーフェスを明示的に分類しました。このリリースでは、実装済みルート138件、廃止ルート95件、中立/ブロッカールート0件により、233サーフェスの切り替えを完了しました。
- ガバナンスされたインテリジェンス: ルールのライフサイクルと RuleMerge、抽出/強化、External MCP のインポート、プロバイダーのコントロールプレーン、会話履歴、Knowledge Library、GUI ガバナンスのすべてで、V2 のエビデンスと意思決定の経路を使用します。
- 運用エビデンス: Reference Audit、ドメインごとの SQLite ヘルスチェック、ガード付きメンテナンス、ロールバックのエビデンス、安全な未バインド診断を、準備状況の判定と運用に組み込みました。
MemoryGuard が必要な理由
永続メモリによって解決できるのは保存です。ガバナンスの問題は解決できません。
複数のコーディングエージェントが同じコンテキストに書き込むと、記録が重複したり、古くなったり、矛盾したり、範囲が広がりすぎたり、安全に再利用できなくなったりします。MemoryGuard はコーディングエージェントと共有メモリの間に入り、コンテキストを使いやすい状態に保ちます。
| ガバナンスがない場合 | MemoryGuard を導入した場合 |
|---|---|
| 正式な状態が定まらないまま、メモが蓄積される | 書き込みは分類、重複排除、置き換え、または競合として提示される |
| 修正によって以前の値がひそかに破棄される | 根拠と置き換えの連鎖によって、何がなぜ変わったのかが保持される |
| トークンや認証情報が有効なまま残る可能性がある | 機密情報のように見える内容は、アクティブメモリから隔離される |
| 書き込みのたびに手動承認が必要になる | エージェントは通常どおり書き込み、人は例外と結果を確認する |
| 生のチャットログが将来のコンテキストに漏れる | 会話履歴は、明示的に読み取る別個の証拠アーカイブとして保持される |
システムアーキテクチャ
%%{init: {"theme":"base","themeVariables":{"background":"#071521","fontFamily":"Arial, sans-serif","fontSize":"14px","primaryTextColor":"#EEF4F8","lineColor":"#557287","edgeLabelBackground":"#071521","clusterBkg":"#0A1A29","clusterBorder":"#27445A"},"flowchart":{"htmlLabels":true,"curve":"basis","nodeSpacing":32,"rankSpacing":48,"padding":14}}}%%
flowchart TB
Hosts["CODING-AGENT HOSTS<br/>Claude Code · Codex · Cursor · TRAE "]:::host
Gateway["LOCAL INTEGRATION<br/>MCP stdio · redirect rules · lifecycle hooks "]:::gateway
subgraph Core["GOVERNANCE CORE "]
direction LR
Identity["TRUST<br/>identity · scope "]:::core
MemoryAPI["MEMORY<br/>governed I/O "]:::active
Rules["RULES<br/>scope · assignment "]:::rule
HistoryAPI["HISTORY<br/>search · timeline "]:::history
Security["SAFETY<br/>validate · quarantine "]:::danger
Identity --> MemoryAPI
Identity --> Rules
Identity --> HistoryAPI
MemoryAPI --> Security
end
subgraph Stores["LOCAL GOVERNED STORES "]
direction LR
SharedDB[("V2 DOMAIN STORES<br/>Memory · Rules · Evidence · Content ")]:::store
HistoryDB[("HISTORY STORE<br/>isolated conversations ")]:::historyStore
AuditDB[("RECOVERY STORE<br/>versions · receipts · backups ")]:::store
end
Bootstrap["BOUNDED CONTEXT BOOTSTRAP<br/>mandatory rule pack · relevant recall "]:::bootstrap
Control["HUMAN CONTROL<br/>CLI · desktop governance console "]:::surface
Hosts --> Gateway --> Identity
MemoryAPI --> SharedDB
Rules --> SharedDB
HistoryAPI --> HistoryDB
Security --> AuditDB
SharedDB --> Bootstrap
Control --> Identity
classDef host fill:#12243A,stroke:#38D5C8,color:#EEF4F8,stroke-width:1.4px;
classDef gateway fill:#0D3338,stroke:#38D5C8,color:#EEF4F8,stroke-width:2.4px;
classDef core fill:#12243A,stroke:#557287,color:#EEF4F8,stroke-width:1.4px;
classDef active fill:#0D383A,stroke:#38D5C8,color:#EEF4F8,stroke-width:2px;
classDef rule fill:#3B2C18,stroke:#F3B562,color:#EEF4F8,stroke-width:1.8px;
classDef history fill:#102F45,stroke:#73C7F5,color:#EEF4F8,stroke-width:1.8px;
classDef danger fill:#3A2028,stroke:#EA6A6A,color:#EEF4F8,stroke-width:1.8px;
classDef bootstrap fill:#EEF4F8,stroke:#38D5C8,color:#071521,stroke-width:2.4px;
classDef store fill:#0B1624,stroke:#7F96A8,color:#EEF4F8,stroke-width:1.4px;
classDef historyStore fill:#102436,stroke:#73C7F5,color:#EEF4F8,stroke-width:1.4px;
classDef surface fill:#EEF4F8,stroke:#38D5C8,color:#071521,stroke-width:2px;
style Core fill:#081827,stroke:#27445A,stroke-width:1px,color:#EEF4F8
style Stores fill:#081827,stroke:#27445A,stroke-width:1px,color:#EEF4F8
linkStyle default stroke:#557287,stroke-width:1.4px;
クイックスタート
MCP Registry のメタデータ
このパッケージは、io.github.MerakOsiris/memoryguard としてローカル stdio MCP サーバーを公開します。
Registry のメタデータは server.json に保存され、上記のマーカーは PyPI パッケージの README に同梱されています。リリースは GitHub OIDC を通じて PyPI と公式 MCP Registry に公開されます。現在のパッケージバージョンと Registry エントリの有効/最新状態は、各サービスの公開情報で確認してください。
1. インストール
python -m pip install agent-memguard
デスクトップガバナンスコンソールを使用する場合:
python -m pip install "agent-memguard[gui]"
2. 現在のプロジェクトを認証する
memoryguard source add .
3. コーディングエージェントを接続または修復する
グローバルプロバイダー設定は、正規のユーザーデータホームにある実際のバインディングから再構築されます。このコマンドは冪等であり、グローバルへの切り替えが成功すると、置き換えられた MemoryGuard のプロジェクトレベルの設定を削除します。
# Repair one provider
memoryguard provider repair claude
memoryguard provider repair codex
memoryguard provider repair cursor
memoryguard provider repair trae
# Repair every detected provider
memoryguard provider repair all
インストール後にホストを再起動し、統合を確認してください:
memoryguard doctor
memoryguard mcp-status
memoryguard hooks status --provider all
デスクトップコンソールを起動します:
memoryguard gui
デスクトップショートカットでは、引き続き memoryguard-gui . を使用できます。引数なしの
memoryguard gui は常に正規のユーザーレベルの制御ディレクトリを開きます
(Windows ではデフォルトで %LOCALAPPDATA%\MemoryGuard)。そのため、プロジェクト内や
C:\Windows\System32 から実行しても、データベースが予期せず切り替わることはありません。
MEMORYGUARD_WORKSPACE はオペレーターが明示的に指定する上書き設定です。また、
memoryguard gui <project-path> または memoryguard gui --workspace <project-path>
を明示的に指定すると、特定のワークスペースが選択されます。
以前に選択したプロジェクトを記憶したり、フォルダー選択ダイアログを開いたりすることはありません。
Windows では、memoryguard gui はネイティブウィンドウをターミナルから切り離すため、
PowerShell を閉じても GUI は終了しません。
プロバイダーごとのセットアップと動作:
安定した Codex / Router バインディング
Codex/Router は、安定したローカルの Codex プログラムと制御インストールに MemoryGuard をバインドします。アカウントプロファイルはエンドポイント/エイリアスであり、新たなメモリ所有者ではありません。プロファイルを切り替えると、そのプロファイルは自動的に検出または修復され、検証済みのエージェントバインディングとアクティブグループが再利用されます。リクエストの識別は引き続きフェイルクローズであり、マシン間や任意のアカウント間で記録が共有されることはありません。
アップグレード
MemoryGuard は現在、Python のパッケージマネージャーを通じてアップグレードします:
python -m pip install --upgrade agent-memguard
memoryguard --version
memoryguard doctor
GUI 用の追加機能をインストールした場合は、アップグレード時も含めてください:
python -m pip install --upgrade "agent-memguard[gui]"
パッケージ自体を更新するコマンドはありません。パッケージマネージャーが正式なパッケージアップグレード方法です。以下の memoryguard upgrade は明示的なワークスペース移行フローであり、パッケージ更新ツールではありません。
既存の V1 データホームをアップグレードする
パッケージをアップグレードしてから、検証済みの移行を実行します。通常のユーザーレベルのデータホームでは、ワークスペース、データホーム、適用、確認の各引数は不要です。
python -m pip install --upgrade agent-memguard
memoryguard --version # confirms installed version
memoryguard upgrade
memoryguard doctor
このコマンドは V2 を準備し、凍結されたソース証拠とライブソースの証拠を検証し、Agent/Group の制御を移行します。すべてのゲートを通過した後にのみ有効化し、成功した移行に属するバックアップバッチのみを削除します。V2_ACTIVE に対して再実行しても、冪等に処理されます。書き込みゼロのレポートを取得するには、次を実行します。
memoryguard upgrade --preview
分離されたインストールを管理するオペレーター向けに、高度な明示的ワークスペース/データホームオプションも引き続き利用できます。ゲートに失敗した場合は非アクティブのままとなり、その証拠は保持されます。正常に有効化された場合、冗長な移行バックアップは保持されません。
既存の V2 以前のワークスペース:明示的な V2 切り替え
v0.6.0 は既存のワークスペースを自動的に有効化しません。まずパッケージをアップグレードしてから、同梱のオペレーター CLI を使用します。
# Read-only manifest status
memoryguard-v2 status -w .
# Build a frozen-source V2 shadow and stop at V2_READY
memoryguard-v2 prepare -w . --apply
# Activate only after the prepare result is V2_READY / ready=true
memoryguard-v2 activate -w . --confirm V2_ACTIVE
準備手順では、整合性のある SQLite オンラインバックアップを使用し、V1 と migration-backups を保持して、READY の前にライブソースのドリフトを再確認します。有効化では、マニフェストを変更する前に、新たにドリフトチェックを実行します。アップグレードの一環として、レガシーの V1 データや移行バックアップを削除しないでください。
ナレッジライブラリ
デスクトップコンソールでは、選択したフォルダーまたはファイル群を、ガバナンス対象のローカルナレッジライブラリにできます。ソースファイルは元の場所に残り、MemoryGuard は各ソースプロジェクトに実行時データベースをコピーするのではなく、ユーザーデータホームに検索可能なインデックスを保存します。ナレッジメタデータが、別個のソース本文ストアになることはありません。
| 機能 | 現在の動作 |
|---|---|
| ファイル/フォルダーの取り込み | フォルダーをブックとして、または選択したファイルをドキュメントとして追加します |
| 構造 | ドキュメントを解析し、章/セクションのコンテキストを保持して、追跡可能なチャンクを作成します |
| 検索 | 全文検索、オプションの埋め込み、階層型ナレッジグラフを利用します |
| 自然な同期 | 変更されたファイルを再取り込みします。部分的なスキャンや失敗したスキャンによって、以前にインデックス化されたコンテンツが暗黙に削除されることはありません |
| ライフサイクル | ブックをライブラリのごみ箱に移動する、復元する、または復旧用スナップショットを明示的に完全削除できます |
| メモリー候補 | 根拠に裏付けられた候補をプレビューしてから、ガバナンス対象の長期メモリーに追加できます |
デスクトップコンソールを開き、Knowledge Library を選択します。リモートの埋め込みやモデルを利用したインデックス化はオプトインであり、明示的な認可が必要です。ソーステキストをリモートプロバイダーに送信しなくても、ローカルの全文検索を利用できます。バックグラウンドのインポート、再取り込み、スマート再構築には永続的なタスクレシートがあります。同じリクエストを再試行すると、そのタスクが再利用されますが、異なるリクエストに同じキーを使うと拒否されます。別のリクエストのタスクが実行中の場合は、処理を受け付けたと装うのではなく、ビジー状態を報告します。
CodeGraph の更新
CodeGraph の最初のビルドは、明示的に確認が必要な全件ビルドです。スコープのビルド後は、信頼されたファイルへの書き込みが正常に行われるたびに、厳格なソースパスとアクティブなバインディングの検証を条件として、そのスコープの増分更新をトリガーできます。コンテンツハッシュに変更がなければ何も行わず、削除されたファイルは退役します。次のコンテキストには、範囲が制限された affected レシートが 1 つ渡されます。MemoryGuard はこの経路でデーモンやウォッチャーを実行せず、シェルや自由形式のテキストからパスを推測することもありません。プロジェクトを指定しない MCP 呼び出し元は、最初にバインド済みのディレクトリソースをビルドし、その後 codegraph_source_id を渡して、クエリ、ステータス、更新、グラフの読み取りでその正確なスコープを選択します。
デスクトップコンソールの画面
GUI には、7 つのガバナンスページと、それらとは別のトークン使用量と削減額の表示画面の、8 つのナビゲーション項目が表示されます。
- ガバナンス概要
- データソースとエージェント
- メモリーコア
- CodeGraph
- ルールと習慣
- 会話履歴
- リスクシグナルとガバナンスコンソール
- トークン使用量と削減額(7 つのガバナンスページとは別)
エージェント一覧には、プログラム/プロバイダー名が読みやすい形式で表示されます。基になる ID は詳細ビューで確認できます。データがない場合は、明示的な空の状態として表示されます。
書き込みとガバナンスのライフサイクル
%%{init: {"theme":"base","themeVariables":{"background":"#071521","fontFamily":"Arial, sans-serif","fontSize":"14px","primaryTextColor":"#EEF4F8","lineColor":"#557287","edgeLabelBackground":"#071521","clusterBkg":"#0A1A29","clusterBorder":"#27445A"},"flowchart":{"htmlLabels":true,"curve":"basis","nodeSpacing":30,"rankSpacing":42,"padding":14}}}%%
flowchart TD
subgraph Intake["01 · INTAKE "]
direction LR
Write(["Memory write "]):::entry
Scope["Resolve identity<br/>scope · audience "]:::core
Validate{"Authorized? "}:::decision
Reject["Reject<br/>no persistence "]:::danger
Write --> Scope --> Validate
Validate -- NO --> Reject
end
subgraph Organize["02 · ORGANIZE "]
direction TB
Secret{"Sensitive? "}:::decision
Quarantine["Quarantine<br/>outside active set "]:::danger
Compare["Classify · compare<br/>governed records "]:::active
Relation{"Relationship "}:::decision
New["NEW<br/>create active record "]:::result
Duplicate["DUPLICATE<br/>merge provenance "]:::result
Correction["CORRECTION<br/>supersede old record "]:::rule
Conflict["CONFLICT<br/>preserve both sides "]:::danger
Secret -- YES --> Quarantine
Secret -- NO --> Compare --> Relation
Relation --> New
Relation --> Duplicate
Relation --> Correction
Relation --> Conflict
end
subgraph Govern["03 · GOVERN "]
direction LR
Receipt[("Evidence event<br/>version receipt ")]:::store
Review["CLI or desktop review "]:::surface
Action["Correct · merge<br/>restore · delete "]:::rule
Snapshot["Reversible<br/>snapshot "]:::active
Receipt --> Review --> Action --> Snapshot
end
Validate -- YES --> Secret
Quarantine --> Receipt
New --> Receipt
Duplicate --> Receipt
Correction --> Receipt
Conflict --> Receipt
classDef entry fill:#EEF4F8,stroke:#38D5C8,color:#071521,stroke-width:2.4px;
classDef core fill:#12243A,stroke:#557287,color:#EEF4F8,stroke-width:1.5px;
classDef decision fill:#0D3338,stroke:#38D5C8,color:#EEF4F8,stroke-width:2px;
classDef active fill:#0D383A,stroke:#38D5C8,color:#EEF4F8,stroke-width:2px;
classDef result fill:#12243A,stroke:#38D5C8,color:#EEF4F8,stroke-width:1.6px;
classDef rule fill:#3B2C18,stroke:#F3B562,color:#EEF4F8,stroke-width:1.8px;
classDef danger fill:#3A2028,stroke:#EA6A6A,color:#EEF4F8,stroke-width:1.8px;
classDef store fill:#0B1624,stroke:#7F96A8,color:#EEF4F8,stroke-width:1.4px;
classDef surface fill:#EEF4F8,stroke:#38D5C8,color:#071521,stroke-width:2px;
style Intake fill:#081827,stroke:#27445A,stroke-width:1px,color:#EEF4F8
style Organize fill:#081827,stroke:#27445A,stroke-width:1px,color:#EEF4F8
style Govern fill:#081827,stroke:#27445A,stroke-width:1px,color:#EEF4F8
linkStyle default stroke:#557287,stroke-width:1.4px;
コンソールは承認待ちのキューではありません。エージェントは動き続けます。MemoryGuard は結果を記録し、後から修正するために必要な証拠を提示します。
ガバナンスの対象
| シグナル | ガバナンスアクション |
|---|---|
| 重複または古くなったメモリ | 正規レコードと置き換えチェーンを確認し、必要に応じて以前のバージョンを復元します |
| 矛盾するメモリ | 意図的に矛盾を解決するまで、両方を表示したままにします |
| シークレット、トークン、認証情報 | レコードを隔離し、アクティブな共有メモリに入らないようにします |
| 自動整理の誤り | 証拠を使って修正、統合、ロック、復元、またはロールバックします |
| 複数のコーディングエージェント | ソースの識別情報とスコープを保ちながら、エージェントを1つの共有グループに紐付けます |
| 必須ルール | エージェント、プロジェクト、プロバイダー、ランタイムロール、または共有グループにルールを割り当てます |
ルールと履歴は分離されています
MemoryGuard は、ガバナンス対象の長期メモリと生の会話履歴を、意図的に別々の経路で管理します。
| 領域 | 目的 | コンテキストの動作 |
|---|---|---|
| ルールと習慣 | 設定、手順、修正、事実、プロジェクト、スコープを指定した必須ルール | 必須ルールには、スコープ、除外、競合、セマンティック重複排除の適用後に、独立した文字数/トークン数の予算を適用します。有効な件数が20を超えると健全性に関する警告が表示されますが、ハードブロックにはなりません。保存件数は上限で制限されません。機密情報、破損、アイテムごとのサイズ超過、合計サイズの超過がある場合は、サイレントな切り詰めを行わず、安全側に倒して処理を拒否します。通常のレコードは関連性がある場合に呼び出されます |
| 会話履歴 | オーナーと共有グループのアクセス制御を備えた、ローカルの生の証拠アーカイブ | ブートストラップで自動的に取り込まれることはありません。生テキストは、明示的な履歴ツールを通じてのみ読み取られます |
| Neuron グラフ | メモリ、ルール、プロジェクト、エージェント、セッションのナビゲーションとガバナンス | 履歴ノードには安全なメタデータと要約が含まれ、生のチャット内容は含まれません |
履歴の取得は段階的に行われます。検索結果、範囲を限定したタイムライン、そして明示的に選択した発言またはセッションの順です。履歴から抽出すると、まずプレビューが作成されます。長期メモリにサイレントに書き込まれることはありません。
%%{init: {"theme":"base","themeVariables":{"background":"#071521","fontFamily":"Arial, sans-serif","fontSize":"14px","primaryTextColor":"#EEF4F8","lineColor":"#557287","edgeLabelBackground":"#071521","clusterBkg":"#0A1A29","clusterBorder":"#27445A"},"flowchart":{"htmlLabels":true,"curve":"basis","nodeSpacing":30,"rankSpacing":42,"padding":14}}}%%
flowchart LR
subgraph HistoryPath["CONVERSATION EVIDENCE "]
direction TB
Archive[("Raw local history ")]:::historyStore
Search["Search summaries "]:::history
Timeline["Bounded timeline "]:::history
Read["Explicit turn or session "]:::history
Preview["Evidence-backed<br/>extraction preview "]:::history
Confirm["Explicit acceptance "]:::surface
Isolation["NO AUTOMATIC<br/>BOOTSTRAP PATH "]:::barrier
Archive --> Search --> Timeline --> Read --> Preview --> Confirm
Archive -.-> Isolation
end
subgraph GovernedMemory["GOVERNED LONG-TERM MEMORY "]
direction TB
Mandatory["Scoped mandatory rules "]:::rule
Assignments["Agent · project<br/>role · group scope "]:::core
RulePack["Mandatory-rule<br/>budget "]:::budget
Ordinary["Facts · preferences<br/>projects · procedures "]:::memory
Recall["Task-relevant<br/>recall budget "]:::budget
Context["BOUNDED CONTEXT PACKET "]:::context
Mandatory --> Assignments --> RulePack --> Context
Ordinary --> Recall --> Context
end
HistoryPath ==>|GOVERNED WRITE | GovernedMemory
classDef rule fill:#3B2C18,stroke:#F3B562,color:#EEF4F8,stroke-width:1.8px;
classDef core fill:#12243A,stroke:#557287,color:#EEF4F8,stroke-width:1.4px;
classDef memory fill:#0D383A,stroke:#38D5C8,color:#EEF4F8,stroke-width:1.8px;
classDef budget fill:#12243A,stroke:#38D5C8,color:#EEF4F8,stroke-width:1.6px;
classDef context fill:#EEF4F8,stroke:#38D5C8,color:#071521,stroke-width:2.4px;
classDef history fill:#102F45,stroke:#73C7F5,color:#EEF4F8,stroke-width:1.6px;
classDef historyStore fill:#102436,stroke:#73C7F5,color:#EEF4F8,stroke-width:1.6px;
classDef surface fill:#EEF4F8,stroke:#73C7F5,color:#071521,stroke-width:2px;
classDef barrier fill:#3A2028,stroke:#EA6A6A,color:#EEF4F8,stroke-width:2px;
style GovernedMemory fill:#081827,stroke:#27445A,stroke-width:1px,color:#EEF4F8
style HistoryPath fill:#081827,stroke:#27445A,stroke-width:1px,color:#EEF4F8
linkStyle default stroke:#557287,stroke-width:1.4px;
対応ホスト
| ホスト | 統合 | 現在の制約 |
|---|---|---|
| Claude Code | グローバル MCP バインディング、リダイレクトルール、ユーザーレベルのライフサイクル Hook | 検証済みの引き継ぎ経路 |
| Codex | グローバル MCP バインディング、リダイレクトルール、ユーザーレベルのライフサイクル Hook | 検証済みの引き継ぎ経路 |
| Cursor | グローバル MCP バインディング、リダイレクトルール、ユーザーレベルのライフサイクル Hook | 検証済みの引き継ぎ経路 |
| TRAE | MCP バインディングとリダイレクトルール | 検証済みの Hook 接続箇所がないため、完全な引き継ぎではなくフォールバックとして報告されます |
プロバイダーのステータスは、リダイレクト済み、観測済み、稼働中、未対応のいずれかとして正確に報告されます。ホストに信頼できる統合ポイントがない場合、MemoryGuard はそのホストのネイティブメモリをすべて無効化できるとは主張しません。
アーキテクチャ
| レイヤー | 担当 |
|---|---|
| 証拠とコンテンツ | 許可されたソース、不変の証拠、コンテンツアドレス指定された BLOB/出現箇所、ソースマニフェスト、会話アーカイブ |
| メモリとルール | スコープ付きメモリアトム、リビジョン、バインディング、ルール定義、判断、証拠リンク、補償的なガバナンス操作 |
| ランタイムとプロジェクション | 範囲を限定した作業コンテキスト、シナリオ/プロファイルのプロジェクション、CodeGraph、Assets、Skills のメタデータ |
| 切り替えとガバナンス | 4状態マニフェスト、ネイティブ MCP/CLI/GUI/Hook ルーティング、Reference Audit、メンテナンス、プロバイダーアダプター、ロールバックの証拠 |
V2 は、1つの共有メモリデータベースではなく、独立した権威ある SQLite ドメインを使用します。ランタイムは、マニフェストが V2_ACTIVE に達した後にのみ V2 の読み書きを行います。V2_BUILDING と V2_READY では、サイレントなフォールバックや二重書き込みは行われません。証拠は追跡可能な状態に保たれますが、自動的に信頼されたメモリとして扱われることはありません。
プライバシーと安全性
- MemoryGuard はローカルの MCP stdio サーバーとして動作します。
- 管理対象のデータは、リモートモデルまたは埋め込み処理を明示的に許可しない限り、すべてローカルに保持されます。オプションの利用状況テレメトリはローカルのみで使用され、計測されたホストのトークンイベントと決定論的な変換イベントは
.memoryguard/usage_telemetry.sqliteに保存されます。データがアップロードされることはありません。トークン削減量は MemoryGuard の決定論的な単位に基づく推定値であり、プロバイダーの請求明細ではありません。トークンレポートに対応していないホストは、計測対象の列では引き続きサポートされません。 - ナレッジライブラリのデータベースには
MEMORYGUARD_HOMEまたはプラットフォームのユーザーデータディレクトリが使用されるため、選択したソースフォルダー内に独自のナレッジデータベースが作成されることはありません。 - V2 の権威あるワークスペース状態は
.memoryguard/の下で、Memory、Rules、Evidence、Content、Runtime、Projection、Assets、CodeGraph、Skills、System の各ドメインに明確に分離されています。History、Source、Binding、Group の制御は V2 ネイティブの領域です。従来の V1 アーティファクトは、切り替え後もロールバック/監査の証拠としてローカルに保持されますが、V2 のアクティブなランタイム書き込み経路ではなくなります。これらを読み取れるのはmemoryguard.migrationのみです。 - ソースのスキャンはデフォルトで読み取り専用です。
- ガバナンスを変更する経路では、検証、明示的なスコープ、来歴、可逆的な状態を使用します。
- 隔離されたレコードは、アクティブな共有メモリの外部に保持されます。
- 生の会話履歴がブートストラップに自動挿入されることはありません。
- 共有グループの履歴へのアクセスは、現在のアクティブなメンバーシップに従い、別の Agent のソースを削除する権限は付与されません。
CLI
インストールされた memoryguard コマンドでは、次のトップレベル操作を使用できます。
| コマンド | 用途 |
|---|---|
audit [path] | 読み取り専用の監査を実行し、レポートを生成します |
open [path] | 最新のインタラクティブレポートを開きます |
explain <finding_id> | 検出結果の証拠とリスクを説明します |
source <action> | 許可されたソースの一覧表示、追加、削除、プレビューを行います |
scan | 許可されたソースをスキャンし、カバレッジ台帳を作成します |
doctor | V2 マニフェスト、ドメインの可用性、ネイティブカバレッジを診断します |
mcp-status | V2 MCP/バックエンドの健全性を確認します。テナント数の確認には、バインドされた Agent のスコープが必要です |
hooks <action> | ホスト Hooks のインストール、確認、一時停止、修復、削除を行います |
provider <action> | グローバルなプロバイダー統合の確認または修復を行います |
storage audit|report | 読み取り専用の V2 Reference Audit と、ドメインごとの SQLite 健全性レポートを実行します |
storage sweep|compact | ガード付きの V2 メンテナンスを実行します。物理的な変更には ACTIVE 状態、リース、世代、安全性の証明が必要です |
groups <action> | 管理対象のグループ状態を確認します |
gui [path] | インタラクティブなガバナンスコンソールを起動します |
desktop | 信頼されたデスクトップ実行環境を起動します |
古い V1 の plan、apply、verify、undo、import、gc ワークフローは、明示的に廃止された互換性機能として解析できる場合がありますが、V1 のランタイム経路ではありません。V2_ACTIVE のもとでは、レガシーストアへの書き込みを行わず、安定した廃止済みの結果を返します。レガシーデータ入力が受け付けられるのは、明示的な memoryguard.migration アップグレードフローのみです。
現在のコマンドリファレンスを確認するには、memoryguard --help または memoryguard <command> --help を実行してください。
MCP API
デフォルトの MCP ディスカバリーサーフェスは、意図的にコンパクトにしています。新しい MCP クライアントには、日常的に使用する次の 11 個のツールが tools/list を通じて提供されます。
| ツール | 目的 |
|---|---|
memoryguard_context_bootstrap | 範囲を限定した必須ルールと、関連するメモリーコンテキストを読み込みます |
memoryguard_memory_search | クエリ、ライフサイクルの状態、上限付きの件数で、管理対象のメモリーを検索します。kind は MCP の検索フィルターではありません。意味的な重複や競合のチェックは、別個の高度なガバナンス機能です。 |
memoryguard_memory_read | 管理対象のメモリーを 1 件読み込みます |
memoryguard_memory_write | 管理対象のメモリーを書き込み、整理します |
memoryguard_memory_update | 既知のメモリー 1 件の本文、種類、想起ポリシー、または優先度を更新します。ライフサイクルの状態は変更しません。 |
memoryguard_memory_delete | 管理対象のメモリーをソフト削除します |
memoryguard_memory_status | 共有メモリーの状態を確認します |
memoryguard_audit | ローカルの読み取り専用ガバナンス監査を実行します |
memoryguard_explain | 監査で検出された項目 1 件と、その根拠を説明します |
memoryguard_capabilities | ページネーションを上限付きで行い、必要に応じて JSON Schema をオンデマンドで取得して、登録済みの MCP 操作とレビュー済みのヘッドレス GUI 操作を検出します |
memoryguard_invoke | 検出された MCP 操作またはレビュー済みのヘッドレス GUI 操作を呼び出します。変更を伴う対象には確認と冪等性キーが必要です |
高度なガバナンス機能は、引き続き GUI と CLI から利用できます。ルールのライフサイクル、バインディングと共有グループ、ソーススキャン、CodeGraph、ナレッジと履歴のレビュー、プロバイダー制御、外部 MCP のインポート、メンテナンス操作が含まれます。既存の高度な MCP 名は、インストール済みのクライアントが正確な名前を指定して呼び出す場合、互換性のために引き続き使用できますが、デフォルトの tools/list には返されません。これにより、ガバナンス機能を削除することなく、検出やスキーマ取得に伴う負荷を軽減できます。
memoryguard_capabilities は、より広範な互換カタログを検出するための手段です。操作名の完全一致検索、中国語または英語のクエリ、ドメインによる絞り込み、オフセットページネーションに対応しています。スキーマは、選択したページに対して include_schema=true が指定された場合にのみ返されます。このカタログでは、memoryguard_invoke を通じて、レビュー済みのヘッドレス GUI 業務操作を 162 件公開しています。8 件の GUI 操作は、既存の権限によって引き続き明示的に制限されています。対象は、デスクトップ専用のパス/フォルダー操作、デスクトップ管理者による CodeGraph の選択/ビルド、SafeBridge プロトコル操作です。
有界読み取りレスポンス
MemoryGuard はデフォルトで JSON テキストを圧縮します。再取得可能な読み取りレスポンスは、すべての content ブロックと既存の structuredContent を含む、完全な MCP エンベロープ全体で 24,000 UTF-8 バイトを上限とします。小さなレスポンスは既存の形式を維持します。上限を超える読み取りでは、response_ref と必須の識別子を含む簡潔なレシートが返され、元の結果が暗黙のうちに切り詰められることはありません。
memoryguard_capabilities で memoryguard_response_read を検出した後、既存のブローカー経由でページを取得します。
{
"operation": "memoryguard_response_read",
"arguments": {
"response_ref": "opaque-id",
"fields": ["/data/memory_id"],
"offset": 0,
"limit": 3000
}
}
各ページは next_offset を含む UTF-8 JSON フラグメントです。順番に連結してください。limit は 4~4096 バイトで、オフセットは UTF-8 文字の境界である必要があります。単一の JSON テキストペイロードでは、fields で業務フィールドを選択できます。トップレベルの名前、または /data/memory_id のようなオブジェクト専用の JSON Pointer を使用してください。複数コンテンツおよび非 JSON の結果ではフィールド選択は拒否され、エンベロープ全体のページとしてのみ取得できます。
プライベート参照は MCP プロセス内に限り、最大 5 分間保持されます。スナップショットは最大 16 件で、それぞれ最大 512,000 バイトです。参照は、信頼されたセッション、プリンシパル、スコープ、アクティブなバインディングリビジョンの完全な一致に紐付けられます。各ページの取得時に、現在の認可のもとで元の 読み取りを再実行し、そのダイジェストを比較します。拒否、出力の変更、バインディングまたはセッションの変更、参照の期限切れが発生した場合は、response_ref_access_denied、response_ref_expired、response_ref_result_changed など、常に同じ拒否結果が返されます。キャッシュされた古いコンテンツが、現在の読み取りを回避するために使われることはありません。公開機能メタデータには、既存のオフセットページネーションが使用されます。書き込みとコンテキストのブートストラップでは、既存の完全なレシート/必須ルールの契約が維持され、レスポンスのページネーションは要求できません。そのため、ページ読み取りによって変更操作が再実行されることはありません。上限を超える読み取りで参照を安全に作成できない場合は、有界レシートに delivery.status="unavailable" および action="narrow_query" が報告され、結果全体を取得できるとは保証されません。
公開されているスキーマを使った検出と呼び出しの例:
{"operation":"memoryguard_task_list","include_schema":true,"limit":1}
{"operation":"memoryguard_task_list","arguments":{"limit":20}}
変更を伴うターゲットの場合、呼び出しエンベロープには "confirmed":true と空でない "idempotency_key" も含める必要があります。ブローカーはこれらの証明情報を、ターゲットに既存の権限およびスコープのチェックへ転送します。
基盤となる互換性カタログには、以下も含まれます。
- ガバナンス対象のメモリの読み取り、検索、書き込み、更新、削除、ステータス確認;
- 必須ルールの分離を備えた有界コンテキストのブートストラップ;
- ルールの作成、フィードバック、マージガバナンス、取り消し、スコープ統計;
- エージェントバインディングと共有グループの調査;
- ソースのスキャン、グラフへの投影、インポートのプレビュー、ビルド計画;
- 外部 MCP の検出とインポート;
- ドキュメント抽出のプレビューと候補の承認;
- 会話履歴の検索、タイムライン、明示的な読み取り、エクスポート、削除、抽出のプレビュー;
- プロバイダーのインストールとホストエージェントの機能拡張。
簡潔なデフォルトの検出セットには、MCP tools/list を使用してください。登録済みの互換性カタログとレビュー済みの操作メタデータには、memoryguard_capabilities を使用してください。
プロジェクトリンク
- PyPI パッケージ
- GitHub リリース
- 変更履歴
- v0.7.13 リリースノート
- v0.7.12 リリースノート
- v0.7.11 リリースノート
- v0.7.9 リリース記録
- v0.7.8 リリース記録
- v0.7.7 リリース記録
- v0.7.6 リリース記録
- v0.7.5 リリース記録
- v0.7.4 リリース記録
- v0.7.3 リリース記録
- v0.7.2 リリース記録
- v0.7.1 リリース記録
- v0.7.0 リリースゲート
- メモリーの継続性とロスレスストレージの仕様
- プライバシーポリシー
- 利用規約
- 利用者向けガイドライン
- コントリビューターライセンス契約
- 課題トラッカー
ロードマップ
- リリース履歴: v0.7.9 では、標準的なガバナンス、ローカル限定のトークン証拠、読みやすいマルチエージェントガバナンス、および GitHub、PyPI、公式 MCP Registry を通じた公開配布を統合しています。v0.7.8 には、先行するガバナンス、テレメトリー、Codex ランタイムの作業を記録しています。v0.7.7 では、検証済みで一意に関連付けられた制御ホームにおいて、プロバイダーの単独修復を安全に行えるようにし、Agent と共有グループの識別情報を維持しながら、インストール済み Codex MCP/Hook の修復を現在のインタープリターに合わせています。v0.7.6 では、単一の不変スナップショットによって Codex Hook/MCP のランタイム選択を一貫させ、Hook の状態ロック時間を短縮し、必須オーバーフロー時の明示的なフェイルクローズ処理によって、ブートストラップの成功/失敗状態を正確に保ちます。以前のリリース記録には、v0.7.5 の競合レビュー、v0.7.4 の標準ガバナンス、v0.7.3 の共有履歴、v0.7.2 の書き込み/読み取りおよび Codex ライフサイクルの変更が詳しく記載されています。v0.7.1 の V2 のみへの移行とデスクトップのライフサイクル作業は、過去のリリース情報として引き続き記録されています。
- 受け入れの境界: Graphify の証拠は、上記で説明した重点的な
3 / 3の結果と、実際の全リポジトリのエクスポート/プロジェクションです。上流の Graphify の全リポジトリテストスイートが成功したとは主張していません。 - リリース後の次の予定: CodeGraph/Skills の取り込み範囲の拡大、運用者にとってより使いやすいメンテナンスレポート、移行の可観測性の向上です。長期記録は古くなったという理由だけで廃止しません。
- その後: チームおよびエンタープライズ向けの機能は、需要が検証された後にのみ提供します。
貢献
課題の報告やプルリクエストを歓迎します。変更を提出する前に、CONTRIBUTING.md をお読みください。プルリクエストを提出するには、CLAへの同意が必要です。
ライセンス
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。