Einstiegspunkte
- Gateway-RPC:
agentundagent.wait. - CLI:
openclaw agent.
Ablauf eines Laufs
agent-RPC validiert Parameter, löst die Sitzung auf (sessionKey/sessionId), persistiert Sitzungsmetadaten und gibt sofort{ runId, acceptedAt }zurück.agentCommandführt den Turn aus: löst die Standardwerte für Modell, Denken, Ausführlichkeit und Ablaufverfolgung auf, lädt den Skills-Snapshot, ruftrunEmbeddedAgentauf und gibt ersatzweise Lebenszyklusende/-fehler aus, falls der eingebettete Loop dies nicht bereits getan hat.runEmbeddedAgent: Serialisiert Läufe über sitzungsbezogene und globale Warteschlangen, löst Modell und Authentifizierungsprofil auf, erstellt die OpenClaw-Sitzung, abonniert Laufzeitereignisse, streamt Assistenten-/Werkzeug-Deltas, erzwingt das Laufzeitlimit (mit Abbruch nach dessen Ablauf) und gibt Nutzdaten sowie Nutzungsmetadaten zurück. Bei Turns des Codex-App-Servers bricht es außerdem einen angenommenen Turn ab, der vor einem terminalen Ereignis keinen weiteren App-Server-Fortschritt mehr erzeugt.subscribeEmbeddedAgentSessionüberführt Laufzeitereignisse in denagent-Stream: Werkzeugereignisse instream: "tool", Assistenten-Deltas instream: "assistant", Lebenszyklusereignisse instream: "lifecycle"(phase: "start" | "end" | "error").agent.wait(waitForAgentRun) wartet auf Lebenszyklusende/-fehler für einerunIdund gibt{ status: ok|error|timeout, startedAt, endedAt, error? }zurück.
Warteschlangen und Nebenläufigkeit
Läufe werden pro Sitzungsschlüssel (Sitzungs-Lane) und optional über eine globale Lane serialisiert, wodurch Werkzeug-/Sitzungs-Wettlaufsituationen verhindert werden. Nachrichtenkanäle wählen einen Warteschlangenmodus (steer/followup/collect/interrupt), der dieses Lane-System speist; siehe Befehlswarteschlange. Transkriptschreibvorgänge werden zusätzlich durch eine Sitzungsschreibsperre für die Sitzungsdatei geschützt. Die Sperre ist prozessbezogen und dateibasiert, sodass sie Schreibende erfasst, die die prozessinterne Warteschlange umgehen oder aus einem anderen Prozess stammen. Schreibende warten standardmäßig bis zu 60 Sekunden (UmgebungsüberschreibungOPENCLAW_SESSION_WRITE_LOCK_ACQUIRE_TIMEOUT_MS), bevor die Sitzung als beschäftigt gemeldet wird.
Sitzungsschreibsperren sind standardmäßig nicht wiedereintrittsfähig. Eine Hilfsfunktion, die absichtlich den Erwerb derselben Sperre verschachtelt und dabei einen einzigen logischen Schreibenden beibehält, muss dies mit allowReentrant: true ausdrücklich aktivieren.
Vorbereitung von Sitzung und Arbeitsbereich
- Der Arbeitsbereich wird aufgelöst und erstellt; sandboxgeschützte Läufe können auf ein Sandbox-Arbeitsbereichsstammverzeichnis umgeleitet werden.
- Skills werden geladen (oder aus einem Snapshot wiederverwendet) und in die Umgebung und den Prompt eingefügt.
- Bootstrap-/Kontextdateien werden aufgelöst und in den System-Prompt eingefügt.
- Eine Sitzungsschreibsperre wird erworben und das Ziel für das Sitzungstranskript vorbereitet, bevor das Streaming beginnt. Jeder spätere Pfad zum Umschreiben, zur Compaction oder zur Kürzung des Transkripts muss dieselbe Sperre erwerben, bevor die SQLite-Transkriptzeilen geändert werden.
Prompt-Zusammenstellung
Der System-Prompt wird aus dem Basis-Prompt von OpenClaw, dem Skills-Prompt, dem Bootstrap-Kontext und laufbezogenen Überschreibungen erstellt. Modellspezifische Limits und für die Compaction reservierte Tokens werden durchgesetzt. Unter System-Prompt finden Sie, was das Modell sieht.Hooks
OpenClaw verfügt über zwei Hook-Systeme:- Interne Hooks (Gateway-Hooks): ereignisgesteuerte Skripte für Befehle und Lebenszyklusereignisse.
- Plugin-Hooks: Erweiterungspunkte innerhalb des Agenten-/Werkzeuglebenszyklus und der Gateway-Pipeline.
Interne Hooks (Gateway-Hooks)
agent:bootstrap: Wird beim Erstellen der Bootstrap-Dateien ausgeführt, bevor der System-Prompt finalisiert wird. Verwenden Sie ihn, um Bootstrap-Kontextdateien hinzuzufügen oder zu entfernen.- Befehls-Hooks:
/new,/reset,/stopund andere Befehlsereignisse (siehe die Hooks-Dokumentation).
Plugin-Hooks
Diese werden innerhalb des Agenten-Loops oder der Gateway-Pipeline ausgeführt:
Hook-Entscheidungsregeln für ausgehende/Werkzeug-Guards:
before_tool_call:{ block: true }ist terminal und stoppt Handler mit niedrigerer Priorität.{ block: false }ist eine wirkungslose Operation und hebt eine vorherige Blockierung nicht auf.before_install: dieselbe Terminal-/Keine-Wirkung-Semantik wie oben. Verwenden Siesecurity.installPolicyund nichtbefore_installfür betreiberseitige Entscheidungen zum Zulassen/Blockieren von Installationen, die CLI-Installations- und Aktualisierungspfade abdecken müssen.message_sending:{ cancel: true }ist terminal und stoppt Handler mit niedrigerer Priorität.{ cancel: false }ist eine wirkungslose Operation und hebt einen vorherigen Abbruch nicht auf.
Streaming
- Assistenten-Deltas werden von der Agentenlaufzeit als
assistant-Ereignisse gestreamt. - Block-Streaming kann Teilantworten bei
text_endodermessage_endausgeben. - Das Streaming von Schlussfolgerungen kann als separater Stream oder in Blockantworten erfolgen.
- Informationen zu Aufteilung und Blockantwortverhalten finden Sie unter Streaming.
Werkzeugausführung
- Ereignisse für Werkzeugstart/-aktualisierung/-ende werden im
tool-Stream ausgegeben. - Werkzeugergebnisse werden vor der Protokollierung/Ausgabe hinsichtlich Größe und Bildnutzdaten bereinigt.
- Sendungen durch Nachrichtenwerkzeuge werden verfolgt, um doppelte Assistentenbestätigungen zu unterdrücken.
Antwortgestaltung
Endgültige Nutzdaten werden aus Assistententext (zuzüglich optionaler Schlussfolgerungen), Inline-Werkzeugzusammenfassungen (wenn ausführlich und zulässig) und Assistentenfehlertext bei Modellfehlern zusammengestellt.- Das exakte Stille-Token
NO_REPLYwird aus ausgehenden Nutzdaten herausgefiltert. - Duplikate von Nachrichtenwerkzeugen werden aus der endgültigen Nutzdatenliste entfernt.
- Wenn keine darstellbaren Nutzdaten verbleiben und bei einem Werkzeug ein Fehler aufgetreten ist, wird ersatzweise eine Werkzeugfehlerantwort ausgegeben, sofern nicht bereits ein Nachrichtenwerkzeug eine für Benutzende sichtbare Antwort gesendet hat.
Compaction und Wiederholungsversuche
Die automatische Compaction gibtcompaction-Stream-Ereignisse aus und kann einen Wiederholungsversuch auslösen. Beim Wiederholungsversuch werden speicherinterne Puffer und Werkzeugzusammenfassungen zurückgesetzt, um doppelte Ausgaben zu vermeiden. Siehe Compaction.
Ereignis-Streams
lifecycle: Wird vonsubscribeEmbeddedAgentSessionausgegeben (und ersatzweise vonagentCommand).assistant: Gestreamte Deltas aus der Agentenlaufzeit.tool: Gestreamte Werkzeugereignisse aus der Agentenlaufzeit.
Verarbeitung von Chatkanälen
Assistenten-Deltas werden in Chat-delta-Nachrichten gepuffert. Bei Lebenszyklusende/-fehler wird ein Chat-final ausgegeben.
Zeitlimits
Diagnose festgefahrener Sitzungen
Bei aktivierter Diagnose klassifiziert ein integrierter Schwellenwert von zwei Minuten lang laufendeprocessing-Sitzungen, bei denen keine Antwort sowie kein Werkzeug-, Status-, Block- oder ACP-Fortschritt beobachtet wurde:
- Aktive eingebettete Läufe, Modellaufrufe und Werkzeugaufrufe werden als
session.long_runninggemeldet. Zugeordnete stille Modellaufrufe bleiben bis zum Abbruchschwellenwertsession.long_running, damit langsame oder nicht streamende Provider nicht zu früh als festgefahren gekennzeichnet werden. - Aktive Arbeit ohne kürzlichen Fortschritt wird als
session.stalledgemeldet. Zugeordnete Modellaufrufe wechseln beim oder nach dem Abbruchschwellenwert zusession.stalled; veraltete Modell-/Werkzeugaktivität ohne Eigentümer wird nicht als lang laufend verborgen. session.stuckist für wiederherstellbare veraltete Sitzungsbuchführung reserviert, einschließlich inaktiver Sitzungen in der Warteschlange mit veralteter Modell-/Werkzeugaktivität ohne Eigentümer.
session.stuck-Diagnosen verwenden ein zunehmendes Warteintervall, solange die Sitzung unverändert bleibt.
Mögliche Gründe für eine vorzeitige Beendigung
- Agent-Zeitüberschreitung (Abbruch)
- AbortSignal (Abbrechen)
- Gateway-Verbindungsabbruch oder RPC-Zeitüberschreitung
- Zeitüberschreitung von
agent.wait(nur Warten, stoppt den Agent nicht)
Verwandte Themen
- Werkzeuge – verfügbare Agent-Werkzeuge
- Hooks – ereignisgesteuerte Skripte, die durch Ereignisse im Agent-Lebenszyklus ausgelöst werden
- Compaction – wie lange Unterhaltungen zusammengefasst werden
- Ausführungsgenehmigungen – Genehmigungsschranken für Shell-Befehle
- Denken – Konfiguration der Denk-/Schlussfolgerungsebene