SkillHub

openclaw-memory-skill

v0.2.1

基于MongoDB的长期语义记忆,支持跨会话存储、检索和管理事实、决策及用户偏好。

Sourced from ClawHub, Authored by Michael Lynn

Installation

Please help me install the skill `openclaw-memory-skill` from SkillHub official store. npx skills add mrlynn/openclaw-memory-skill

OpenClaw Memory — Agent Skill

MongoDB-backed long-term memory with Voyage AI semantic search

When to Use

Use OpenClaw Memory when: - ✅ You need to recall prior conversations, decisions, or preferences - ✅ Building context across multiple sessions - ✅ Tracking facts, insights, or learnings over time - ✅ Searching for relevant information semantically (not just keywords) - ✅ Remembering user preferences, project details, or domain knowledge

NOT for: - ❌ Immediate/short-term context (use conversation history instead) - ❌ Temporary scratch notes (use files in workspace) - ❌ Large document storage (use file system or database)

Available Tools

Semantically search long-term memory. Use this to recall prior decisions, preferences, context, or facts.

memory_search({
  query: "What did we decide about the database schema?",
  maxResults: 6  // optional, default: 6
})

Returns: Array of memories with similarity scores, text, tags, and metadata.

When to use: - Before answering questions about past work - When user asks "remember when..." or "what did we say about..." - To check for existing context before making new decisions - When solving similar problems to past ones

Example output:

{
  "results": [
    {
      "id": "507f1f77bcf86cd799439011",
      "text": "Decided to use MongoDB for vector storage with Atlas Search",
      "score": 0.89,
      "tags": ["decision", "database"],
      "createdAt": "2026-02-20T14:30:00Z"
    }
  ]
}

memory_remember

Store a fact, decision, preference, or important context in long-term memory.

memory_remember({
  text: "User prefers TypeScript over JavaScript for new projects",
  tags: ["preference", "programming"],  // optional
  ttl: 2592000  // optional, 30 days default
})

Returns: Stored memory ID and confirmation.

When to use: - After important decisions are made - When user states a preference ("I prefer X over Y") - Key facts or insights discovered during work - Context that should persist across sessions - User explicitly asks you to remember something

Best practices: - Be specific and concise (1-2 sentences ideal) - Include relevant tags for categorization - Don't store temporary/ephemeral information - Use structured format when possible (e.g., "Key: value")


memory_get

Read a specific memory file from the workspace. Use memory_search for semantic recall; use this for targeted file reads.

memory_get({
  path: "MEMORY.md",
  from: 1,      // optional, starting line
  lines: 50     // optional, number of lines
})

Returns: File contents (text).

When to use: - After memory_search to get full context - Reading structured memory files (MEMORY.md, memory/YYYY-MM-DD.md) - Targeted line-range reads for efficiency


memory_forget

Delete a specific memory by ID. Use memory_search first to find the memory ID.

memory_forget({
  memoryId: "507f1f77bcf86cd799439011"
})

Returns: Confirmation or error.

When to use: - User explicitly asks to delete/forget something - Correcting incorrect memories - Removing outdated information - Never use proactively without user request


memory_list

Browse stored memories by recency or tag.

memory_list({
  tags: "decision,database",  // optional, comma-separated
  limit: 10,                  // optional, default: 10
  sort: "desc"                // optional, "desc" or "asc"
})

Returns: Array of memories with metadata (no similarity scores).

When to use: - Browsing recent memories - Filtering by specific tags - Audit/review of stored memories - When user asks "what have you remembered?"


memory_status

Check memory system health and stats.

memory_status()

Returns: Daemon status, MongoDB connection, Voyage AI status, total memories, uptime.

When to use: - Debugging memory system issues - User asks about memory capacity or health - Before relying on memory for critical tasks - Rarely needed in normal operation


Configuration

Memory tools connect to a daemon at http://localhost:7654 by default. Configuration is set in ~/.openclaw/openclaw.json:

{
  plugins: {
    entries: {
      "openclaw-memory": {
        enabled: true,
        config: {
          daemonUrl: "http://localhost:7654",
          agentId: "openclaw",
          maxResults: 6,
          minScore: 0.5,
          defaultTtl: 2592000  // 30 days
        }
      }
    }
  }
}

Automatic Memory Capture

OpenClaw Memory includes lifecycle hooks that capture memories automatically:

auto-remember Hook

Fires after every agent response. Extracts facts, decisions, and preferences using pattern matching: - "I prefer..." → stored as preference - "We decided..." → stored as decision - "Remember that..." → stored as fact - "Key: value" patterns (structured data)

Limits: Max 5 extractions per message, min 10 chars, deduplicates.

session-to-memory Hook

Fires when starting a new session. Summarizes the ending session and stores it as a searchable memory.

memory-bootstrap Hook

Fires on agent startup. Queries for relevant memories (preferences, recent decisions, pinned items) and injects them into context.

memory-enriched-tools Hook

Fires before tool results are saved. Appends related memories as context annotations to Read/Grep/Glob/Bash outputs.

To disable hooks: Set hooksEnabled: false in plugin config.


Workflow Examples

Example 1: Recall Prior Decision

User asks: "What did we decide about the API authentication?"

Agent response: 1. Call memory_search({ query: "API authentication decision" }) 2. Review results 3. Answer based on stored memory 4. If no results, say "I don't have any memory of that decision"

Example 2: Store Preference

User says: "I prefer Material UI over Tailwind for all React projects"

Agent response: 1. Acknowledge the preference 2. Call memory_remember({ text: "User prefers Material UI over Tailwind for React projects", tags: ["preference", "ui"] }) 3. Confirm it's stored: "Got it, I'll remember that preference"

Example 3: Check Before Recommending

User asks: "What CSS framework should we use?"

Agent response: 1. Call memory_search({ query: "CSS framework preference" }) 2. If match found: "You previously preferred Material UI over Tailwind" 3. If no match: Provide recommendation based on context

Example 4: Session Continuity

New session starts:

  1. memory-bootstrap hook auto-runs
  2. Loads recent preferences, decisions, project context
  3. Agent has continuity without user repeating everything

Tips & Best Practices

Do: - ✅ Use memory_search before answering questions about past work - ✅ Store concise, specific facts (1-2 sentences) - ✅ Tag memories for easy filtering (preference, decision, fact, project-name) - ✅ Trust semantic search (it understands meaning, not just keywords) - ✅ Let hooks handle routine memory capture (preferences, decisions)

Don't: - ❌ Store temporary/ephemeral information - ❌ Duplicate conversation history (that's already stored) - ❌ Store sensitive credentials (use secure storage instead) - ❌ Forget without user permission (use memory_forget sparingly) - ❌ Overwhelm with too many manual memory_remember calls (hooks handle most)

Search Tips: - Use natural language: "database preference" > "db pref" - Be specific when possible: "TypeScript vs JavaScript decision" > "language" - Results are ranked by semantic similarity (0-1 score) - Default minScore: 0.5 filters low-relevance results

TTL Guidelines: - 7 days: Temporary project context - 30 days (default): Most facts, decisions, preferences - 90 days: Important long-term context - 365 days: Critical knowledge that should persist long-term


Troubleshooting

"Memory daemon not reachable" - Check daemon is running: curl http://localhost:7654/health - Start daemon: cd openclaw-memory && pnpm dev:daemon - Or use Docker: docker compose up -d

"No memories found" - Verify memories exist: memory_list({ limit: 5 }) - Check agentId matches (openclaw by default) - Try broader search queries - Lower minScore threshold in config

"Memory search returns irrelevant results" - Be more specific in query - Increase minScore threshold (default: 0.5) - Check tags to filter results - Verify Voyage AI embeddings are working (not mock mode)

"Tools not available" - Verify plugin is enabled in openclaw.json - Restart OpenClaw gateway - Check plugin installation: openclaw plugins list


Advanced Features

Web Dashboard

Full installation includes a web dashboard at http://localhost:3002: - Memory browser with semantic search - Graph visualizer (relationship mapping) - Conflict resolution (contradiction detection) - Timeline and analytics

Reflection Pipeline

9-stage processing pipeline for: - Duplicate detection (0.92 similarity threshold) - Contradiction detection (heuristic + LLM) - Confidence scoring - Graph relationship extraction - Entity extraction - Temporal decay

Trigger reflection:

curl -X POST http://localhost:7654/reflect 
  -H "Content-Type: application/json" 
  -d '{"agentId":"openclaw"}'

Graph Relationships

Memories can be connected via edges: - SUPPORTS — reinforces/supports another memory - CONTRADICTS — conflicts with another memory - DERIVES_FROM — built upon another memory - CO_OCCURS — frequently appears together - PRECEDES — temporal sequence - MENTIONS_ENTITY — references an entity

Access via web dashboard at /graph.


Requirements

  • MongoDB 8.0+ (local or Atlas)
  • Node.js 18+
  • OpenClaw CLI
  • Optional: Voyage AI API key (mock mode available)

Installation

# Install plugin
openclaw plugins install openclaw-memory

# Start daemon
cd openclaw-memory
pnpm install && pnpm dev:daemon

# Or use Docker
docker compose up -d

Summary

OpenClaw Memory gives agents persistent, searchable memory across sessions:

  1. Search semantically with memory_search
  2. Store facts with memory_remember
  3. Automatic capture via lifecycle hooks
  4. MongoDB-backed with Voyage AI embeddings
  5. Web dashboard for visualization and management

Use it to build agents that remember, learn, and improve over time. 🧠


Version: 0.2.1
Author: Michael Lynn
License: MIT
Repository: https://github.com/mrlynn/openclaw-mongodb-memory