Openclaw-superpowers memory-graph-builder
Parses OpenClaw's flat MEMORY.md into a structured knowledge graph — detects duplicates, contradictions, and stale entries, then builds a compressed memory digest optimized for system prompt injection.
git clone https://github.com/ArchieIndian/openclaw-superpowers
T=$(mktemp -d) && git clone --depth=1 https://github.com/ArchieIndian/openclaw-superpowers "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/openclaw-native/memory-graph-builder" ~/.claude/skills/archieindian-openclaw-superpowers-memory-graph-builder && rm -rf "$T"
T=$(mktemp -d) && git clone --depth=1 https://github.com/ArchieIndian/openclaw-superpowers "$T" && mkdir -p ~/.openclaw/skills && cp -r "$T/skills/openclaw-native/memory-graph-builder" ~/.openclaw/skills/archieindian-openclaw-superpowers-memory-graph-builder && rm -rf "$T"
skills/openclaw-native/memory-graph-builder/SKILL.mdMemory Graph Builder
What it does
OpenClaw stores agent memory in a flat
MEMORY.md file — one line per fact, no structure, no relationships. This works until your agent has 200+ memories and half of them are duplicates, three contradict each other, and the whole file costs 4,000 tokens every session.
Memory Graph Builder treats MEMORY.md as a raw data source and builds a structured knowledge graph on top of it. Each memory becomes a node with typed relationships to other nodes. The graph enables:
- Duplicate detection — "User prefers dark mode" and "User likes dark theme" are the same fact
- Contradiction detection — "User uses Python 3.8" vs "User uses Python 3.12"
- Staleness detection — Facts older than a configurable threshold that haven't been referenced
- Memory digest — A compressed, relationship-aware summary that replaces raw MEMORY.md in the system prompt, saving 30-60% tokens
Inspired by OpenLobster's Neo4j-backed graph memory system, adapted to work on top of OpenClaw's existing MEMORY.md without requiring a database.
When to invoke
- Automatically, nightly at 10pm (cron)
- After bulk memory additions (e.g., after project-onboarding)
- When the agent's context initialisation feels slow (memory bloat)
- Manually to audit memory quality
Graph structure
Each memory line becomes a node:
nodes: - id: "mem_001" text: "User prefers Python for backend work" category: preference # preference | fact | project | person | tool | config entities: ["user", "python", "backend"] added_at: "2026-03-01" last_referenced: "2026-03-15" confidence: 0.9 edges: - from: "mem_001" to: "mem_014" relation: related_to # related_to | contradicts | supersedes | depends_on
How to use
python3 graph.py --build # Parse MEMORY.md, build graph python3 graph.py --duplicates # Show duplicate clusters python3 graph.py --contradictions # Show contradicting pairs python3 graph.py --stale --days 30 # Show memories not referenced in 30 days python3 graph.py --digest # Generate compressed memory digest python3 graph.py --digest --max-tokens 1500 # Digest with token budget python3 graph.py --prune --dry-run # Show what would be removed python3 graph.py --prune # Remove duplicates + stale entries python3 graph.py --stats # Graph statistics python3 graph.py --status # Last build summary python3 graph.py --format json
Cron wakeup behaviour
Nightly at 10pm:
- Read MEMORY.md
- Rebuild graph (incremental — only re-processes new/changed lines)
- Detect duplicates and contradictions
- Flag stale entries (>30 days unreferenced by default)
- Generate fresh memory digest
- Write digest to
~/.openclaw/workspace/memory-digest.md - Log summary to state
Memory digest
The digest is a compressed representation of the knowledge graph optimized for LLM consumption. Instead of dumping every raw line, it:
- Groups related memories by category
- Merges duplicate facts into single entries
- Marks contradictions with
so the agent can resolve them[CONFLICT] - Omits stale entries below a confidence threshold
- Respects a configurable max-token budget
Example digest output:
## Preferences - Prefers Python for backend, TypeScript for frontend - Dark mode everywhere; compact UI layouts - Commit messages: imperative mood, max 72 chars ## Active Projects - openclaw-superpowers: skill library, 40 skills, MIT license - personal-site: Next.js 14, deployed on Vercel ## People - Alice (teammate): works on auth, prefers Go ## Conflicts (needs resolution) - [CONFLICT] Python version: "3.8" vs "3.12" — ask user to clarify
Procedure
Step 1 — Build the graph
python3 graph.py --build
Step 2 — Review duplicates and contradictions
python3 graph.py --duplicates python3 graph.py --contradictions
Fix contradictions by editing MEMORY.md directly or asking the agent to clarify.
Step 3 — Prune stale entries
python3 graph.py --prune --dry-run python3 graph.py --prune
Step 4 — Generate and use the digest
python3 graph.py --digest --max-tokens 1500
Point OpenClaw's memory injection at
~/.openclaw/workspace/memory-digest.md instead of raw MEMORY.md.
State
Graph structure, digest cache, and audit history stored in
~/.openclaw/skill-state/memory-graph-builder/state.yaml.
Fields:
last_build_at, node_count, edge_count, duplicate_count, contradiction_count, stale_count, digest_tokens, build_history.