mcpField
M
memory-dag-compactor

memory-dag-compactor

github.com/archieindianエージェントワークフロー7345 回インストール26 週間前に更新
リポジトリ

memory-dag-compactor について

Memory DAG Compactor は MEMORY.md の項目を多層の要約グラフに整理し、元の項目は保持します。セッションをまたいでコンテキストを検索するエージェント向けで、要約の確認、検索、統合の取り消しができます。

主な機能

  1. 01階層型のDAG要約を作成
  2. 02元のMEMORY.md項目を保持
  3. 03元の項目と要約を検索
  4. 04DAG構造と要約の系譜を確認
  5. 05要約の統合を取り消し

活用シーン

  1. 01増え続けるエージェントメモリを整理
  2. 02メモリ要約から詳細を検索
  3. 03要約と元項目の関係を確認
  4. 04不適切な要約統合を取り消し

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/archieindian/openclaw-superpowers --skill memory-dag-compactor

インストール後、Claude Code で/memory-dag-compactorを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

compact.py
example-state.yaml
STATE_SCHEMA.yaml

詳細

メモリ DAG コンパクター

概要

標準的なメモリ圧縮は情報が失われ、古いエントリーは切り捨てられ、詳細は永久に消えてしまいます。Memory DAG Compactor は、フラットな圧縮を、lossless-claw の Lossless Context Management のアプローチに着想を得た、階層型サマリーの**有向非巡回グラフ(DAG)**に置き換えます。

DAG の各深度では、その抽象度に合わせて調整された専用のプロンプトを使用します。

深度名前保持する内容タイムラインの粒度
d0リーフファイル操作、タイムスタンプ、具体的なアクション、エラー時間単位
d1圧縮前のコンテキストからの変更点、決定事項セッション単位
d2アーク目標 → 結果 → 引き継ぐ内容日単位
d3+長期保存数週間の非アクティブ期間後も残る長期的なコンテキスト日付範囲

元の MEMORY.md エントリーは削除されず、検索可能な多段階のサマリー階層に整理されるだけです。

実行するタイミング

  • 毎晩午後 11 時に自動実行(cron)し、その日のメモリエントリーを圧縮します
  • MEMORY.md が設定可能なしきい値(デフォルト:200 エントリー)を超えたとき
  • 長時間実行するタスクの前に、メモリをコンパクトで検索可能な状態にします
  • メモリにあるはずの情報について、エージェントが「覚えていません」と報告したとき

使用方法

python3 compact.py --compact                      # Run leaf + condensation passes
python3 compact.py --compact --depth 0            # Only leaf summaries (d0)
python3 compact.py --compact --depth 2            # Condense up to d2 arcs
python3 compact.py --status                       # Show DAG stats and health
python3 compact.py --tree                         # Print the summary DAG as a tree
python3 compact.py --search "deployment issue"    # Search across all depths
python3 compact.py --inspect <summary-id>         # Show a summary with its children
python3 compact.py --dissolve <summary-id>        # Reverse a condensation
python3 compact.py --format json                  # Machine-readable output

手順

ステップ 1 — 圧縮を実行する

python3 compact.py --compact

コンパクターは次の処理を行います。

  1. MEMORY.md からすべてのエントリーを読み込みます
  2. エントリーをチャンクにグループ化します(デフォルト:リーフあたり 20 エントリー)
  3. 運用上の詳細を保持する d0 リーフサマリーを生成します
  4. リーフ数がファンアウト(デフォルト:5)を超えると、d1 サマリーに集約します
  5. DAG が予算内に収まるまで、各深度で集約を繰り返します
  6. サマリー DAG を状態に書き込みます

ステップ 2 — 深度をまたいでメモリを検索する

python3 compact.py --search "API migration"

元のエントリーとすべてのサマリー深度を検索します。結果は関連性と深度に基づいて順位付けされます。深いサマリー(d0)はより詳細で、浅いサマリー(d3+)は全体像を示します。

ステップ 3 — 検査と修復

python3 compact.py --tree             # Visualize the full DAG
python3 compact.py --inspect s-003    # Show summary with lineage
python3 compact.py --dissolve s-007   # Reverse a bad condensation

深度を考慮したプロンプト設計

d0(リーフ)— 運用上の詳細

保持する内容:タイムスタンプ、ファイルパス、実行したコマンド、エラーメッセージ、具体的な値。省く内容:会話上の冗長な部分、繰り返した試行、詳細すぎるツール出力。

d1(圧縮)— セッションのコンテキスト

保持する内容:前の状態からの変更点、決定事項とその理由、発生した障害。省く内容:ファイルごとの詳細、正確なタイムスタンプ、中間ステップ。

d2(アーク)— 目標から結果までの流れ

保持する内容:目標の定義、最終結果、引き継ぐ内容、未解決の質問。省く内容:セッションレベルの詳細、個々の決定事項、使用した具体的なツール。

d3+(長期保存)— 長期的なコンテキスト

保持する内容:プロジェクトの概要、アーキテクチャ上の決定、ユーザーの好み、繰り返し現れるパターン。省く内容:2 週間の非アクティブ期間後には重要でなくなる情報。

設定

パラメーターデフォルト説明
chunk_size20リーフサマリーあたりのエントリー数
fanout5圧縮が始まるまでの最大子ノード数
max_depth4DAG の最大深度
token_budget8000組み立てるコンテキストの目標トークン数

状態

DAG の構造、サマリーの内容、系譜は ~/.openclaw/skill-state/memory-dag-compactor/state.yaml に保存されます。

フィールド:last_compact_at、dag_nodes、dag_edges、entry_count、compact_history。

注意事項

  • MEMORY.md の変更や削除は行いません。DAG はその上に重ねるものです
  • 各サマリーには、圧縮した内容を示す [Expand for details about: ...] フッターが含まれます
  • Dissolve を実行すると圧縮が元に戻り、子サマリーがアクティブセットに復元されます
  • lossless-claw の DAG ベースの要約階層と、深度を考慮したプロンプトシステムに着想を得ています

コメント