Backendy CLI (zapasowe środowisko uruchomieniowe)
OpenClaw może uruchamiać lokalne CLI AI jako zapasowe rozwiązanie tylko tekstowe, gdy dostawcy API są niedostępni, objęci limitami szybkości lub tymczasowo działają nieprawidłowo. To podejście jest celowo zachowawcze:- Narzędzia OpenClaw nie są wstrzykiwane bezpośrednio, ale backendy z
bundleMcp: truemogą otrzymywać narzędzia gateway przez mostek loopback MCP. - Strumieniowanie JSONL dla CLI, które je obsługują.
- Sesje są obsługiwane (dzięki czemu kolejne tury pozostają spójne).
- Obrazy mogą być przekazywane dalej, jeśli CLI akceptuje ścieżki do obrazów.
Szybki start dla początkujących
Możesz używać Codex CLI bez żadnej konfiguracji (dołączona wtyczka OpenAI rejestruje domyślny backend):PATH jest minimalne, dodaj tylko
ścieżkę polecenia:
agents.defaults.cliBackends.
Używanie jako rozwiązania zapasowego
Dodaj backend CLI do listy rozwiązań zapasowych, aby był uruchamiany tylko wtedy, gdy modele główne zawiodą:- Jeśli używasz
agents.defaults.models(lista dozwolonych), musisz uwzględnić tam również modele backendu CLI. - Jeśli główny dostawca zawiedzie (uwierzytelnianie, limity szybkości, limity czasu), OpenClaw spróbuje następnie użyć backendu CLI.
Przegląd konfiguracji
Wszystkie backendy CLI znajdują się pod:codex-cli, my-cli).
Identyfikator dostawcy staje się lewą stroną referencji modelu:
Przykładowa konfiguracja
Jak to działa
- Wybiera backend na podstawie prefiksu dostawcy (
codex-cli/...). - Buduje prompt systemowy przy użyciu tego samego promptu OpenClaw i kontekstu obszaru roboczego.
- Uruchamia CLI z identyfikatorem sesji (jeśli obsługiwany), aby historia pozostała spójna.
- Parsuje dane wyjściowe (JSON lub zwykły tekst) i zwraca końcowy tekst.
- Utrwala identyfikatory sesji dla każdego backendu, aby kolejne tury ponownie używały tej samej sesji CLI.
Dołączony backend Anthropic
claude-cli jest ponownie obsługiwany. Pracownicy Anthropic
powiedzieli nam, że użycie Claude CLI w stylu OpenClaw jest znowu dozwolone, więc OpenClaw traktuje
użycie claude -p jako zatwierdzone dla tej integracji, chyba że Anthropic opublikuje
nową politykę.codex-cli przekazuje prompt systemowy OpenClaw przez
nadpisanie konfiguracji model_instructions_file Codex (-c model_instructions_file="..."). Codex nie udostępnia flagi w stylu Claude
--append-system-prompt, więc OpenClaw zapisuje złożony prompt do
pliku tymczasowego dla każdej nowej sesji Codex CLI.
Dołączony backend Anthropic claude-cli otrzymuje migawkę Skills OpenClaw
na dwa sposoby: kompaktowy katalog Skills OpenClaw w dołączonym prompcie systemowym oraz
tymczasową wtyczkę Claude Code przekazaną przez --plugin-dir. Wtyczka zawiera
tylko kwalifikujące się Skills dla danego agenta/sesji, dzięki czemu natywny
resolver Skills Claude Code widzi ten sam przefiltrowany zestaw, który OpenClaw w przeciwnym razie reklamowałby
w prompcie. Nadpisania zmiennych środowiskowych/API key dla Skills są nadal stosowane przez OpenClaw do
środowiska procesu potomnego dla tego uruchomienia.
Sesje
- Jeśli CLI obsługuje sesje, ustaw
sessionArg(np.--session-id) lubsessionArgs(placeholder{sessionId}), gdy identyfikator musi zostać wstawiony do wielu flag. - Jeśli CLI używa podpolecenia wznawiania z innymi flagami, ustaw
resumeArgs(zastępujeargsprzy wznawianiu) i opcjonalnieresumeOutput(dla wznowień niebędących JSON). sessionMode:always: zawsze wysyłaj identyfikator sesji (nowy UUID, jeśli żaden nie jest zapisany).existing: wysyłaj identyfikator sesji tylko wtedy, gdy był wcześniej zapisany.none: nigdy nie wysyłaj identyfikatora sesji.
serialize: trueutrzymuje kolejność uruchomień na tej samej ścieżce.- Większość CLI serializuje na jednej ścieżce dostawcy.
- OpenClaw porzuca ponowne użycie zapisanej sesji CLI, gdy stan uwierzytelniania backendu się zmienia, w tym przy ponownym logowaniu, rotacji tokena lub zmianie poświadczenia profilu uwierzytelniania.
Obrazy (przekazywanie dalej)
Jeśli twoje CLI akceptuje ścieżki do obrazów, ustawimageArg:
imageArg jest ustawione, te
ścieżki są przekazywane jako argumenty CLI. Jeśli imageArg nie jest ustawione, OpenClaw dołącza
ścieżki plików do promptu (wstrzyknięcie ścieżki), co wystarcza dla CLI, które automatycznie
ładują pliki lokalne ze zwykłych ścieżek.
Wejścia / wyjścia
output: "json"(domyślnie) próbuje sparsować JSON i wyodrębnić tekst + identyfikator sesji.- Dla wyjścia JSON Gemini CLI OpenClaw odczytuje tekst odpowiedzi z
response, a użycie zstats, gdyusagenie istnieje lub jest puste. output: "jsonl"parsuje strumienie JSONL (na przykład Codex CLI--json) i wyodrębnia końcową wiadomość agenta oraz identyfikatory sesji, jeśli są obecne.output: "text"traktuje stdout jako końcową odpowiedź.
input: "arg"(domyślnie) przekazuje prompt jako ostatni argument CLI.input: "stdin"wysyła prompt przez stdin.- Jeśli prompt jest bardzo długi i ustawiono
maxPromptArgChars, używane jest stdin.
Wartości domyślne (własność wtyczki)
Dołączona wtyczka OpenAI rejestruje również wartość domyślną dlacodex-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: ["--output-format", "json", "--prompt", "{prompt}"]resumeArgs: ["--resume", "{sessionId}", "--output-format", "json", "--prompt", "{prompt}"]imageArg: "@"imagePathScope: "workspace"modelArg: "--model"sessionMode: "existing"sessionIdFields: ["session_id", "sessionId"]
gemini w PATH (brew install gemini-cli lub
npm install -g @google/gemini-cli).
Uwagi dotyczące JSON Gemini CLI:
- Tekst odpowiedzi jest odczytywany z pola JSON
response. - Użycie przechodzi awaryjnie na
stats, gdyusagenie istnieje lub jest puste. stats.cachedjest normalizowane do OpenClawcacheRead.- Jeśli brakuje
stats.input, OpenClaw wyprowadza tokeny wejściowe zstats.input_tokens - stats.cached.
command).
Domyślne ustawienia będące własnością wtyczki
Domyślne ustawienia backendu CLI są teraz częścią powierzchni wtyczki:- Wtyczki rejestrują je przez
api.registerCliBackend(...). - Backend
idstaje się prefiksem dostawcy w referencjach modeli. - Konfiguracja użytkownika w
agents.defaults.cliBackends.<id>nadal nadpisuje domyślne ustawienie wtyczki. - Czyszczenie konfiguracji specyficznej dla backendu pozostaje własnością wtyczki dzięki opcjonalnemu
hookowi
normalizeConfig.
input przepisuje prompt systemowy i prompt użytkownika przekazywane do CLI. output
przepisuje strumieniowane delty asystenta i sparsowany tekst końcowy, zanim OpenClaw obsłuży
własne znaczniki sterujące i dostarczenie do kanału.
Dla CLI, które emitują JSONL zgodny z Claude Code stream-json, ustaw
jsonlDialect: "claude-stream-json" w konfiguracji tego backendu.
Nakładki MCP pakietu
Backendy CLI nie otrzymują bezpośrednio wywołań narzędzi OpenClaw, ale backend może włączyć generowaną nakładkę konfiguracji MCP za pomocąbundleMcp: true.
Obecne zachowanie dołączonych backendów:
claude-cli: generowany ścisły plik konfiguracji MCPcodex-cli: wbudowane nadpisania konfiguracji dlamcp_serversgoogle-gemini-cli: generowany plik ustawień systemowych Gemini
- uruchamia loopback HTTP MCP server, który udostępnia narzędzia gateway procesowi CLI
- uwierzytelnia mostek przy użyciu tokena na sesję (
OPENCLAW_MCP_TOKEN) - ogranicza dostęp do narzędzi do bieżącej sesji, konta i kontekstu kanału
- ładuje włączone serwery bundle-MCP dla bieżącego obszaru roboczego
- scala je z dowolnym istniejącym kształtem konfiguracji/ustawień backendu MCP
- przepisuje konfigurację uruchomienia przy użyciu trybu integracji będącego własnością backendu z rozszerzenia będącego jego właścicielem
Ograniczenia
- Brak bezpośrednich wywołań narzędzi OpenClaw. OpenClaw nie wstrzykuje wywołań narzędzi do
protokołu backendu CLI. Backendy widzą narzędzia gateway tylko wtedy, gdy włączą
bundleMcp: true. - Strumieniowanie jest zależne od backendu. Niektóre backendy strumieniują JSONL; inne buforują do zakończenia działania.
- Ustrukturyzowane wyjścia zależą od formatu JSON danego CLI.
- Sesje Codex CLI są wznawiane przez wyjście tekstowe (bez JSONL), co jest mniej
ustrukturyzowane niż początkowe uruchomienie
--json. Sesje OpenClaw nadal działają normalnie.
Rozwiązywanie problemów
- Nie znaleziono CLI: ustaw
commandna pełną ścieżkę. - Nieprawidłowa nazwa modelu: użyj
modelAliases, aby odwzorowaćprovider/model→ model CLI. - Brak ciągłości sesji: upewnij się, że ustawiono
sessionArg, asessionModenie ma wartościnone(Codex CLI obecnie nie może wznawiać z wyjściem JSON). - Obrazy są ignorowane: ustaw
imageArg(i sprawdź, czy CLI obsługuje ścieżki plików).