Outils de session
Objectif : un ensemble d’outils réduit et difficile a mal utiliser afin que les agents puissent lister les sessions, recuperer l’historique et envoyer des messages vers une autre session.Noms des outils
sessions_listsessions_historysessions_sendsessions_spawn
Modèle de clé
- Le compartiment de discussion directe principal est toujours la cle litterale
"main"(resolue vers la cle principale de l’agent courant). - Les discussions de groupe utilisent
agent:<agentId>:<channel>:group:<id>ouagent:<agentId>:<channel>:channel:<id>(fournir la cle complete). - Les taches cron utilisent
cron:<job.id>. - Les hooks utilisent
hook:<uuid>sauf configuration explicite. - Les sessions Node utilisent
node-<nodeId>sauf configuration explicite.
global et unknown sont des valeurs reservees et ne sont jamais listees. Si session.scope = "global", nous l’aliasons vers main pour tous les outils afin que les appelants ne voient jamais global.
sessions_list
Lister les sessions sous forme d’un tableau de lignes. Parametres :- filtre
kinds?: string[]: l’un de"main" | "group" | "cron" | "hook" | "node" | "other" limit?: numbernombre maximal de lignes (defaut : defaut serveur, limite p. ex. 200)activeMinutes?: numberuniquement les sessions mises a jour dans les N dernieres minutesmessageLimit?: number0 = aucun message (defaut 0) ; >0 = inclure les N derniers messages
messageLimit > 0recuperechat.historypar session et inclut les N derniers messages.- Les resultats d’outils sont filtres dans la sortie de liste ; utilisez
sessions_historypour les messages d’outil. - Lorsqu’elle s’execute dans une session d’agent en sandbox, les outils de session adoptent par defaut une visibilite limitee aux sessions engendrees (voir ci‑dessous).
key: cle de session (string)kind:main | group | cron | hook | node | otherchannel:whatsapp | telegram | discord | signal | imessage | webchat | internal | unknowndisplayName(libelle d’affichage de groupe si disponible)updatedAt(ms)sessionIdmodel,contextTokens,totalTokensthinkingLevel,verboseLevel,systemSent,abortedLastRunsendPolicy(surcharge de session si definie)lastChannel,lastTodeliveryContext({ channel, to, accountId }normalise lorsque disponible)transcriptPath(chemin « best‑effort » derive du repertoire de stockage + sessionId)messages?(uniquement lorsquemessageLimit > 0)
sessions_history
Recuperer la transcription d’une session. Parametres :sessionKey(requis ; accepte une cle de session ousessionIddepuissessions_list)limit?: numbernombre maximal de messages (limite par le serveur)includeTools?: boolean(defaut false)
includeTools=falsefiltre les messagesrole: "toolResult".- Retourne un tableau de messages au format brut de transcription.
- Lorsqu’un
sessionIdest fourni, OpenClaw le resout vers la cle de session correspondante (erreur si identifiants manquants).
sessions_send
Envoyer un message dans une autre session. Parametres :sessionKey(requis ; accepte une cle de session ousessionIddepuissessions_list)message(requis)timeoutSeconds?: number(defaut >0 ; 0 = fire‑and‑forget)
timeoutSeconds = 0: met en file d’attente et retourne{ runId, status: "accepted" }.timeoutSeconds > 0: attend jusqu’a N secondes l’achevement, puis retourne{ runId, status: "ok", reply }.- Si l’attente expire :
{ runId, status: "timeout", error }. L’execution continue ; appelezsessions_historyplus tard. - Si l’execution echoue :
{ runId, status: "error", error }. - Les executions d’annonce de livraison sont lancees apres l’execution principale et sont « best‑effort » ;
status: "ok"ne garantit pas que l’annonce a ete livree. - L’attente passe par la Gateway (passerelle)
agent.wait(cote serveur) afin que les reconnexions n’interrompent pas l’attente. - Le contexte de message agent‑a‑agent est injecte pour l’execution principale.
- Les messages inter-session sont persistés avec
message.provenance.kind = "inter_session"afin que les lecteurs de transcription puissent distinguer les instructions d’agent routées des entrées utilisateur externes. - Une fois la boucle terminee, OpenClaw lance l’etape d’annonce agent‑a‑agent (agent cible uniquement) :
- Les tours 2+ alternent entre l’agent demandeur et l’agent cible.
- Repondez exactement
REPLY_SKIPpour arreter le ping‑pong. - Le nombre maximal de tours est
session.agentToAgent.maxPingPongTurns(0–5, defaut 5).
- Apres l’achevement de l’execution principale, OpenClaw lance une boucle de reponse‑retour :
- Repondez exactement
ANNOUNCE_SKIPpour rester silencieux. - Toute autre reponse est envoyee au canal cible.
- L’etape d’annonce inclut la demande originale + la reponse du tour 1 + la derniere reponse de ping‑pong.
- Repondez exactement
Champ Channel
- Pour les groupes,
channelest le canal enregistre sur l’entree de session. - Pour les discussions directes,
channelest mappe depuislastChannel. - Pour cron/hook/node,
channelestinternal. - S’il est manquant,
channelestunknown.
Securite / Politique d’envoi
Blocage base sur des politiques par canal/type de discussion (pas par identifiant de session).sendPolicy: "allow" | "deny"(non defini = herite de la configuration)- Definissable via
sessions.patchou/send on|off|inheritreserve au proprietaire (message autonome).
chat.send/agent(Gateway)- logique de livraison des reponses automatiques
sessions_spawn
Lancer l’execution d’un sous‑agent dans une session isolee et annoncer le resultat au canal de discussion du demandeur. Parametres :task(requis)label?(optionnel ; utilise pour les logs/UI)agentId?(optionnel ; lancer sous un autre identifiant d’agent si autorise)model?(optionnel ; remplace le modele du sous‑agent ; valeurs invalides = erreur)runTimeoutSeconds?(defaut 0 ; si defini, interrompt l’execution du sous‑agent apres N secondes)cleanup?(delete|keep, defautkeep)
agents.list[].subagents.allowAgents: liste des identifiants d’agent autorises viaagentId(["*"]pour autoriser tous). Defaut : uniquement l’agent demandeur.
- Utilisez
agents_listpour decouvrir quels identifiants d’agent sont autorises poursessions_spawn.
- Demarre une nouvelle session
agent:<agentId>:subagent:<uuid>avecdeliver: false. - Les sous‑agents disposent par defaut de l’ensemble complet d’outils moins les outils de session (configurable via
tools.subagents.tools). - Les sous‑agents ne sont pas autorises a appeler
sessions_spawn(pas de sous‑agent → lancement de sous‑agent). - Toujours non bloquant : retourne immediatement
{ status: "accepted", runId, childSessionKey }. - Apres l’achevement, OpenClaw lance une etape d’annonce du sous‑agent et publie le resultat dans le canal de discussion du demandeur.
- Repondez exactement
ANNOUNCE_SKIPpendant l’etape d’annonce pour rester silencieux. - Les reponses d’annonce sont normalisees en
Status/Result/Notes;Statusprovient du resultat a l’execution (pas du texte du modele). - Les sessions de sous‑agent sont archivees automatiquement apres
agents.defaults.subagents.archiveAfterMinutes(defaut : 60). - Les reponses d’annonce incluent une ligne de statistiques (duree d’execution, tokens, sessionKey/sessionId, chemin de transcription et cout optionnel).
Visibilite des sessions en sandbox
Les sessions en sandbox peuvent utiliser les outils de session, mais par defaut elles ne voient que les sessions qu’elles ont engendrees viasessions_spawn.
Configuration :