Risoluzione dei problemi del Gateway
Questa pagina è il runbook approfondito. Inizia da /help/troubleshooting se vuoi prima il flusso rapido di triage.Sequenza di comandi
Esegui prima questi, in quest’ordine:openclaw gateway statusmostraRuntime: running,Connectivity probe: oke una rigaCapability: ....openclaw doctornon segnala problemi bloccanti di configurazione/servizio.openclaw channels status --probemostra stato live del trasporto per account e, dove supportato, risultati di probe/audit comeworksoppureaudit ok.
Anthropic 429: uso extra richiesto per contesto lungo
Usa questa sezione quando log/errori includono:HTTP 429: rate_limit_error: Extra usage is required for long context requests.
- Il modello Anthropic Opus/Sonnet selezionato ha
params.context1m: true. - La credenziale Anthropic corrente non è idonea all’uso del contesto lungo.
- Le richieste falliscono solo in sessioni lunghe/esecuzioni del modello che richiedono il percorso beta 1M.
- Disabilita
context1mper quel modello per tornare alla normale finestra di contesto. - Usa una credenziale Anthropic idonea per richieste a contesto lungo, oppure passa a una chiave API Anthropic.
- Configura modelli di fallback così le esecuzioni continuano quando le richieste Anthropic a contesto lungo vengono rifiutate.
- /providers/anthropic
- /reference/token-use
- /help/faq#why-am-i-seeing-http-429-ratelimiterror-from-anthropic
Il backend locale compatibile OpenAI supera i probe diretti ma le esecuzioni dell’agente falliscono
Usa questa sezione quando:curl ... /v1/modelsfunziona- le chiamate dirette molto piccole a
/v1/chat/completionsfunzionano - le esecuzioni del modello OpenClaw falliscono solo nei normali turni dell’agente
- le chiamate dirette molto piccole riescono, ma le esecuzioni OpenClaw falliscono solo con prompt più grandi
- errori del backend relativi a
messages[].contentche si aspetta una stringa - crash del backend che compaiono solo con conteggi di token del prompt più alti o con i prompt runtime completi dell’agente
messages[...].content: invalid type: sequence, expected a string→ il backend rifiuta le parti di contenuto strutturato di Chat Completions. Correzione: impostamodels.providers.<provider>.models[].compat.requiresStringContent: true.- le richieste dirette molto piccole riescono, ma le esecuzioni dell’agente OpenClaw falliscono con crash del backend/modello
(per esempio Gemma su alcune build
inferrs) → il trasporto OpenClaw è probabilmente già corretto; il backend sta fallendo sulla forma del prompt runtime dell’agente di dimensioni maggiori. - i fallimenti diminuiscono dopo avere disabilitato gli strumenti ma non scompaiono → gli schemi degli strumenti erano parte della pressione, ma il problema restante è comunque a monte: capacità del modello/server o bug del backend.
- Imposta
compat.requiresStringContent: trueper backend Chat Completions che accettano solo stringhe. - Imposta
compat.supportsTools: falseper modelli/backend che non riescono a gestire in modo affidabile la superficie degli schemi strumenti di OpenClaw. - Riduci la pressione del prompt dove possibile: bootstrap del workspace più piccolo, cronologia della sessione più corta, modello locale più leggero o backend con supporto migliore per contesti lunghi.
- Se le richieste dirette molto piccole continuano a funzionare mentre i turni dell’agente OpenClaw continuano a crashare nel backend, trattalo come un limite del server/modello upstream e apri lì una riproduzione con la forma di payload accettata.
- /gateway/local-models
- /gateway/configuration
- /gateway/configuration-reference#openai-compatible-endpoints
Nessuna risposta
Se i canali sono attivi ma non arriva nessuna risposta, controlla routing e policy prima di riconnettere qualunque cosa.- Pairing in attesa per i mittenti DM.
- Mention gating dei gruppi (
requireMention,mentionPatterns). - Mancata corrispondenza nelle allowlist di canale/gruppo.
drop guild message (mention required→ messaggio di gruppo ignorato fino alla menzione.pairing request→ il mittente richiede approvazione.blocked/allowlist→ mittente/canale filtrato dalla policy.
Connettività della control UI della dashboard
Quando dashboard/control UI non si connette, verifica URL, modalità di autenticazione e presupposti di contesto sicuro.- URL probe corretto e URL dashboard corretto.
- Mancata corrispondenza della modalità/token di autenticazione tra client e gateway.
- Uso HTTP dove è richiesta l’identità del dispositivo.
device identity required→ contesto non sicuro o autenticazione dispositivo mancante.origin not allowed→ l’Origindel browser non è ingateway.controlUi.allowedOrigins(oppure ti stai connettendo da un’origine browser non loopback senza una allowlist esplicita).device nonce required/device nonce mismatch→ il client non sta completando il flusso di autenticazione dispositivo basato su challenge (connect.challenge+device.nonce).device signature invalid/device signature expired→ il client ha firmato il payload sbagliato (o con timestamp scaduto) per l’handshake corrente.AUTH_TOKEN_MISMATCHconcanRetryWithDeviceToken=true→ il client può fare un tentativo affidabile con token dispositivo memorizzato.- Quel nuovo tentativo con token in cache riusa l’insieme di scope in cache memorizzato con il
token del dispositivo associato. I chiamanti con
deviceTokenesplicito /scopesespliciti mantengono invece il loro insieme di scope richiesto. - Fuori da quel percorso di tentativo, la precedenza di autenticazione della connessione è
prima token/password condiviso esplicito, poi
deviceTokenesplicito, poi token dispositivo memorizzato, poi bootstrap token. - Sul percorso asincrono Tailscale Serve Control UI, i tentativi falliti per lo stesso
{scope, ip}vengono serializzati prima che il limiter registri il fallimento. Due retry concorrenti non validi dallo stesso client possono quindi mostrareretry lateral secondo tentativo invece di due semplici mismatch. too many failed authentication attempts (retry later)da un client loopback di origine browser → i fallimenti ripetuti da quello stessoOriginnormalizzato vengono temporaneamente bloccati; un’altra origine localhost usa un bucket separato.unauthorizedripetuto dopo quel tentativo → deriva tra token condiviso e token dispositivo; aggiorna la configurazione del token e riapprova/ruota il token dispositivo se necessario.gateway connect failed:→ host/porta/target url errato.
Mappa rapida dei codici di dettaglio auth
Usaerror.details.code dalla risposta connect fallita per scegliere l’azione successiva:
| Codice di dettaglio | Significato | Azione consigliata |
|---|---|---|
AUTH_TOKEN_MISSING | Il client non ha inviato un token condiviso richiesto. | Incolla/imposta il token nel client e riprova. Per i percorsi dashboard: openclaw config get gateway.auth.token quindi incollalo nelle impostazioni della Control UI. |
AUTH_TOKEN_MISMATCH | Il token condiviso non corrisponde al token auth del gateway. | Se canRetryWithDeviceToken=true, consenti un tentativo affidabile. I retry con token in cache riusano gli scope approvati memorizzati; i chiamanti con deviceToken / scopes espliciti mantengono gli scope richiesti. Se continua a fallire, esegui la checklist di recupero deriva del token. |
AUTH_DEVICE_TOKEN_MISMATCH | Il token per-dispositivo in cache è obsoleto o revocato. | Ruota/riapprova il token dispositivo usando la CLI devices, poi riconnettiti. |
PAIRING_REQUIRED | L’identità del dispositivo richiede approvazione. Controlla error.details.reason per not-paired, scope-upgrade, role-upgrade o metadata-upgrade, e usa requestId / remediationHint quando presenti. | Approva la richiesta in sospeso: openclaw devices list quindi openclaw devices approve <requestId>. Gli upgrade di scope/ruolo usano lo stesso flusso dopo aver esaminato l’accesso richiesto. |
- attenda
connect.challenge - firmi il payload vincolato alla challenge
- invii
connect.params.device.noncecon lo stesso nonce della challenge
openclaw devices rotate / revoke / remove viene negato in modo inatteso:
- le sessioni con token di dispositivo associato possono gestire solo il proprio dispositivo a meno che il
chiamante non abbia anche
operator.admin openclaw devices rotate --scope ...può richiedere solo scope operatore che la sessione chiamante già possiede
- /web/control-ui
- /gateway/configuration (modalità auth del gateway)
- /gateway/trusted-proxy-auth
- /gateway/remote
- /cli/devices
Servizio Gateway non in esecuzione
Usa questa sezione quando il servizio è installato ma il processo non resta attivo.Runtime: stoppedcon suggerimenti sull’uscita.- Mancata corrispondenza nella configurazione del servizio (
Config (cli)vsConfig (service)). - Conflitti di porta/listener.
- Installazioni launchd/systemd/schtasks aggiuntive quando viene usato
--deep. - Suggerimenti di pulizia
Other gateway-like services detected (best effort).
Gateway start blocked: set gateway.mode=localoppureexisting config is missing gateway.mode→ la modalità gateway locale non è abilitata, oppure il file di configurazione è stato sovrascritto e ha persogateway.mode. Correzione: impostagateway.mode="local"nella tua configurazione, oppure rieseguiopenclaw onboard --mode local/openclaw setupper ristampare la configurazione attesa per la modalità locale. Se stai eseguendo OpenClaw tramite Podman, il percorso di configurazione predefinito è~/.openclaw/openclaw.json.refusing to bind gateway ... without auth→ bind non-loopback senza un percorso auth gateway valido (token/password, oppure trusted-proxy dove configurato).another gateway instance is already listening/EADDRINUSE→ conflitto di porta.Other gateway-like services detected (best effort)→ esistono unità launchd/systemd/schtasks obsolete o parallele. Nella maggior parte delle configurazioni dovrebbe esserci un solo gateway per macchina; se te ne serve più di uno, isola porte + configurazione/stato/workspace. Vedi /gateway#multiple-gateways-same-host.
Il Gateway ha ripristinato la configurazione last-known-good
Usa questa sezione quando il Gateway si avvia, ma i log dicono che ha ripristinatoopenclaw.json.
Config auto-restored from last-known-goodgateway: invalid config was restored from last-known-good backupconfig reload restored last-known-good config after invalid-config- Un file con timestamp
openclaw.json.clobbered.*accanto alla configurazione attiva - Un evento di sistema del main-agent che inizia con
Config recovery warning
- La configurazione rifiutata non ha superato la validazione durante l’avvio o il reload a caldo.
- OpenClaw ha conservato il payload rifiutato come
.clobbered.*. - La configurazione attiva è stata ripristinata dall’ultima copia validata last-known-good.
- Al turno successivo del main-agent viene segnalato di non riscrivere ciecamente la configurazione rifiutata.
.clobbered.*esiste → è stato ripristinato un edit diretto esterno o una lettura all’avvio..rejected.*esiste → una scrittura di configurazione di proprietà OpenClaw ha fallito i controlli di schema o clobber prima del commit.Config write rejected:→ la scrittura ha tentato di eliminare una struttura richiesta, ridurre drasticamente il file o persistere una configurazione non valida.Config last-known-good promotion skipped→ il candidato conteneva placeholder di segreti redatti come***.
- Mantieni la configurazione attiva ripristinata se è corretta.
- Copia solo le chiavi desiderate da
.clobbered.*o.rejected.*, poi applicale conopenclaw config setoconfig.patch. - Esegui
openclaw config validateprima di riavviare. - Se modifichi a mano, mantieni l’intera configurazione JSON5, non solo l’oggetto parziale che volevi cambiare.
- /gateway/configuration#strict-validation
- /gateway/configuration#config-hot-reload
- /cli/config
- /gateway/doctor
Avvisi del probe del Gateway
Usa questa sezione quandoopenclaw gateway probe raggiunge qualcosa, ma stampa comunque un blocco di avviso.
warnings[].codeeprimaryTargetIdnell’output JSON.- Se l’avviso riguarda fallback SSH, gateway multipli, scope mancanti o riferimenti auth non risolti.
SSH tunnel failed to start; falling back to direct probes.→ la configurazione SSH è fallita, ma il comando ha comunque provato i target diretti configurati/loopback.multiple reachable gateways detected→ ha risposto più di un target. Di solito significa una configurazione multi-gateway intenzionale oppure listener obsoleti/duplicati.Read-probe diagnostics are limited by gateway scopes (missing operator.read)→ la connessione ha funzionato, ma il dettaglio RPC è limitato dagli scope; associa l’identità del dispositivo oppure usa credenziali conoperator.read.Capability: pairing-pendingoppuregateway closed (1008): pairing required→ il gateway ha risposto, ma questo client richiede ancora pairing/approvazione prima del normale accesso operatore.- testo di avviso SecretRef non risolto
gateway.auth.*/gateway.remote.*→ il materiale auth non era disponibile in questo percorso del comando per il target fallito.
Canale connesso ma messaggi che non scorrono
Se lo stato del canale è connected ma il flusso dei messaggi è fermo, concentrati su policy, permessi e regole di consegna specifiche del canale.- Policy DM (
pairing,allowlist,open,disabled). - Allowlist dei gruppi e requisiti di menzione.
- Permessi/scope API del canale mancanti.
mention required→ messaggio ignorato dalla policy di menzione del gruppo.- tracce
pairing/ approvazione in sospeso → il mittente non è approvato. missing_scope,not_in_channel,Forbidden,401/403→ problema di autenticazione/permessi del canale.
Consegna di Cron e Heartbeat
Se Cron o Heartbeat non sono stati eseguiti o non hanno effettuato la consegna, verifica prima lo stato dello scheduler, poi la destinazione di consegna.- Cron abilitato e prossima attivazione presente.
- Stato della cronologia esecuzioni del job (
ok,skipped,error). - Motivi di salto di Heartbeat (
quiet-hours,requests-in-flight,alerts-disabled,empty-heartbeat-file,no-tasks-due).
cron: scheduler disabled; jobs will not run automatically→ Cron disabilitato.cron: timer tick failed→ tick dello scheduler fallito; controlla errori di file/log/runtime.heartbeat skippedconreason=quiet-hours→ fuori dalla finestra di orario attivo.heartbeat skippedconreason=empty-heartbeat-file→HEARTBEAT.mdesiste ma contiene solo righe vuote / intestazioni markdown, quindi OpenClaw salta la chiamata al modello.heartbeat skippedconreason=no-tasks-due→HEARTBEAT.mdcontiene un bloccotasks:, ma nessuna attività è in scadenza in questo tick.heartbeat: unknown accountId→ account id non valido per la destinazione di consegna di Heartbeat.heartbeat skippedconreason=dm-blocked→ la destinazione di Heartbeat è stata risolta come destinazione in stile DM mentreagents.defaults.heartbeat.directPolicy(o l’override per-agent) è impostato sublock.
Strumento di un Node associato che fallisce
Se un Node è associato ma gli strumenti falliscono, isola lo stato in foreground, i permessi e lo stato di approvazione.- Node online con le capability attese.
- Permessi OS concessi per camera/microfono/posizione/schermo.
- Stato di approvazioni exec e allowlist.
NODE_BACKGROUND_UNAVAILABLE→ l’app Node deve essere in foreground.*_PERMISSION_REQUIRED/LOCATION_PERMISSION_REQUIRED→ permesso OS mancante.SYSTEM_RUN_DENIED: approval required→ approvazione exec in sospeso.SYSTEM_RUN_DENIED: allowlist miss→ comando bloccato dalla allowlist.
Lo strumento browser fallisce
Usa questa sezione quando le azioni dello strumento browser falliscono anche se il gateway stesso è sano.- Se
plugins.allowè impostato e includebrowser. - Percorso eseguibile del browser valido.
- Raggiungibilità del profilo CDP.
- Disponibilità di Chrome locale per profili
existing-session/user.
unknown command "browser"oppureunknown command 'browser'→ il plugin browser incluso è escluso daplugins.allow.- strumento browser mancante / non disponibile mentre
browser.enabled=true→plugins.allowescludebrowser, quindi il plugin non è mai stato caricato. Failed to start Chrome CDP on port→ il processo del browser non è riuscito ad avviarsi.browser.executablePath not found→ il percorso configurato non è valido.browser.cdpUrl must be http(s) or ws(s)→ l’URL CDP configurato usa uno schema non supportato comefile:oftp:.browser.cdpUrl has invalid port→ l’URL CDP configurato ha una porta errata o fuori intervallo.Could not find DevToolsActivePort for chrome→ Chrome MCP existing-session non è ancora riuscito ad agganciarsi alla directory dati browser selezionata. Apri la pagina inspect del browser, abilita il remote debugging, mantieni il browser aperto, approva il primo prompt di aggancio, poi riprova. Se non è richiesto uno stato con accesso effettuato, preferisci il profilo gestitoopenclaw.No Chrome tabs found for profile="user"→ il profilo attach di Chrome MCP non ha tab Chrome locali aperte.Remote CDP for profile "<name>" is not reachable→ l’endpoint CDP remoto configurato non è raggiungibile dall’host del gateway.Browser attachOnly is enabled ... not reachableoppureBrowser attachOnly is enabled and CDP websocket ... is not reachable→ il profilo attach-only non ha un target raggiungibile, oppure l’endpoint HTTP ha risposto ma il WebSocket CDP non può comunque essere aperto.Playwright is not available in this gateway build; '<feature>' is unsupported.→ l’installazione gateway corrente non include il pacchetto completo Playwright; snapshot ARIA e screenshot di pagina di base possono ancora funzionare, ma navigazione, snapshot AI, screenshot di elementi con selettore CSS ed esportazione PDF restano non disponibili.fullPage is not supported for element screenshots→ la richiesta di screenshot ha mescolato--full-pagecon--refo--element.element screenshots are not supported for existing-session profiles; use ref from snapshot.→ le chiamate screenshot Chrome MCP /existing-sessiondevono usare la cattura pagina o un--refda snapshot, non CSS--element.existing-session file uploads do not support element selectors; use ref/inputRef.→ gli hook di upload file di Chrome MCP richiedono riferimenti snapshot, non selettori CSS.existing-session file uploads currently support one file at a time.→ invia un upload per chiamata sui profili Chrome MCP.existing-session dialog handling does not support timeoutMs.→ gli hook dialog sui profili Chrome MCP non supportano override di timeout.response body is not supported for existing-session profiles yet.→responsebodyrichiede ancora un browser gestito o un profilo CDP raw.- override stantii di viewport / dark-mode / locale / offline su profili attach-only o CDP remoto → esegui
openclaw browser stop --browser-profile <name>per chiudere la sessione di controllo attiva e rilasciare lo stato di emulazione Playwright/CDP senza riavviare l’intero gateway.
Se hai aggiornato e improvvisamente qualcosa si è rotto
La maggior parte dei problemi dopo un aggiornamento deriva da config drift o da impostazioni predefinite più rigide che ora vengono applicate.1) Il comportamento di autenticazione e override URL è cambiato
- Se
gateway.mode=remote, le chiamate CLI potrebbero puntare al remoto mentre il tuo servizio locale è perfettamente funzionante. - Le chiamate esplicite con
--urlnon fanno fallback alle credenziali memorizzate.
gateway connect failed:→ target URL errato.unauthorized→ endpoint raggiungibile ma autenticazione errata.
2) I guardrail di bind e autenticazione sono più rigidi
- I bind non-loopback (
lan,tailnet,custom) richiedono un percorso auth gateway valido: autenticazione con token/password condivisa, oppure una distribuzionetrusted-proxynon-loopback configurata correttamente. - Chiavi vecchie come
gateway.tokennon sostituisconogateway.auth.token.
refusing to bind gateway ... without auth→ bind non-loopback senza un percorso auth gateway valido.Connectivity probe: failedmentre il runtime è in esecuzione → gateway attivo ma inaccessibile con auth/url correnti.
3) Lo stato di pairing e identità del dispositivo è cambiato
- Approvazioni dispositivo in sospeso per dashboard/nodes.
- Approvazioni pairing DM in sospeso dopo modifiche a policy o identità.
device identity required→ autenticazione dispositivo non soddisfatta.pairing required→ mittente/dispositivo da approvare.