Sessions and memory
Sessiebeheer
OpenClaw routeert elk inkomend bericht naar een sessie op basis van de herkomst: privéberichten, groepschats, cron-taken enzovoort. Alle sessiestatus wordt beheerd door de Gateway; UI-clients vragen sessiegegevens op bij de Gateway.
Zie De hoofdsessie voor de standaardinstelling voor persoonlijke agents: één doorlopend gesprek dat door al je privéberichtkanalen wordt gedeeld en waarin groepsactiviteit en achtergrondwerk samenkomen.
Hoe berichten worden gerouteerd
| Bron | Gedrag |
|---|---|
| Privéberichten | Standaard gedeelde sessie |
| Groepschats | Afzonderlijk per groep |
| Ruimten/kanalen | Afzonderlijk per ruimte |
| Cron-taken | Nieuwe sessie per uitvoering |
| Webhooks | Afzonderlijk per hook |
Isolatie van privéberichten
Standaard delen alle privéberichten één sessie om de continuïteit te behouden. Dat is geschikt voor configuraties met één gebruiker.
{ session: { dmScope: "per-channel-peer", // isoleren op kanaal + afzender },}Opties voor session.dmScope:
| Waarde | Gedrag |
|---|---|
main (standaard) |
Alle privéberichten delen de hoofdsessie |
per-peer |
Isoleren op afzender, over kanalen heen |
per-channel-peer |
Isoleren op kanaal + afzender (aanbevolen) |
per-account-channel-peer |
Isoleren op account + kanaal + afzender |
Gekoppelde kanalen docken
Dockopdrachten verplaatsen de antwoordroute van de huidige sessie voor privéchats naar een ander gekoppeld kanaal zonder een nieuwe sessie te starten. Zie Kanalen docken voor voorbeelden, configuratie en probleemoplossing.
Controleer je configuratie met openclaw security audit.
Incognitosessies
Incognitosessies zijn alleen beschikbaar vanuit het scherm Nieuwe thread van de Control UI. Schakel Incognito in voordat je de thread start, zodat de sessievermelding, het transcript en de Compaction-status in het procesgeheugen worden bewaard in plaats van op schijf. De thread verdwijnt wanneer de Gateway opnieuw wordt gestart, voert de automatische geheugenflush van OpenClaw niet uit en maakt geen transcriptarchief wanneer je de thread reset of verwijdert. Uitvoeringen op basis van Codex starten hun harnessthread ook in tijdelijke modus, zodat Codex geen rollout- of lokale sessiestatusbestanden schrijft; andere modelproviders gebruiken HTTP-API's en bewaren geen lokaal providertranscript in OpenClaw.
Het segment incognito- is gereserveerd voor sessiesleutels van het dashboard, subagents en verborgen interne sessies; openclaw doctor --fix hernoemt conflicterende verouderde duurzame sleutels.
Incognito beperkt de normale tools van de agent niet. Een expliciet verzoek om informatie op te slaan of het schrijven van bestanden door een tool kan nog steeds gegevens buiten de incognitosessieopslag bewaren. Je geconfigureerde modelprovider verwerkt nog steeds de berichten die je verzendt, diagnostische logboekregistratie blijft ongewijzigd en OpenClaw registreert nog steeds inhoudsvrije auditmetadata, zoals HMAC-verwijzingen.
Op Gateways met meerdere gebruikers zijn incognitothreads alleen zichtbaar voor verbindingen met beheerdersbereik en verschijnen ze nooit via de agentsessietools of transcriptzoekfunctie van een andere sessie. Dit beschermt ze tegen opslag en andere gebruikers die via de Gateway werken, maar niet tegen de eigenaar van de Gateway of de procesbeheerder, die live sessies altijd kan observeren.
Onthouden tussen gesprekken
Afzonderlijke transcripten bepalen de lokale geschiedenis van elk gesprek. Voor
een persoonlijke of volledig vertrouwde agent voegt memory.search.rememberAcrossConversations: true
een optionele ophaalstap toe voor de andere privégesprekken van die agent; de
transcripten worden hierdoor niet samengevoegd.
Privégesprekken en permanente expliciete UI-gesprekken kunnen elkaar relevante context bieden. Groepen en kanalen blijven in beide richtingen gescheiden: hun transcripten zijn geen bronnen voor het ophalen van privécontext en antwoorden in die gesprekken ontvangen geen context uit privétranscripten. Het huidige gesprek wordt ook uitgesloten, omdat de geschiedenis ervan al is geladen.
Deze instelling wijzigt geen sessiesleutels, bereik van privéberichten,
routering, bezorging of tools.sessions.visibility. Gedeeld werkruimtegeheugen in
MEMORY.md en memory/*.md behoudt eveneens het bestaande gedrag.
De huidige geheugenprovider moet beveiligd ophalen van privétranscripten
ondersteunen; contextengines zoals Lossless Claw blijven onafhankelijk en
kunnen ernaast worden uitgevoerd. Zie
Active Memory voor
configuratie- en runtimedetails.
Levenscyclus van sessies
Sessies worden hergebruikt totdat je ze handmatig reset of kiest voor een automatisch resetbeleid:
- Geen automatische reset (standaard
mode: "none") - sessies behouden dezelfdesessionId; Compaction beheert de actieve context naarmate het gesprek groeit. - Dagelijkse reset (
mode: "daily") - kies voor een nieuwe sessie op een geconfigureerd lokaal uur (session.reset.atHour, standaard4, 0-23) op de Gateway-host. De dagelijkse actualiteit is gebaseerd op het moment waarop de huidigesessionIdbegon, niet op latere schrijfbewerkingen van metadata. - Reset bij inactiviteit (
mode: "idle") - kies voor een nieuwe sessie nasession.reset.idleMinutesinactiviteit. De actualiteit voor inactiviteit is gebaseerd op de laatste echte gebruikers-/kanaalinteractie, zodat Heartbeat-, Cron- en exec-systeemgebeurtenissen de sessie niet actief houden. - Handmatige reset - typ
/newof/resetin de chat./new <model>wisselt ook van model.
Wanneer zowel dagelijkse resets als resets bij inactiviteit zijn geconfigureerd, geldt degene die het eerst verloopt. Heartbeat-, Cron-, exec- en andere systeemgebeurtenisbeurten kunnen sessiemetadata schrijven, maar die schrijfbewerkingen verlengen de actualiteit voor dagelijkse resets of resets bij inactiviteit niet. Wanneer een reset de sessie vernieuwt, worden systeemgebeurtenismeldingen in de wachtrij voor de oude sessie verwijderd, zodat verouderde achtergrondupdates niet vóór de eerste prompt in de nieuwe sessie worden geplaatst.
Sessies met een actieve CLI-sessie die eigendom is van de provider volgen
dezelfde standaard zonder automatische reset. Gebruik /reset of
configureer session.reset expliciet wanneer die sessies volgens een timer
moeten verlopen.
Schakel automatische resets globaal in en overschrijf ze vervolgens per chattype of kanaal:
{ session: { reset: { mode: "daily", atHour: 4 }, resetByType: { group: { mode: "idle", idleMinutes: 120 }, thread: { mode: "daily", atHour: 6 }, }, resetByChannel: { discord: { mode: "idle", idleMinutes: 10080 }, }, },}resetByType ondersteunt direct, group en thread. Doctor migreert verouderde dm-vermeldingen naar direct en session.idleMinutes naar session.reset.idleMinutes; het schema weigert beide uitgefaseerde vormen.
Waar de status wordt bewaard
- Rijen met runtimesessies:
~/.openclaw/agents/<agentId>/agent/openclaw-agent.sqlite - Gearchiveerde transcriptbestanden:
~/.openclaw/agents/<agentId>/sessions/ - Bron voor migratie van verouderde rijen:
~/.openclaw/agents/<agentId>/sessions/sessions.json
De sessierijen in de SQLite-database per agent bewaren afzonderlijke tijdstempels voor de levenscyclus:
sessionStartedAt: wanneer de huidigesessionIdbegon; de dagelijkse reset gebruikt dit.lastInteractionAt: laatste gebruikers-/kanaalinteractie die de levensduur bij inactiviteit verlengt.updatedAt: laatste wijziging van de opslagrij; nuttig voor weergave en opschoning, maar niet bepalend voor de actualiteit van dagelijkse resets of resets bij inactiviteit.
Tijdens de migratie vanuit oudere installaties importeren het opstarten van de
Gateway en openclaw doctor --fix automatisch verouderde sessions.json-rijen en
actieve transcriptgeschiedenis in JSONL-indeling naar SQLite. Rijen zonder
sessionStartedAt worden waar mogelijk herleid uit de sessieheader van het
verouderde JSONL-transcript. Als een oudere rij ook geen
lastInteractionAt bevat, valt de actualiteit voor inactiviteit terug op de
starttijd van die sessie, niet op latere administratieve schrijfbewerkingen.
Gebruik openclaw doctor --session-sqlite inspect --session-sqlite-all-agents en de
Doctor-migratievolgorde wanneer je
expliciete inspectie of validatiebewijs wilt.
Sessieonderhoud
OpenClaw beperkt de sessieopslag na verloop van tijd via
session.maintenance; de standaardwaarden worden hieronder weergegeven:
{ session: { maintenance: { mode: "enforce", // "enforce" voert opschoning uit; "warn" rapporteert alleen pruneAfter: "30d", maxEntries: 500, }, },}Voor maxEntries-limieten op productieschaal gebruiken
runtimeschrijfbewerkingen van de Gateway een kleine hoogwaterbuffer en wordt de
opslag in batches teruggebracht tot de geconfigureerde limiet. Bij het starten
van de Gateway worden tijdens leesbewerkingen van de sessieopslag geen
vermeldingen opgeschoond of begrensd, zodat het opstarten en geïsoleerde
Cron-sessies niet de kosten van een volledige opschoning van de opslag dragen.
openclaw sessions cleanup --enforce past de limiet onmiddellijk toe.
Probesessies voor modeluitvoeringen van de Gateway zijn standaard van korte
duur. Rijen die overeenkomen met agent:*:explicit:model-run-<uuid> gebruiken een vaste
bewaartermijn van 24h, maar de opschoning is afhankelijk van
druk: verouderde proberijen worden alleen verwijderd wanneer de
onderhouds-/limietdruk voor sessievermeldingen wordt bereikt. Dit gebeurt vóór
de bredere leeftijdsgrens voor verouderde vermeldingen en vóór de limiet voor
het aantal vermeldingen. Normale sessies voor privéberichten, groepen,
threads, Cron, hooks, Heartbeat, ACP en subagents nemen deze bewaartermijn van
24h niet over.
Onderhoud behoudt duurzame externe gespreksverwijzingen, waaronder groepssessies en chatsessies met threadbereik, terwijl synthetische vermeldingen voor Cron, hooks, Heartbeat, ACP en subagents nog steeds kunnen verouderen.
Gearchiveerde sessies zijn door de gebruiker opgeborgen en vrijgesteld van elk automatisch onderhoudspad, waaronder opschoning op basis van leeftijd, vermeldingslimieten, opschoning van modeluitvoeringen en verwijdering vanwege het schijfbudget. Ze blijven gearchiveerd totdat je ze uit het archief haalt of expliciet verwijdert.
Als je eerder isolatie van privéberichten gebruikte en
session.dmScope later terugzette naar main, bekijk dan een
voorbeeld van verouderde, op peersleutels gebaseerde rijen voor privéberichten
met openclaw sessions cleanup --dry-run --fix-dm-scope. Door dezelfde vlag toe te passen,
worden die oude rijen voor directe privéberichten uitgefaseerd en blijven hun
transcripten als verwijderde archieven bewaard.
Bekijk een voorbeeld van elke onderhoudsuitvoering met openclaw sessions cleanup --dry-run.
Sessies inspecteren
| Opdracht | Toont |
|---|---|
openclaw status |
Pad naar de sessieopslag en recente activiteit |
openclaw sessions --json |
Alle sessies (filter met --active <minutes>) |
/status in de chat |
Contextgebruik, model en schakelaars |
/context list |
Wat de systeemprompt bevat |
Verder lezen
- Sessies doorzoeken - zoeken in volledige tekst van eerdere transcripten
- Sessies opschonen - toolresultaten inkorten
- Compaction - lange gesprekken samenvatten
- Sessietools - agenttools voor sessieoverschrijdend werk
- Diepgaande uitleg over sessiebeheer - opslagschema, transcripten, verzendbeleid, oorsprongsmetadata en geavanceerde configuratie
- Multi-agent - routering en sessie-isolatie tussen agents
- Achtergrondtaken - hoe losgekoppeld werk taakrecords met sessieverwijzingen maakt
- Kanaalroutering - hoe inkomende berichten naar sessies worden gerouteerd