CLI-Backends (Fallback-Laufzeit)
OpenClaw kann lokale AI-CLIs als reinen Text-Fallback ausführen, wenn API-Provider ausfallen, Rate-Limits erreichen oder sich vorübergehend fehlerhaft verhalten. Das ist bewusst konservativ:- OpenClaw-Tools werden nicht direkt injiziert, aber Backends mit
bundleMcp: true(der Standard von Claude CLI) können Gateway-Tools über eine loopback-MCP-Bridge erhalten. - JSONL-Streaming (Claude CLI verwendet
--output-format stream-jsonmit--include-partial-messages; Prompts werden über stdin gesendet). - Sitzungen werden unterstützt (damit Folge-Turns konsistent bleiben).
- Bilder können durchgereicht werden, wenn die CLI Bildpfade akzeptiert.
Einsteigerfreundlicher Schnellstart
Sie können Claude CLI ohne Konfiguration verwenden (das gebündelte Anthropic-Plugin registriert ein Standard-Backend):agents.defaults.cliBackends verweist.
Als Fallback verwenden
Fügen Sie ein CLI-Backend zu Ihrer Fallback-Liste hinzu, damit es nur läuft, wenn primäre Modelle ausfallen:- Wenn Sie
agents.defaults.models(Allowlist) verwenden, müssen Sieclaude-cli/...einschließen. - Wenn der primäre Provider ausfällt (Auth, Rate-Limits, Timeouts), versucht OpenClaw als Nächstes das CLI-Backend.
- Das gebündelte Claude-CLI-Backend akzeptiert weiterhin kürzere Aliasse wie
claude-cli/opus,claude-cli/opus-4.6oderclaude-cli/sonnet, aber Dokumentation und Konfigurationsbeispiele verwenden die kanonischenclaude-cli/claude-*-Referenzen.
Konfigurationsüberblick
Alle CLI-Backends befinden sich unter:claude-cli, my-cli).
Die Provider-ID wird zur linken Seite Ihrer Modell-Referenz:
Beispielkonfiguration
So funktioniert es
- Wählt ein Backend aus basierend auf dem Provider-Präfix (
claude-cli/...). - Erstellt einen System-Prompt mit demselben OpenClaw-Prompt + Workspace-Kontext.
- Führt die CLI mit einer Sitzungs-ID aus (falls unterstützt), damit der Verlauf konsistent bleibt.
- Parst die Ausgabe (JSON oder Klartext) und gibt den finalen Text zurück.
- Persistiert Sitzungs-IDs pro Backend, sodass Folgeanfragen dieselbe CLI-Sitzung wiederverwenden.
Sitzungen
- Wenn die CLI Sitzungen unterstützt, setzen Sie
sessionArg(z. B.--session-id) odersessionArgs(Platzhalter{sessionId}), wenn die ID in mehrere Flags eingesetzt werden muss. - Wenn die CLI einen Resume-Unterbefehl mit anderen Flags verwendet, setzen Sie
resumeArgs(ersetztargsbeim Fortsetzen) und optionalresumeOutput(für nicht-JSON-Resumes). sessionMode:always: immer eine Sitzungs-ID senden (neue UUID, wenn keine gespeichert ist).existing: nur eine Sitzungs-ID senden, wenn zuvor eine gespeichert wurde.none: niemals eine Sitzungs-ID senden.
serialize: truehält Läufe derselben Lane in Reihenfolge.- Die meisten CLIs serialisieren auf einer Provider-Lane.
claude-cliist enger gefasst: Fortgesetzte Läufe serialisieren pro Claude-Sitzungs-ID, und neue Läufe serialisieren pro Workspace-Pfad. Unabhängige Workspaces können parallel laufen.- OpenClaw verwirft die Wiederverwendung gespeicherter CLI-Sitzungen, wenn sich der Auth-Status des Backends ändert, einschließlich Relogin, Token-Rotation oder geänderter Anmeldedaten eines Auth-Profils.
Bilder (Durchreichen)
Wenn Ihre CLI Bildpfade akzeptiert, setzen SieimageArg:
imageArg gesetzt ist, werden diese
Pfade als CLI-Argumente übergeben. Wenn imageArg fehlt, hängt OpenClaw die
Dateipfade an den Prompt an (Pfad-Injektion), was für CLIs ausreicht, die lokale
Dateien aus einfachen Pfaden automatisch laden (Verhalten von Claude CLI).
Eingaben / Ausgaben
output: "json"(Standard) versucht, JSON zu parsen und Text + Sitzungs-ID zu extrahieren.- Für Gemini-CLI-JSON-Ausgabe liest OpenClaw Antworttext aus
responseund Nutzung ausstats, wennusagefehlt oder leer ist. output: "jsonl"parst JSONL-Streams (zum Beispiel Claude CLIstream-jsonund Codex CLI--json) und extrahiert die finale Agent-Nachricht plus Sitzungs- Kennungen, wenn vorhanden.output: "text"behandelt stdout als finale Antwort.
input: "arg"(Standard) übergibt den Prompt als letztes CLI-Argument.input: "stdin"sendet den Prompt über stdin.- Wenn der Prompt sehr lang ist und
maxPromptArgCharsgesetzt ist, wird stdin verwendet.
Standardwerte (Plugin-besessen)
Das gebündelte Anthropic-Plugin registriert einen Standardwert fürclaude-cli:
command: "claude"args: ["-p", "--output-format", "stream-json", "--include-partial-messages", "--verbose", "--permission-mode", "bypassPermissions"]resumeArgs: ["-p", "--output-format", "stream-json", "--include-partial-messages", "--verbose", "--permission-mode", "bypassPermissions", "--resume", "{sessionId}"]output: "jsonl"input: "stdin"modelArg: "--model"systemPromptArg: "--append-system-prompt"sessionArg: "--session-id"systemPromptWhen: "first"sessionMode: "always"
codex-cli:
command: "codex"args: ["exec","--json","--color","never","--sandbox","workspace-write","--skip-git-repo-check"]resumeArgs: ["exec","resume","{sessionId}","--color","never","--sandbox","workspace-write","--skip-git-repo-check"]output: "jsonl"resumeOutput: "text"modelArg: "--model"imageArg: "--image"sessionMode: "existing"
google-gemini-cli:
command: "gemini"args: ["--prompt", "--output-format", "json"]resumeArgs: ["--resume", "{sessionId}", "--prompt", "--output-format", "json"]modelArg: "--model"sessionMode: "existing"sessionIdFields: ["session_id", "sessionId"]
gemini auf PATH verfügbar sein (brew install gemini-cli oder
npm install -g @google/gemini-cli).
Hinweise zu Gemini-CLI-JSON:
- Antworttext wird aus dem JSON-Feld
responsegelesen. - Die Nutzung fällt auf
statszurück, wennusagefehlt oder leer ist. stats.cachedwird in OpenClawcacheReadnormalisiert.- Wenn
stats.inputfehlt, leitet OpenClaw Eingabe-Tokens ausstats.input_tokens - stats.cachedab.
command-Pfad).
Plugin-besessene Standardwerte
Standardwerte für CLI-Backends sind jetzt Teil der Plugin-Oberfläche:- Plugins registrieren sie mit
api.registerCliBackend(...). - Die Backend-
idwird zum Provider-Präfix in Modell-Referenzen. - Benutzerkonfiguration in
agents.defaults.cliBackends.<id>überschreibt weiterhin den Plugin-Standardwert. - Backend-spezifische Konfigurationsbereinigung bleibt über den optionalen
Hook
normalizeConfigim Besitz des Plugins.
Bundle-MCP-Overlays
CLI-Backends erhalten keine OpenClaw-Tool-Aufrufe direkt, aber ein Backend kann sich mitbundleMcp: true für ein generiertes MCP-Konfigurations-Overlay anmelden.
Aktuelles gebündeltes Verhalten:
claude-cli:bundleMcp: true(Standard)codex-cli: kein Bundle-MCP-Overlaygoogle-gemini-cli: kein Bundle-MCP-Overlay
- startet einen loopback-HTTP-MCP-Server, der Gateway-Tools für den CLI-Prozess bereitstellt
- authentifiziert die Bridge mit einem Token pro Sitzung (
OPENCLAW_MCP_TOKEN) - begrenzt den Tool-Zugriff auf die aktuelle Sitzung, das aktuelle Konto und den aktuellen Channel-Kontext
- lädt aktivierte Bundle-MCP-Server für den aktuellen Workspace
- führt sie mit einem vorhandenen Backend-
--mcp-configzusammen - schreibt die CLI-Argumente so um, dass
--strict-mcp-config --mcp-config <generated-file>übergeben wird
--strict-mcp-config verhindert, dass Claude CLI umgebende
MCP-Server auf Benutzerebene oder global erbt. Wenn keine MCP-Server aktiviert sind, injiziert OpenClaw trotzdem
eine strikte leere Konfiguration, damit Hintergrundläufe isoliert bleiben.
Einschränkungen
- Keine direkten OpenClaw-Tool-Aufrufe. OpenClaw injiziert keine Tool-Aufrufe in
das CLI-Backend-Protokoll. Backends mit
bundleMcp: true(der Standard von Claude CLI) erhalten Gateway-Tools jedoch über eine loopback-MCP-Bridge, sodass Claude CLI OpenClaw-Tools über seine native MCP-Unterstützung aufrufen kann. - Streaming ist backend-spezifisch. Claude CLI verwendet JSONL-Streaming
(
stream-jsonmit--include-partial-messages); andere CLI-Backends können weiterhin bis zum Beenden gepuffert sein. - Strukturierte Ausgaben hängen vom JSON-Format der CLI ab.
- Codex-CLI-Sitzungen werden per Textausgabe fortgesetzt (kein JSONL), was weniger
strukturiert ist als der initiale
--json-Lauf. OpenClaw-Sitzungen funktionieren dennoch normal.
Fehlerbehebung
- CLI nicht gefunden: Setzen Sie
commandauf einen vollständigen Pfad. - Falscher Modellname: Verwenden Sie
modelAliases, umprovider/model→ CLI-Modell zuzuordnen. - Keine Sitzungs-Kontinuität: Stellen Sie sicher, dass
sessionArggesetzt ist undsessionModenichtnoneist (Codex CLI kann derzeit nicht mit JSON-Ausgabe fortsetzen). - Bilder werden ignoriert: Setzen Sie
imageArg(und prüfen Sie, ob die CLI Dateipfade unterstützt).