Documentación

Documentación

OpenHands

OpenHands enruta todas las llamadas al modelo a través de LiteLLM, así que hay dos campos que deben coincidir para el endpoint: un identificador de modelo con el prefijo openai/ y una URL base que conserve /v1. Si configura correctamente ambos, la pestaña Advanced se conecta a Claude y GPT con una sola clave.

Settings → LLM → Advanced acepta tres campos — Custom Model, Base URL, API Key — con el ID del modelo llevando el prefijo openai/ y la URL base conservando /v1.

Configuración → LLM → Avanzado
# 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.
Conserve /v1 y el prefijo openai/: son una sola decisión, no dos. La página de configuración de OpenHands solo dice «Si su proveedor tiene una URL base específica, indíquela aquí», así que el propio campo no aclara el formato. El prefijo sí. Su página «Configure a Model» prescribe openai/<served-model-id> para un servidor compatible con OpenAI y recomienda obtener el identificador «normalmente de su endpoint GET /v1/models». El único valor de ejemplo que ofrece para la Base URL de esa ruta termina en /v1: http://host.docker.internal:1234/v1, en la guía de LM Studio. El contraste lo demuestra: para un modelo litellm_proxy/, la URL base documentada es https://your-litellm-proxy.com, sin incluir /v1. Combinar los dos formatos —openai/ con un origen sin sufijo, o un modelo /v1 bajo litellm_proxy/— es la forma habitual de acabar con un error 404 en lugar de uno 401.
Los dos ejemplos de openai/ de OpenHands corresponden a servidores locales: LM Studio, Ollama, vLLM y SGLang. La documentación no incluye ningún ejemplo práctico de una pasarela remota compatible con OpenAI, así que lo anterior recoge la regla del prefijo y el formato del valor, no una guía específica para este caso. Si OpenHands documenta uno más adelante, esa página será la referencia.
Esta configuración se obtuvo de la documentación oficial de OpenHands en la fecha que figura abajo. Kunavo no ha ejecutado OpenHands contra su endpoint: no se ha probado ninguna conversación, turno transmitido en streaming, ida y vuelta de herramientas ni versión concreta del cliente. Una guía de configuración publicada no es una prueba, y nada de lo que aparece aquí debe interpretarse como tal. La solicitud curl de abajo es lo que puede comprobar en diez segundos; el comportamiento del cliente depende de OpenHands.
Kunavo no ofrece modelos de embeddings, conversión de texto a voz ni conversión de voz a texto, así que este endpoint solo responde a solicitudes de chat completions. Deje LLM_EMBEDDING_MODEL y LLM_EMBEDDING_DEPLOYMENT_NAME sin definir, y mantenga el proveedor que ya utilice su configuración para cualquier índice vectorial o paso de audio.
¿Aún no tienes una clave? Crea una cuenta de Kunavo, genera una clave (empieza por sk-kn-) y añade crédito desde $10; las llamadas se pagan con ese saldo y las llamadas fallidas no se facturan. El panel se abre entonces en la configuración de OpenHands.

Paso a paso

  1. Cree una clave en /app/keys y cópiela: se muestra una sola vez.
  2. Abra Settings → LLM y active el interruptor Advanced. Aparecerán los tres campos en este orden: Custom Model, Base URL, API Key.
  3. Introduzca el identificador del modelo con su prefijo: openai/claude-sonnet-5, no claude-sonnet-5. Los identificadores que ofrece Kunavo son los que devuelve GET /v1/models, la misma lista de la que, según la documentación oficial de OpenHands, debe obtenerse un identificador personalizado.
  4. Pegue https://api.kunavo.com/v1 en Base URL y la clave en API Key; después, haga clic en Save Changes. OpenHands documenta que, al guardar un perfil local, primero se valida la configuración con el backend y el guardado se bloquea si falla. Por tanto, un error aquí es un rechazo real, no meramente estético.
  5. Compruebe a qué puede acceder el backend, no su navegador. La URL base debe resolverse desde el equipo que ejecuta Agent Server. La documentación especifica que, si Agent Canvas se ejecuta en Docker, 127.0.0.1 es el contenedor. Un endpoint público como el de Kunavo es el caso sencillo; uno detrás de un proxy corporativo no lo es.
  6. Inicie una conversación nueva y asígnele una tarea que lea y edite un archivo. OpenHands indica que un LLM guardado se aplica a las conversaciones nuevas y que primero hay que reiniciar las anteriores. Una ejecución que use las herramientas permite evaluar la configuración mejor que un simple saludo.

Comprobado con Página de configuración de Language Model (LLM) de OpenHands el 21 de septiembre de 2026. La configuración de terceros puede cambiar; si el nombre de un campo ya no coincide con lo que ves, esa página es la autoridad, no esta.

Verifica antes de depurar el cliente

Una solicitud determina si el fallo está en el endpoint, la clave o el archivo de configuración. Si devuelve JSON, la misma URL base y la misma clave funcionan en 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-..."

Qué ID de modelo introducir en el campo

Todos los modelos de texto están disponibles mediante un ID de modelo; la lista activa está en GET /v1/models, y el catálogo con precios está en la página de modelos. Las tarifas son USD por 1M de tokens, entrada / salida.

ID de modeloEntrada / salida de KunavoDónde encaja en OpenHands
claude-sonnet-5$1.40 / $7.00el modelo de trabajo diario: introdúzcalo como openai/claude-sonnet-5
claude-opus-4-8$3.50 / $17.50el modelo que la tabla de índices oficial de OpenHands coloca en primer lugar dentro de la familia Claude
claude-haiku-4-5$0.70 / $3.50un perfil económico para ediciones rutinarias, al que se puede cambiar a mitad de conversación
gpt-5-6-sol$2.00 / $12.00una segunda familia con la misma clave y la misma Base URL
gpt-6-astra$4.00 / $20.00una tercera opinión cuando un plan no termina de funcionar
La facturación es por token desde un saldo prepago, sin cuota mensual; consulta facturación. Con contexto repetido —que constituye la mayor parte de lo que envía un editor o cliente de chat—, la caché de indicaciones cambia más la factura que la elección del modelo.

Tres aspectos que conviene conocer antes de depurar problemas

OpenHands tiene más componentes que una CLI de proceso único, y dos de ellos parecen el endpoint LLM sin serlo. Esta información proviene de la documentación oficial, consultada en la fecha indicada arriba:

  1. El entorno aislado no es el modelo. OpenHands ejecuta el trabajo en un entorno aislado de agent-server y se comunica con el modelo a través de la red: son componentes distintos y usan credenciales diferentes. La clave configurada aquí sirve para las llamadas al modelo. No determina a qué puede acceder el entorno aislado, y un problema de conectividad de ese entorno no parece un error de autenticación.
  2. Los agentes ACP son independientes. Agent Canvas puede delegar tareas a Claude Code, Codex o Gemini CLI como agentes ACP, y la página «Configure a Model» señala que estos «gestionan su propio acceso a los modelos», así que un perfil LLM no redirige ese subproceso. Si esperaba ver tráfico con su clave y no aparece, compruebe qué agente se está ejecutando. La comparación entre OpenHands y Claude Code explica esa diferencia, incluida la regla de prioridad de credenciales que la determina.
  3. Perfiles y límite de 10 perfiles. Una configuración guardada se convierte en un perfil LLM; el perfil guardado más recientemente pasa a ser el activo para las conversaciones nuevas, y se puede cambiar de perfil a mitad de una conversación sin perder el contexto. Este mecanismo permite usar con una sola clave un identificador económico y otro caro. La documentación limita el número a 10 perfiles por cuenta. Un Provider Connection guarda una sola vez el proveedor, la clave API y una URL base opcional para varios perfiles. La misma página indica que el panel está disponible en los backends locales de agent-server y oculto en los de OpenHands Cloud.

Preguntas frecuentes

¿Cómo configuro OpenHands para usar un endpoint de API personalizado?

Abra Settings → LLM y active el interruptor Advanced. OpenHands documenta que esta opción permite «configurar modelos personalizados, además de otros ajustes de LLM». Aparecerán tres campos, en este orden: Custom Model, Base URL y API Key. Introduzca el identificador del modelo con un prefijo de proveedor —openai/<model-id> para un endpoint compatible con OpenAI—, escriba el endpoint en Base URL, pegue la clave y haga clic en Save Changes. La configuración guardada se convierte en un perfil LLM y se aplica a las conversaciones nuevas; hay que reiniciar las anteriores para que la utilicen.

¿La URL base de OpenHands debe terminar en /v1?

Para un modelo con el prefijo openai/, sí. La propia página de configuración solo indica que especifiques la URL base si tu proveedor tiene una específica, así que no basta para determinar el formato: lo determina el prefijo. La página «Configure a Model» de OpenHands prescribe openai/<served-model-id> para un servidor compatible con OpenAI y toma el identificador de su endpoint GET /v1/models. La única URL base concreta que muestra para esa configuración, en el tutorial de LM Studio, es http://host.docker.internal:1234/v1. Un modelo litellm_proxy/ es lo contrario: su URL base documentada es el origen del proxy sin /v1. Por tanto, para Kunavo el valor es https://api.kunavo.com/v1.

¿Por qué OpenHands no me deja guardar mi perfil de LLM?

OpenHands valida un perfil local contra el backend antes de guardarlo, y su documentación indica que, si la validación falla —por ejemplo, por una clave de API no válida o un modelo no disponible—, se bloquea el guardado y se muestra el error. Por tanto, si no te deja guardar, es un rechazo real. Comprueba primero cuál de los dos elementos falla fuera del cliente: una llamada curl al endpoint /v1/models con la misma clave devuelve JSON si ambos son correctos, 401 si la clave es incorrecta y 404 si lo es la URL. Los backends antiguos que no admiten la validación omiten la comprobación y guardan el perfil con normalidad.

¿Puede OpenHands usar modelos Claude a través de un endpoint compatible con OpenAI?

Sí. El prefijo openai/ identifica un protocolo de comunicación, no un proveedor: OpenHands envía una solicitud de finalización de chat con formato de OpenAI a la URL base que configuraste y pasa directamente el identificador situado después de la barra, así que ese endpoint resuelve un identificador de Claude, no OpenHands. Conviene recordar que OpenHands depende mucho de las llamadas a herramientas y que su documentación indica que necesita un modelo potente para funcionar correctamente; por eso, este no es el lugar para usar el identificador más barato que encuentres.

¿Kunavo ha probado esta configuración en OpenHands?

No. Lo que se comprobó el 21 de septiembre de 2026 fue la documentación de OpenHands: los nombres y el orden de los campos, la regla del prefijo y el formato de la URL base se citan de ahí. Kunavo no ha ejecutado una conversación de OpenHands contra su endpoint y no afirma nada aquí sobre la autenticación, la transmisión en streaming, los intercambios de llamadas a herramientas ni el enrutamiento de modelos en una versión concreta del cliente. Lo único que puedes comprobar por separado es si el endpoint y la clave funcionan, y eso es lo que hace el curl de esta página.