Documentação
OpenHands
O OpenHands encaminha todas as chamadas de modelo pelo LiteLLM, então o endpoint depende de dois campos que precisam corresponder: um ID de modelo com o prefixo openai/ e uma URL base que mantenha /v1. Configure esse par corretamente para que a aba Advanced use Claude e GPT com uma só chave.
Settings → LLM → Advanced recebe três campos — Custom Model, Base URL, API Key — com o ID do modelo contendo um prefixo openai/ e a URL base mantendo seu /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 o prefixo openai/ — são uma única decisão, não duas. A página de configurações do OpenHands diz apenas “Se o seu provedor tiver uma URL base específica, informe-a aqui”, então o próprio campo não esclarece o formato. O prefixo, sim. A página Configure a Model prescreve openai/<served-model-id> para um servidor compatível com OpenAI, usando um ID “geralmente obtido do endpoint GET /v1/models”, e o único valor preenchido que mostra para o campo Base URL dessa rota termina em /v1 — http://host.docker.internal:1234/v1 no passo a passo do LM Studio. O contraste comprova a diferença: um modelo litellm_proxy/ é documentado com uma URL base de https://your-litellm-proxy.com, sem nenhum /v1. Misturar os dois — openai/ com uma origem sem caminho ou um /v1 em litellm_proxy/ — é a forma mais comum de acabar com um erro 404 em vez de um 401.openai/ do OpenHands são servidores locais — LM Studio, Ollama, vLLM, SGLang. A documentação não mostra nenhum exemplo preenchido de um gateway remoto compatível com OpenAI, então o trecho citado acima é a regra do prefixo e o formato do valor, não uma página sobre este caso. Se o OpenHands documentar um gateway desses futuramente, essa página será a referência.curl abaixo é o que você pode confirmar em dez segundos; o comportamento do cliente depende de você e do OpenHands.LLM_EMBEDDING_MODEL e LLM_EMBEDDING_DEPLOYMENT_NAME sem definir e mantenha o provedor que já atende a qualquer índice vetorial ou etapa de áudio da sua configuração.sk-kn-) e adicione crédito a partir de $10 — as chamadas são pagas com esse saldo, e chamadas malsucedidas não são cobradas. O painel então abre na configuração de OpenHands.Passo a passo
- Crie uma chave em
/app/keyse copie-a — ela é exibida uma única vez. - Abra Configurações → LLM e ative a opção Advanced. Os três campos aparecem nesta ordem: Custom Model, Base URL, API Key.
- Digite o ID do modelo com o prefixo —
openai/claude-sonnet-5, nãoclaude-sonnet-5. Os IDs oferecidos pela Kunavo são os retornados porGET /v1/models, a mesma lista que a documentação do próprio OpenHands orienta a usar para escolher um ID personalizado. - Cole
https://api.kunavo.com/v1em Base URL e sua chave em API Key; em seguida, clique em Save Changes. O OpenHands documenta que, ao salvar um perfil local, a configuração é validada primeiro no backend e o salvamento é bloqueado se houver falha; portanto, um erro aqui é uma rejeição real, não apenas visual. - Verifique o que o backend consegue acessar, não o que seu navegador consegue. A URL base precisa ser resolvida pela máquina que executa o Agent Server — a documentação deixa claro que, se o Agent Canvas estiver no Docker,
127.0.0.1é o contêiner. Um endpoint público como o da Kunavo é o caso simples; um proxy corporativo na frente dele não é. - Inicie uma nova conversa e dê a ela uma tarefa que leia e edite um arquivo. O OpenHands observa que uma LLM salva se aplica a conversas novas e que as antigas precisam ser reiniciadas primeiro; além disso, uma execução que usa as ferramentas revela mais sobre essa combinação do que uma saudação.
Verificado em Página de configurações de modelos de linguagem (LLM) do OpenHands em 21 de setembro de 2026. As configurações de terceiros podem mudar; se o nome de um campo aqui já não corresponder ao que você vê, aquela página é a autoridade, não esta.
Verifique antes de depurar o cliente
Uma solicitação determina se a falha está no endpoint, na chave ou no arquivo de configuração. Se isto retornar JSON, a mesma URL base e a mesma chave funcionarão em 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-..."Qual ID de modelo inserir no campo
Todo modelo de texto pode ser acessado como um ID de modelo — a lista atual está em GET /v1/models, e o catálogo com preços está na página de modelos. As tarifas são em USD por 1 milhão de tokens, entrada / saída.
| ID do modelo | Entrada / saída da Kunavo | Onde se encaixa em OpenHands |
|---|---|---|
claude-sonnet-5 | $1.40 / $7.00 | o modelo de trabalho diário — informe-o como openai/ |
claude-opus-4-8 | $3.50 / $17.50 | o modelo que a própria tabela de índice do OpenHands coloca no topo da família Claude |
claude-haiku-4-5 | $0.70 / $3.50 | um perfil econômico para edições de rotina, para o qual se pode alternar no meio da conversa |
gpt-5-6-sol | $2.00 / $12.00 | uma segunda família com a mesma chave e a mesma Base URL |
gpt-6-astra | $4.00 / $20.00 | uma terceira opinião quando um plano continua dando errado |
Três limites que vale conhecer antes de investigar um problema
O OpenHands tem mais componentes do que uma CLI de processo único, e dois deles se parecem com o endpoint LLM sem serem o endpoint. Estas informações vêm da documentação do próprio OpenHands, consultada na data acima:
- O sandbox não é o modelo. O OpenHands executa seu trabalho em um sandbox do Agent Server e chama o modelo pela rede; são interfaces distintas, com credenciais distintas. Uma chave configurada aqui permite fazer chamadas ao modelo. Ela não determina o que o sandbox consegue acessar, e um problema de rede no sandbox não se manifesta como erro de autenticação.
- Os agentes ACP são completamente separados. O Agent Canvas pode delegar para Claude Code, Codex ou Gemini CLI como agente ACP, e a página Configure a Model afirma que eles “gerenciam o próprio acesso ao modelo” — portanto, um perfil LLM não redireciona esse subprocesso. Se você esperava ver tráfego usando sua chave e não vê nenhum, confira qual agente está realmente em execução. A comparação entre OpenHands e Claude Code explica essa diferença, incluindo a regra de prioridade de credenciais que a determina.
- Perfis e o limite de 10 perfis. Uma configuração salva se torna um perfil LLM, o perfil salvo mais recentemente fica ativo para novas conversas e é possível alternar entre perfis durante uma conversa sem perder o contexto — mecanismo que permite usar um ID econômico e um ID caro com uma só chave. A documentação limita a 10 perfis por conta. Uma conexão de provedor armazena o provedor, a chave de API e uma URL base opcional uma única vez para vários perfis; a mesma página observa que esse painel está disponível em backends locais do Agent Server e oculto em um backend do OpenHands Cloud.
Perguntas frequentes
Como aponto o OpenHands para um endpoint de API personalizado?
Abra Configurações → LLM e ative a opção Advanced, que a documentação do OpenHands descreve como a forma de "definir modelos personalizados, além de algumas configurações adicionais de LLM". Serão exibidos três campos, nesta ordem: Custom Model, Base URL e API Key. Informe o ID do modelo com um prefixo de provedor — openai/<model-id> para um endpoint compatível com OpenAI —, insira o endpoint em Base URL, cole sua chave e clique em Save Changes. A configuração salva se torna um perfil LLM e se aplica a novas conversas; as conversas antigas precisam ser reiniciadas para usá-la.
A URL Base do OpenHands precisa terminar em /v1?
Para um modelo com o prefixo openai/, sim. A própria página de configurações só diz para especificar a URL base se o seu provedor tiver uma específica, então ela não define a forma por si só — quem define é o prefixo. A página Configure a Model do OpenHands prescreve openai/<served-model-id> para um servidor compatível com OpenAI e obtém o ID do endpoint GET /v1/models, e a única URL Base de exemplo que mostra para essa rota, no passo a passo do LM Studio, é http://host.docker.internal:1234/v1. Um modelo litellm_proxy/ é o oposto: a URL base documentada é a origem simples do proxy, sem /v1. Portanto, para o Kunavo, o valor é https://api.kunavo.com/v1.
Por que o OpenHands não salva meu perfil de LLM?
O OpenHands valida um perfil local com o backend antes de persistir as configurações, e a documentação diz que, quando a validação falha — os exemplos citados são uma chave de API inválida ou um modelo indisponível —, o salvamento é bloqueado e o erro é exibido. Portanto, o bloqueio é uma rejeição real. Descubra primeiro, fora do cliente, qual das duas partes está errada: um único curl para /v1/models do endpoint, com a mesma chave, retorna JSON se o par estiver correto, 401 se a chave estiver errada e 404 se a URL estiver errada. Backends antigos que não oferecem suporte à validação ignoram essa verificação e salvam normalmente.
O OpenHands pode usar modelos Claude por meio de um endpoint compatível com OpenAI?
Sim. O prefixo openai/ identifica um protocolo de comunicação, não um fornecedor: o OpenHands envia uma solicitação de conclusão de chat no formato OpenAI para a URL base configurada e encaminha diretamente o ID após a barra, então um ID Claude é resolvido nesse endpoint, não dentro do OpenHands. Vale lembrar que o OpenHands depende bastante da chamada de ferramentas e sua documentação diz que precisa de um modelo potente para funcionar corretamente, então este não é o lugar para usar o ID mais barato que encontrar.
O Kunavo testou essa configuração no OpenHands?
Não. O que foi verificado, em 21 de setembro de 2026, foi a documentação do próprio OpenHands — os nomes dos campos, a ordem, a regra do prefixo e o formato da URL base foram extraídos dela. O Kunavo não executou uma conversa do OpenHands contra seu endpoint e não faz nenhuma afirmação aqui sobre autenticação, streaming, ciclos de chamada de ferramentas ou roteamento de modelos dentro de uma versão específica do cliente. A única coisa que você pode verificar isoladamente é se o endpoint e a chave funcionam, o que o curl nesta página permite fazer.