Sessionsverktyg
Mål: ett litet verktygsset som är svårt att missbruka, så att agenter kan lista sessioner, hämta historik och skicka till en annan session.Verktygsnamn
sessions_listsessions_historysessions_sendsessions_spawn
Nyckelmodell
- Huvudbehållaren för direktchatt är alltid den bokstavliga nyckeln
"main"(löses till den aktuella agentens huvudnyckel). - Gruppchattar använder
agent:<agentId>:<channel>:group:<id>elleragent:<agentId>:<channel>:channel:<id>(skicka hela nyckeln). - Cron-jobb använder
cron:<job.id>. - Hooks använder
hook:<uuid>om inget annat uttryckligen anges. - Node-sessioner använder
node-<nodeId>om inget annat uttryckligen anges.
global och okänd är reserverade värden och listas aldrig. Om session.scope = "global", alias vi det till main för alla verktyg så att den som ringer aldrig ser global.
sessions_list
Lista sessioner som en array av rader. Parametrar:kinds?: string[]filter: någon av"main" | "group" | "cron" | "hook" | "node" | "other"limit?: numbermax rader (standard: serverstandard, klampas t.ex. 200)activeMinutes?: numberendast sessioner uppdaterade inom N minutermessageLimit?: number0 = inga meddelanden (standard 0); >0 = inkludera de senaste N meddelandena
messageLimit > 0hämtarchat.historyper session och inkluderar de senaste N meddelandena.- Verktygsresultat filtreras bort i listutdata; använd
sessions_historyför verktygsmeddelanden. - När det körs i en sandboxed agentsession, har sessionsverktyg som standard endast-skapade-synlighet (se nedan).
key: sessionsnyckel (sträng)kind:main | group | cron | hook | node | otherchannel:whatsapp | telegram | discord | signal | imessage | webchat | internal | unknowndisplayName(gruppvisningsetikett om tillgänglig)updatedAt(ms)sessionIdmodel,contextTokens,totalTokensthinkingLevel,verboseLevel,systemSent,abortedLastRunsendPolicy(sessionsöverskrivning om satt)lastChannel,lastTodeliveryContext(normaliserad{ channel, to, accountId }när tillgänglig)transcriptPath(bästa-försök-sökväg härledd från lagringskatalog + sessionId)messages?(endast närmessageLimit > 0)
sessions_history
Hämta transkript för en session. Parametrar:sessionKey(obligatorisk; accepterar sessionsnyckel ellersessionIdfrånsessions_list)limit?: numbermax meddelanden (servern klampar)includeTools?: boolean(standard false)
includeTools=falsefiltrerarrole: "toolResult"-meddelanden.- Returnerar meddelandearray i rått transkriptformat.
- När en
sessionIdanges, löser OpenClaw den till motsvarande sessionsnyckel (fel vid saknade id:n).
sessions_send
Skicka ett meddelande till en annan session. Parametrar:sessionKey(obligatorisk; accepterar sessionsnyckel ellersessionIdfrånsessions_list)message(obligatorisk)timeoutSeconds?: number(standard >0; 0 = fire-and-forget)
timeoutSeconds = 0: köa och returnera{ runId, status: "accepted" }.timeoutSeconds > 0: vänta upp till N sekunder på slutförande och returnera sedan{ runId, status: "ok", reply }.- Om väntetider ut:
{ runId, status: "timeout", fel }. Kör fortsätter; anropsessions_historysenare. - Om körningen misslyckas:
{ runId, status: "error", error }. - Leveransannonser körs efter att primärkörningen slutförts och är best-effort;
status: "ok"garanterar inte att annonsen levererades. - Väntar via gateway
agent.wait(serversidan) så att återanslutningar inte avbryter väntan. - Agent-till-agent-meddelandekontext injiceras för primärkörningen.
- Efter att primärkörningen slutförts kör OpenClaw en reply-back-loop:
- När loopen avslutas kör OpenClaw steget agent‑till‑agent‑announce (endast målagent):
- Svara exakt
ANNOUNCE_SKIPför att vara tyst. - Alla andra svar skickas till målkanalen.
- Announce-steget inkluderar den ursprungliga begäran + runda‑1‑svaret + senaste ping‑pong‑svaret.
- Svara exakt
- När loopen avslutas kör OpenClaw steget agent‑till‑agent‑announce (endast målagent):
- Svara exakt
ANNOUNCE_SKIPför att vara tyst. - Alla andra svar skickas till målkanalen.
- Announce-steget inkluderar den ursprungliga begäran + runda‑1‑svaret + senaste ping‑pong‑svaret.
- Svara exakt
Kanalfält
- För grupper är
channelden kanal som registreras på sessionsposten. - För direktchattar mappar
channelfrånlastChannel. - För cron/hook/node är
channelinternal. - Om den saknas är
channelunknown.
Säkerhet / Sändpolicy
Policybaserad blockering efter kanal-/chatttyp (inte per sessions-id).sendPolicy: "allow" | "deny"(osatt = ärv konfig)- Kan sättas via
sessions.patcheller ägarendast/send on|off|inherit(fristående meddelande).
chat.send/agent(gateway)- logik för automatisk svarleverans
sessions_spawn
Starta en sub-agentkörning i en isolerad session och annonsera resultatet tillbaka till den begärande chattkanalen. Parametrar:task(obligatorisk)label?(valfri; används för loggar/UI)agentId?(valfri; starta under ett annat agent-id om tillåtet)model?(valfri; åsidosätter sub-agentmodellen; ogiltiga värden ger fel)runTimeoutSeconds?(standard 0; när satt avbryts sub-agentkörningen efter N sekunder)cleanup?(delete|keep, standardkeep)
agents.list[].subagents.allowAgents: lista över agent-ID som tillåts viaagentId(["*"]för att tillåta någon). Standard: endast beställaren agent.
- Använd
agents_listför att upptäcka vilka agent-id:n som är tillåtna försessions_spawn.
- Startar en ny
agent:<agentId>:subagent:<uuid>-session meddeliver: false. - Sub-agenter använder som standard hela verktygsuppsättningen minus sessionsverktyg (konfigurerbart via
tools.subagents.tools). - Sub-agenter får inte anropa
sessions_spawn(ingen sub-agent → sub-agent-start). - Alltid icke-blockerande: returnerar
{ status: "accepted", runId, childSessionKey }omedelbart. - Efter slutförande kör OpenClaw ett announce-steg för sub-agenten och publicerar resultatet till den begärande chattkanalen.
- Svara exakt
ANNOUNCE_SKIPunder announce-steget för att vara tyst. - Announce-svar normaliseras till
Status/Result/Notes;Statuskommer från körningsutfallet (inte modelltext). - Sub-agentsessioner arkiveras automatiskt efter
agents.defaults.subagents.archiveAfterMinutes(standard: 60). - Announce-svar inkluderar en statistikrad (körtid, tokens, sessionKey/sessionId, transkriptsökväg och valfri kostnad).
Sandbox-sessioners synlighet
Sandboxed-sessioner kan använda sessionsverktyg, men som standard ser de bara sessioner som de startat viasessions_spawn.
Konfig: