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 sessionId begon, niet op latere metadata-writes.
  • Inactiviteitsreset (optioneel) -- nieuwe sessie na een periode van inactiviteit. Stel session.reset.idleMinutes in. Inactiviteitsversheid is gebaseerd op de laatste echte gebruikers-/kanaalinteractie, dus heartbeat-, cron- en exec-systeemgebeurtenissen houden de sessie niet actief.
  • Handmatige reset -- typ /new of /reset in 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 huidige sessionId begon; 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>).
  • /status in chat -- contextgebruik, model en toggles.
  • /context list -- wat er in de systeemprompt staat.

Verder lezen

Gerelateerd