Sitzungswerkzeuge
Ziel: kleines, schwer fehlzuverwendendes Werkzeugsatz, damit Agenten Sitzungen auflisten, die Historie abrufen und an eine andere Sitzung senden können.Werkzeugnamen
sessions_listsessions_historysessions_sendsessions_spawn
Schlüsselmodell
- Der Haupt‑Direktchat‑Bucket ist immer der literale Schlüssel
"main"(auf den Hauptschlüssel des aktuellen Agenten aufgelöst). - Gruppenchats verwenden
agent:<agentId>:<channel>:group:<id>oderagent:<agentId>:<channel>:channel:<id>(den vollständigen Schlüssel übergeben). - Cron‑Jobs verwenden
cron:<job.id>. - Hooks verwenden
hook:<uuid>, sofern nicht explizit gesetzt. - Node‑Sitzungen verwenden
node-<nodeId>, sofern nicht explizit gesetzt.
global und unknown sind reservierte Werte und werden niemals aufgelistet. Falls session.scope = "global", aliasieren wir es für alle Werkzeuge auf main, sodass Aufrufer niemals global sehen.
sessions_list
Listet Sitzungen als Array von Zeilen auf. Parameter:kinds?: string[]Filter: einer aus"main" | "group" | "cron" | "hook" | "node" | "other"limit?: numbermaximale Zeilen (Standard: Server‑Standard, Begrenzung z. B. 200)activeMinutes?: numbernur Sitzungen, die innerhalb von N Minuten aktualisiert wurdenmessageLimit?: number0 = keine Nachrichten (Standard 0); >0 = die letzten N Nachrichten einschließen
messageLimit > 0ruftchat.historypro Sitzung ab und schließt die letzten N Nachrichten ein.- Werkzeugergebnisse werden in der Listenausgabe herausgefiltert; verwenden Sie
sessions_historyfür Werkzeugnachrichten. - Bei Ausführung in einer sandboxed Agenten‑Sitzung ist die Standardsichtbarkeit der Sitzungswerkzeuge nur für gespawnte Sitzungen (siehe unten).
key: Sitzungsschlüssel (String)kind:main | group | cron | hook | node | otherchannel:whatsapp | telegram | discord | signal | imessage | webchat | internal | unknowndisplayName(Gruppen‑Anzeigelabel, falls verfügbar)updatedAt(ms)sessionIdmodel,contextTokens,totalTokensthinkingLevel,verboseLevel,systemSent,abortedLastRunsendPolicy(Sitzungs‑Override, falls gesetzt)lastChannel,lastTodeliveryContext(normalisiertes{ channel, to, accountId }, wenn verfügbar)transcriptPath(Best‑Effort‑Pfad, abgeleitet aus Store‑Verzeichnis + sessionId)messages?(nur wennmessageLimit > 0)
sessions_history
Abrufen des Transkripts für eine Sitzung. Parameter:sessionKey(erforderlich; akzeptiert Sitzungsschlüssel odersessionIdaussessions_list)limit?: numbermaximale Nachrichten (Server begrenzt)includeTools?: boolean(Standard false)
includeTools=falsefiltertrole: "toolResult"‑Nachrichten.- Gibt ein Nachrichten‑Array im rohen Transkriptformat zurück.
- Bei Angabe einer
sessionIdlöst OpenClaw diese auf den entsprechenden Sitzungsschlüssel auf (Fehler bei fehlenden IDs).
sessions_send
Sendet eine Nachricht in eine andere Sitzung. Parameter:sessionKey(erforderlich; akzeptiert Sitzungsschlüssel odersessionIdaussessions_list)message(erforderlich)timeoutSeconds?: number(Standard >0; 0 = Fire‑and‑Forget)
timeoutSeconds = 0: einreihen und{ runId, status: "accepted" }zurückgeben.timeoutSeconds > 0: bis zu N Sekunden auf Abschluss warten und dann{ runId, status: "ok", reply }zurückgeben.- Bei Timeout der Wartezeit:
{ runId, status: "timeout", error }. Der Lauf wird fortgesetzt; rufen Siesessions_historyspäter auf. - Scheitert der Lauf:
{ runId, status: "error", error }. - Zustellungs‑Ankündigungsläufe erfolgen nach Abschluss des Primärlaufs und sind Best‑Effort;
status: "ok"garantiert nicht, dass die Ankündigung zugestellt wurde. - Wartet über Gateway
agent.wait(serverseitig), sodass Reconnects das Warten nicht abbrechen. - Agent‑zu‑Agent‑Nachrichtenkontext wird für den Primärlauf injiziert.
- Inter-Session-Nachrichten werden mit
message.provenance.kind = "inter_session"persistiert, sodass Leser des Transkripts weitergeleitete Agentenanweisungen von externer Benutzereingabe unterscheiden können. - Sobald die Schleife endet, führt OpenClaw den Agent‑zu‑Agent‑Ankündigungsschritt aus (nur Ziel‑Agent):
- Runde 2+ alterniert zwischen anforderndem und Ziel‑Agenten.
- Antworten Sie exakt
REPLY_SKIP, um das Ping‑Pong zu stoppen. - Maximale Züge:
session.agentToAgent.maxPingPongTurns(0–5, Standard 5).
- Nach Abschluss des Primärlaufs führt OpenClaw eine Reply‑Back‑Schleife aus:
- Antworten Sie exakt
ANNOUNCE_SKIP, um stumm zu bleiben. - Jede andere Antwort wird an den Zielkanal gesendet.
- Der Ankündigungsschritt enthält die ursprüngliche Anfrage + Antwort aus Runde 1 + die letzte Ping‑Pong‑Antwort.
- Antworten Sie exakt
Kanal‑Feld
- Für Gruppen ist
channelder im Sitzungseintrag erfasste Kanal. - Für Direktchats wird
channelauslastChannelabgebildet. - Für Cron/Hook/Node ist
channelgleichinternal. - Falls fehlend, ist
channelgleichunknown.
Sicherheit / Send‑Richtlinie
Richtlinienbasiertes Blockieren nach Kanal‑/Chat‑Typ (nicht pro Sitzungs‑ID).sendPolicy: "allow" | "deny"(nicht gesetzt = Konfiguration erben)- Setzbar über
sessions.patchoder owner‑only/send on|off|inherit(Standalone‑Nachricht).
chat.send/agent(Gateway)- Auto‑Reply‑Zustelllogik
sessions_spawn
Startet einen Sub‑Agent‑Lauf in einer isolierten Sitzung und kündigt das Ergebnis im anfordernden Chat‑Kanal an. Parameter:task(erforderlich)label?(optional; für Logs/UI verwendet)agentId?(optional; unter einer anderen Agent‑ID starten, falls erlaubt)model?(optional; überschreibt das Sub‑Agent‑Modell; ungültige Werte führen zu Fehlern)runTimeoutSeconds?(Standard 0; wenn gesetzt, wird der Sub‑Agent‑Lauf nach N Sekunden abgebrochen)cleanup?(delete|keep, Standardkeep)
agents.list[].subagents.allowAgents: Liste der Agent‑IDs, die überagentIderlaubt sind (["*"]erlaubt alle). Standard: nur der anfordernde Agent.
- Verwenden Sie
agents_list, um zu ermitteln, welche Agent‑IDs fürsessions_spawnerlaubt sind.
- Startet eine neue
agent:<agentId>:subagent:<uuid>‑Sitzung mitdeliver: false. - Sub‑Agenten verwenden standardmäßig den vollständigen Werkzeugsatz ohne Sitzungswerkzeuge (konfigurierbar über
tools.subagents.tools). - Sub‑Agenten dürfen
sessions_spawnnicht aufrufen (kein Sub‑Agent → Sub‑Agent‑Spawning). - Immer nicht blockierend: gibt
{ status: "accepted", runId, childSessionKey }sofort zurück. - Nach Abschluss führt OpenClaw einen Sub‑Agent‑Ankündigungsschritt aus und postet das Ergebnis in den anfordernden Chat‑Kanal.
- Antworten Sie im Ankündigungsschritt exakt
ANNOUNCE_SKIP, um stumm zu bleiben. - Ankündigungsantworten werden auf
Status/Result/Notesnormalisiert;Statusstammt aus dem Laufzeitergebnis (nicht aus dem Modelltext). - Sub‑Agent‑Sitzungen werden nach
agents.defaults.subagents.archiveAfterMinutesautomatisch archiviert (Standard: 60). - Ankündigungsantworten enthalten eine Statistikzeile (Laufzeit, Tokens, sessionKey/sessionId, Transkriptpfad und optionale Kosten).
Sandbox‑Sitzungssichtbarkeit
Sandboxed‑Sitzungen können Sitzungswerkzeuge verwenden, sehen standardmäßig jedoch nur Sitzungen, die sie übersessions_spawn gestartet haben.
Konfiguration: