Documentação

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
# 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.
Mantenha o /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.
Os dois exemplos de 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.
Esta configuração foi consultada na documentação do próprio OpenHands na data indicada abaixo. Kunavo não executou o OpenHands em seu endpoint — nenhuma conversa, nenhum turno transmitido em fluxo, nenhuma ida e volta de ferramentas, nenhuma versão específica do cliente. Uma página de configuração publicada não é um teste, e nada aqui deve ser interpretado como tal. O curl abaixo é o que você pode confirmar em dez segundos; o comportamento do cliente depende de você e do OpenHands.
A Kunavo não oferece modelos de embeddings, síntese de fala ou transcrição de fala, então este endpoint atende apenas a conclusões de chat e nada mais — deixe 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.
Ainda não tem uma chave? Crie uma conta na Kunavo, gere uma chave (ela começa com 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

  1. Crie uma chave em /app/keys e copie-a — ela é exibida uma única vez.
  2. Abra Configurações → LLM e ative a opção Advanced. Os três campos aparecem nesta ordem: Custom Model, Base URL, API Key.
  3. Digite o ID do modelo com o prefixo — openai/claude-sonnet-5, não claude-sonnet-5. Os IDs oferecidos pela Kunavo são os retornados por GET /v1/models, a mesma lista que a documentação do próprio OpenHands orienta a usar para escolher um ID personalizado.
  4. Cole https://api.kunavo.com/v1 em 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.
  5. 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 é.
  6. 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 modeloEntrada / saída da KunavoOnde se encaixa em OpenHands
claude-sonnet-5$1.40 / $7.00o modelo de trabalho diário — informe-o como openai/claude-sonnet-5
claude-opus-4-8$3.50 / $17.50o modelo que a própria tabela de índice do OpenHands coloca no topo da família Claude
claude-haiku-4-5$0.70 / $3.50um 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.00uma segunda família com a mesma chave e a mesma Base URL
gpt-6-astra$4.00 / $20.00uma terceira opinião quando um plano continua dando errado
A cobrança é por token, usando um saldo pré-pago e sem tarifa mensal — consulte billing. Em contextos repetidos — que representam a maior parte do que um editor ou cliente de chat envia — o cache de prompt altera a conta mais do que a escolha do modelo.

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:

  1. 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.
  2. 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.
  3. 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.