Gestion des sessions
OpenClaw traite une session de discussion directe par agent comme principale. Les discussions directes se replient suragent:<agentId>:<mainKey> (par defaut main), tandis que les discussions de groupe/canal obtiennent leurs propres cles. session.mainKey est respecte.
Utilisez session.dmScope pour controler la facon dont les messages prives sont regroupes :
main(par defaut) : tous les MP partagent la session principale pour la continuite.per-peer: isolement par identifiant d’expediteur a travers les canaux.per-channel-peer: isolement par canal + expediteur (recommande pour les boites de reception multi-utilisateurs).per-account-channel-peer: isolement par compte + canal + expediteur (recommande pour les boites de reception multi-comptes). Utilisezsession.identityLinkspour mapper des identifiants de pairs prefixes par fournisseur vers une identite canonique afin que la meme personne partage une session de MP a travers les canaux lors de l’utilisation deper-peer,per-channel-peerouper-account-channel-peer.
Mode MP securise (recommande pour les configurations multi-utilisateurs)
Avertissement de securite : si votre agent peut recevoir des MP de plusieurs personnes, vous devriez fortement envisager d’activer le mode MP securise. Sans cela, tous les utilisateurs partagent le meme contexte de conversation, ce qui peut entrainer des fuites d’informations privees entre utilisateurs.Exemple du probleme avec les parametres par defaut :
- Alice (
<SENDER_A>) envoie un message a votre agent au sujet d’un sujet prive (par exemple, un rendez-vous medical) - Bob (
<SENDER_B>) envoie un message a votre agent en demandant « De quoi parlions-nous ? » - Comme les deux MP partagent la meme session, le modele peut repondre a Bob en utilisant le contexte precedent d’Alice.
dmScope pour isoler les sessions par utilisateur :
- Vous avez des approbations de jumelage pour plus d’un expediteur
- Vous utilisez une liste d’autorisation de MP avec plusieurs entrees
- Vous definissez
dmPolicy: "open" - Plusieurs numeros de telephone ou comptes peuvent envoyer des messages a votre agent
- La valeur par defaut est
dmScope: "main"pour la continuite (tous les MP partagent la session principale). Cela convient aux configurations mono-utilisateur. - Pour les boites de reception multi-comptes sur le meme canal, preferez
per-account-channel-peer. - Si la meme personne vous contacte sur plusieurs canaux, utilisez
session.identityLinkspour regrouper ses sessions de MP en une identite canonique. - Vous pouvez verifier vos parametres de MP avec
openclaw security audit(voir security).
Le Gateway (passerelle) est la source de verite
Tout l’etat des sessions est detenu par la gateway (le OpenClaw « maitre »). Les clients UI (application macOS, WebChat, etc.) doivent interroger la gateway pour les listes de sessions et les comptes de tokens au lieu de lire des fichiers locaux.- En mode distant, le stockage des sessions qui vous concerne reside sur l’hote de la gateway distante, pas sur votre Mac.
- Les comptes de tokens affiches dans les UI proviennent des champs de stockage de la gateway (
inputTokens,outputTokens,totalTokens,contextTokens). Les clients n’analysent pas les transcriptions JSONL pour « corriger » les totaux.
Où se trouve l’État
- Sur l’hote de la gateway :
- Fichier de stockage :
~/.openclaw/agents/<agentId>/sessions/sessions.json(par agent).
- Fichier de stockage :
- Transcriptions :
~/.openclaw/agents/<agentId>/sessions/<SessionId>.jsonl(les sessions de sujets Telegram utilisent.../<SessionId>-topic-<threadId>.jsonl). - Le stockage est une carte
sessionKey -> { sessionId, updatedAt, ... }. Supprimer des entrees est sans risque ; elles sont recreees a la demande. - Les entrees de groupe peuvent inclure
displayName,channel,subject,roometspacepour etiqueter les sessions dans les UI. - Les entrees de session incluent des metadonnees
origin(etiquette + indications de routage) afin que les UI puissent expliquer l’origine d’une session. - OpenClaw ne lit pas les dossiers de session Pi/Tau historiques.
Elagage des sessions
OpenClaw tronque par defaut les anciens resultats d’outils du contexte en memoire juste avant les appels LLM. Cela ne reecrit pas l’historique JSONL. Voir /concepts/session-pruning.Vidage de memoire avant compaction
Lorsqu’une session approche de l’auto-compaction, OpenClaw peut executer un vidage de memoire silencieux qui rappelle au modele d’ecrire des notes durables sur le disque. Cela ne s’execute que lorsque l’espace de travail est accessible en ecriture. Voir Memory et Compaction.Mappage des transports → cles de session
- Les discussions directes suivent
session.dmScope(par defautmain).main:agent:<agentId>:<mainKey>(continuite entre appareils/canaux).- Plusieurs numeros de telephone et canaux peuvent etre mappes vers la meme cle principale d’agent ; ils agissent comme des transports vers une seule conversation.
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 par defaut adefault).- Si
session.identityLinkscorrespond a un identifiant de pair prefixe par fournisseur (par exempletelegram:123), la cle canonique remplace<peerId>afin que la meme personne partage une session a travers les canaux.
- Les discussions de groupe isolent l’etat :
agent:<agentId>:<channel>:group:<id>(les salles/canaux utilisentagent:<agentId>:<channel>:channel:<id>).- Les sujets de forum Telegram ajoutent
:topic:<threadId>a l’identifiant de groupe pour l’isolement. - Les cles historiques
group:<id>sont toujours reconnues pour la migration.
- Les sujets de forum Telegram ajoutent
- Les contextes entrants peuvent encore utiliser
group:<id>; le canal est deduit deProvideret normalise vers la forme canoniqueagent:<agentId>:<channel>:group:<id>. - Autres sources :
- Taches cron :
cron:<job.id> - Webhooks :
hook:<uuid>(sauf si explicitement defini par le hook) - Executions de nœud :
node-<nodeId>
- Taches cron :
Cycle de vie
- Politique de reinitialisation : les sessions sont reutilisees jusqu’a expiration, et l’expiration est evaluee au prochain message entrant.
- Reinitialisation quotidienne : par defaut 4:00 du matin, heure locale de l’hote de la gateway. Une session est perimee des que sa derniere mise a jour est anterieure a la derniere heure de reinitialisation quotidienne.
- Reinitialisation par inactivite (optionnelle) :
idleMinutesajoute une fenetre glissante d’inactivite. Lorsque la reinitialisation quotidienne et celle par inactivite sont configurees, celle qui expire en premier force une nouvelle session. - Mode historique inactivite seule : si vous definissez
session.idleMinutessans aucune configurationsession.reset/resetByType, OpenClaw reste en mode inactivite seule pour la retrocompatibilite. - Surcharges par type (optionnel) :
resetByTypevous permet de remplacer la politique pour les sessionsdirect,groupetthread(thread = fils de discussion Slack/Discord, sujets Telegram, fils Matrix lorsqu’ils sont fournis par le connecteur). - Remplacements par canal (optionnels) :
resetByChannelremplace la politique de reinitialisation pour un canal (s’applique a tous les types de session pour ce canal et a priorite surreset/resetByType). - Declencheurs de reinitialisation : les
/newou/resetexacts (plus tout supplement dansresetTriggers) demarrent un nouvel identifiant de session et transmettent le reste du message./new <model>accepte un alias de modele,provider/modelou un nom de fournisseur (correspondance approximative) pour definir le nouveau modele de session. Si/newou/resetest envoye seul, OpenClaw execute un court tour de salutation « hello » pour confirmer la reinitialisation. - Reinitialisation manuelle : supprimez des cles specifiques du stockage ou retirez la transcription JSONL ; le message suivant les recree.
- Les taches cron isolees generent toujours un nouveau
sessionIda chaque execution (pas de reutilisation par inactivite).
Politique d’envoi (optionnelle)
Bloquez la livraison pour des types de session specifiques sans lister des identifiants individuels./send on→ autoriser pour cette session/send off→ refuser pour cette session/send inherit→ effacer le remplacement et utiliser les regles de configuration Envoyez-les comme messages autonomes afin qu’ils soient pris en compte.
Configuration (exemple de renommage optionnel)
Inspection
openclaw status— affiche le chemin du stockage et les sessions recentes.openclaw sessions --json— deverse chaque entree (filtrez avec--active <minutes>).openclaw gateway call sessions.list --params '{}'— recupere les sessions depuis la gateway en cours d’execution (utilisez--url/--tokenpour l’acces a une gateway distante).- Envoyez
/statuscomme message autonome dans le chat pour voir si l’agent est joignable, quelle part du contexte de session est utilisee, les bascules de raisonnement/verbosite actuelles, et quand vos identifiants WhatsApp web ont ete rafraichis pour la derniere fois (utile pour detecter les besoins de reconnexion). - Envoyez
/context listou/context detailpour voir ce qui se trouve dans l’invite systeme et les fichiers d’espace de travail injectes (ainsi que les principaux contributeurs au contexte). - Envoyez
/stopcomme message autonome pour interrompre l’execution en cours, vider les suivis en file d’attente pour cette session et arreter toute execution de sous-agents engendree (la reponse inclut le nombre arrete). - Envoyez
/compact(instructions optionnelles) comme message autonome pour resumer l’ancien contexte et liberer de l’espace de fenetre. Voir /concepts/compaction. - Les transcriptions JSONL peuvent etre ouvertes directement pour examiner les tours complets.
Conseils
- Gardez la cle principale dediee au trafic 1:1 ; laissez les groupes conserver leurs propres cles.
- Lors de l’automatisation du nettoyage, supprimez des cles individuelles plutot que l’ensemble du stockage afin de preserver le contexte ailleurs.
Metadonnees d’origine de session
Chaque entree de session enregistre son origine (au mieux) dansorigin :
label: etiquette humaine (resolue a partir de l’etiquette de conversation + sujet de groupe/canal)provider: identifiant de canal normalise (y compris les extensions)from/to: identifiants de routage bruts provenant de l’enveloppe entranteaccountId: identifiant de compte fournisseur (en multi-comptes)threadId: identifiant de fil/sujet lorsque le canal le prend en charge Les champs d’origine sont renseignes pour les messages directs, canaux et groupes. Si un connecteur ne met a jour que le routage de livraison (par exemple, pour maintenir a jour une session principale de MP), il doit tout de meme fournir le contexte entrant afin que la session conserve ses metadonnees explicatives. Les extensions peuvent le faire en envoyantConversationLabel,GroupSubject,GroupChannel,GroupSpaceetSenderNamedans le contexte entrant et en appelantrecordSessionMetaFromInbound(ou en transmettant le meme contexte aupdateLastRoute).