Snelle start
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: truezet de Plugin aanconfig.agents: ["main"]schakelt alleen demain-agent in voor Active Memoryconfig.allowedChatTypes: ["direct"]beperkt dit tot direct-message-sessies (schakel groepen/kanalen expliciet in)config.model(optioneel) zet een vast toegewezen herinneringsmodel vast; niet ingesteld neemt het huidige sessiemodel overconfig.modelFallbackwordt alleen gebruikt wanneer er geen expliciet of overgenomen model wordt opgelostconfig.promptStyle: "balanced"is de standaard voor de modusrecent- Active Memory wordt nog steeds alleen uitgevoerd voor geschikte 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 toegewezen inferentiemodel
in plaats van het hoofdchatmodel te lenen. Herinneringskwaliteit is belangrijk, maar latency
is belangrijker dan voor het hoofdantwoordpad, en het tooloppervlak van Active Memory
is smal (het roept alleen beschikbare geheugenterughaaltools aan).
Goede opties voor snelle modellen:
cerebras/gpt-oss-120bvoor een toegewezen herinneringsmodel 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 promptvoorvoegsel voor het model. Het stelt geen ruwe<active_memory_plugin>...</active_memory_plugin>-tags bloot in het
normale antwoord dat voor de client zichtbaar is.
Sessieschakelaar
Gebruik de Plugin-opdracht 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 de opdracht configuratie wegschrijft 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 zodat de opdracht beschikbaar blijft om
Active Memory later weer in te schakelen.
Als je wilt zien wat Active Memory doet in een live sessie, zet dan de
sessieschakelaars aan die overeenkomen met de uitvoer die je wilt:
- een Active Memory-statusregel zoals
Active Memory: status=ok elapsed=842ms query=recent summary=34 charswanneer/verbose on - een leesbare debugsamenvatting zoals
Active Memory Debug: Lemon pepper wings with blue cheese.wanneer/trace on
/trace raw inschakelt, toont het getraceerde blok Model Input (User Role)
het verborgen Active Memory-voorvoegsel als:
Wanneer het draait
Active Memory gebruikt twee poorten:- Config 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, draait Active Memory alleen voor geschikte interactieve persistente chatsessies.
Sessietypen
config.allowedChatTypes bepaalt welke soorten gesprekken überhaupt Active
Memory 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 deze
niet leeg is, draait Active Memory alleen wanneer de gespreks-id van de sessie in
die lijst staat. Dit beperkt 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 verder toegestaan is.
De id’s komen uit de persistente kanaalsessiesleutel: bijvoorbeeld Feishu
chat_id / open_id, Telegram-chat-id of Slack-kanaal-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 draait
Active Memory is een functie voor gespreksverrijking, geen platformbrede inferentiefunctie.| Oppervlak | Draait Active Memory? |
|---|---|
| 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 zinvol langetermijngeheugen heeft om te doorzoeken
- continuïteit en personalisatie belangrijker zijn dan ruwe promptdeterminisme
- stabiele voorkeuren
- terugkerende gewoonten
- langetermijngebruikerscontext die natuurlijk naar voren moet komen
- automatisering
- interne workers
- eenmalige API-taken
- plaatsen waar verborgen personalisatie verrassend zou zijn
Hoe het werkt
De runtime-vorm is: De blokkerende geheugensubagent kan alleen de geconfigureerde geheugenterughaaltools gebruiken. Standaard zijn dat:memory_searchmemory_get
plugins.slots.memory memory-lancedb is, is de standaard in plaats daarvan memory_recall.
Stel config.toolsAllow in wanneer een andere geheugenprovider een
ander contract voor een terughaaltool blootstelt.
Als de verbinding zwak is, moet deze NONE teruggeven.
Querymodi
config.queryMode bepaalt hoeveel gesprek de blokkerende geheugensubagent
ziet. Kies de kleinste modus die vervolgvraagstukken 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 het terughalen 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 de beslissing of geheugen moet worden geretourneerd.
Beschikbare stijlen:
balanced: standaard voor algemeen gebruik in de modusrecentstrict: het minst gretig; het beste wanneer je heel weinig doorwerking vanuit nabije context wiltcontextual: het meest continuiteitsvriendelijk; het beste wanneer gespreksgeschiedenis zwaarder moet meewegenrecall-heavy: meer bereid om geheugen te tonen bij zwakkere maar nog steeds plausibele overeenkomstenprecision-heavy: geeft agressief de voorkeur aanNONE, tenzij de overeenkomst 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:
Beleid voor model-fallback
Alsconfig.model niet is ingesteld, probeert Active Memory een model in deze volgorde te bepalen:
config.modelFallback beheert de geconfigureerde fallback-stap.
Optionele aangepaste fallback:
config.modelFallbackPolicy wordt alleen behouden als verouderd compatibiliteitsveld
voor oudere configs. Het wijzigt het runtimegedrag niet meer.
Geheugentools
Standaard laat Active Memory de blokkerende recall-subagentmemory_search en memory_get aanroepen. Dat komt overeen met het ingebouwde memory-core-
contract. Wanneer plugins.slots.memory memory-lancedb selecteert en
config.toolsAllow niet is ingesteld, behoudt Active Memory het bestaande LanceDB-gedrag
en gebruikt in plaats daarvan memory_recall.
Als je een andere geheugen-Plugin gebruikt, stel dan config.toolsAllow in op de exacte toolnamen
die die Plugin registreert. Active Memory vermeldt die tools in de recall-
prompt en geeft dezelfde lijst door aan de ingebedde subagent. Als geen van de
geconfigureerde tools beschikbaar is, of de geheugen-subagent faalt, slaat Active Memory
recall voor die beurt over en gaat het hoofdantwoord verder zonder geheugencontext.
Voor aangepaste recall-tools telt niet-lege, voor het model zichtbare tooloutput als recall-
bewijs, tenzij gestructureerde resultaatvelden expliciet een leeg resultaat of
mislukking rapporteren.
toolsAllow accepteert alleen concrete geheugentoolnamen. Wildcards, group:*-
items en kerntools voor agents zoals read, exec, message en
web_search worden genegeerd voordat de verborgen geheugen-subagent start.
Opmerking over standaardgedrag: Active Memory neemt memory_recall niet langer op in de
standaard allowlist van memory-core. Bestaande memory-lancedb-setups blijven werken
wanneer plugins.slots.memory is ingesteld op memory-lancedb. Expliciete toolsAllow
overschrijft altijd de automatische standaard.
Ingebouwde memory-core
De standaardsetup heeft geen explicietetoolsAllow nodig:
LanceDB-geheugen
De gebundeldememory-lancedb-Plugin stelt memory_recall beschikbaar. Het selecteren van het
geheugenslot is genoeg voor Active Memory om die recall-tool te gebruiken:
Lossless Claw
Lossless Claw is een context-engine-Plugin met eigen recall-tools. Installeer en configureer deze eerst als context-engine; zie Context-engine. Laat Active Memory daarna de recall-tools van Lossless Claw gebruiken:lcm_expand niet op in toolsAllow voor de hoofdsubagent van Active Memory.
Lossless Claw gebruikt die als een lager gelegen gedelegeerde uitbreidingstool.
Geavanceerde nooduitgangen
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 standaard Active
Memory-prompt en vóór de gesprekscontext:
promptAppend met aangepaste toolsAllow wanneer een niet-core geheugen-Plugin
providerspecifieke toolvolgorde of instructies voor het vormen van query’s nodig heeft.
config.promptOverride vervangt de standaard Active Memory-prompt. OpenClaw
voegt daarna nog steeds de gesprekscontext toe:
NONE
of compacte gebruikersfeitcontext voor het hoofdmodel terug te geven.
Transcriptpersistentie
Runs van de blokkerende geheugen-subagent van Active memory maken een echtsession.jsonl-
transcript 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 ophopen in drukke sessies
- de querymodus
fullkan veel gesprekscontext dupliceren - deze transcripten bevatten verborgen promptcontext en opgehaalde herinneringen
Configuratie
Alle configuratie voor active memory 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 sessies in de stijl van directe berichten |
config.allowedChatIds | string[] | Optionele allowlist per gesprek die wordt 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 van het 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.toolsAllow | string[] | Concrete namen van geheugentools die de blokkerende geheugen-subagent mag aanroepen; standaard ["memory_search", "memory_get"], of ["memory_recall"] wanneer plugins.slots.memory memory-lancedb is; jokertekens, group:*-items en core-agenttools worden genegeerd |
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 worden toegevoegd aan de standaardprompt of overschreven prompt |
config.timeoutMs | number | Harde time-out voor de blokkerende geheugen-subagent, begrensd op 120000 ms |
config.setupGraceTimeoutMs | number | Geavanceerd extra setupbudget voordat de recall-time-out verloopt; standaard 0 en begrensd op 30000 ms. Zie Cold-start-grace voor upgradeadvies voor v2026.4.x |
config.maxSummaryChars | number | Maximum totaal aantal tekens toegestaan in de Active Memory-samenvatting |
config.logging | boolean | Geeft Active Memory-logs weer tijdens het afstemmen |
config.persistTranscripts | boolean | Bewaart transcripties van de blokkerende geheugen-subagent op schijf in plaats van tijdelijke bestanden te verwijderen |
config.transcriptDir | string | Relatieve transcriptiemap voor de blokkerende geheugen-subagent onder de map voor agentsessies |
| Sleutel | Type | Betekenis |
|---|---|---|
config.maxSummaryChars | number | Maximum 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 | Maximaal aantal tekens per recente gebruikersbeurt |
config.recentAssistantChars | number | Maximaal aantal 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 time-outs voor dezelfde agent/hetzelfde 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 is geactiveerd, 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 afzonderlijke 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
Cold-start-grace
Vóór v2026.5.2 verlengde de plugin stilzwijgend je geconfigureerdetimeoutMs met een
extra 30000 ms tijdens cold-start, zodat modelopwarming, het laden van de embeddingindex en
de eerste recall één groter budget konden delen. v2026.5.2 plaatste die grace
achter een expliciete setupGraceTimeoutMs-configuratie: je geconfigureerde timeoutMs
is nu standaard het budget voor recallwerk, tenzij je je aanmeldt. De blokkerende hook
gebruikt twee begrensde fasen rond dat budget: tot 1500 ms voor sessie-/configuratie-
preflight voordat recall start, daarna een afzonderlijke vaste 1500 ms voor abort-
afwikkeling en transcriptieherstel nadat recallwerk stopt. Geen van beide toegiften
verlengt model- of tooluitvoering.
Als je een upgrade hebt uitgevoerd vanaf v2026.4.x en je timeoutMs hebt ingesteld op een waarde die is afgestemd op de
oude wereld met impliciete grace (de aanbevolen startwaarde timeoutMs: 15000 is één
voorbeeld), stel dan setupGraceTimeoutMs: 30000 in om de prompt-build hook en
buitenste watchdogbudgetten terug te verlengen naar de effectieve waarden van vóór v5.2:
timeoutMs + setupGraceTimeoutMs + 3000 ms.
De ingesloten recall-runner gebruikt hetzelfde effectieve timeoutbudget, dus
setupGraceTimeoutMs dekt zowel de buitenste prompt-build-watchdog als de binnenste
blokkerende recall-run. De preflight-limiet dekt sessie-/configuratiecontroles voordat dat
budget begint. De vergoeding na recall laat de buitenste hook abort-opruiming afronden
en eventuele uiteindelijke transcriptiestatus lezen.
Voor Gateway-instanties met beperkte resources waar cold-start-latentie een bekende afweging is,
werken lagere waarden (5000-15000 ms) ook: de afweging is een grotere kans dat
de allereerste recall na een Gateway-herstart leeg terugkomt terwijl de warm-up
wordt voltooid.
Debuggen
Als Active Memory niet verschijnt waar je het verwacht:- Controleer of de Plugin is ingeschakeld onder
plugins.entries.active-memory.enabled. - Controleer of de huidige agent-id is opgenomen in
config.agents. - 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 - verminder het aantal recente turns
- verlaag de tekenlimieten per turn
Veelvoorkomende problemen
Active Memory draait mee op de recall-pipeline van de geconfigureerde memory-Plugin, dus de meeste recall-verrassingen zijn problemen met embedding-providers, geen Active Memory-bugs. Het standaardpadmemory-core gebruikt memory_search en memory_get; het
memory-lancedb-slot gebruikt memory_recall. Als je een andere memory-Plugin gebruikt,
controleer dan of config.toolsAllow de tools noemt die die Plugin daadwerkelijk registreert.
Embedding provider switched or stopped working
Embedding provider switched or stopped working
Als
memorySearch.provider niet is ingesteld, gebruikt OpenClaw OpenAI-embeddings. Stel
memorySearch.provider expliciet in voor lokale, Ollama-, Gemini-, Voyage-,
Mistral-, DeepInfra-, Bedrock-, GitHub Copilot- of OpenAI-compatibele
embeddings. Als de geconfigureerde provider niet kan draaien, kan memory_search
terugvallen naar alleen lexicale retrieval; runtimefouten nadat een provider
al is geselecteerd, vallen niet automatisch terug.Stel alleen een optionele memorySearch.fallback in wanneer je bewust één
fallback wilt. Zie Memory Search voor de volledige
lijst met providers en voorbeelden.Recall feels slow, empty, or inconsistent
Recall feels slow, empty, or inconsistent
- Schakel
/trace onin om de Plugin-eigen Active Memory-debugsamenvatting in de sessie zichtbaar te maken. - Schakel
/verbose onin om ook de statusregel🧩 Active Memory: ...na elk antwoord te zien. - Bekijk Gateway-logs voor
active-memory: ... start|done,memory sync failed (search-bootstrap)of embeddingfouten van providers. - Voer
openclaw memory status --deepuit om de memory-search-backend en indexgezondheid te inspecteren. - Als je
ollamagebruikt, controleer dan of het embeddingmodel is geïnstalleerd (ollama list).
First recall after gateway restart returns `status=timeout`
First recall after gateway restart returns `status=timeout`
In v2026.5.2 en later kan, als cold-start-setup (model-warm-up + laden van
embeddingindex) nog niet klaar is wanneer de eerste recall start, de run
het geconfigureerde
timeoutMs-budget raken en status=timeout
met lege uitvoer teruggeven. Gateway-logs tonen active-memory timeout after Nms
rond het eerste in aanmerking komende antwoord na een herstart.Zie Cold-start grace onder Aanbevolen setup voor de
aanbevolen waarde voor setupGraceTimeoutMs.