Sessiebeheer
OpenClaw behandelt één direct-chat-sessie per agent als primair. Directe chats vallen samen totagent:<agentId>:<mainKey> (standaard main), terwijl groeps-/kanaalchats hun eigen sleutels krijgen. session.mainKey wordt gerespecteerd.
Gebruik session.dmScope om te bepalen hoe directe berichten worden gegroepeerd:
main(standaard): alle DM’s delen de hoofdsessie voor continuïteit.per-peer: isoleer per afzender-id over kanalen heen.per-channel-peer: isoleer per kanaal + afzender (aanbevolen voor inboxen met meerdere gebruikers).per-account-channel-peer: isoleer per account + kanaal + afzender (aanbevolen voor inboxen met meerdere accounts). Gebruiksession.identityLinksom provider-geprefixte peer-id’s te mappen naar een canonieke identiteit, zodat dezelfde persoon één DM-sessie deelt over kanalen heen bij gebruik vanper-peer,per-channel-peerofper-account-channel-peer.
Veilige DM-modus (aanbevolen voor setups met meerdere gebruikers)
Beveiligingswaarschuwing: Als je agent DM’s kan ontvangen van meerdere personen, overweeg sterk om de veilige DM-modus in te schakelen. Zonder deze modus delen alle gebruikers dezelfde conversatiecontext, wat privé-informatie tussen gebruikers kan lekken.Voorbeeld van het probleem met standaardinstellingen:
- Alice (
<SENDER_A>) stuurt je agent een bericht over een privéonderwerp (bijvoorbeeld een medische afspraak) - Bob (
<SENDER_B>) stuurt je agent de vraag: “Waar hadden we het over?” - Omdat beide DM’s dezelfde sessie delen, kan het model Bob antwoorden met context van Alice.
dmScope in om sessies per gebruiker te isoleren:
- Je hebt koppelingsgoedkeuringen voor meer dan één afzender
- Je gebruikt een DM-toegestane lijst met meerdere vermeldingen
- Je stelt
dmPolicy: "open"in - Meerdere telefoonnummers of accounts kunnen je agent berichten sturen
- Standaard is
dmScope: "main"voor continuïteit (alle DM’s delen de hoofdsessie). Dit is prima voor setups met één gebruiker. - Voor inboxen met meerdere accounts op hetzelfde kanaal heeft
per-account-channel-peerde voorkeur. - Als dezelfde persoon je via meerdere kanalen benadert, gebruik
session.identityLinksom hun DM-sessies samen te voegen tot één canonieke identiteit. - Je kunt je DM-instellingen verifiëren met
openclaw security audit(zie beveiliging).
Gateway is de bron van waarheid
Alle sessiestatus is eigendom van de Gateway (de “master” OpenClaw). UI-clients (macOS-app, WebChat, enz.) moeten de Gateway raadplegen voor sessielijsten en tokentellingen in plaats van lokale bestanden te lezen.- In remote-modus bevindt de relevante sessie-opslag zich op de externe Gateway-host, niet op je Mac.
- Tokentellingen die in UI’s worden getoond, komen uit de opslagvelden van de Gateway (
inputTokens,outputTokens,totalTokens,contextTokens). Clients parsen geen JSONL-transcripten om totalen te “corrigeren”.
Waar status leeft
- Op de Gateway-host:
- Opslagbestand:
~/.openclaw/agents/<agentId>/sessions/sessions.json(per agent).
- Opslagbestand:
- Transcripties:
~/.openclaw/agents/<agentId>/sessions/<SessionId>.jsonl(Telegram-onderwerpsessies gebruiken.../<SessionId>-topic-<threadId>.jsonl). - De opslag is een map
sessionKey -> { sessionId, updatedAt, ... }. Het verwijderen van vermeldingen is veilig; ze worden on-demand opnieuw aangemaakt. - Groepsvermeldingen kunnen
displayName,channel,subject,roomenspacebevatten om sessies in UI’s te labelen. - Sessievermeldingen bevatten
origin-metadata (label + routeringshints) zodat UI’s kunnen uitleggen waar een sessie vandaan komt. - OpenClaw leest geen legacy Pi/Tau-sessiemappen.
Sessie-opruiming
OpenClaw trimt standaard oude toolresultaten uit de in-memory context vlak vóór LLM-aanroepen. Dit herschrijft de JSONL-geschiedenis niet. Zie /concepts/session-pruning.Pre-compactie geheugenflush
Wanneer een sessie de automatische compactie nadert, kan OpenClaw een stille geheugenflush uitvoeren die het model eraan herinnert om duurzame notities naar schijf te schrijven. Dit draait alleen wanneer de werkruimte schrijfbaar is. Zie Memory en Compaction.Transporten → sessiesleutels mappen
- Directe chats volgen
session.dmScope(standaardmain).main:agent:<agentId>:<mainKey>(continuïteit over apparaten/kanalen).- Meerdere telefoonnummers en kanalen kunnen naar dezelfde agent-hoofdsleutel mappen; ze fungeren als transporten naar één conversatie.
per-peer:agent:<agentId>:dm:<peerId>.per-channel-peer:agent:<agentId>:<channel>:dm:<peerId>.per-account-channel-peer:agent:<agentId>:<channel>:<accountId>:dm:<peerId>(accountId is standaarddefault).- Als
session.identityLinksovereenkomt met een provider-geprefixte peer-id (bijvoorbeeldtelegram:123), vervangt de canonieke sleutel<peerId>, zodat dezelfde persoon één sessie deelt over kanalen heen.
- Groepschats isoleren status:
agent:<agentId>:<channel>:group:<id>(ruimtes/kanalen gebruikenagent:<agentId>:<channel>:channel:<id>).- Telegram-forumonderwerpen voegen
:topic:<threadId>toe aan de groeps-id voor isolatie. - Legacy
group:<id>-sleutels worden nog steeds herkend voor migratie.
- Telegram-forumonderwerpen voegen
- Inkomende contexten kunnen nog
group:<id>gebruiken; het kanaal wordt afgeleid uitProvideren genormaliseerd naar de canonieke vormagent:<agentId>:<channel>:group:<id>. - Andere bronnen:
- Cronjobs:
cron:<job.id> - Webhooks:
hook:<uuid>(tenzij expliciet door de hook ingesteld) - Node-runs:
node-<nodeId>
- Cronjobs:
Levenscyclus
- Resetbeleid: sessies worden hergebruikt totdat ze verlopen, en verstrijken wordt geëvalueerd bij het volgende inkomende bericht.
- Dagelijkse reset: standaard 04:00 lokale tijd op de Gateway-host. Een sessie is verouderd zodra de laatste update eerder is dan het meest recente dagelijkse resetmoment.
- Inactiviteitsreset (optioneel):
idleMinutesvoegt een schuivend inactiviteitsvenster toe. Wanneer zowel dagelijkse als inactiviteitsresets zijn geconfigureerd, dwingt degene die het eerst verloopt een nieuwe sessie af. - Legacy alleen-inactiviteit: als je
session.idleMinutesinstelt zonder enigesession.reset/resetByType-configuratie, blijft OpenClaw omwille van achterwaartse compatibiliteit in alleen-inactiviteitsmodus. - Per-type overrides (optioneel):
resetByTypelaat je het beleid overschrijven voordirect,groupenthread-sessies (thread = Slack/Discord-threads, Telegram-topics, Matrix-threads wanneer geleverd door de connector). - Overrides per kanaal (optioneel):
resetByChanneloverschrijft het resetbeleid voor een kanaal (geldt voor alle sessietypen voor dat kanaal en heeft voorrang opreset/resetByType). - Reset-triggers: exact
/newof/reset(plus eventuele extra’s inresetTriggers) starten een nieuwe sessie-id en geven de rest van het bericht door./new <model>accepteert een model-alias,provider/modelof providernaam (fuzzy match) om het nieuwe sessiemodel in te stellen. Als/newof/resetalleen wordt verzonden, voert OpenClaw een korte “hallo”-groetbeurt uit om de reset te bevestigen. - Handmatige reset: verwijder specifieke sleutels uit de opslag of verwijder het JSONL-transcript; het volgende bericht maakt ze opnieuw aan.
- Geïsoleerde cronjobs maken per run altijd een nieuwe
sessionIdaan (geen hergebruik bij inactiviteit).
Verzendbeleid (optioneel)
Blokkeer levering voor specifieke sessietypen zonder individuele id’s te hoeven vermelden./send on→ toestaan voor deze sessie/send off→ weigeren voor deze sessie/send inherit→ override wissen en configuratieregels gebruiken Stuur deze als zelfstandige berichten zodat ze worden geregistreerd.
Configuratie (optioneel hernoemvoorbeeld)
Inspecteren
openclaw status— toont opslagpad en recente sessies.openclaw sessions --json— dumpt elke vermelding (filter met--active <minutes>).openclaw gateway call sessions.list --params '{}'— haalt sessies op van de draaiende Gateway (gebruik--url/--tokenvoor toegang tot een externe Gateway).- Stuur
/statusals een zelfstandig bericht in de chat om te zien of de agent bereikbaar is, hoeveel van de sessiecontext wordt gebruikt, de huidige thinking/verbose-toggles, en wanneer je WhatsApp-webgegevens voor het laatst zijn ververst (helpt bij het signaleren van herlinkbehoeften). - Stuur
/context listof/context detailom te zien wat er in de systeemprompt en geïnjecteerde werkruimtebestanden staat (en de grootste contextbijdragers). - Stuur
/stopals een zelfstandig bericht om de huidige run af te breken, wachtrijen met vervolgacties voor die sessie te wissen en alle sub-agent-runs die daarvan zijn gestart te stoppen (het antwoord bevat het gestopte aantal). - Stuur
/compact(optionele instructies) als een zelfstandig bericht om oudere context samen te vatten en vensterruimte vrij te maken. Zie /concepts/compaction. - JSONL-transcripten kunnen direct worden geopend om volledige beurten te bekijken.
Tips
- Houd de primaire sleutel gereserveerd voor 1:1-verkeer; laat groepen hun eigen sleutels behouden.
- Verwijder bij geautomatiseerde opschoning afzonderlijke sleutels in plaats van de hele opslag om context elders te behouden.
Metadata van sessieherkomst
Elke sessievermelding registreert waar deze vandaan komt (best-effort) inorigin:
label: menselijk label (opgelost uit conversatielabel + groepsonderwerp/kanaal)provider: genormaliseerde kanaal-id (inclusief extensies)from/to: ruwe routerings-id’s uit de inkomende envelopaccountId: provider-account-id (bij meerdere accounts)threadId: thread-/onderwerp-id wanneer het kanaal dit ondersteunt De herkomstvelden worden gevuld voor directe berichten, kanalen en groepen. Als een connector alleen de afleverroutering bijwerkt (bijvoorbeeld om een DM-hoofdsessie vers te houden), moet hij alsnog inkomende context leveren zodat de sessie haar verklarende metadata behoudt. Extensies kunnen dit doen doorConversationLabel,GroupSubject,GroupChannel,GroupSpaceenSenderNamein de inkomende context te sturen enrecordSessionMetaFromInboundaan te roepen (of dezelfde context door te geven aanupdateLastRoute).