Backend CLI (runtime di fallback)
OpenClaw può eseguire CLI AI locali come fallback solo testo quando i provider API non sono disponibili, soggetti a rate limit o temporaneamente malfunzionanti. Questo comportamento è intenzionalmente conservativo:- Gli strumenti OpenClaw non vengono iniettati direttamente, ma i backend con
bundleMcp: truepossono ricevere gli strumenti del gateway tramite un bridge MCP loopback. - Streaming JSONL per le CLI che lo supportano.
- Le sessioni sono supportate (quindi i turni successivi restano coerenti).
- Le immagini possono essere passate se la CLI accetta percorsi di immagini.
Guida rapida per principianti
Puoi usare Codex CLI senza alcuna configurazione (il plugin OpenAI incluso registra un backend predefinito):PATH è minimale, aggiungi solo il
percorso del comando:
agents.defaults.cliBackends.
Usarlo come fallback
Aggiungi un backend CLI al tuo elenco di fallback in modo che venga eseguito solo quando i modelli primari falliscono:- Se usi
agents.defaults.models(allowlist), devi includere anche lì i modelli del tuo backend CLI. - Se il provider primario fallisce (autenticazione, rate limit, timeout), OpenClaw proverà poi il backend CLI.
Panoramica della configurazione
Tutti i backend CLI si trovano sotto:codex-cli, my-cli).
Il provider id diventa la parte sinistra del tuo model ref:
Esempio di configurazione
Come funziona
- Seleziona un backend in base al prefisso del provider (
codex-cli/...). - Costruisce un system prompt usando lo stesso prompt OpenClaw + contesto workspace.
- Esegue la CLI con un id di sessione (se supportato) in modo che la cronologia resti coerente.
- Analizza l’output (JSON o testo semplice) e restituisce il testo finale.
- Mantiene gli id di sessione per backend, così i turni successivi riutilizzano la stessa sessione CLI.
Il backend incluso Anthropic
claude-cli è di nuovo supportato. Lo staff Anthropic
ci ha detto che l’uso di Claude CLI in stile OpenClaw è di nuovo consentito, quindi OpenClaw tratta
l’uso di claude -p come autorizzato per questa integrazione, a meno che Anthropic non pubblichi
una nuova policy.codex-cli passa il system prompt di OpenClaw tramite
l’override di configurazione model_instructions_file di Codex (-c model_instructions_file="..."). Codex non espone un flag in stile Claude
--append-system-prompt, quindi OpenClaw scrive il prompt assemblato in un
file temporaneo per ogni nuova sessione Codex CLI.
Il backend incluso Anthropic claude-cli riceve lo snapshot delle Skills di OpenClaw
in due modi: il catalogo compatto delle Skills OpenClaw nel system prompt aggiunto e
un plugin Claude Code temporaneo passato con --plugin-dir. Il plugin contiene
solo le Skills idonee per quell’agente/sessione, quindi il resolver nativo delle skill di Claude Code
vede lo stesso insieme filtrato che OpenClaw altrimenti pubblicizzerebbe nel
prompt. Gli override Skill env/API key vengono comunque applicati da OpenClaw all’ambiente del processo figlio per l’esecuzione.
Sessioni
- Se la CLI supporta le sessioni, imposta
sessionArg(ad esempio--session-id) osessionArgs(segnaposto{sessionId}) quando l’ID deve essere inserito in più flag. - Se la CLI usa un sottocomando di ripresa con flag diversi, imposta
resumeArgs(sostituisceargsdurante la ripresa) e opzionalmenteresumeOutput(per riprese non JSON). sessionMode:always: invia sempre un id di sessione (nuovo UUID se non ne è memorizzato nessuno).existing: invia un id di sessione solo se ne è stato memorizzato uno in precedenza.none: non inviare mai un id di sessione.
serialize: truemantiene ordinate le esecuzioni sulla stessa corsia.- La maggior parte delle CLI serializza su una corsia di provider.
- OpenClaw interrompe il riutilizzo della sessione CLI memorizzata quando cambia lo stato di autenticazione del backend, inclusi nuovo login, rotazione del token o credenziale del profilo di autenticazione modificata.
Immagini (pass-through)
Se la tua CLI accetta percorsi di immagini, impostaimageArg:
imageArg è impostato, tali
percorsi vengono passati come argomenti della CLI. Se imageArg manca, OpenClaw aggiunge
i percorsi dei file al prompt (path injection), il che è sufficiente per le CLI che caricano automaticamente
i file locali a partire da semplici percorsi.
Input / output
output: "json"(predefinito) prova ad analizzare JSON ed estrarre testo + id sessione.- Per l’output JSON di Gemini CLI, OpenClaw legge il testo della risposta da
responsee l’utilizzo dastatsquandousageè assente o vuoto. output: "jsonl"analizza stream JSONL (ad esempio Codex CLI--json) ed estrae il messaggio finale dell’agente più gli identificatori di sessione quando presenti.output: "text"tratta stdout come risposta finale.
input: "arg"(predefinito) passa il prompt come ultimo argomento della CLI.input: "stdin"invia il prompt tramite stdin.- Se il prompt è molto lungo e
maxPromptArgCharsè impostato, viene usato stdin.
Predefiniti (plugin-owned)
Il plugin OpenAI incluso registra anche un valore predefinito percodex-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 nel PATH (brew install gemini-cli oppure
npm install -g @google/gemini-cli).
Note sul JSON di Gemini CLI:
- Il testo della risposta viene letto dal campo JSON
response. - L’utilizzo usa
statscome fallback quandousageè assente o vuoto. stats.cachedviene normalizzato in OpenClawcacheRead.- Se
stats.inputmanca, OpenClaw ricava i token di input dastats.input_tokens - stats.cached.
command assoluto).
Predefiniti di proprietà del plugin
I valori predefiniti del backend CLI ora fanno parte della superficie del plugin:- I plugin li registrano con
api.registerCliBackend(...). - L’
iddel backend diventa il prefisso provider nei model ref. - La configurazione utente in
agents.defaults.cliBackends.<id>continua a sovrascrivere il valore predefinito del plugin. - La pulizia della configurazione specifica del backend resta di proprietà del plugin tramite l’hook
facoltativo
normalizeConfig.
input riscrive il system prompt e il prompt utente passati alla CLI. output
riscrive i delta in streaming dell’assistente e il testo finale analizzato prima che OpenClaw gestisca
i propri marcatori di controllo e la consegna sul canale.
Per le CLI che emettono JSONL compatibile con Claude Code stream-json, imposta
jsonlDialect: "claude-stream-json" nella configurazione di quel backend.
Overlay MCP inclusi
I backend CLI non ricevono direttamente chiamate agli strumenti OpenClaw, ma un backend può scegliere di usare un overlay di configurazione MCP generato conbundleMcp: true.
Comportamento incluso attuale:
claude-cli: file di configurazione MCP strict generatocodex-cli: override di configurazione inline permcp_serversgoogle-gemini-cli: file di impostazioni di sistema Gemini generato
- avvia un server MCP HTTP loopback che espone gli strumenti del gateway al processo CLI
- autentica il bridge con un token per sessione (
OPENCLAW_MCP_TOKEN) - limita l’accesso agli strumenti al contesto corrente di sessione, account e canale
- carica i server bundle-MCP abilitati per il workspace corrente
- li unisce con qualsiasi configurazione/impostazione MCP esistente del backend
- riscrive la configurazione di avvio usando la modalità di integrazione di proprietà del backend dall’estensione proprietaria
Limitazioni
- Nessuna chiamata diretta agli strumenti OpenClaw. OpenClaw non inietta chiamate agli strumenti nel
protocollo del backend CLI. I backend vedono gli strumenti del gateway solo quando scelgono
bundleMcp: true. - Lo streaming è specifico del backend. Alcuni backend trasmettono JSONL in streaming; altri accumulano fino all’uscita.
- Gli output strutturati dipendono dal formato JSON della CLI.
- Le sessioni di Codex CLI vengono riprese tramite output testuale (nessun JSONL), che è meno
strutturato rispetto all’esecuzione iniziale
--json. Le sessioni OpenClaw continuano comunque a funzionare normalmente.
Risoluzione dei problemi
- CLI non trovata: imposta
commandsu un percorso completo. - Nome modello errato: usa
modelAliasesper mappareprovider/model→ modello CLI. - Nessuna continuità di sessione: assicurati che
sessionArgsia impostato e chesessionModenon sianone(Codex CLI attualmente non può riprendere con output JSON). - Immagini ignorate: imposta
imageArg(e verifica che la CLI supporti i percorsi dei file).