🎁 Get the FREE AI Skills Starter Guide β€” Subscribe β†’
BytesAgainBytesAgain
πŸ¦€ ClawHub

Smart Memory Plus

by @zgjq

Complete memory system for OpenClaw agents. Combines enhanced memory management (WAL protocol, type classification, temporal decay, session cache) with conte...

Versionv1.4.0
Downloads746
TERMINAL
clawhub install smart-memory-plus

πŸ“– About This Skill


name: smart-memory-plus description: > Complete memory system for OpenClaw agents. Combines enhanced memory management (WAL protocol, type classification, temporal decay, session cache) with context compression (conversation digests, auto-injection). Zero external dependencies. Use when: managing MEMORY.md, extracting insights from conversations, compressing long sessions, searching memories, tracking task state, or when user says "remember this", "compact", "what do you know about X", "clean up memories".

Smart Memory Plus

Unified memory management + context compression for OpenClaw. Zero external dependencies.

> ⚠️ Conflict Warning: This skill replaces both smart-memory and context-compactor. > Do NOT install alongside either of those skills β€” they share the same files > (SESSION-STATE.md, memory/, MEMORY.md) and will cause write conflicts.

Requirements

  • Runtime: Python 3.10+ (standard library only), Bash 4.0+ (health/extract scripts only)
  • OS: Linux, macOS
  • Environment variables (all optional, with defaults):
  • - OPENCLAW_WORKSPACE β€” Workspace root (default: ~/.openclaw/workspace) - OPENCLAW_SESSION_ID β€” Session identifier for temp cache (default: default)

    Security

    Write Restrictions (Hard Rules)

    The agent MUST use the provided scripts for ALL writes. Direct file writes are FORBIDDEN.

    | File | Required Script | Forbidden | |------|----------------|-----------| | SESSION-STATE.md | session_state.py (WAL protocol) | Direct write/overwrite | | memory/compacts/*.md | compact_session.py --write | Direct write/overwrite | | memory/*.md (daily notes) | extract_memories.sh --auto or append via script | Direct overwrite | | MEMORY.md | memory_decay.py --promote-only | Direct overwrite | | /tmp/openclaw-session-*.json | session_cache.py | Direct write |

    Critical: Never use the agent's file-write tool directly on memory files. Always pipe through scripts β€” they enforce sanitization, deduplication, and append-only behavior.

    The agent MUST NOT write to:

  • Any directory outside the workspace
  • System directories (/etc, /usr, /var, /tmp except session cache)
  • User home directory root (~/.ssh, ~/.config, ~/.aws, etc.)
  • Any .* dotfile or dotdir in workspace root
  • Sensitive Data Protection

    All write commands automatically reject inputs matching:
  • API keys/tokens (OpenAI sk-*, GitHub ghp_*, ClawHub clh_*)
  • Passwords (password=, passwd:, etc.)
  • Private keys (-----BEGIN PRIVATE KEY-----)
  • This is a hard block at the script level β€” the agent cannot bypass it.

    Privacy Boundaries

  • Compacts must NOT contain: file paths, internal URLs, IPs, passwords, tokens
  • Use placeholders: , ,
  • All data stays local β€” all scripts make zero network calls, no LLM usage
  • Memory Layers

    | Layer | File | Purpose | Lifetime | |-------|------|---------|----------| | HOT RAM | SESSION-STATE.md | Current task, context, decisions | Session (survives compaction) | | DAILY | memory/YYYY-MM-DD.md | Raw daily notes with type tags | 90 days β†’ archive | | CURATED | MEMORY.md | Promoted long-term facts | Permanent | | COMPACT | memory/compacts/YYYY-MM-DD-HHMM.md | Session digests | 30 max, auto-cleanup | | GRAPH | memory/.index/graph.db | Entity-relation knowledge graph | Rebuild from source | | ARCHIVE | memory/archive/YYYY-MM/ | Stale daily files | Forever (compressed) | | CACHE | /tmp/openclaw-session-*.json | Session temp data | Session end / reboot |

    Quick Reference

    Memory Management

    | Action | Script | |--------|--------| | WAL shortcut | scripts/wal task/decide/context/pending/done/blocker/get/snapshot/restore | | Set current task | scripts/wal task "description" | | Log a decision | scripts/wal decide "chose X over Y" | | Add context | scripts/wal context key value | | Session cache | python3 scripts/session_cache.py set/get/list/clear | | Classify memories | python3 scripts/classify_memory.py --summary/--apply | | Decay & archive | python3 scripts/memory_decay.py --dry-run/--promote-only | | Health report | bash scripts/memory_health.sh |

    Search & Relations

    | Action | Script | |--------|--------| | Full index rebuild | python3 scripts/memory_search_bm25.py build | | Incremental update | python3 scripts/memory_search_bm25.py update | | Search memories (BM25) | python3 scripts/memory_search_bm25.py search "query" [--top N] | | Index status | python3 scripts/memory_search_bm25.py status | | Find related entries | python3 scripts/classify_memory.py --related "query" [--top N] | | Build knowledge graph | python3 scripts/memory_graph.py build | | Graph relations | python3 scripts/memory_graph.py related "entity" [--depth N] | | Graph stats | python3 scripts/memory_graph.py stats | | Raw graph query | python3 scripts/memory_graph.py query "SELECT ..." |

    Context Compression

    | Action | Script | |--------|--------| | Extract compact (stdin) | python3 scripts/compact_session.py --extract | | Write compact (stdin) | python3 scripts/compact_session.py --write | | List compacts | python3 scripts/compact_session.py --list | | Read latest compact | python3 scripts/compact_session.py --latest | | Compact stats | python3 scripts/compact_session.py --stats |

    WAL Protocol (Write-Ahead Log)

    Critical rule: Write BEFORE responding.

    When the user provides information that should be remembered:

    1. Write to SESSION-STATE.md (via session_state.py) 2. Then respond to the user

    This prevents context loss if compaction, crash, or restart happens between response and write.

    | User Action | WAL Write | |-------------|-----------| | States a preference | session_state.py context "pref" "value" | | Makes a decision | session_state.py decide "chose X" | | Gives a deadline | session_state.py context "deadline" "date" | | Corrects agent | session_state.py decide "correction: X not Y" | | Assigns task | session_state.py task "description" | | Mentions blocker | session_state.py blocker "description" |

    Memory Types

    All entries tagged with a type prefix:

  • [PREF] β€” User preferences, habits, style
  • [PROJ] β€” Project context, active work, goals
  • [TECH] β€” Technical details, configs, system knowledge
  • [LESSON] β€” Lessons learned, errors, corrections
  • [PEOPLE] β€” People, relationships, social context
  • [TEMP] β€” Session-scoped, auto-expires
  • Core Workflows

    Session Start

    1. Read SESSION-STATE.md for current task/context 2. Search for relevant context: - python3 scripts/memory_search_bm25.py build (if index is stale or missing) - python3 scripts/memory_search_bm25.py search "current topic" (semantic search) - Also use memory_search (OpenClaw built-in tool) as complementary search 3. Check for recent compacts: python3 scripts/compact_session.py --latest - If output exists, read it and use relevant parts as context for the session - This is a manual agent step β€” the skill does not auto-inject 4. Check memory/YYYY-MM-DD.md for today's activity

    During Conversation (WAL)

    1. User provides actionable info β†’ write to SESSION-STATE.md FIRST 2. Important facts β†’ append to memory/YYYY-MM-DD.md with type tag 3. Use session_cache.py for transient session data

    Session End (Compaction)

    1. Update SESSION-STATE.md with final state 2. If conversation > 50 turns or user says "compact": - Draft compact content (decisions, facts, pending, blockers) - Pipe through security checks: echo "content" | python3 scripts/compact_session.py --write - Include [TYPE] tags per smart-memory classification 3. Promote durable items from daily notes to MEMORY.md

    Periodic Maintenance

  • Run memory_decay.py when MEMORY.md > 200 lines or 50+ daily files
  • Run classify_memory.py to tag orphaned entries
  • Run memory_search_bm25.py update to refresh search index after edits
  • Run memory_graph.py build to refresh knowledge graph
  • Archive daily files older than 90 days
  • Compact auto-cleanup keeps only last 30
  • Agent Behavior

    Auto-Extract When

  • User shares preference, opinion, or personal fact
  • Project decision is made or changed
  • Error encountered and resolved (β†’ LESSON)
  • New people, tools, or workflows mentioned
  • Extraction Mode

  • extract_memories.sh --auto "text" β€” keyword matching, zero token cost, fully local
  • Compaction Mode

  • compact_session.py --extract β€” regex-based extraction, zero token cost, fully local
  • Do NOT Extract/Compact

  • Passwords, tokens, API keys, credentials (scripts hard-block these)
  • Private conversations about third parties not relevant to work
  • Speculation or uncertain information
  • Transient state ("user is currently looking at page X")
  • Information the user explicitly said not to remember
  • Scripts

    | Script | Language | Purpose | Security | |--------|----------|---------|----------| | session_state.py | Python | HOT RAM working memory (WAL) | Sensitive data filter + sanitization | | session_cache.py | Python | Session-scoped temp cache | Sensitive data filter + path-safe IDs | | compact_session.py | Python | Context compression & digests | Path containment + sensitive filter | | extract_memories.sh | Bash | Memory extraction guide & auto-extract | Read-only + sensitive filter (Python) | | classify_memory.py | Python | Keyword + n-gram type classification, related search | Dry-run mode, duplicate check | | memory_decay.py | Python | Temporal decay & LESSON promotion | Dry-run mode | | memory_health.sh | Bash | Health report (stats, orphans, tokens) | Read-only | | memory_search_bm25.py | Python | BM25 semantic search over memories | Local-only, zero network | | memory_graph.py | Python | SQLite knowledge graph (entities + relations) | Local-only, SELECT-only queries |

    References

  • references/extraction_prompt.md β€” Extraction prompt template (for agent-internal use)
  • references/compaction_prompt.md β€” Compaction prompt template (for agent-internal use)
  • references/decay_rules.md β€” Decay/archival rule set
  • references/memory_schema.md β€” Full schema and format spec