Sessions and memory
Sessiebeheer
OpenClaw organiseert gesprekken in sessies. Elk bericht wordt naar een sessie gerouteerd op basis van waar het vandaan kwam -- DM's, groepschats, cron-taken, enz.
Hoe berichten worden gerouteerd
| Bron | Gedrag |
|---|---|
| Directe berichten | Standaard gedeelde sessie |
| Groepschats | Geisoleerd per groep |
| Kamers/kanalen | Geisoleerd per kamer |
| Cron-taken | Nieuwe sessie per uitvoering |
| Webhooks | Geisoleerd per hook |
DM-isolatie
Standaard delen alle DM's een sessie voor continuiteit. Dit is prima voor setups met een enkele gebruiker.
De oplossing:
{
session: {
dmScope: "per-channel-peer", // isoleren op kanaal + afzender
},
}
Andere opties:
main(standaard) -- alle DM's delen een sessie.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
Dock-opdrachten laten een gebruiker de antwoordroute van de huidige direct-chat-sessie naar een ander gekoppeld kanaal verplaatsen zonder een nieuwe sessie te starten. Zie Kanaaldocking voor voorbeelden, configuratie en probleemoplossing.
Controleer je setup met openclaw security audit.
Sessieleven cyclus
Sessies worden hergebruikt totdat ze verlopen:
- Dagelijkse reset (standaard) -- nieuwe sessie om 4:00 uur lokale tijd op de gateway-
host. Dagelijkse versheid is gebaseerd op wanneer de huidige
sessionIdbegon, niet op latere metadata-writes. - Inactiviteitsreset (optioneel) -- nieuwe sessie na een periode van inactiviteit. Stel
session.reset.idleMinutesin. Inactiviteitsversheid is gebaseerd op de laatste echte gebruikers-/kanaalinteractie, dus heartbeat-, cron- en exec-systeemgebeurtenissen houden de sessie niet actief. - Handmatige reset -- typ
/newof/resetin de chat./new <model>wisselt ook van model.
Wanneer zowel dagelijkse als inactiviteitsresets zijn geconfigureerd, wint wat het eerst verloopt. Heartbeat-, cron-, exec- en andere systeemgebeurtenisbeurten kunnen sessiemetadata schrijven, maar die writes verlengen de dagelijkse of inactiviteitsresetversheid niet. Wanneer een reset de sessie doorrolt, worden in de wachtrij geplaatste systeemgebeurtenismeldingen voor de oude sessie verwijderd zodat verouderde achtergrondupdates niet voor de eerste prompt in de nieuwe sessie worden geplaatst.
Sessies met een actieve provider-eigen CLI-sessie worden niet afgekapt door de impliciete
dagelijkse standaard. Gebruik /reset of configureer session.reset expliciet wanneer die
sessies op een timer moeten verlopen.
Waar status leeft
Alle sessiestatus is eigendom van de gateway. UI-clients vragen de gateway om sessiegegevens.
- Store:
~/.openclaw/agents/<agentId>/sessions/sessions.json - Transcripts:
~/.openclaw/agents/<agentId>/sessions/<sessionId>.jsonl
sessions.json bewaart afzonderlijke levenscyclus-tijdstempels:
sessionStartedAt: wanneer de huidigesessionIdbegon; dagelijkse reset gebruikt dit.lastInteractionAt: laatste gebruikers-/kanaalinteractie die de inactiviteitsduur verlengt.updatedAt: laatste mutatie van de store-rij; nuttig voor lijsten en opschonen, maar niet gezaghebbend voor dagelijkse/inactiviteitsresetversheid.
Oudere rijen zonder sessionStartedAt worden afgeleid uit de transcript-JSONL
sessieheader wanneer beschikbaar. Als een oudere rij ook geen lastInteractionAt heeft,
valt inactiviteitsversheid terug op die sessiestarttijd, niet op latere administratieve
writes.
Sessieonderhoud
OpenClaw begrenst sessieopslag automatisch na verloop van tijd. Standaard draait het
in warn-modus (rapporteert wat zou worden opgeschoond). Stel session.maintenance.mode
in op "enforce" voor automatische opschoning:
{
session: {
maintenance: {
mode: "enforce",
pruneAfter: "30d",
maxEntries: 500,
},
},
}
Voor productie-omvang maxEntries-limieten gebruiken Gateway-runtime-writes een kleine high-water-buffer en schonen ze in batches terug op tot de geconfigureerde limiet. Reads van de sessiestore snoeien of begrenzen geen entries tijdens het opstarten van de Gateway. Dit voorkomt dat bij elke start of geisoleerde cron-sessie een volledige store-opschoning wordt uitgevoerd. openclaw sessions cleanup --enforce past de limiet onmiddellijk toe.
Onderhoud bewaart duurzame externe gesprekspointers, waaronder groepssessies en thread-scoped chatsessies, terwijl synthetische cron-, hook-, heartbeat-, ACP- en sub-agent-entries toch kunnen verouderen.
Als je eerder isolatie van directe berichten gebruikte en later
session.dmScope terugzette naar main, bekijk dan verouderde peer-keyed DM-rijen vooraf met
openclaw sessions cleanup --dry-run --fix-dm-scope. Het toepassen van dezelfde vlag
pensioneert die oude direct-DM-rijen en behoudt hun transcripts als verwijderde
archieven.
Bekijk vooraf met openclaw sessions cleanup --dry-run.
Sessies inspecteren
openclaw status-- sessiestorepad en recente activiteit.openclaw sessions --json-- alle sessies (filter met--active <minutes>)./statusin chat -- contextgebruik, model en toggles./context list-- wat er in de systeemprompt staat.
Verder lezen
- Sessies snoeien -- toolresultaten inkorten
- Compaction -- lange gesprekken samenvatten
- Sessietools -- agenttools voor werk over sessies heen
- Diepgaande sessiebeheeruitleg -- storeschema, transcripts, verzendbeleid, oorsprongsmetadata en geavanceerde configuratie
- Multi-Agent — routering en sessie-isolatie tussen agents
- Achtergrondtaken — hoe losgekoppeld werk taakrecords maakt met sessieverwijzingen
- Kanaalroutering — hoe inkomende berichten naar sessies worden gerouteerd