Wenn der vorgelagerte Dienst eine normale HTTP-Modell-API bereitstellt, schreiben Sie stattdessen ein
Provider-Plugin. Wenn die vorgelagerte
Laufzeit vollständige Agentensitzungen, Tool-Ereignisse, Compaction oder den Status von Hintergrundaufgaben
verwaltet, verwenden Sie ein Agent-Harness.
Verantwortungsbereich des Plugins
Ein CLI-Backend-Plugin hat drei Verträge:
Das Manifest enthält Metadaten für die Erkennung: Es führt die CLI nicht aus und registriert
kein Laufzeitverhalten. Das Laufzeitverhalten beginnt, wenn der Plugin-Einstiegspunkt
api.registerCliBackend(...) aufruft.
Minimales Backend-Plugin
1
Paketmetadaten erstellen
package.json
./src/index.ts ist, fügen Sie openclaw.runtimeExtensions hinzu, das auf die
erstellte JavaScript-Entsprechung verweist. Siehe Einstiegspunkte.2
Backend-Zuständigkeit deklarieren
openclaw.plugin.json
cliBackends ist die Liste der Laufzeitzuständigkeiten; dadurch kann OpenClaw das
Plugin automatisch laden, wenn die Modellauswahl oder agentRuntime.id acme-cli erwähnt.setup.cliBackends ist die deskriptorbasierte Einrichtungsoberfläche. Fügen Sie sie hinzu, wenn
Modellerkennung, Onboarding oder Status das Backend erkennen sollen,
ohne die Plugin-Laufzeit zu laden. Verwenden Sie requiresRuntime: false nur, wenn
diese statischen Deskriptoren für die Einrichtung ausreichen.3
Backend registrieren
index.ts
cliBackends übereinstimmen. Der registrierte
Adapter ist maßgeblicher Plugin-Code; die OpenClaw-Konfiguration wählt das Backend aus,
schreibt dessen Befehlsvertrag jedoch nicht um.Konfigurationsstruktur
CliBackendConfig beschreibt, wie OpenClaw die CLI starten und analysieren soll. Das
ausgearbeitete Beispiel oben verwendet absichtlich dieselben Befehls-, Fortsetzungs-, JSONL-,
Modellalias-, Sitzungs-, Bild- und Watchdog-Felder wie der mitgelieferte
Adapter google-gemini-cli:
Bevorzugen Sie die kleinste statische Konfiguration, die zur CLI passt. Fügen Sie Plugin-Callbacks
nur für Verhalten hinzu, das tatsächlich zum Backend gehört.
Erweiterte Backend-Hooks
CliBackendPlugin kann außerdem Folgendes definieren:
Belassen Sie diese Hooks in der Zuständigkeit des Providers. Fügen Sie dem Kern keine
CLI-spezifischen Verzweigungen hinzu, wenn ein Backend-Hook das Verhalten ausdrücken kann.
prepareExecution(ctx) empfängt ctx.contextTokenBudget, das für den Lauf ausgewählte effektive Token-
Limit. Backends mit eigener nativer Compaction können dieses
Budget ihrem CLI-spezifischen Startvertrag zuordnen.
runtimeArtifact gehört dem Plugin. Es wird
nur herangezogen, wenn ein Live-Inferenzdurchlauf verifizierte Einrichtungsautorität erzeugt oder erneut validiert;
normale CLI-Läufe benötigen es nicht. Ein Backend ohne diese Deklaration kann
keine verifizierte CLI-Einrichtungsautorität erzeugen. Eine bundled-package-tree-Deklaration benennt
den exakten package.json-Eigentümer und verlangt, dass der Paket-Einstiegspunkt der
Befehl ist. OpenClaw hasht den begrenzten, vollständigen installierten Paketbaum einschließlich
verschachtelter Abhängigkeiten und bricht bei umleitenden Symlinks,
Startern außerhalb des deklarierten Pakets, Deklarationen erforderlicher externer Abhängigkeiten,
übergroßen Bäumen und unbekannten Skripten sicher ab. Deklarieren Sie dies nur, wenn dieser
Baum die vollständige Inferenzimplementierung enthält; optionale Tool-Integrationen
machen einen externen Implementierungsgraphen nicht sicher.
Wenn dasselbe Backend auch eine eigenständige native ausführbare Datei bereitstellt, führen Sie deren
kanonische Basisnamen in nativeExecutableNames auf. Andere native Befehle bleiben
unverifiziert.
ctx.executionMode ist "agent" für normale Durchläufe und "side-question" für
flüchtige /btw-Aufrufe. Verwenden Sie es, wenn die CLI andere Einmal-Flags benötigt,
etwa zum Deaktivieren nativer Tools, der Sitzungspersistenz oder des Fortsetzungsverhaltens für
BTW. Wenn ein Backend normalerweise nativeToolMode: "always-on" hat, seine
Argumentliste für Nebenfragen diese Tools jedoch zuverlässig deaktiviert, setzen Sie außerdem
sideQuestionToolMode: "disabled"; andernfalls bricht OpenClaw sicher ab, wenn BTW
einen CLI-Lauf ohne Tools erfordert.
Setzen Sie nativeToolMode: "selectable" nur, wenn das Backend jedes
backend-native Tool für einen einzelnen Lauf deaktivieren kann. Eingeschränkte Läufe erhalten einen kanonischen
Vertrag: ctx.toolAvailability.native ist die exakte backend-native Liste und
ctx.toolAvailability.openClaw ist die exakte Liste der OpenClaw-Toolnamen. Der
Host beschränkt die erzeugte MCP-Konfiguration und Berechtigung unabhängig auf diese
OpenClaw-Liste; Plugins dürfen sie im Core weder übersetzen noch Transportpräfixe hinzufügen.
Deklarieren Sie, wie das Backend diesen Vertrag durchsetzt:
toolAvailabilityEnforcement: "execution-args"erfordertresolveExecutionArgs. Der Hook muss widersprüchliche Tool-Flags ersetzen, Anpassungsoberflächen deaktivieren, die außerhalb der ausgewählten Tools Code ausführen können, und durchsetzende Argumente sowohl für neue als auch für fortgesetzte Läufe zurückgeben.toolAvailabilityEnforcement: "prepare-execution"erfordertprepareExecution. Der Hook muss eine exakte Richtlinie pro Lauf bereitstellen undtoolAvailabilityEnforced: truezurückgeben; eine fehlende Bestätigung führt zum sicheren Abbruch, und OpenClaw bereinigt die bereitgestellten Ressourcen vor dem Start.
toolsAllow werden von
OpenClaw normalisiert und nach Gruppen erweitert, bevor dieser Vertrag erstellt wird. Native Tools werden deaktiviert, und ein
Backend ohne vollständig deklarierten Durchsetzungspfad schlägt vor der Ausführung fehl.
Plugins, die gegen v2026.7.2-beta.1 bis v2026.7.2-beta.3 erstellt wurden, können weiterhin
die veraltete Projektion des Transportnamens ctx.toolAvailability.mcp lesen und
dürfen toolAvailabilityEnforcement auslassen, wenn ein auswählbares Backend
resolveExecutionArgs implementiert. OpenClaw erkennt diesen veröffentlichten Beta-Pfad anhand der
erforderlichen openclaw.build.openclawVersion-Metadaten des Plugin-Pakets und
behält ihn bis einschließlich der 2026.8.x-Linie bei. Neue und aktualisierte Plugins sollten kanonische
ctx.toolAvailability.openClaw-Namen verwenden und
toolAvailabilityEnforcement: "execution-args" ausdrücklich deklarieren; der Beta-
Kompatibilitätspfad soll nach diesem Zeitraum entfernt werden.
ownsNativeCompaction: OpenClaw-Compaction deaktivieren
Wenn Ihr Backend einen Agenten ausführt, der sein eigenes Transkript komprimiert, setzen Sie
ownsNativeCompaction: true, damit OpenClaws absichernde Zusammenfassung niemals
auf dessen Sitzungen angewendet wird – der CLI-Compaction-Lebenszyklus führt keine Aktion aus und der
Durchlauf wird fortgesetzt. claude-cli deklariert dies, weil Claude Code
intern ohne Harness-Endpunkt komprimiert. Native Harness-Sitzungen wie Codex
werden stattdessen weiterhin an ihren Harness-Compaction-Endpunkt weitergeleitet.
Deklarieren Sie dies nur, wenn alle folgenden Bedingungen erfüllt sind, andernfalls
kann eine verzögerte Sitzung, die das Budget überschreitet, weiterhin über dem Budget bleiben oder veralten (OpenClaw
rettet sie nicht mehr):
- das Backend komprimiert oder begrenzt sein eigenes Transkript zuverlässig, wenn es sich seinem Fenster nähert;
- es speichert eine fortsetzbare Sitzung, sodass der komprimierte Zustand über mehrere Durchläufe hinweg erhalten bleibt
(zum Beispiel
--resume/--session-id); - es handelt sich nicht um eine native Harness-Compaction-Sitzung – übereinstimmende
agentHarnessId- Sitzungen werden stattdessen an den Harness-Endpunkt weitergeleitet.
MCP-Tool-Bridge
CLI-Backends erhalten standardmäßig keine OpenClaw-Tools. Wenn die CLI eine MCP-Konfiguration verwenden kann, aktivieren Sie dies ausdrücklich:
Aktivieren Sie die Bridge nur, wenn die CLI sie tatsächlich verwenden kann. Wenn die CLI
eine eigene integrierte Tool-Schicht hat, die nicht deaktiviert werden kann, setzen Sie
nativeToolMode: "always-on", damit OpenClaw sicher abbrechen kann, wenn ein Aufrufer keine nativen
Tools verlangt. Wenn sie jedes native Tool pro Lauf deaktivieren kann, verwenden Sie "selectable" mit dem
oben beschriebenen resolveExecutionArgs-Vertrag.
Backend auswählen
Benutzer wählen ein eigenständiges Backend über dessen Modellreferenz-Präfix aus. Ein Backend, das ein kanonischesmodelProvider deklariert, kann stattdessen über das
agentRuntime.id dieses Provider-Modells ausgewählt werden. Die Adaptermechanik verbleibt im Plugin:
PATH des Gateway-Dienstes verfügbar ist; Bereitstellungen, die einen
anderen Pfad oder eine andere Argumentliste benötigen, sollten die Plugin-Registrierung ändern oder umschließen.
Verifizierung
Fügen Sie für gebündelte Plugins einen fokussierten Test für den Builder und die Einrichtungsregistrierung hinzu und führen Sie anschließend die gezielte Testspur des Plugins aus:Checkliste
package.json enthält openclaw.extensions und erstellte Laufzeiteinträge für veröffentlichte Paketeopenclaw.plugin.json deklariert cliBackends und bewusst gewählte activation.onStartupsetup.cliBackends ist vorhanden, wenn Einrichtung oder Modellerkennung das Backend im kalten Zustand erkennen sollenapi.registerCliBackend(...) verwendet dieselbe Backend-ID wie das ManifestDas Backend-Modellpräfix oder das modellbezogene
agentRuntime.id wählt die Registrierung ausEinstellungen für Sitzung, System-Prompt, Bilder und Ausgabeparser entsprechen dem tatsächlichen CLI-Vertrag
Gezielte Tests und mindestens ein Live-CLI-Smoke-Test weisen den Backend-Pfad nach
Verwandte Themen
- CLI-Backends – Laufzeitauswahl und Verhalten
- Plugins erstellen – Grundlagen zu Paket und Manifest
- Überblick über das Plugin SDK – Referenz zur Registrierungs-API
- Plugin-Manifest –
cliBackendsund Einrichtungsdeskriptoren - Agent-Harness – vollständige externe Agentenlaufzeiten