Technical reference
Referentie voor geheugenconfiguratie
Deze pagina vermeldt elke configuratieknop voor geheugenzoekopdrachten in OpenClaw. Zie voor conceptuele overzichten:
Hoe geheugen werkt.
Standaard SQLite-backend.
Local-first sidecar.
Zoekpijplijn en tuning.
Geheugen-subagent voor interactieve sessies.
Alle instellingen voor geheugenzoekopdrachten staan onder agents.defaults.memorySearch in openclaw.json, tenzij anders vermeld.
Providerselectie
| Sleutel | Type | Standaard | Beschrijving |
|---|---|---|---|
provider |
string |
automatisch gedetecteerd | Embeddingadapter-ID zoals bedrock, deepinfra, gemini, github-copilot, local, mistral, ollama, openai of voyage; kan ook een geconfigureerde models.providers.<id> zijn waarvan api naar een van die adapters verwijst |
model |
string |
providerstandaard | Naam van het embeddingmodel |
fallback |
string |
"none" |
Fallback-adapter-ID wanneer de primaire adapter faalt |
enabled |
boolean |
true |
Geheugenzoekopdrachten in- of uitschakelen |
Volgorde van automatische detectie
Wanneer provider niet is ingesteld, selecteert OpenClaw de eerste beschikbare optie:
local
Geselecteerd als memorySearch.local.modelPath is geconfigureerd en het bestand bestaat.
github-copilot
Geselecteerd als een GitHub Copilot-token kan worden gevonden (env-var of auth-profiel).
openai
Geselecteerd als een OpenAI-sleutel kan worden gevonden.
gemini
Geselecteerd als een Gemini-sleutel kan worden gevonden.
voyage
Geselecteerd als een Voyage-sleutel kan worden gevonden.
mistral
Geselecteerd als een Mistral-sleutel kan worden gevonden.
deepinfra
Geselecteerd als een DeepInfra-sleutel kan worden gevonden.
bedrock
Geselecteerd als de credentialketen van de AWS SDK wordt gevonden (instancerol, toegangssleutels, profiel, SSO, webidentiteit of gedeelde configuratie).
ollama wordt ondersteund maar niet automatisch gedetecteerd (stel dit expliciet in).
Aangepaste provider-id's
memorySearch.provider kan naar een aangepaste models.providers.<id>-vermelding verwijzen. OpenClaw lost de api-eigenaar van die provider op voor de embeddingadapter, terwijl de aangepaste provider-id behouden blijft voor endpoint-, auth- en modelprefixafhandeling. Hierdoor kunnen multi-GPU- of multi-host-setups geheugenembeddings toewijzen aan een specifiek lokaal endpoint:
{
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",
},
},
},
}
API-sleutelresolutie
Externe embeddings vereisen een API-sleutel. Bedrock gebruikt in plaats daarvan de standaardcredentialketen van de AWS SDK (instancerollen, SSO, toegangssleutels).
| Provider | Env-var | Configuratiesleutel |
|---|---|---|
| Bedrock | AWS-credentialketen | Geen API-sleutel nodig |
| DeepInfra | DEEPINFRA_API_KEY |
models.providers.deepinfra.apiKey |
| Gemini | GEMINI_API_KEY |
models.providers.google.apiKey |
| GitHub Copilot | COPILOT_GITHUB_TOKEN, GH_TOKEN, GITHUB_TOKEN |
Auth-profiel via device-login |
| Mistral | MISTRAL_API_KEY |
models.providers.mistral.apiKey |
| Ollama | OLLAMA_API_KEY (placeholder) |
-- |
| OpenAI | OPENAI_API_KEY |
models.providers.openai.apiKey |
| Voyage | VOYAGE_API_KEY |
models.providers.voyage.apiKey |
Configuratie van extern endpoint
Voor aangepaste OpenAI-compatibele endpoints of het overschrijven van providerstandaarden:
remote.baseUrlstringAangepaste API-basis-URL.
remote.apiKeystringAPI-sleutel overschrijven.
remote.headersobjectExtra HTTP-headers (samengevoegd met providerstandaarden).
{
agents: {
defaults: {
memorySearch: {
provider: "openai",
model: "text-embedding-3-small",
remote: {
baseUrl: "https://api.example.com/v1/",
apiKey: "YOUR_KEY",
},
},
},
},
}
Providerspecifieke configuratie
Gemini
| Sleutel | Type | Standaard | Beschrijving |
|---|---|---|---|
model |
string |
gemini-embedding-001 |
Ondersteunt ook gemini-embedding-2-preview |
outputDimensionality |
number |
3072 |
Voor Embedding 2: 768, 1536 of 3072 |
OpenAI-compatible input types
OpenAI-compatibele embeddingendpoints kunnen kiezen voor providerspecifieke input_type-verzoekvelden. Dit is handig voor asymmetrische embeddingmodellen die verschillende labels vereisen voor query- en documentembeddings.
| Sleutel | Type | Standaard | Beschrijving |
|---|---|---|---|
inputType |
string |
niet ingesteld | Gedeelde input_type voor query- en documentembeddings |
queryInputType |
string |
niet ingesteld | input_type tijdens query's; overschrijft inputType |
documentInputType |
string |
niet ingesteld | Index-/document-input_type; overschrijft inputType |
{
agents: {
defaults: {
memorySearch: {
provider: "openai",
remote: {
baseUrl: "https://embeddings.example/v1",
apiKey: "env:EMBEDDINGS_API_KEY",
},
model: "asymmetric-embedder",
queryInputType: "query",
documentInputType: "passage",
},
},
},
}
Het wijzigen van deze waarden beïnvloedt de identiteit van de embeddingcache voor provider-batchindexering en moet worden gevolgd door een geheugenherindexering wanneer het upstreammodel de labels verschillend behandelt.
Bedrock
Bedrock-embeddingconfiguratie
Bedrock gebruikt de standaardcredentialketen van de AWS SDK; er zijn geen API-sleutels nodig. Als OpenClaw op EC2 draait met een Bedrock-geactiveerde instancerol, stel dan alleen de provider en het model in:
{
agents: {
defaults: {
memorySearch: {
provider: "bedrock",
model: "amazon.titan-embed-text-v2:0",
},
},
},
}
| Sleutel | Type | Standaard | Beschrijving |
|---|---|---|---|
model |
string |
amazon.titan-embed-text-v2:0 |
Elke Bedrock-embeddingmodel-ID |
outputDimensionality |
number |
modelstandaard | Voor Titan V2: 256, 512 of 1024 |
Ondersteunde modellen (met familiedetectie en standaarddimensies):
| Model-ID | Provider | Standaarddimensies | Configureerbare dimensies |
|---|---|---|---|
amazon.titan-embed-text-v2:0 |
Amazon | 1024 | 256, 512, 1024 |
amazon.titan-embed-text-v1 |
Amazon | 1536 | -- |
amazon.titan-embed-g1-text-02 |
Amazon | 1536 | -- |
amazon.titan-embed-image-v1 |
Amazon | 1024 | -- |
amazon.nova-2-multimodal-embeddings-v1:0 |
Amazon | 1024 | 256, 384, 1024, 3072 |
cohere.embed-english-v3 |
Cohere | 1024 | -- |
cohere.embed-multilingual-v3 |
Cohere | 1024 | -- |
cohere.embed-v4:0 |
Cohere | 1536 | 256-1536 |
twelvelabs.marengo-embed-3-0-v1:0 |
TwelveLabs | 512 | -- |
twelvelabs.marengo-embed-2-7-v1:0 |
TwelveLabs | 1024 | -- |
Varianten met throughput-suffix (bijv. amazon.titan-embed-text-v1:2:8k) erven de configuratie van het basismodel.
Authenticatie: Bedrock-auth gebruikt de standaardresolutievolgorde voor credentials van de AWS SDK:
- Omgevingsvariabelen (
AWS_ACCESS_KEY_ID+AWS_SECRET_ACCESS_KEY) - SSO-tokencache
- Webidentiteitstokencredentials
- Gedeelde credentials- en configuratiebestanden
- ECS- of EC2-metadatacredentials
Regio wordt opgelost vanuit AWS_REGION, AWS_DEFAULT_REGION, de baseUrl van de amazon-bedrock-provider, of valt terug op us-east-1.
IAM-machtigingen: de IAM-rol of -gebruiker heeft nodig:
{
"Effect": "Allow",
"Action": "bedrock:InvokeModel",
"Resource": "*"
}
Voor least privilege beperk je InvokeModel tot het specifieke model:
arn:aws:bedrock:*::foundation-model/amazon.titan-embed-text-v2:0
Lokaal (GGUF + node-llama-cpp)
| Sleutel | Type | Standaardwaarde | Beschrijving |
|---|---|---|---|
local.modelPath |
string |
automatisch gedownload | Pad naar GGUF-modelbestand |
local.modelCacheDir |
string |
standaard van node-llama-cpp | Cachemap voor gedownloade modellen |
local.contextSize |
number | "auto" |
4096 |
Grootte van het contextvenster voor de embeddingcontext. 4096 dekt typische chunks (128-512 tokens) en begrenst tegelijk niet-gewicht-VRAM. Verlaag naar 1024-2048 op beperkte hosts. "auto" gebruikt het getrainde maximum van het model - niet aanbevolen voor 8B+-modellen (Qwen3-Embedding-8B: 40 960 tokens -> ~32 GB VRAM versus ~8,8 GB bij 4096). |
Standaardmodel: embeddinggemma-300m-qat-Q8_0.gguf (~0,6 GB, automatisch gedownload). Bron-checkouts vereisen nog steeds goedkeuring voor native builds: pnpm approve-builds en daarna pnpm rebuild node-llama-cpp.
Gebruik de zelfstandige CLI om hetzelfde providerpad te verifiëren dat de Gateway gebruikt:
openclaw memory status --deep --agent main
openclaw memory index --force --agent main
Als provider auto is, wordt local alleen geselecteerd wanneer local.modelPath naar een bestaand lokaal bestand wijst. hf:- en HTTP(S)-modelverwijzingen kunnen nog steeds expliciet worden gebruikt met provider: "local", maar ze zorgen er niet voor dat auto lokaal selecteert voordat het model op schijf beschikbaar is.
Time-out voor inline embeddings
sync.embeddingBatchTimeoutSecondsnumberOverschrijf de time-out voor inline embeddingbatches tijdens geheugenindexering.
Indien niet ingesteld, wordt de standaardwaarde van de provider gebruikt: 600 seconden voor lokale/zelfgehoste providers zoals local, ollama en lmstudio, en 120 seconden voor gehoste providers. Verhoog dit wanneer lokale CPU-gebonden embeddingbatches gezond maar traag zijn.
Configuratie voor hybride zoekopdrachten
Alles onder memorySearch.query.hybrid:
| Sleutel | Type | Standaardwaarde | Beschrijving |
|---|---|---|---|
enabled |
boolean |
true |
Hybride BM25 + vectorzoeken inschakelen |
vectorWeight |
number |
0.7 |
Gewicht voor vectorscores (0-1) |
textWeight |
number |
0.3 |
Gewicht voor BM25-scores (0-1) |
candidateMultiplier |
number |
4 |
Vermenigvuldiger voor kandidaatpoolgrootte |
MMR (diversiteit)
| Sleutel | Type | Standaardwaarde | Beschrijving |
|---|---|---|---|
mmr.enabled |
boolean |
false |
MMR-herrangschikking inschakelen |
mmr.lambda |
number |
0.7 |
0 = maximale diversiteit, 1 = maximale relevantie |
Tijdverval (recentheid)
| Sleutel | Type | Standaardwaarde | Beschrijving |
|---|---|---|---|
temporalDecay.enabled |
boolean |
false |
Recentheidsboost inschakelen |
temporalDecay.halfLifeDays |
number |
30 |
Score halveert elke N dagen |
Evergreen-bestanden (MEMORY.md, niet-gedateerde bestanden in memory/) vervallen nooit.
Volledig voorbeeld
{
agents: {
defaults: {
memorySearch: {
query: {
hybrid: {
vectorWeight: 0.7,
textWeight: 0.3,
mmr: { enabled: true, lambda: 0.7 },
temporalDecay: { enabled: true, halfLifeDays: 30 },
},
},
},
},
},
}
Aanvullende geheugenpaden
| Sleutel | Type | Beschrijving |
|---|---|---|
extraPaths |
string[] |
Aanvullende mappen of bestanden om te indexeren |
{
agents: {
defaults: {
memorySearch: {
extraPaths: ["../team-docs", "/srv/shared-notes"],
},
},
},
}
Paden kunnen absoluut of werkruimte-relatief zijn. Mappen worden recursief gescand op .md-bestanden. Symlinkafhandeling hangt af van de actieve backend: de ingebouwde engine negeert symlinks, terwijl QMD het gedrag van de onderliggende QMD-scanner volgt.
Gebruik voor agent-scoped cross-agent transcript search agents.list[].memorySearch.qmd.extraCollections in plaats van memory.qmd.paths. Die extra verzamelingen volgen dezelfde vorm { path, name, pattern? }, maar ze worden per agent samengevoegd en kunnen expliciete gedeelde namen behouden wanneer het pad buiten de huidige werkruimte wijst. Als hetzelfde opgeloste pad voorkomt in zowel memory.qmd.paths als memorySearch.qmd.extraCollections, behoudt QMD de eerste vermelding en slaat het duplicaat over.
Multimodaal geheugen (Gemini)
Indexeer afbeeldingen en audio naast Markdown met Gemini Embedding 2:
| Sleutel | Type | Standaardwaarde | Beschrijving |
|---|---|---|---|
multimodal.enabled |
boolean |
false |
Multimodale indexering inschakelen |
multimodal.modalities |
string[] |
-- | ["image"], ["audio"], of ["all"] |
multimodal.maxFileBytes |
number |
10000000 |
Maximale bestandsgrootte voor indexering |
Ondersteunde formaten: .jpg, .jpeg, .png, .webp, .gif, .heic, .heif (afbeeldingen); .mp3, .wav, .ogg, .opus, .m4a, .aac, .flac (audio).
Embedding-cache
| Sleutel | Type | Standaard | Beschrijving |
|---|---|---|---|
cache.enabled |
boolean |
false |
Cache chunk-embeddings in SQLite |
cache.maxEntries |
number |
50000 |
Max. gecachte embeddings |
Voorkomt dat ongewijzigde tekst opnieuw wordt ge-embed tijdens herindexering of transcriptupdates.
Batchindexering
| Sleutel | Type | Standaard | Beschrijving |
|---|---|---|---|
remote.nonBatchConcurrency |
number |
4 |
Parallelle inline embeddings |
remote.batch.enabled |
boolean |
false |
Batch-embedding-API inschakelen |
remote.batch.concurrency |
number |
2 |
Parallelle batchtaken |
remote.batch.wait |
boolean |
true |
Wachten op batchvoltooiing |
remote.batch.pollIntervalMs |
number |
-- | Poll-interval |
remote.batch.timeoutMinutes |
number |
-- | Batch-time-out |
Beschikbaar voor openai, gemini en voyage. OpenAI-batches zijn doorgaans het snelst en goedkoopst voor grote backfills.
remote.nonBatchConcurrency bepaalt inline embedding-aanroepen die worden gebruikt door lokale/zelfgehoste providers en gehoste providers wanneer provider-batch-API's niet actief zijn. Ollama gebruikt standaard 1 voor niet-batchindexering om kleinere lokale hosts niet te overbelasten; stel een hogere waarde in op grotere machines.
Dit staat los van sync.embeddingBatchTimeoutSeconds, dat de time-out voor inline embedding-aanroepen bepaalt.
Zoeken in sessiegeheugen (experimenteel)
Indexeer sessietranscripten en maak ze beschikbaar via memory_search:
| Sleutel | Type | Standaard | Beschrijving |
|---|---|---|---|
experimental.sessionMemory |
boolean |
false |
Sessie-indexering inschakelen |
sources |
string[] |
["memory"] |
Voeg "sessions" toe om transcripten op te nemen |
sync.sessions.deltaBytes |
number |
100000 |
Bytedrempel voor herindexering |
sync.sessions.deltaMessages |
number |
50 |
Berichtdrempel voor herindexering |
SQLite-vectorversnelling (sqlite-vec)
| Sleutel | Type | Standaard | Beschrijving |
|---|---|---|---|
store.vector.enabled |
boolean |
true |
Gebruik sqlite-vec voor vectorquery's |
store.vector.extensionPath |
string |
gebundeld | Overschrijf sqlite-vec-pad |
Wanneer sqlite-vec niet beschikbaar is, valt OpenClaw automatisch terug op in-process cosinusgelijkenis.
Indexopslag
| Sleutel | Type | Standaard | Beschrijving |
|---|---|---|---|
store.path |
string |
~/.openclaw/memory/{agentId}.sqlite |
Indexlocatie (ondersteunt {agentId}-token) |
store.fts.tokenizer |
string |
unicode61 |
FTS5-tokenizer (unicode61 of trigram) |
QMD-backendconfiguratie
Stel memory.backend = "qmd" in om dit in te schakelen. Alle QMD-instellingen staan onder memory.qmd:
| Sleutel | Type | Standaard | Beschrijving |
|---|---|---|---|
command |
string |
qmd |
Pad naar QMD-uitvoerbaar bestand; stel een absoluut pad in wanneer service-PATH afwijkt van je shell |
searchMode |
string |
search |
Zoekopdracht: search, vsearch, query |
includeDefaultMemory |
boolean |
true |
MEMORY.md + memory/**/*.md automatisch indexeren |
paths[] |
array |
-- | Extra paden: { name, path, pattern? } |
sessions.enabled |
boolean |
false |
Sessietranscripten indexeren |
sessions.retentionDays |
number |
-- | Transcriptbewaartermijn |
sessions.exportDir |
string |
-- | Exportmap |
searchMode: "search" is alleen lexicaal/BM25. OpenClaw voert geen gereedheidsprobes voor semantische vectoren of QMD-embeddingonderhoud uit voor die modus, ook niet tijdens memory status --deep; vsearch en query blijven QMD-vectorgereedheid en embeddings vereisen.
OpenClaw geeft de voorkeur aan de huidige QMD-collectie- en MCP-queryvormen, maar houdt oudere QMD-releases werkend door waar nodig compatibele collectiepatroonflags en oudere MCP-toolnamen te proberen. Wanneer QMD ondersteuning voor meerdere collectiefilters adverteert, worden collecties met dezelfde bron met één QMD-proces doorzocht; oudere QMD-builds blijven het compatibiliteitspad per collectie gebruiken. Dezelfde bron betekent dat duurzame geheugencollecties samen worden gegroepeerd, terwijl sessietranscriptcollecties een aparte groep blijven, zodat brondiversificatie nog steeds beide invoeren heeft.
Updateschema
| Sleutel | Type | Standaard | Beschrijving |
|---|---|---|---|
update.interval |
string |
5m |
Vernieuwingsinterval |
update.debounceMs |
number |
15000 |
Bestandswijzigingen debouncen |
update.onBoot |
boolean |
true |
Vernieuwen wanneer de langlevende QMD-manager opent; bewaakt ook opt-in startvernieuwing |
update.startup |
string |
off |
Optionele vernieuwing bij Gateway-start: off, idle of immediate |
update.startupDelayMs |
number |
120000 |
Vertraging voordat startup: "idle"-vernieuwing wordt uitgevoerd |
update.waitForBootSync |
boolean |
false |
Manager openen blokkeren tot de eerste vernieuwing is voltooid |
update.embedInterval |
string |
-- | Afzonderlijk embeddingritme |
update.commandTimeoutMs |
number |
-- | Time-out voor QMD-commando's |
update.updateTimeoutMs |
number |
-- | Time-out voor QMD-updatebewerkingen |
update.embedTimeoutMs |
number |
-- | Time-out voor QMD-embeddingbewerkingen |
Limieten
| Sleutel | Type | Standaard | Beschrijving |
|---|---|---|---|
limits.maxResults |
number |
6 |
Maximaal aantal zoekresultaten |
limits.maxSnippetChars |
number |
-- | Snippetlengte begrenzen |
limits.maxInjectedChars |
number |
-- | Totaal aantal geïnjecteerde tekens begrenzen |
limits.timeoutMs |
number |
4000 |
Zoektime-out |
Bereik
Bepaalt welke sessies QMD-zoekresultaten kunnen ontvangen. Hetzelfde schema als session.sendPolicy:
{
memory: {
qmd: {
scope: {
default: "deny",
rules: [{ action: "allow", match: { chatType: "direct" } }],
},
},
},
}
De meegeleverde standaardinstelling staat directe sessies en kanaalsessies toe, terwijl groepen nog steeds worden geweigerd.
Standaard is alleen DM. match.keyPrefix matcht de genormaliseerde sessiesleutel; match.rawKeyPrefix matcht de ruwe sleutel inclusief agent:<id>:.
Citaties
memory.citations geldt voor alle backends:
| Waarde | Gedrag |
|---|---|
auto (standaard) |
Source: <path#line>-footer opnemen in snippets |
on |
Footer altijd opnemen |
off |
Footer weglaten (pad wordt intern nog steeds aan agent doorgegeven) |
QMD-opstartvernieuwingen gebruiken een eenmalig subprocesspad tijdens het starten van de Gateway. De langlevende QMD-manager blijft eigenaar van de reguliere bestandswatcher en intervaltimers wanneer geheugenzoekopdracht wordt geopend voor interactief gebruik.
Volledig QMD-voorbeeld
{
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
Dreaming wordt geconfigureerd onder plugins.entries.memory-core.config.dreaming, niet onder agents.defaults.memorySearch.
Dreaming draait als één geplande sweep en gebruikt interne light/deep/REM-fasen als implementatiedetail.
Zie Dreaming voor conceptueel gedrag en slashcommando's.
Gebruikersinstellingen
| Sleutel | Type | Standaardmodel | Beschrijving |
|---|---|---|---|
enabled |
boolean |
false |
Dreaming volledig in- of uitschakelen |
frequency |
string |
0 3 * * * |
Optioneel cronritme voor de volledige Dreaming-sweep |
model |
string |
standaardmodel | Optionele modeloverride voor de Dream Diary-subagent |
Voorbeeld
{
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",
},
},
},
},
},
}