Caricamento in corso...
Caricamento in corso...
Last synced: Today, 22:00
Technical reference for the OpenClaw framework. Real-time synchronization with the official documentation engine.
Use this file to discover all available pages before exploring further.
This page lists every configuration knob for OpenClaw memory search. For conceptual overviews, see:
How memory works.
Default SQLite backend.
Local-first sidecar.
Search pipeline and tuning.
Memory sub-agent for interactive sessions.
All memory search settings live under
agents.defaults.memorySearchopenclaw.jsonActive memory uses a two-gate model:
See Active Memory for the activation model, plugin-owned config, transcript persistence, and safe rollout pattern.
| Key | Type | Default | Description |
|---|---|---|---|
text provider | text string | auto-detected | Embedding adapter ID such as text bedrocktext deepinfratext geminitext github-copilottext localtext mistraltext ollamatext openaitext voyagetext models.providers.<id>text api |
text model | text string | provider default | Embedding model name |
text fallback | text string | text "none" | Fallback adapter ID when the primary fails |
text enabled | text boolean | text true | Enable or disable memory search |
When
providerollamamemorySearch.providermodels.providers.<id>apijson5{ models: { providers: { "ollama-5080": { api: "ollama", baseUrl: "http://gpu-box.local:11435", apiKey: "ollama-local", models: [{ id: "qwen3-embedding:0.6b" }], }, }, }, agents: { defaults: { memorySearch: { provider: "ollama-5080", model: "qwen3-embedding:0.6b", }, }, }, }
Remote embeddings require an API key. Bedrock uses the AWS SDK default credential chain instead (instance roles, SSO, access keys).
| Provider | Env var | Config key |
|---|---|---|
| Bedrock | AWS credential chain | No API key needed |
| DeepInfra | text DEEPINFRA_API_KEY | text models.providers.deepinfra.apiKey |
| Gemini | text GEMINI_API_KEY | text models.providers.google.apiKey |
| GitHub Copilot | text COPILOT_GITHUB_TOKENtext GH_TOKENtext GITHUB_TOKEN | Auth profile via device login |
| Mistral | text MISTRAL_API_KEY | text models.providers.mistral.apiKey |
| Ollama | text OLLAMA_API_KEY | -- |
| OpenAI | text OPENAI_API_KEY | text models.providers.openai.apiKey |
| Voyage | text VOYAGE_API_KEY | text models.providers.voyage.apiKey |
For custom OpenAI-compatible endpoints or overriding provider defaults:
json5{ agents: { defaults: { memorySearch: { provider: "openai", model: "text-embedding-3-small", remote: { baseUrl: "https://api.example.com/v1/", apiKey: "YOUR_KEY", }, }, }, }, }
Unset uses the provider default: 600 seconds for local/self-hosted providers such as
localollamalmstudioAll under
memorySearch.query.hybrid| Key | Type | Default | Description |
|---|---|---|---|
text enabled | text boolean | text true | Enable hybrid BM25 + vector search |
text vectorWeight | text number | text 0.7 | Weight for vector scores (0-1) |
text textWeight | text number | text 0.3 | Weight for BM25 scores (0-1) |
text candidateMultiplier | text number | text 4 | Candidate pool size multiplier |
textEvergreen files (`MEMORY.md`, non-dated files in `memory/`) are never decayed.
json5{ agents: { defaults: { memorySearch: { query: { hybrid: { vectorWeight: 0.7, textWeight: 0.3, mmr: { enabled: true, lambda: 0.7 }, temporalDecay: { enabled: true, halfLifeDays: 30 }, }, }, }, }, }, }
| Key | Type | Description |
|---|---|---|
text extraPaths | text string[] | Additional directories or files to index |
json5{ agents: { defaults: { memorySearch: { extraPaths: ["../team-docs", "/srv/shared-notes"], }, }, }, }
Paths can be absolute or workspace-relative. Directories are scanned recursively for
.mdFor agent-scoped cross-agent transcript search, use
agents.list[].memorySearch.qmd.extraCollectionsmemory.qmd.paths{ path, name, pattern? }memory.qmd.pathsmemorySearch.qmd.extraCollectionsIndex images and audio alongside Markdown using Gemini Embedding 2:
| Key | Type | Default | Description |
|---|---|---|---|
text multimodal.enabled | text boolean | text false | Enable multimodal indexing |
text multimodal.modalities | text string[] | -- | text ["image"]text ["audio"]text ["all"] |
text multimodal.maxFileBytes | text number | text 10000000 | Max file size for indexing |
Supported formats:
.jpg.jpeg.png.webp.gif.heic.heif.mp3.wav.ogg.opus.m4a.aac.flac| Key | Type | Default | Description |
|---|---|---|---|
text cache.enabled | text boolean | text false | Cache chunk embeddings in SQLite |
text cache.maxEntries | text number | text 50000 | Max cached embeddings |
Prevents re-embedding unchanged text during reindex or transcript updates.
| Key | Type | Default | Description |
|---|---|---|---|
text remote.nonBatchConcurrency | text number | text 4 | Parallel inline embeddings |
text remote.batch.enabled | text boolean | text false | Enable batch embedding API |
text remote.batch.concurrency | text number | text 2 | Parallel batch jobs |
text remote.batch.wait | text boolean | text true | Wait for batch completion |
text remote.batch.pollIntervalMs | text number | -- | Poll interval |
text remote.batch.timeoutMinutes | text number | -- | Batch timeout |
Available for
openaigeminivoyageremote.nonBatchConcurrency1This is separate from
sync.embeddingBatchTimeoutSecondsIndex session transcripts and surface them via
memory_search| Key | Type | Default | Description |
|---|---|---|---|
text experimental.sessionMemory | text boolean | text false | Enable session indexing |
text sources | text string[] | text ["memory"] | Add text "sessions" |
text sync.sessions.deltaBytes | text number | text 100000 | Byte threshold for reindex |
text sync.sessions.deltaMessages | text number | text 50 | Message threshold for reindex |
| Key | Type | Default | Description |
|---|---|---|---|
text store.vector.enabled | text boolean | text true | Use sqlite-vec for vector queries |
text store.vector.extensionPath | text string | bundled | Override sqlite-vec path |
When sqlite-vec is unavailable, OpenClaw falls back to in-process cosine similarity automatically.
| Key | Type | Default | Description |
|---|---|---|---|
text store.path | text string | text ~/.openclaw/memory/{agentId}.sqlite | Index location (supports text {agentId} |
text store.fts.tokenizer | text string | text unicode61 | FTS5 tokenizer ( text unicode61text trigram |
Set
memory.backend = "qmd"memory.qmd| Key | Type | Default | Description |
|---|---|---|---|
text command | text string | text qmd | QMD executable path; set an absolute path when service text PATH |
text searchMode | text string | text search | Search command: text searchtext vsearchtext query |
text includeDefaultMemory | text boolean | text true | Auto-index text MEMORY.mdtext memory/**/*.md |
text paths[] | text array | -- | Extra paths: text { name, path, pattern? } |
text sessions.enabled | text boolean | text false | Index session transcripts |
text sessions.retentionDays | text number | -- | Transcript retention |
text sessions.exportDir | text string | -- | Export directory |
searchMode: "search"memory status --deepvsearchqueryOpenClaw prefers current QMD collection and MCP query shapes, but keeps older QMD releases working by trying compatible collection pattern flags and older MCP tool names when needed. When QMD advertises support for multiple collection filters, same-source collections are searched with one QMD process; older QMD builds keep the per-collection compatibility path. Same-source means durable memory collections are grouped together, while session transcript collections remain a separate group so source diversification still has both inputs.
QMD boot refreshes use a one-shot subprocess path during gateway startup. The long-lived QMD manager still owns the regular file watcher and interval timers when memory search is opened for interactive use.
json5{ memory: { backend: "qmd", citations: "auto", qmd: { includeDefaultMemory: true, update: { interval: "5m", debounceMs: 15000 }, limits: { maxResults: 6, timeoutMs: 4000 }, scope: { default: "deny", rules: [{ action: "allow", match: { chatType: "direct" } }], }, paths: [{ name: "docs", path: "~/notes", pattern: "**/*.md" }], }, }, }
Dreaming is configured under
plugins.entries.memory-core.config.dreamingagents.defaults.memorySearchDreaming runs as one scheduled sweep and uses internal light/deep/REM phases as an implementation detail.
For conceptual behavior and slash commands, see Dreaming.
| Key | Type | Default | Description |
|---|---|---|---|
text enabled | text boolean | text false | Enable or disable dreaming entirely |
text frequency | text string | text 0 3 * * * | Optional cron cadence for the full dreaming sweep |
text model | text string | default model | Optional Dream Diary subagent model override |
json5{ plugins: { entries: { "memory-core": { subagent: { allowModelOverride: true, allowedModels: ["anthropic/claude-sonnet-4-6"], }, config: { dreaming: { enabled: true, frequency: "0 3 * * *", model: "anthropic/claude-sonnet-4-6", }, }, }, }, }, }
© 2024 TaskFlow Mirror
Powered by TaskFlow Sync Engine