Plugin SDK reference
Agent-Harness-Plugins
Ein Agent-Harness ist der Low-Level-Executor für einen vorbereiteten OpenClaw-Agentenlauf. Er ist kein Modell-Provider, kein Channel und keine Tool-Registry. Das nutzerseitige mentale Modell finden Sie unter Agent-Runtimes.
Verwenden Sie diese Oberfläche nur für gebündelte oder vertrauenswürdige native Plugins. Der Vertrag ist noch experimentell, weil die Parametertypen absichtlich den aktuellen eingebetteten Runner spiegeln.
Wann ein Harness verwendet werden sollte
Registrieren Sie einen Agent-Harness, wenn eine Modellfamilie ihre eigene native Session-Runtime hat und der normale OpenClaw-Provider-Transport die falsche Abstraktion ist.
Beispiele:
- ein nativer Coding-Agent-Server, der Threads und Compaction besitzt
- eine lokale CLI oder ein Daemon, der native Planungs-, Reasoning- und Tool-Ereignisse streamen muss
- eine Modell-Runtime, die zusätzlich zum OpenClaw-Session-Transkript ihre eigene Resume-ID benötigt
Registrieren Sie keinen Harness, nur um eine neue LLM-API hinzuzufügen. Für normale HTTP- oder WebSocket-Modell-APIs erstellen Sie ein Provider-Plugin.
Was Core weiterhin besitzt
Bevor ein Harness ausgewählt wird, hat OpenClaw bereits Folgendes aufgelöst:
- Provider und Modell
- Runtime-Auth-Status
- Thinking-Level und Kontextbudget
- die OpenClaw-Transkript-/Session-Datei
- Workspace, Sandbox und Tool-Richtlinie
- Channel-Reply-Callbacks und Streaming-Callbacks
- Modell-Fallback und Richtlinie für Live-Modellwechsel
Diese Aufteilung ist beabsichtigt. Ein Harness führt einen vorbereiteten Versuch aus; er wählt keine Provider aus, ersetzt keine Channel-Zustellung und wechselt Modelle nicht stillschweigend.
Der vorbereitete Versuch enthält außerdem params.runtimePlan, ein OpenClaw-eigenes
Richtlinienbündel für Runtime-Entscheidungen, die zwischen OpenClaw und nativen
Harnesses geteilt bleiben müssen:
runtimePlan.tools.normalize(...)undruntimePlan.tools.logDiagnostics(...)für Provider-bewusste Tool-Schema-RichtlinienruntimePlan.transcript.resolvePolicy(...)für Transkriptbereinigung und Richtlinien zur Reparatur von Tool-CallsruntimePlan.delivery.isSilentPayload(...)für gemeinsameNO_REPLY- und Medienunterdrückung bei der ZustellungruntimePlan.outcome.classifyRunResult(...)für die Klassifizierung von Modell-FallbacksruntimePlan.observabilityfür aufgelöste Provider-/Modell-/Harness-Metadaten
Harnesses dürfen den Plan für Entscheidungen verwenden, die dem OpenClaw-Verhalten entsprechen müssen, sollten ihn aber weiterhin als hosteigenen Versuchszustand behandeln. Mutieren Sie ihn nicht und verwenden Sie ihn nicht, um Provider/Modelle innerhalb eines Laufs zu wechseln.
Harness registrieren
Import: openclaw/plugin-sdk/agent-harness
const myHarness: AgentHarness = { id: "my-harness", label: "My native agent harness", supports(ctx) { return ctx.provider === "my-provider" ? { supported: true, priority: 100 } : { supported: false }; }, async runAttempt(params) { // Start or resume your native thread. // Use params.prompt, params.tools, params.images, params.onPartialReply, // params.onAgentEvent, and the other prepared attempt fields. return await runMyNativeTurn(params); },}; export default definePluginEntry({ id: "my-native-agent", name: "My Native Agent", description: "Runs selected models through a native agent daemon.", register(api) { api.registerAgentHarness(myHarness); },});Auswahlrichtlinie
OpenClaw wählt einen Harness nach der Provider-/Modellauflösung aus:
- Modellbezogene Runtime-Richtlinie gewinnt.
- Providerbezogene Runtime-Richtlinie kommt als Nächstes.
autofragt registrierte Harnesses, ob sie den aufgelösten Provider/das aufgelöste Modell unterstützen.- Wenn kein registrierter Harness passt, verwendet OpenClaw seine eingebettete Runtime.
Fehler von Plugin-Harnesses erscheinen als Laufzeitfehler. Im Modus auto wird der eingebettete Fallback
nur verwendet, wenn kein registrierter Plugin-Harness den aufgelösten
Provider/das aufgelöste Modell unterstützt. Sobald ein Plugin-Harness einen Lauf beansprucht hat, spielt OpenClaw
denselben Lauf nicht über eine andere Runtime erneut ab, weil das
Auth-/Runtime-Semantik ändern oder Seiteneffekte duplizieren kann.
Runtime-Pins für ganze Sessions und ganze Agenten werden von der Auswahl ignoriert. Dazu gehören
veraltete Session-Werte agentHarnessId, agents.defaults.agentRuntime,
agents.list[].agentRuntime und OPENCLAW_AGENT_RUNTIME. /status zeigt die
effektive Runtime, die aus der Provider-/Modellroute ausgewählt wurde.
Wenn der ausgewählte Harness überraschend ist, aktivieren Sie das Debug-Logging agents/harness und
prüfen Sie den strukturierten Gateway-Datensatz agent harness selected. Er enthält
die ausgewählte Harness-ID, den Auswahlgrund, die Runtime-/Fallback-Richtlinie und im
Modus auto das Support-Ergebnis jedes Plugin-Kandidaten.
Das gebündelte Codex-Plugin registriert codex als seine Harness-ID. Core behandelt diese
als gewöhnliche Plugin-Harness-ID; Codex-spezifische Aliasse gehören in das Plugin
oder in die Operator-Konfiguration, nicht in den gemeinsamen Runtime-Selector.
Provider- und Harness-Kopplung
Die meisten Harnesses sollten auch einen Provider registrieren. Der Provider macht Modellreferenzen,
Auth-Status, Modellmetadaten und /model-Auswahl für den Rest von
OpenClaw sichtbar. Der Harness beansprucht diesen Provider dann in supports(...).
Das gebündelte Codex-Plugin folgt diesem Muster:
- bevorzugte Nutzermodellreferenzen:
openai/gpt-5.5 - Kompatibilitätsreferenzen: ältere
codex/gpt-*-Referenzen bleiben akzeptiert, neue Konfigurationen sollten sie aber nicht als normale Provider-/Modellreferenzen verwenden - Harness-ID:
codex - Auth: synthetische Provider-Verfügbarkeit, weil der Codex-Harness den nativen Codex-Login/die native Codex-Session besitzt
- App-Server-Anfrage: OpenClaw sendet die reine Modell-ID an Codex und lässt den Harness mit dem nativen App-Server-Protokoll sprechen
Das Codex-Plugin ist additiv. Einfache openai/gpt-*-Agentenreferenzen beim offiziellen
OpenAI-Provider wählen standardmäßig den Codex-Harness aus. Ältere codex/gpt-*-Referenzen
wählen weiterhin aus Kompatibilitätsgründen den Codex-Provider und -Harness aus.
Operator-Setup, Beispiele für Modellpräfixe und reine Codex-Konfigurationen finden Sie unter Codex-Harness.
OpenClaw erfordert Codex-App-Server 0.125.0 oder neuer. Das Codex-Plugin prüft
den App-Server-Initialize-Handshake und blockiert ältere oder nicht versionierte Server, sodass
OpenClaw nur gegen die Protokolloberfläche läuft, mit der es getestet wurde. Die
Mindestversion 0.125.0 enthält die Unterstützung für native MCP-Hook-Payloads, die in
Codex 0.124.0 gelandet ist, während OpenClaw an die neuere getestete stabile Linie gebunden wird.
Tool-Result-Middleware
Gebündelte Plugins und explizit aktivierte installierte Plugins mit passenden Manifest-Verträgen
können über api.registerAgentToolResultMiddleware(...) Runtime-neutrale Tool-Result-Middleware
anhängen, wenn ihr Manifest die
zielgerichteten Runtime-IDs in contracts.agentToolResultMiddleware deklariert. Diese vertrauenswürdige
Schnittstelle ist für asynchrone Tool-Result-Transformationen gedacht, die ausgeführt werden müssen, bevor OpenClaw oder Codex
Tool-Ausgaben zurück in das Modell einspeist.
Ältere gebündelte Plugins können weiterhin
api.registerCodexAppServerExtensionFactory(...) für Middleware verwenden, die nur für den Codex-App-Server gilt,
aber neue Ergebnis-Transformationen sollten die Runtime-neutrale API verwenden.
Der nur für den eingebetteten Runner bestimmte Hook api.registerEmbeddedExtensionFactory(...) wurde entfernt;
eingebettete Tool-Result-Transformationen müssen Runtime-neutrale Middleware verwenden.
Klassifizierung terminaler Ergebnisse
Native Harnesses, die ihre eigene Protokollprojektion besitzen, können
classifyAgentHarnessTerminalOutcome(...) aus
openclaw/plugin-sdk/agent-harness-runtime verwenden, wenn ein abgeschlossener Lauf keinen
sichtbaren Assistant-Text erzeugt hat. Der Helper gibt empty, reasoning-only oder
planning-only zurück, sodass OpenClaws Fallback-Richtlinie entscheiden kann, ob mit einem
anderen Modell erneut versucht werden soll. planning-only erfordert das explizite Feld planText
des Harness; OpenClaw leitet es nicht aus Assistant-Prosa ab. Der Helper lässt absichtlich
Prompt-Fehler, laufende Turns und absichtliche stille Antworten wie
NO_REPLY unklassifiziert.
Agent-End-Seiteneffekte
Native Harnesses müssen runAgentEndSideEffects(...) aus
openclaw/plugin-sdk/agent-harness-runtime aufrufen, nachdem sie einen Versuch abgeschlossen haben. Es
löst den portablen Hook agent_end und OpenClaws Research-Capture aus, ohne
interaktive Antworten zu verzögern. Verwenden Sie awaitAgentEndSideEffects(...) für lokale,
nicht interaktive Läufe, bei denen der Versuch nicht abgeschlossen werden darf, bis diese Seiteneffekte
beendet sind. Beide Helper akzeptieren dasselbe Payload { event, ctx } wie
runAgentHarnessAgentEndHook(...); ihre Fehler ändern das abgeschlossene
Versuchsergebnis nicht.
Nutzereingaben und Tool-Oberflächen
Native Harnesses, die eine Nutzereingabeanfrage auf Runtime-Ebene bereitstellen, sollten die
Nutzereingabe-Helper aus openclaw/plugin-sdk/agent-harness-runtime verwenden, um
den Prompt zu formatieren, ihn über OpenClaws blockierenden Antwortpfad zuzustellen und
Auswahl-/Freiformantworten zurück in die native Antwortform der Runtime zu normalisieren. Der
Helper hält die Channel-/TUI-Darstellung konsistent, während jeder Harness sein
eigenes Protokoll-Parsing und den Lifecycle ausstehender Anfragen behält.
Native Harnesses, die PI-ähnliches kompaktes Tool-Routing benötigen, sollten
createAgentHarnessToolSurfaceRuntime(...) aus
openclaw/plugin-sdk/agent-harness-tool-runtime verwenden. Es besitzt
Tool-Search-/Code-Mode-Steuerungsauswahl, schlanke Defaults für lokale Modelle,
Runtime-kompatible Schemafilterung, versteckte Katalogausführung, Verzeichnishydratisierung
und Katalogbereinigung. Harnesses besitzen weiterhin ihre SDK-spezifische Tool-Konvertierung
und den nativen Ausführungs-Callback.
Nativer Codex-Harness-Modus
Der gebündelte codex-Harness ist der native Codex-Modus für eingebettete OpenClaw-
Agentenläufe. Aktivieren Sie zuerst das gebündelte codex-Plugin und nehmen Sie codex in
plugins.allow auf, wenn Ihre Konfiguration eine restriktive Allowlist verwendet. Native App-Server-
Konfigurationen sollten openai/gpt-* verwenden; OpenAI-Agentenläufe wählen standardmäßig den Codex-Harness
aus. Ältere Codex-Modellreferenzrouten sollten mit
openclaw doctor --fix repariert werden, und ältere codex/*-Modellreferenzen bleiben Kompatibilitäts-
Aliasse für den nativen Harness.
Wenn dieser Modus läuft, besitzt Codex die native Thread-ID, das Resume-Verhalten,
Compaction und die App-Server-Ausführung. OpenClaw besitzt weiterhin den Chat-Channel,
den sichtbaren Transkriptspiegel, die Tool-Richtlinie, Freigaben, Medienzustellung und Session-
Auswahl. Verwenden Sie Provider-/Modell-agentRuntime.id: "codex", wenn Sie nachweisen müssen,
dass nur der Codex-App-Server-Pfad den Lauf beanspruchen kann. Explizite Plugin-Runtimes
schlagen geschlossen fehl; Auswahlfehler des Codex-App-Servers und Runtime-Fehler werden nicht
über eine andere Runtime erneut versucht.
Runtime-Strenge
Standardmäßig verwendet OpenClaw die Provider-/Modell-Runtime-Richtlinie auto: registrierte
Plugin-Harnesses können ein Provider-/Modellpaar beanspruchen, und die eingebettete Runtime
verarbeitet den Lauf, wenn keines passt. OpenAI-Agentenreferenzen beim offiziellen OpenAI-Provider verwenden standardmäßig Codex.
Verwenden Sie eine explizite Provider-/Modell-Plugin-Runtime wie
agentRuntime.id: "codex", wenn eine fehlende Harness-Auswahl fehlschlagen soll,
statt über die eingebettete Runtime geroutet zu werden. Fehler ausgewählter Plugin-Harnesses
schlagen immer hart fehl. Dies blockiert kein explizites Provider-/Modell-agentRuntime.id: "openclaw".
Für reine Codex-Embedded-Läufe:
{ "models": { "providers": { "openai": { "agentRuntime": { "id": "codex" } } } }, "agents": { "defaults": { "model": "openai/gpt-5.5" } }}Wenn Sie ein CLI-Backend für ein kanonisches Modell möchten, legen Sie die Runtime auf diesen Modelleintrag:
{ "agents": { "defaults": { "model": "anthropic/claude-opus-4-8", "models": { "anthropic/claude-opus-4-8": { "agentRuntime": { "id": "claude-cli" } } } } }}Agentenspezifische Overrides verwenden dieselbe modellbezogene Form:
{ "agents": { "list": [ { "id": "codex-only", "model": "openai/gpt-5.5", "models": { "openai/gpt-5.5": { "agentRuntime": { "id": "codex" } } } } ] }}Ältere Beispiele für Runtime-Konfigurationen auf Ebene des ganzen Agenten wie dieses werden ignoriert:
{ "agents": { "defaults": { "agentRuntime": { "id": "codex" } } }}Mit einer expliziten Plugin-Runtime schlägt eine Sitzung früh fehl, wenn das angeforderte Harness nicht registriert ist, den aufgelösten Provider/das aufgelöste Modell nicht unterstützt oder fehlschlägt, bevor Turn-Seiteneffekte erzeugt werden. Das ist für reine Codex- Bereitstellungen und für Live-Tests beabsichtigt, die nachweisen müssen, dass der Codex-App-Server-Pfad tatsächlich verwendet wird.
Diese Einstellung steuert nur das eingebettete Agent-Harness. Sie deaktiviert nicht Bild-, Video-, Musik-, TTS-, PDF- oder anderes Provider-spezifisches Modell-Routing.
Native Sitzungen und Transcript-Spiegel
Ein Harness kann eine native Sitzungs-ID, Thread-ID oder ein daemonseitiges Resume-Token behalten. Halten Sie diese Bindung ausdrücklich mit der OpenClaw-Sitzung verknüpft, und spiegeln Sie für Benutzer sichtbare Assistenten-/Tool-Ausgaben weiterhin in das OpenClaw-Transcript.
Das OpenClaw-Transcript bleibt die Kompatibilitätsschicht für:
- kanal sichtbaren Sitzungsverlauf
- Transcript-Suche und -Indexierung
- Wechsel zurück zum integrierten OpenClaw-Harness in einem späteren Turn
- generisches
/new-,/reset- und Sitzungslöschverhalten
Wenn Ihr Harness eine Sidecar-Bindung speichert, implementieren Sie reset(...), damit OpenClaw sie
löschen kann, wenn die zugehörige OpenClaw-Sitzung zurückgesetzt wird.
Tool- und Medienergebnisse
Core erstellt die OpenClaw-Tool-Liste und übergibt sie an den vorbereiteten Versuch. Wenn ein Harness einen dynamischen Tool-Aufruf ausführt, geben Sie das Tool-Ergebnis über die Ergebnisstruktur des Harness zurück, statt selbst Kanalmedien zu senden.
So bleiben Text-, Bild-, Video-, Musik-, TTS-, Genehmigungs- und Messaging-Tool-Ausgaben auf demselben Auslieferungspfad wie OpenClaw-gestützte Läufe.
Aktuelle Einschränkungen
- Der öffentliche Importpfad ist generisch, aber einige Attempt-/Result-Typaliases tragen aus Kompatibilitätsgründen noch Legacy-Namen.
- Die Installation von Harnesses von Drittanbietern ist experimentell. Bevorzugen Sie Provider-Plugins, bis Sie eine native Sitzungs-Runtime benötigen.
- Harness-Wechsel werden turnübergreifend unterstützt. Wechseln Sie Harnesses nicht mitten in einem Turn, nachdem native Tools, Genehmigungen, Assistententext oder Nachrichtenversand begonnen haben.