
Mem0 Dream
FreeStreamline your project memories for clarity and efficiency.
Free · Opens the source repo
What Mem0 Dream does
Mem0 Dream is a skill designed to enhance the quality of project memories by consolidating them through a systematic process. It identifies near-duplicate memories, resolves contradictions, and prunes stale entries based on user-defined retention policies. This helps maintain a clean and efficient memory database, which is crucial when dealing with a high volume of stored memories. The skill operates in a structured manner, ensuring that users can review proposed changes before any modifications are made.
The process begins with loading retention policies from a project configuration file, allowing users to customize how long different types of memories should be retained. If no configuration is found, the skill defaults to built-in policies. Once the policies are set, it fetches all memories associated with the active project, analyzing them for duplicates, contradictions, and candidates for pruning. The analysis is performed entirely in-memory to ensure that no changes are made until the user has approved them.
After identifying issues, Mem0 Dream generates a structured diff report detailing proposed merges, conflicts, and prunes. Users can then review each suggestion, particularly for contradictions, where they must decide which memory to keep. This interactive approach ensures that users have full control over the consolidation process. Once confirmed, the skill applies the changes systematically, ensuring that the memory database remains accurate and relevant.
Mem0 Dream is particularly useful for developers and designers who frequently update and manage project memories, helping them to reduce noise and improve the clarity of their stored information. By regularly using this skill, users can ensure that their memory database is not only up-to-date but also streamlined for efficiency.
When to use it
Use Mem0 Dream when your memory count is high and search results feel cluttered or repetitive.
When not to use it
Avoid using this skill if you need to retain all memories without modification or if you are not ready to review proposed changes.
What you can build with it
Cleaning Up Project Memories
When project memories accumulate over time, use Mem0 Dream to identify and remove duplicates and outdated entries.
Resolving Memory Conflicts
If you encounter contradictory memories, this skill helps you review and decide which memory to keep, ensuring consistency.
Maintaining Memory Quality
Regularly run Mem0 Dream to prune stale memories and keep your project memory database relevant and efficient.
How to install Mem0 Dream
View source1. Install with the skills CLI
npx skills add mem0ai/mem0/mem0-dream --agent claude-code2. Or install it manually
Download the skill folder and drop it into ~/.claude/skills/ for all projects, or .claude/skills/ to scope it to one repo. Restart Claude Code so it picks up the new skill.
Anthropic's agentic coding CLI, and the reference implementation of Agent Skills. Drop a skill folder into ~/.claude/skills and Claude Code loads it automatically whenever a task matches the skill's description. Claude Code docs
Inside SKILL.md
Written by mem0aiMem0 Dream — Memory Consolidation
This skill performs a memory consolidation pass: it fetches all project memories, identifies near-duplicates, flags contradictions, and prunes stale entries based on configured retention policies. All proposed changes are shown as a diff for user approval before anything is modified.
IMPORTANT: Execute steps strictly in order (1 → 2 → 3 → 4 → 5 → 6). Each step depends on the previous one. Do NOT run steps in parallel or skip ahead.
Step 1: Load Retention Policies
Check for a project config file in the project root (current working directory):
- Look for
.mem0.jsonfirst. If it exists, parse it as JSON and read theretentionfield (a dict ofcategory → days | null). - If
.mem0.jsonis not present, look for.mem0.md. If it exists, scan it for aretention:section or YAML front matter with retention settings and parse what you find. - If neither file exists, skip config loading entirely.
If no config is found or the config contains no retention settings, fall back to these built-in defaults:
metadata.type | Default retention |
|---|---|
session_state | 90 days |
compact_summary | 90 days |
| all others | no pruning |
Store the resolved policies for use in Step 3.
Step 2: Fetch ALL Project Memories
Call get_memories to retrieve every memory for the active project:
get_memories(
filters={"AND": [{"user_id": "<active_user_id>"}, {"app_id": "<active_project_id>"}]},
page_size=200,
)
If the response indicates more pages exist, paginate until all memories are fetched. Collect the full list before proceeding. If zero memories are found, print:
No memories found for project <project_id>. Nothing to consolidate.
…and stop.
Step 3: Analyze — Find Issues
Work entirely in-memory; do not modify anything yet.
Group memories by metadata.type (use "unknown" when the field is absent).
For each group, identify the following:
3a. Near-duplicate pairs (merge candidates)
Two memories are near-duplicates when they express the same fact or decision but phrased differently (e.g., "Use PostgreSQL for auth" and "Auth DB is PostgreSQL").
Heuristics — two memories are near-duplicates if all of these hold:
- Similarity threshold: estimated cosine similarity > 0.9 (use noun/keyword overlap as proxy — if >60% of significant nouns overlap, treat as >0.9 similarity).
- Same
metadata.type. - Neither memory is pinned (
metadata.pinned != true).
For each qualifying pair, draft a merged version that is more complete and specific than either original.
3b. Contradictions
Two memories contradict when they assert opposing facts about the same topic (e.g., "Deploy to ECS" vs. "Deploy to Vercel").
Identify the likely winner: the more recent memory with higher confidence wins. Store both IDs and their content for user review.
3c. Prune candidates
A memory is a prune candidate when any of the following is true:
- Its
metadata.typehas a retention policy and the memory is older than the configured number of days (comparecreated_atto today). - Its confidence score is below 0.3 AND it contains no information unique to this project (no file paths, identifiers, or domain-specific nouns).
Always skip memories where metadata.pinned == true, regardless of age or
confidence.
Step 4: Print Diff Report
Print a structured diff to the terminal before making any changes. Use exactly this format:
## 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]
If there are zero items in any category, omit that section entirely.
If there are zero total proposals (no merges, no prunes, no conflicts), print:
Dream complete. No duplicate, contradictory, or stale memories found.
…and stop.
Step 5: Wait for User Input and Apply
5a. Contradictions
For each CONFLICT pair in the report, wait for the user to type A, B, or
skip (case-insensitive). If they enter nothing (empty), treat as skip.
Record the winner for each pair before proceeding to the final apply confirmation.
5b. Final confirmation
After all conflict resolutions are collected, prompt:
Apply? [Y/n]
If the user types n or no (case-insensitive), print Cancelled. No changes made.
and stop.
If the user confirms (Y, yes, or empty / Enter), apply all changes in this order:
Merges
For each approved merge pair:
delete_memory(<id1>)delete_memory(<id2>)add_memorywith:text="<merged content>"user_id=<active_user_id>app_id=<active_project_id>(top-level, not in metadata)metadata={"type": "<original type>", "branch": "<active_branch>", "confidence": <higher of the two original scores>, "source": "mem0-dream"}infer=False
Contradictions (resolved)
For each resolved conflict where the user chose A or B:
- Delete the loser (the non-chosen memory):
delete_memory(memory_id=<loser_id>)
Contradictions where the user chose skip are left untouched.
Prunes
For each prune candidate:
delete_memory(<memory_id>)
Step 6: Print Summary
After all changes are applied, print:
Dream complete — merged: <N>, pruned: <N>, conflicts resolved: <N>, skipped: <N>
Auto mode
When invoked with --auto (e.g., /mem0-dream --auto), run non-interactively:
- Merges: applied automatically (no contradiction, both are compatible).
- Prunes: applied automatically (age/confidence-based, no ambiguity).
- Contradictions: skipped — they require human judgment.
Concurrency guard
Before doing any work, check for a lock file at /tmp/mem0_dream_auto.lock:
- If the lock file exists and is less than 10 minutes old, print
[mem0-dream --auto] Another run in progress — skipping.and stop. - Otherwise, create the lock file (write the current timestamp). Delete it when done (in all exit paths).
Execution
In auto mode:
- Load policies and fetch memories (Steps 1–3) as normal.
- Apply merges and prunes silently without printing the diff or prompting.
- Print a compact summary:
[mem0-dream --auto] project=<id> merged=<N> pruned=<N> conflicts_skipped=<N> - If contradictions were detected but skipped, check if a
mem0-dream-autoreminder already exists before storing one:- Search for existing reminders:
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) - If a result exists with similarity > 0.9, skip storing the reminder (one already exists).
- If no match, store the reminder:
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, ) - Search for existing reminders:
See also
/mem0-forget— targeted deletion of specific memories (search + confirm + delete)/mem0-status --deep— quick quality scan without applying changes
Output formatting
IMPORTANT: Do NOT use markdown in your output. OpenCode TUI renders text verbatim — markdown like bold, ## headers, and | table | syntax appears as raw characters. Use plain text with indentation for structure. Use dashes for lists. Use spaces to align columns instead of markdown tables.
Frequently asked questions about Mem0 Dream
Similar skills
Canva Creator
Streamline your content campaign from brief to HubSpot.
Cowork Plugin Customization
Tailor your Claude Code plugin to fit your organization.
Impediment Prioritization
Rank and prioritize impediments effectively.
Chronicle
Streamline your Copilot session analysis and reporting.
Idea Refine
Transform vague ideas into actionable concepts.
App Store Optimization
Optimize your mobile app's visibility and performance.
