| Process or container exits with status 1 and prints nothing | Stderr is a terminal (the log went to the file only), or CHATCLI_LOG_STDERR=false | Read LOG_FILE, or run with CHATCLI_LOG_STDERR=true; in a container the refusal is already in docker logs/kubectl logs |
refusing to serve an unauthenticated API on 0.0.0.0: … | Reachable bind (Kubernetes, or CHATCLI_BIND_ADDRESS=0.0.0.0) with no credential | Set CHATCLI_SERVER_TOKEN, JWT material or a client CA; or bind 127.0.0.1 |
refusing to start: CHATCLI_JWT_PUBLIC_KEY is set but no RSA public key could be loaded: … | Wrong path or not a PEM public key, and JWT is the only credential | Fix the key (PEM PUBLIC KEY, RSA PUBLIC KEY or CERTIFICATE) |
FATAL: TLS certificate load failed: … (cert=…, key=…) | Cert or key missing, unreadable or mismatched | Check the paths and that the key matches the certificate |
FATAL: --tls-client-ca requires --tls-cert and --tls-key | mTLS without server TLS | Add the server certificate and key |
FATAL: --tls-cert is set (…) but --tls-key is not: refusing to start a plaintext listener (or --tls-key is set … but --tls-cert is not) | Half a TLS pair | Set both paths, or neither for plaintext |
Client: transport: authentication handshake failed: tls: first record does not look like a TLS handshake | Client dials TLS, server is plaintext | CHATCLI_ALLOW_INSECURE=true, or enable TLS on the server |
Client: error reading server preface: remote error: tls: certificate required | Server enforces mTLS and the client sent no certificate | Set CHATCLI_TLS_CLIENT_CERT and CHATCLI_TLS_CLIENT_KEY and use --tls |
Client: x509: certificate signed by unknown authority | Server certificate not trusted | --ca-cert ca.crt |
Client: x509: certificate is valid for …, not … | The dialed name is not in the SANs | Dial a name in the certificate, or reissue it with that SAN |
Client: connect: connection refused | Server not running, wrong port, or bound to loopback of another host/container | Check CHATCLI_BIND_ADDRESS and the port |
Connected to ChatCLI server (version: …, provider: remote, model: remote), then Unauthenticated desc = authentication failed | Wrong or missing token (the health check does not need one, GetServerInfo does) | Pass the right --token / CHATCLI_REMOTE_TOKEN |
Unauthenticated desc = authentication failed with a token that works otherwise; the server log shows auth failure rate limit exceeded | Something on the same client host failed authentication more than 5 times in a minute (a wrong token in another script, an expired JWT) and exhausted the host’s failure budget | Fix the failing caller; the budget refills at one slot per 12 s and the table clears every 5 minutes |
Unauthenticated desc = token expired | JWT exp in the past (beyond 30 s skew) | Issue a new token; check clocks |
Unauthenticated desc = JWT verification material failed to load; the server accepts no credentials until it is fixed | JWT key failed to load | Fix the key and restart |
ResourceExhausted desc = rate limit exceeded, retry after 1 seconds | Caller over CHATCLI_RATE_LIMIT_RPS/BURST; shared-token callers share one bucket | Raise the limits or give callers their own JWT sub |
PermissionDenied desc = coder, agent and tool runs execute on the server and require the admin role | JWT/mTLS caller without admin on an exec pipeline RPC | Use an admin credential |
Unavailable desc = the pipeline RPCs are not enabled on this server (start it with CHATCLI_SERVER_PIPELINE=true) | Pipeline off | Set CHATCLI_SERVER_PIPELINE=true (and not CHATCLI_GATEWAY_IN_SERVER) |
invalid provider configuration: provider_config[base_url]: non-HTTPS provider URLs are blocked; set CHATCLI_ALLOW_HTTP_PROVIDERS=true to allow | Caller sent an http:// URL (for example --ollama-url) | Use HTTPS, set the variable on the server, or configure the URL on the server |
… resolves to blocked IP … | Caller-supplied URL points to a private address | Configure that endpoint on the server (OLLAMA_BASE_URL) instead |
A caller’s base_url/endpoint is rejected although it is HTTPS and public; the message names CHATCLI_SERVER_PROVIDER_ENDPOINTS | The endpoint’s origin is not in the allowlist (empty by default) | Add the origin to CHATCLI_SERVER_PROVIDER_ENDPOINTS on the server, or configure the endpoint on the server |
A provider_config field is rejected as an unknown key | The caller sent a provider_config key the server does not recognize | Remove it: unknown keys are now errors, not ignored |
Fallback chain initialized never appears | Fewer than two providers in the list have working credentials | Add keys, or list more providers |
Container unhealthy with mTLS on | The health check has no client certificate | Set CHATCLI_TLS_CLIENT_CERT and CHATCLI_TLS_CLIENT_KEY; docker inspect shows the check’s message |