dream について
Mem0 Dream は、保持ポリシーに基づいてプロジェクトメモリの重複、矛盾、古い項目を調べる整理スキルです。変更前に提案を確認でき、自動モードでは人の判断が必要な矛盾を保留します。
主な機能
- 01保持ポリシーの読み込み
- 02プロジェクトメモリ全件の取得
- 03重複と矛盾の検出
- 04古い項目や低信頼度項目の抽出
- 05適用前に変更案を確認
- 06自動モードでは矛盾を保留
活用シーン
- 01重複するプロジェクトメモリの統合
- 02保存された決定事項の矛盾を確認
- 03保持ルールに沿ったメモリの整理
- 04矛盾を後回しにして自動整理
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ mem0ai/ mem0 --skill dreamインストール後、Claude Code で/dreamを入力して読み込まれたか確認します。
詳細
Mem0 Dream — メモリの統合
このスキルでは、メモリの統合処理を実行します。すべてのプロジェクトメモリを取得し、ほぼ重複しているものを特定し、矛盾にフラグを付け、設定された保持ポリシーに基づいて古い項目を整理します。変更を加える前に、提案された変更をすべて差分として表示し、ユーザーの承認を得ます。
重要:手順は必ず順番どおりに(1 → 2 → 3 → 4 → 5 → 6)実行してください。各手順は前の手順に依存しています。並行して実行したり、先の手順に進んだりしないでください。
手順 1:保持ポリシーを読み込む
パーサースクリプトを実行して、有効な保持ポリシーを特定します。現在のプラットフォームに適した PLUGIN_ROOT 変数(${CLAUDE_PLUGIN_ROOT}、${CODEX_PLUGIN_ROOT}、または ${CURSOR_PLUGIN_ROOT})を使用します。
python3 "<PLUGIN_ROOT>/scripts/parse_mem0_config.py" "<cwd>"
JSON 出力(category → days | null の辞書)を解析します。スクリプトが失敗するか {} を返した場合は、以下の組み込みデフォルト値を使用します。
metadata.type | デフォルトの保持期間 |
|---|---|
session_state | 90 日 |
compact_summary | 90 日 |
| その他すべて | 削除なし |
解決したポリシーは、手順 3 で使えるように保存しておきます。
手順 2:すべてのプロジェクトメモリを取得する
get_memories を呼び出して、アクティブなプロジェクトのメモリをすべて取得します。
get_memories(
filters={"AND": [{"user_id": "<active_user_id>"}, {"app_id": "<active_project_id>"}]},
page_size=200,
)
応答でページが残っていることが示された場合は、すべてのメモリを取得するまでページネーションします。続行する前に、メモリの全リストを収集してください。メモリが 0 件の場合は、次を出力します。
No memories found for project <project_id>. Nothing to consolidate.
…その後、停止します。
手順 3:分析 — 問題を特定する
すべてメモリ上で作業し、まだ何も変更しないでください。
メモリを metadata.type ごとにグループ化します(フィールドがない場合は "unknown" を使用します)。
各グループで、以下を特定します。
3a. ほぼ重複しているペア(統合候補)
2 つのメモリが、同じ事実や決定を異なる表現で述べている場合(例:「認証には PostgreSQL を使用する」と「認証 DB は PostgreSQL」)は、ほぼ重複しています。
ヒューリスティック — 以下の条件をすべて満たす場合、2 つのメモリはほぼ重複しています。
- 類似度のしきい値:推定コサイン類似度が 0.9 超(名詞/キーワードの重複を代替指標とし、重要な名詞の 60%超が重複する場合は、類似度が 0.9 超と見なします)。
metadata.typeが同じ。- どちらのメモリもピン留めされていない(
metadata.pinned != true)。
該当するペアごとに、どちらの元のメモリよりも完全かつ具体的な、統合版を作成します。
3b. 矛盾
2 つのメモリが同じトピックについて相反する事実を述べている場合(例:「ECS にデプロイする」と「Vercel にデプロイする」)は、矛盾しています。
より新しく、信頼度の高いメモリを、優先する可能性が高いものとして特定します。ユーザーが確認できるよう、両方の ID と内容を保存します。
3c. 削除候補
以下のいずれかに該当するメモリは、削除候補です。
metadata.typeに保持ポリシーが設定されており、メモリが指定日数より古い(created_atを今日と比較)。- 信頼度スコアが 0.3 未満で、かつこのプロジェクト固有の情報を含まない(ファイルパス、識別子、または分野固有の名詞がない)。
metadata.pinned == true のメモリは、経過時間や信頼度にかかわらず、必ず対象から除外してください。
手順 4:差分レポートを出力する
変更を加える前に、構造化された差分をターミナルに出力します。形式は次のとおりです。
## dream — consolidation report
Merges (<N>):
[mem0:<id1>] + [mem0:<id2>] → "<merged content, 100 chars>"
Conflicts (<N>):
[mem0:<idA>] vs [mem0:<idB>] — "<topic>" [A/B/skip]
Prune (<N>):
[mem0:<id>] — <type>, <age>d old
Proposed: <N> merges, <N> prunes, <N> conflicts. Apply? [Y/n]
いずれかのカテゴリの項目が 0 件の場合、そのセクションは省略します。
提案の合計が 0 件(統合、削除、競合がすべてない)の場合は、次を出力します。
Dream complete. No duplicate, contradictory, or stale memories found.
…その後、停止します。
手順 5:ユーザーの入力を待って適用する
5a. 矛盾
レポートの CONFLICT ペアごとに、ユーザーが A、B、または skip と入力するまで待ちます(大文字と小文字は区別しません)。何も入力されなかった場合(空欄)は、skip として扱います。
最終的な適用確認に進む前に、各ペアの優先する側を記録します。
5b. 最終確認
すべての矛盾の解決方法を収集した後、次のプロンプトを表示します。
Apply? [Y/n]
ユーザーが n または no と入力した場合(大文字と小文字は区別しません)は、Cancelled. No changes made. と出力して停止します。
ユーザーが確認した場合(Y、yes、または空欄/Enter)は、以下の順番ですべての変更を適用します。
マージ
承認されたマージのペアごとに、次を実行します。
delete_memory(<id1>)delete_memory(<id2>)add_memoryを実行し、次の値を指定します。text="<merged content>"user_id=<active_user_id>app_id=<active_project_id>(トップレベル。メタデータには含めません)metadata={"type": "<original type>", "branch": "<active_branch>", "confidence": <higher of the two original scores>, "source": "mem0-dream"}infer=False
矛盾(解決済み)
ユーザーが A または B を選択した、解決済みの競合ごとに、次を実行します。
- 選ばれなかった側のメモリを削除します。
delete_memory(memory_id=<loser_id>)
ユーザーが skip を選択した矛盾には変更を加えません。
削除
削除候補ごとに、次を実行します。
delete_memory(<memory_id>)
ステップ 6:概要を表示する
すべての変更を適用した後、次を表示します。
Dream complete — merged: <N>, pruned: <N>, conflicts resolved: <N>, skipped: <N>
自動モード
--auto を指定して実行した場合(例:/mem0:dream --auto)、対話なしで実行します。
- マージ:自動的に適用します(矛盾はなく、両方の内容に互換性があります)。
- 削除:自動的に適用します(経過時間と信頼度に基づき、曖昧さはありません)。
- 矛盾:スキップします。人による判断が必要です。
同時実行ガード
作業を始める前に、/tmp/mem0_dream_auto.lock のロックファイルを確認します。
- ロックファイルが存在し、作成から10分未満の場合は、
[mem0-dream --auto] Another run in progress — skipping.を表示して終了します。 - それ以外の場合は、ロックファイルを作成します(現在のタイムスタンプを書き込みます)。終了時には、どの終了経路でも削除します。
実行
自動モードでは、次の手順で実行します。
- 通常どおり、ポリシーを読み込み、メモリを取得します(ステップ1~3)。
- 差分を表示したり確認を求めたりせずに、マージと削除を適用します。
- 簡潔な概要を表示します。
[mem0-dream --auto] project=<id> merged=<N> pruned=<N> conflicts_skipped=<N> - 矛盾が検出されてスキップされた場合は、リマインダーを保存する前に、
mem0-dream-autoのリマインダーがすでに存在するか確認します。- 既存のリマインダーを検索します。
search_memories(query="mem0-dream contradictions manual review", filters={"AND": [{"user_id": "<active_user_id>"}, {"app_id": "<active_project_id>"}, {"metadata": {"source": "mem0-dream-auto"}}]}, top_k=1) - 類似度が0.9を超える検索結果がある場合は、リマインダーを保存しません(すでに存在します)。
- 該当する結果がない場合は、リマインダーを保存します。
add_memory( text="mem0-dream detected <N> contradiction(s) requiring manual review. Run /mem0:dream to resolve them interactively.", user_id="<active_user_id>", app_id="<active_project_id>", metadata={"type": "task_learning", "source": "mem0-dream-auto", "branch": "<active_branch>"}, infer=False, ) - 既存のリマインダーを検索します。
関連項目
/mem0:forget— 特定のメモリを対象に削除します(検索+確認+削除)/mem0:health --deep— 変更を適用せずに、品質をすばやくスキャンします