Active Memory is een optionele, door de Plugin beheerde blokkerende geheugen-subagent die wordt uitgevoerd vóór het hoofdantwoord voor in aanmerking komende gesprekssessies. Het bestaat omdat de meeste geheugensystemen capabel maar reactief zijn. Ze vertrouwen erop dat de hoofdagent beslist wanneer geheugen moet worden doorzocht, of dat de gebruiker dingen zegt zoals “onthoud dit” of “doorzoek geheugen.” Tegen die tijd is het moment waarop geheugen het antwoord natuurlijk had laten aanvoelen al voorbij. Active Memory geeft het systeem één begrensde kans om relevant geheugen naar voren te halen voordat het hoofdantwoord wordt gegenereerd.Documentation Index
Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
Snel starten
Plak dit inopenclaw.json voor een veilige standaardconfiguratie — Plugin aan, beperkt tot
de main-agent, alleen direct-message sessies, neemt het sessiemodel over
wanneer beschikbaar:
plugins.entries.active-memory.enabled: trueschakelt de Plugin inconfig.agents: ["main"]laat alleen demain-agent Active Memory gebruikenconfig.allowedChatTypes: ["direct"]beperkt het tot direct-message sessies (meld groepen/kanalen expliciet aan)config.model(optioneel) zet een toegewijd recallmodel vast; niet ingesteld neemt het huidige sessiemodel overconfig.modelFallbackwordt alleen gebruikt wanneer geen expliciet of overgenomen model wordt gevondenconfig.promptStyle: "balanced"is de standaard voorrecent-modus- Active Memory wordt nog steeds alleen uitgevoerd voor in aanmerking komende interactieve persistente chatsessies
Snelheidsaanbevelingen
De eenvoudigste configuratie isconfig.model niet in te stellen en Active Memory
hetzelfde model te laten gebruiken dat je al gebruikt voor normale antwoorden. Dat is de veiligste standaard
omdat het je bestaande provider-, auth- en modelvoorkeuren volgt.
Als je wilt dat Active Memory sneller aanvoelt, gebruik dan een toegewijd inferentiemodel
in plaats van het hoofdchatmodel te lenen. Recallkwaliteit is belangrijk, maar latency
is belangrijker dan voor het hoofdantwoordpad, en het tooloppervlak van Active Memory
is smal (het roept alleen beschikbare geheugen-recalltools aan).
Goede opties voor snelle modellen:
cerebras/gpt-oss-120bvoor een toegewijd recallmodel met lage latencygoogle/gemini-3-flashals fallback met lage latency zonder je primaire chatmodel te wijzigen- je normale sessiemodel, door
config.modelniet in te stellen
Cerebras-configuratie
Voeg een Cerebras-provider toe en wijs Active Memory ernaar:chat/completions-toegang heeft voor het
gekozen model — zichtbaarheid in /v1/models alleen garandeert dat niet.
Hoe je het ziet
Active Memory injecteert een verborgen, niet-vertrouwd promptprefix voor het model. Het stelt geen ruwe<active_memory_plugin>...</active_memory_plugin>-tags bloot in het
normale antwoord dat zichtbaar is voor de client.
Sessieschakelaar
Gebruik het Plugin-commando wanneer je Active Memory voor de huidige chatsessie wilt pauzeren of hervatten zonder de configuratie te bewerken:plugins.entries.active-memory.enabled, agenttargeting of andere globale
configuratie niet.
Als je wilt dat het commando configuratie schrijft en Active Memory voor
alle sessies pauzeert of hervat, gebruik dan de expliciete globale vorm:
plugins.entries.active-memory.config.enabled. Het laat
plugins.entries.active-memory.enabled aan staan zodat het commando beschikbaar blijft om
Active Memory later weer in te schakelen.
Als je wilt zien wat Active Memory in een live sessie doet, schakel dan de
sessieschakelaars in die passen bij de gewenste uitvoer:
- een Active Memory-statusregel zoals
Active Memory: status=ok elapsed=842ms query=recent summary=34 charswanneer/verbose on - een leesbare debug-samenvatting zoals
Active Memory Debug: Lemon pepper wings with blue cheese.wanneer/trace on
/trace raw inschakelt, toont het getracete blok Model Input (User Role)
het verborgen Active Memory-prefix als:
Wanneer het wordt uitgevoerd
Active Memory gebruikt twee poorten:- Configuratie-opt-in
De Plugin moet ingeschakeld zijn, en de huidige agent-id moet voorkomen in
plugins.entries.active-memory.config.agents. - Strikte runtime-geschiktheid Zelfs wanneer ingeschakeld en getarget, wordt Active Memory alleen uitgevoerd voor in aanmerking komende interactieve persistente chatsessies.
Sessietypen
config.allowedChatTypes bepaalt welke soorten gesprekken Active
Memory überhaupt mogen uitvoeren.
De standaard is:
config.allowedChatIds en
config.deniedChatIds nadat je de toegestane sessietypen hebt gekozen.
allowedChatIds is een expliciete allowlist van opgeloste gespreks-id’s. Wanneer die
niet leeg is, wordt Active Memory alleen uitgevoerd wanneer de gespreks-id van de sessie in
die lijst staat. Dit vernauwt elk toegestaan chattype tegelijk, inclusief directe
berichten. Als je alle directe berichten plus alleen specifieke groepen wilt, neem dan
de directe peer-id’s op in allowedChatIds of houd allowedChatTypes gericht op
de groeps-/kanaaluitrol die je test.
deniedChatIds is een expliciete denylist. Die wint altijd van
allowedChatTypes en allowedChatIds, dus een overeenkomend gesprek wordt overgeslagen
zelfs wanneer het sessietype anders toegestaan is.
De id’s komen uit de persistente kanaalsessiesleutel: bijvoorbeeld Feishu
chat_id / open_id, Telegram chat id of Slack channel id. Matching is
hoofdletterongevoelig. Als allowedChatIds niet leeg is en OpenClaw geen
gespreks-id voor de sessie kan oplossen, slaat Active Memory de beurt over in plaats van
te gokken.
Voorbeeld:
Waar het wordt uitgevoerd
Active Memory is een functie voor gespreksverrijking, geen platformbrede inferentiefunctie.| Oppervlak | Voert Active Memory uit? |
|---|---|
| Control UI / webchat persistente sessies | Ja, als de Plugin is ingeschakeld en de agent is getarget |
| Andere interactieve kanaalsessies op hetzelfde persistente chatpad | Ja, als de Plugin is ingeschakeld en de agent is getarget |
| Headless eenmalige runs | Nee |
| Heartbeat-/achtergrondruns | Nee |
Generieke interne agent-command-paden | Nee |
| Subagent-/interne helperuitvoering | Nee |
Waarom het gebruiken
Gebruik Active Memory wanneer:- de sessie persistent en gebruikersgericht is
- de agent betekenisvol langetermijngeheugen heeft om te doorzoeken
- continuïteit en personalisatie belangrijker zijn dan ruwe promptdeterminisme
- stabiele voorkeuren
- terugkerende gewoonten
- langetermijncontext van de gebruiker die natuurlijk naar voren moet komen
- automatisering
- interne workers
- eenmalige API-taken
- plekken waar verborgen personalisatie verrassend zou zijn
Hoe het werkt
De runtimevorm is: De blokkerende geheugen-subagent kan alleen de beschikbare geheugen-recalltools gebruiken:memory_recallmemory_searchmemory_get
NONE teruggeven.
Querymodi
config.queryMode bepaalt hoeveel gesprek de blokkerende geheugen-subagent
ziet. Kies de kleinste modus die vervolgvragen nog goed beantwoordt;
timeoutbudgetten moeten meegroeien met de contextgrootte (message < recent < full).
- message
- recent
- full
Alleen het nieuwste gebruikersbericht wordt verzonden.Gebruik dit wanneer:
- je het snelste gedrag wilt
- je de sterkste bias richting recall van stabiele voorkeuren wilt
- vervolgbeurten geen gesprekscontext nodig hebben
3000 tot 5000 ms voor config.timeoutMs.Promptstijlen
config.promptStyle bepaalt hoe gretig of strikt de blokkerende geheugen-subagent is
bij het beslissen of geheugen moet worden teruggegeven.
Beschikbare stijlen:
balanced: algemene standaard voorrecent-modusstrict: minst gretig; het beste wanneer je zeer weinig doorwerking van nabije context wiltcontextual: het meest gericht op continuïteit; het beste wanneer gespreksgeschiedenis zwaarder moet wegenrecall-heavy: sneller bereid om geheugen te tonen bij zachtere maar nog steeds plausibele matchesprecision-heavy: geeft agressief de voorkeur aanNONE, tenzij de match duidelijk ispreference-only: geoptimaliseerd voor favorieten, gewoonten, routines, smaak en terugkerende persoonlijke feiten
config.promptStyle niet is ingesteld:
config.promptStyle expliciet instelt, heeft die override voorrang.
Voorbeeld:
Model-fallbackbeleid
Alsconfig.model niet is ingesteld, probeert Active Memory een model in deze volgorde te bepalen:
config.modelFallback beheert de geconfigureerde fallbackstap.
Optionele aangepaste fallback:
config.modelFallbackPolicy blijft alleen behouden als verouderd compatibiliteitsveld
voor oudere configuraties. Het wijzigt runtimegedrag niet meer.
Geavanceerde ontsnappingsroutes
Deze opties maken bewust geen deel uit van de aanbevolen setup.config.thinking kan het denkniveau van de blokkerende geheugen-subagent overschrijven:
config.promptAppend voegt extra operatorinstructies toe na de standaardprompt van Active
Memory en vóór de gesprekscontext:
config.promptOverride vervangt de standaardprompt van Active Memory. OpenClaw
voegt daarna nog steeds de gesprekscontext toe:
NONE of
compacte gebruikersfeitcontext voor het hoofdmodel terug te geven.
Transcriptpersistentie
Active Memory-runs van de blokkerende geheugen-subagent maken een echtsession.jsonl-
transcript aan tijdens de aanroep van de blokkerende geheugen-subagent.
Standaard is dat transcript tijdelijk:
- het wordt naar een tijdelijke map geschreven
- het wordt alleen gebruikt voor de run van de blokkerende geheugen-subagent
- het wordt direct verwijderd nadat de run is voltooid
config.transcriptDir.
Gebruik dit zorgvuldig:
- transcripten van de blokkerende geheugen-subagent kunnen zich snel opstapelen in drukke sessies
full-querymodus kan veel gesprekscontext dupliceren- deze transcripten bevatten verborgen promptcontext en opgehaalde herinneringen
Configuratie
Alle Active Memory-configuratie staat onder:| Sleutel | Type | Betekenis |
|---|---|---|
enabled | boolean | Schakelt de Plugin zelf in |
config.agents | string[] | Agent-id’s die Active Memory mogen gebruiken |
config.model | string | Optionele modelreferentie voor de blokkerende geheugen-subagent; wanneer niet ingesteld, gebruikt Active Memory het huidige sessiemodel |
config.allowedChatTypes | ("direct" | "group" | "channel")[] | Sessietypen die Active Memory mogen uitvoeren; standaard direct-message-achtige sessies |
config.allowedChatIds | string[] | Optionele allowlist per gesprek, toegepast na allowedChatTypes; niet-lege lijsten falen gesloten |
config.deniedChatIds | string[] | Optionele denylist per gesprek die toegestane sessietypen en toegestane id’s overschrijft |
config.queryMode | "message" | "recent" | "full" | Bepaalt hoeveel gesprek de blokkerende geheugen-subagent ziet |
config.promptStyle | "balanced" | "strict" | "contextual" | "recall-heavy" | "precision-heavy" | "preference-only" | Bepaalt hoe gretig of strikt de blokkerende geheugen-subagent is bij de beslissing om geheugen terug te geven |
config.thinking | "off" | "minimal" | "low" | "medium" | "high" | "xhigh" | "adaptive" | "max" | Geavanceerde thinking-override voor de blokkerende geheugen-subagent; standaard off voor snelheid |
config.promptOverride | string | Geavanceerde volledige promptvervanging; niet aanbevolen voor normaal gebruik |
config.promptAppend | string | Geavanceerde extra instructies die aan de standaardprompt of overschreven prompt worden toegevoegd |
config.timeoutMs | number | Harde timeout voor de blokkerende geheugen-subagent, begrensd op 120000 ms |
config.maxSummaryChars | number | Maximaal totaal aantal tekens toegestaan in de Active Memory-samenvatting |
config.logging | boolean | Geeft Active Memory-logs tijdens het tunen |
config.persistTranscripts | boolean | Bewaart transcripten van de blokkerende geheugen-subagent op schijf in plaats van tijdelijke bestanden te verwijderen |
config.transcriptDir | string | Relatieve transcriptmap voor de blokkerende geheugen-subagent onder de sessiemap van de agent |
| Sleutel | Type | Betekenis |
|---|---|---|
config.maxSummaryChars | number | Maximaal totaal aantal tekens toegestaan in de Active Memory-samenvatting |
config.recentUserTurns | number | Eerdere gebruikersbeurten om op te nemen wanneer queryMode recent is |
config.recentAssistantTurns | number | Eerdere assistentbeurten om op te nemen wanneer queryMode recent is |
config.recentUserChars | number | Max. tekens per recente gebruikersbeurt |
config.recentAssistantChars | number | Max. tekens per recente assistentbeurt |
config.cacheTtlMs | number | Cachehergebruik voor herhaalde identieke query’s (bereik: 1000-120000 ms; standaard: 15000) |
config.circuitBreakerMaxTimeouts | number | Sla recall over na dit aantal opeenvolgende timeouts voor dezelfde agent/model. Wordt gereset bij een geslaagde recall of nadat de cooldown verloopt (bereik: 1-20; standaard: 3). |
config.circuitBreakerCooldownMs | number | Hoe lang recall wordt overgeslagen nadat de circuit breaker afgaat, in ms (bereik: 5000-600000; standaard: 60000). |
Aanbevolen setup
Begin metrecent.
/verbose on voor de
normale statusregel en /trace on voor de debug-samenvatting van Active Memory in plaats
van te zoeken naar een aparte debugopdracht voor Active Memory. In chatkanalen worden die
diagnostische regels na het hoofdantwoord van de assistent verzonden in plaats van ervoor.
Ga daarna naar:
messageals je lagere latentie wiltfullals je besluit dat extra context de tragere blokkerende geheugen-subagent waard is
Debugging
Als Active Memory niet verschijnt waar je het verwacht:- Controleer of de Plugin is ingeschakeld onder
plugins.entries.active-memory.enabled. - Controleer of het huidige agent-id in
config.agentsstaat. - Controleer of je test via een interactieve persistente chatsessie.
- Schakel
config.logging: truein en bekijk de Gateway-logs. - Verifieer dat memory search zelf werkt met
openclaw memory status --deep.
maxSummaryChars
- verlaag
queryMode - verlaag
timeoutMs - verlaag het aantal recente beurten
- verlaag de tekenlimieten per beurt
Veelvoorkomende problemen
Active Memory maakt gebruik van de recall-pipeline van de geconfigureerde geheugen-Plugin, dus de meeste recall-verrassingen zijn problemen met de embeddingprovider, geen bugs in Active Memory. Het standaardpadmemory-core gebruikt memory_search; memory-lancedb gebruikt
memory_recall.
Embeddingprovider is gewijzigd of werkt niet meer
Embeddingprovider is gewijzigd of werkt niet meer
Als
memorySearch.provider niet is ingesteld, detecteert OpenClaw automatisch de eerste
beschikbare embeddingprovider. Een nieuwe API-sleutel, uitgeput quotum of een
rate-limited gehoste provider kan veranderen welke provider tussen
runs wordt gevonden. Als er geen provider wordt gevonden, kan memory_search terugvallen op alleen lexicale
retrieval; runtimefouten nadat een provider al is geselecteerd vallen niet
automatisch terug.Pin de provider (en een optionele fallback) expliciet om selectie
deterministisch te maken. Zie Memory Search voor de volledige
lijst met providers en pinvoorbeelden.Recall voelt traag, leeg of inconsistent aan
Recall voelt traag, leeg of inconsistent aan
- Schakel
/trace onin om het door de Plugin beheerde Active Memory-foutopsporingsoverzicht in de sessie zichtbaar te maken. - Schakel
/verbose onin om ook de statusregel🧩 Active Memory: ...na elk antwoord te zien. - Controleer Gateway-logboeken op
active-memory: ... start|done,memory sync failed (search-bootstrap)of embeddingfouten van providers. - Voer
openclaw memory status --deepuit om de memory-search-backend en de indexstatus te inspecteren. - Als je
ollamagebruikt, controleer dan of het embeddingmodel is geïnstalleerd (ollama list).