Memory Search (OpenClaw)
Memory Search (OpenClaw)
The memory_search tool locates relevant notes using dual retrieval: results from a vector path and a BM25 keyword path are merged before ranking.
Dual retrieval paths
| Path | Mechanism | Strengths |
|---|---|---|
| Vector | Embedding similarity | Paraphrase, synonyms, semantic queries |
| BM25 keyword | Full-text exact match | IDs, error strings, config keys, verbatim phrases |
Both run in parallel; the merged result set is returned.
Embedding providers
Eight providers; most auto-detect from credentials:
- OpenAI, Gemini, GitHub Copilot, Voyage, Mistral — auto-detected
- Ollama, local GGUF — require explicit configuration
- Gemini Embedding 2 — multimodal (images + audio)
Search quality features
Temporal decay
Older notes are down-ranked over time. Default: a note from one month ago scores at ~50% of its original weight. Keeps recent context prominent without deleting old notes.
MMR (Maximal Marginal Relevance)
Penalizes redundant results. The top-N results cover different topics rather than repeating near-duplicate notes. Especially useful for large memory collections.
Advanced capabilities
| Feature | Description |
|---|---|
| Multimodal indexing | Images and audio indexed via Gemini Embedding 2 |
| Session memory search | Optional transcript indexing enables conversation recall across sessions |
| Degraded mode | Lexical-only ranking when no embedding provider is available |
Diagnostics
openclaw memory status # check index health and provider status
openclaw memory index --force # rebuild indexes from scratch
See also
- Memory System — overview, file layout, backends, dreaming
- Builtin Memory Engine — SQLite implementation, chunk sizing, auto-detection order
- Context Assembly — how memory search results feed into the system prompt