Documentazione
OpenHands
OpenHands instrada ogni chiamata al modello tramite LiteLLM, quindi l’endpoint richiede due campi coerenti: un ID modello con il prefisso openai/ e un URL di base che mantenga /v1. Impostata correttamente questa coppia, la scheda Advanced comunica con Claude e GPT usando un’unica chiave.
Settings → LLM → Advanced richiede tre campi — Custom Model, Base URL, API Key — con l'ID modello che include il prefisso openai/ e l'URL di base che conserva /v1.
# Settings → LLM → Advanced (toggle "Advanced" on first)
Custom Model openai/claude-sonnet-5
Base URL https://api.kunavo.com/v1
API Key sk-kn-...
# The "openai/" prefix is the provider, not a vendor: it tells OpenHands to
# speak the OpenAI Chat Completions protocol to the Base URL above. The model
# id after the slash is Kunavo's, and resolves at Kunavo.
#
# Keep the /v1. It belongs to the openai/ prefix — a litellm_proxy/ model
# takes the bare origin instead, which is the opposite convention./v1 e il prefisso openai/: sono una decisione unica, non due. La pagina delle impostazioni di OpenHands dice soltanto «If your provider has a specific base URL, specify it here», quindi il campo in sé non chiarisce il formato. È il prefisso a farlo. La pagina Configure a Model prescrive openai/<served-model-id> per un server compatibile con OpenAI, ricavando l’ID «di solito dal suo endpoint GET /v1/models»; l’unico valore d’esempio che riporta per il Base URL di quella route termina con /v1: http://host.docker.internal:1234/v1 nella procedura guidata di LM Studio. Il confronto dimostra la regola: un modello litellm_proxy/ è documentato con un URL di base https://your-litellm-proxy.com, senza alcun /v1. Combinare i due formati, ad esempio usare openai/ con un’origine senza suffisso o un /v1 sotto litellm_proxy/, è il modo più comune per ottenere un 404 anziché un 401.openai/ in OpenHands riguardano server locali: LM Studio, Ollama, vLLM e SGLang. La documentazione non mostra alcun esempio completo di gateway remoto compatibile con OpenAI; quanto riportato sopra è quindi la regola sul prefisso e la struttura del valore, non una pagina dedicata a questo caso. Se OpenHands pubblicherà in seguito una guida specifica, quella sarà la fonte autorevole.curl qui sotto è l’aspetto che puoi verificare in dieci secondi; il comportamento del client dipende da OpenHands.LLM_EMBEDDING_MODEL e LLM_EMBEDDING_DEPLOYMENT_NAME non impostati e mantieni il provider già usato per qualsiasi indice vettoriale o passaggio audio della tua configurazione.sk-kn-) e aggiungi credito da $10: le chiamate vengono pagate con quel saldo e le chiamate non riuscite non vengono addebitate. La dashboard si apre quindi sulla configurazione OpenHands.Passo dopo passo
- Crea una chiave su
/app/keyse copiala: viene mostrata una sola volta. - Apri Impostazioni → LLM e attiva l’interruttore Advanced. I tre campi appaiono nel seguente ordine: Custom Model, Base URL, API Key.
- Inserisci l’ID del modello con il prefisso:
openai/claude-sonnet-5, nonclaude-sonnet-5. Gli ID serviti da Kunavo sono quelli restituiti daGET /v1/models, lo stesso elenco da cui, secondo la documentazione ufficiale di OpenHands, va ricavato un ID personalizzato. - Incolla
https://api.kunavo.com/v1in Base URL e la tua chiave in API Key, quindi fai clic su Save Changes. OpenHands documenta che il salvataggio di un profilo locale convalida prima la configurazione rispetto al backend e blocca il salvataggio in caso di errore; quindi un errore qui è un rifiuto effettivo, non un problema cosmetico. - Verifica ciò a cui può accedere il backend, non il browser. L’URL di base deve essere risolvibile dalla macchina che esegue Agent Server: la documentazione specifica chiaramente che, se Agent Canvas è in esecuzione in Docker,
127.0.0.1è il container. Un endpoint pubblico come quello di Kunavo è il caso semplice; un proxy aziendale davanti all’endpoint non lo è. - Avvia una nuova conversazione e assegnale un’attività che legga e modifichi un file. OpenHands specifica che un LLM salvato si applica alle nuove conversazioni e che quelle esistenti devono essere prima riavviate; inoltre, un’esecuzione che utilizza gli strumenti ti dice di più sull’abbinamento di quanto possa fare un semplice saluto.
Verificato rispetto a Pagina delle impostazioni del modello linguistico (LLM) di OpenHands il 21 settembre 2026. Le impostazioni di terze parti cambiano; se il nome di un campo qui non corrisponde più a quello visualizzato, fa fede quella pagina, non questa.
Verifica prima di eseguire il debug del client
Una sola richiesta stabilisce se il problema riguarda l'endpoint, la chiave o il file di configurazione. Se restituisce JSON, lo stesso base URL e la stessa chiave funzionano in OpenHands.
# Settles whether a failure is the endpoint, the key, or the client.
curl -sS https://api.kunavo.com/v1/models \
-H "Authorization: Bearer sk-kn-..."Quale model id inserire nel campo
Ogni modello di testo è raggiungibile come model id: l'elenco aggiornato è GET /v1/models e il catalogo con i prezzi è nella pagina dei modelli. Le tariffe sono in USD per 1M di token, input / output.
| ID del modello | Kunavo ingresso / uscita | Dove si inserisce in OpenHands |
|---|---|---|
claude-sonnet-5 | $1.40 / $7.00 | il modello di lavoro quotidiano: inseriscilo come openai/ |
claude-opus-4-8 | $3.50 / $17.50 | il modello che la tabella indice ufficiale di OpenHands colloca in cima alla famiglia Claude |
claude-haiku-4-5 | $0.70 / $3.50 | un profilo economico per le modifiche di routine, a cui passare anche durante una conversazione |
gpt-5-6-sol | $2.00 / $12.00 | una seconda famiglia con la stessa chiave e lo stesso URL di base |
gpt-6-astra | $4.00 / $20.00 | una terza opinione quando un piano continua a non funzionare |
Tre aspetti da conoscere prima di iniziare la diagnosi
OpenHands ha più componenti di una CLI a processo singolo, e due di essi possono sembrare l’endpoint LLM senza esserlo. Le informazioni seguenti provengono dalla documentazione ufficiale, consultata alla data riportata sopra:
- La sandbox non è il modello. OpenHands esegue il tuo lavoro in una sandbox di agent-server e contatta il modello tramite la rete: sono due componenti distinti, con credenziali separate. Una chiave configurata qui autorizza le chiamate al modello. Non determina ciò a cui può accedere la sandbox, e un problema di rete della sandbox non si manifesta come un errore di autenticazione.
- Gli agenti ACP sono del tutto separati. Agent Canvas può delegare il lavoro a Claude Code, Codex o Gemini CLI come agenti ACP, e la pagina Configure a Model specifica che questi «gestiscono autonomamente il proprio accesso ai modelli»: quindi un profilo LLM non reindirizza quel sottoprocesso. Se ti aspettavi traffico sulla tua chiave e non ne vedi, verifica quale agente è effettivamente in esecuzione. Il confronto tra OpenHands e Claude Code approfondisce questa distinzione, compresa la regola di priorità delle credenziali che la determina.
- Profili e limite di 10 profili. Una configurazione salvata diventa un profilo LLM; quella salvata più di recente diventa attiva per le nuove conversazioni e i profili possono essere cambiati durante una conversazione senza perdere il contesto. È questo meccanismo che permette di usare con un’unica chiave un ID economico e uno costoso. La documentazione limita a 10 il numero di profili per account. Un Provider Connection memorizza una sola volta il provider, la chiave API e l’URL di base facoltativo per più profili; la stessa pagina specifica che il pannello è disponibile sui backend agent-server locali e nascosto su un backend OpenHands Cloud.
Domande frequenti
Come si configura OpenHands per usare un endpoint API personalizzato?
Apri Impostazioni → LLM e attiva l’interruttore Advanced, che OpenHands indica come il modo per «impostare modelli personalizzati e alcune impostazioni LLM aggiuntive». Appariranno tre campi, in questo ordine: Custom Model, Base URL, API Key. Inserisci l’ID del modello con un prefisso del provider — openai/<model-id> per un endpoint compatibile con OpenAI — specifica l’endpoint in Base URL, incolla la chiave e fai clic su Save Changes. La configurazione salvata diventa un profilo LLM e si applica alle nuove conversazioni; per applicarla a quelle esistenti, è necessario riavviarle.
L’URL di base di OpenHands deve terminare con /v1?
Per un modello con prefisso openai/, sì. La pagina delle impostazioni dice soltanto di specificare l’URL di base se il provider ne ha uno specifico, quindi da sola non chiarisce quale forma usare: è il prefisso a determinarlo. La pagina di OpenHands «Configure a Model» prescrive openai/<served-model-id> per un server compatibile con OpenAI e indica di ricavare l’ID dal suo endpoint GET /v1/models; l’unico URL di base concreto mostrato per quel percorso, nella guida a LM Studio, è http://host.docker.internal:1234/v1. Per un modello litellm_proxy/, invece, vale il contrario: l’URL di base documentato è l’origine del proxy senza /v1. Quindi, per Kunavo, il valore è https://api.kunavo.com/v1.
Perché OpenHands non salva il mio profilo LLM?
OpenHands convalida un profilo locale con il backend prima di salvarlo e, secondo la sua documentazione, se la convalida non riesce — per esempio per una chiave API non valida o un modello non disponibile — il salvataggio viene bloccato e viene mostrato l’errore. Un salvataggio bloccato è quindi un rifiuto effettivo. Verifica prima fuori dal client quale dei due elementi è errato: una richiesta curl all’endpoint /v1/models con la stessa chiave restituisce JSON se entrambi sono corretti, 401 se la chiave è sbagliata e 404 se è errato l’URL. I backend meno recenti che non supportano la convalida saltano il controllo e salvano normalmente.
OpenHands può usare modelli Claude tramite un endpoint compatibile con OpenAI?
Sì. Il prefisso openai/ indica un protocollo di comunicazione, non un fornitore: OpenHands invia un completamento chat nel formato OpenAI all’URL di base configurato e inoltra direttamente l’ID dopo la barra, quindi un ID Claude viene risolto da quell’endpoint, non all’interno di OpenHands. Tieni presente che OpenHands fa ampio uso delle chiamate agli strumenti e la sua documentazione afferma che per funzionare correttamente serve un modello potente, quindi non è il caso di scegliere l’ID più economico che trovi.
Kunavo ha testato questa configurazione in OpenHands?
No. Il 21 settembre 2026 è stata verificata la documentazione di OpenHands: i nomi e l’ordine dei campi, la regola del prefisso e il formato dell’URL di base sono riportati da quella documentazione. Kunavo non ha eseguito una conversazione in OpenHands usando il proprio endpoint e non fa qui alcuna affermazione su autenticazione, streaming, scambi con gli strumenti o instradamento dei modelli in una versione specifica del client. L’unica cosa che puoi verificare separatamente è se l’endpoint e la chiave funzionano: puoi farlo con il comando curl riportato in questa pagina.