Zum Hauptinhalt springen

CLI-Backends (Fallback-Runtime)

OpenClaw kann lokale KI-CLIs als rein textbasierten Fallback ausführen, wenn API-Anbieter ausfallen, rate-limitiert sind oder sich vorübergehend fehlerhaft verhalten. Dies ist bewusst konservativ gehalten:
  • Werkzeuge sind deaktiviert (keine Tool-Aufrufe).
  • Text rein → Text raus (zuverlässig).
  • Sitzungen werden unterstützt (damit Folgeeingaben kohärent bleiben).
  • Bilder können durchgereicht werden, wenn die CLI Bildpfade akzeptiert.
Dies ist als Sicherheitsnetz und nicht als primärer Pfad konzipiert. Verwenden Sie es, wenn Sie „funktioniert immer“-Textantworten wünschen, ohne sich auf externe APIs zu verlassen.

Einsteigerfreundlicher Schnellstart

Sie können Claude Code CLI ohne jegliche Konfiguration verwenden (OpenClaw liefert eine integrierte Standardkonfiguration):
openclaw agent --message "hi" --model claude-cli/opus-4.6
Codex CLI funktioniert ebenfalls sofort:
openclaw agent --message "hi" --model codex-cli/gpt-5.3-codex
Wenn Ihr Gateway unter launchd/systemd läuft und PATH minimal ist, fügen Sie lediglich den Befehlspfad hinzu:
{
  agents: {
    defaults: {
      cliBackends: {
        "claude-cli": {
          command: "/opt/homebrew/bin/claude",
        },
      },
    },
  },
}
Das war’s. Keine Schlüssel, keine zusätzliche Authentifizierungskonfiguration über die CLI selbst hinaus erforderlich.

Verwendung als Fallback

Fügen Sie einen CLI-Backend zu Ihrer Fallback-Liste hinzu, sodass er nur ausgeführt wird, wenn primäre Modelle fehlschlagen:
{
  agents: {
    defaults: {
      model: {
        primary: "anthropic/claude-opus-4-6",
        fallbacks: ["claude-cli/opus-4.6", "claude-cli/opus-4.5"],
      },
      models: {
        "anthropic/claude-opus-4-6": { alias: "Opus" },
        "claude-cli/opus-4.6": {},
        "claude-cli/opus-4.5": {},
      },
    },
  },
}
Hinweise:
  • Wenn Sie agents.defaults.models (Allowlist) verwenden, müssen Sie claude-cli/... einschließen.
  • Wenn der primäre Anbieter fehlschlägt (Auth, Rate-Limits, Timeouts), versucht OpenClaw als Nächstes den CLI-Backend.

Konfigurationsübersicht

Alle CLI-Backends befinden sich unter:
agents.defaults.cliBackends
Jeder Eintrag ist durch eine Provider-ID gekennzeichnet (z. B. claude-cli, my-cli). Die Provider-ID wird zur linken Seite Ihrer Modell-Referenz:
<provider>/<model>

Beispielkonfiguration

{
  agents: {
    defaults: {
      cliBackends: {
        "claude-cli": {
          command: "/opt/homebrew/bin/claude",
        },
        "my-cli": {
          command: "my-cli",
          args: ["--json"],
          output: "json",
          input: "arg",
          modelArg: "--model",
          modelAliases: {
            "claude-opus-4-6": "opus",
            "claude-opus-4-5": "opus",
            "claude-sonnet-4-5": "sonnet",
          },
          sessionArg: "--session",
          sessionMode: "existing",
          sessionIdFields: ["session_id", "conversation_id"],
          systemPromptArg: "--system",
          systemPromptWhen: "first",
          imageArg: "--image",
          imageMode: "repeat",
          serialize: true,
        },
      },
    },
  },
}

Wie es funktioniert

  1. Wählt ein Backend aus basierend auf dem Provider-Präfix (claude-cli/...).
  2. Erstellt einen System-Prompt unter Verwendung desselben OpenClaw-Prompts + Workspace-Kontext.
  3. Führt die CLI aus mit einer Sitzungs-ID (falls unterstützt), sodass der Verlauf konsistent bleibt.
  4. Parst die Ausgabe (JSON oder Klartext) und gibt den finalen Text zurück.
  5. Persistiert Sitzungs-IDs pro Backend, sodass Folgeeingaben dieselbe CLI-Sitzung wiederverwenden.

Sitzungen

  • Wenn die CLI Sitzungen unterstützt, setzen Sie sessionArg (z. B. --session-id) oder sessionArgs (Platzhalter {sessionId}), wenn die ID in mehrere Flags eingefügt werden muss.
  • Wenn die CLI einen Resume-Subcommand mit unterschiedlichen Flags verwendet, setzen Sie resumeArgs (ersetzt args beim Fortsetzen) und optional resumeOutput (für Nicht-JSON-Resumes).
  • sessionMode:
    • always: immer eine Sitzungs-ID senden (neue UUID, falls keine gespeichert ist).
    • existing: nur eine Sitzungs-ID senden, wenn zuvor eine gespeichert war.
    • none: niemals eine Sitzungs-ID senden.

Bilder (Durchreichen)

Wenn Ihre CLI Bildpfade akzeptiert, setzen Sie imageArg:
imageArg: "--image",
imageMode: "repeat"
OpenClaw schreibt Base64-Bilder in temporäre Dateien. Wenn imageArg gesetzt ist, werden diese Pfade als CLI-Argumente übergeben. Wenn imageArg fehlt, hängt OpenClaw die Dateipfade an den Prompt an (Path-Injection), was für CLIs ausreicht, die lokale Dateien aus reinen Pfadangaben automatisch laden (Verhalten von Claude Code CLI).

Eingaben / Ausgaben

  • output: "json" (Standard) versucht, JSON zu parsen und Text + Sitzungs-ID zu extrahieren.
  • output: "jsonl" parst JSONL-Streams (Codex CLI --json) und extrahiert die letzte Agent-Nachricht sowie thread_id, sofern vorhanden.
  • output: "text" behandelt stdout als finale Antwort.
Eingabemodi:
  • input: "arg" (Standard) übergibt den Prompt als letztes CLI-Argument.
  • input: "stdin" sendet den Prompt über stdin.
  • Wenn der Prompt sehr lang ist und maxPromptArgChars gesetzt ist, wird stdin verwendet.

Standardwerte (integriert)

OpenClaw liefert einen Standard für claude-cli:
  • command: "claude"
  • args: ["-p", "--output-format", "json", "--dangerously-skip-permissions"]
  • resumeArgs: ["-p", "--output-format", "json", "--dangerously-skip-permissions", "--resume", "{sessionId}"]
  • modelArg: "--model"
  • systemPromptArg: "--append-system-prompt"
  • sessionArg: "--session-id"
  • systemPromptWhen: "first"
  • sessionMode: "always"
OpenClaw liefert außerdem einen Standard für codex-cli:
  • command: "codex"
  • args: ["exec","--json","--color","never","--sandbox","read-only","--skip-git-repo-check"]
  • resumeArgs: ["exec","resume","{sessionId}","--color","never","--sandbox","read-only","--skip-git-repo-check"]
  • output: "jsonl"
  • resumeOutput: "text"
  • modelArg: "--model"
  • imageArg: "--image"
  • sessionMode: "existing"
Überschreiben Sie dies nur bei Bedarf (häufig: absoluter command-Pfad).

Einschränkungen

  • Keine OpenClaw-Werkzeuge (der CLI-Backend erhält niemals Tool-Aufrufe). Einige CLIs können dennoch ihre eigenen Agent-Werkzeuge ausführen.
  • Kein Streaming (CLI-Ausgabe wird gesammelt und dann zurückgegeben).
  • Strukturierte Ausgaben hängen vom JSON-Format der CLI ab.
  • Codex-CLI-Sitzungen werden über Textausgabe fortgesetzt (kein JSONL), was weniger strukturiert ist als der initiale --json-Lauf. OpenClaw-Sitzungen funktionieren weiterhin normal.

Fehlerbehebung

  • CLI nicht gefunden: setzen Sie command auf einen vollständigen Pfad.
  • Falscher Modellname: verwenden Sie modelAliases, um provider/model → CLI-Modell zuzuordnen.
  • Keine Sitzungs-Kontinuität: stellen Sie sicher, dass sessionArg gesetzt ist und sessionMode nicht none ist (Codex CLI kann derzeit nicht mit JSON-Ausgabe fortsetzen).
  • Bilder werden ignoriert: setzen Sie imageArg (und verifizieren Sie, dass die CLI Dateipfade unterstützt).