Documentación

Documentación

Junie CLI

Junie CLI recibe un endpoint personalizado mediante un archivo JSON, no desde una pantalla de ajustes. Con nueve líneas en $JUNIE_HOME/models/kunavo.json y junie --model custom:kunavo, ya puedes ejecutar Claude y GPT con una sola clave, y dirigir el tráfico auxiliar a una opción económica.

Junie CLI acepta un endpoint personalizado como perfil JSON en $JUNIE_HOME/models/, donde baseUrl es la URL completa del endpoint y fasterModel decide dónde se dirige el tráfico auxiliar.

$JUNIE_HOME/models/kunavo.json — o .junie/models/kunavo.json
{
  "id": "claude-sonnet-5",
  "baseUrl": "https://api.kunavo.com/v1/chat/completions",
  "displayName": "Kunavo",
  "providerName": "Kunavo",
  "apiType": "OpenAICompletion",
  "apiKey": "${KUNAVO_API_KEY}",
  "fasterModel": {
    "id": "claude-haiku-4-5"
  }
}
baseUrl es el endpoint completo, incluida toda la ruta. JetBrains lo indica claramente: «El baseUrl se usa como URL de endpoint completa; Junie no le añade ninguna ruta», y señala que debes «configurarlo con el endpoint completo del apiType que hayas elegido». Así que este campo no es el origen ni la raíz /v1 que quieren la mayoría de los clientes: es https://api.kunavo.com/v1/chat/completions. Detenerse en https://api.kunavo.com/v1 es la forma más probable de obtener un 404 con un perfil que, por lo demás, es correcto.
Si falta una variable de entorno, falla todo el perfil, no la solicitud. Los valores de apiKey y extraHeaders aceptan referencias $${VAR_NAME}, y JetBrains documenta exactamente qué ocurre: «Si una variable de entorno a la que se hace referencia no está definida, el perfil no se carga y Junie muestra un error que identifica la variable que falta». Exporta KUNAVO_API_KEY antes de iniciar Junie: el perfil se lee al cargarse, no al hacer la primera solicitud. Por eso, si el shell perdió la exportación, el perfil desaparece de /model en lugar de producir un 401.
fasterModel es donde Junie envía el trabajo que no le pediste. JetBrains lo describe como «El modelo que se usa para tareas auxiliares internas, como resumir el contexto o clasificar tareas», y dice que, si primaryModel o fasterModel «no se define explícitamente, heredan las propiedades de nivel superior». Por tanto, si un perfil no tiene un bloque fasterModel, las tareas de mantenimiento se facturan al precio de tu modelo principal. La sobrescritura de una línea de arriba lo resuelve, y por eso el bloque forma parte de la configuración mínima en lugar de estar en un apéndice.
Este perfil se basa en el esquema publicado por JetBrains, consultado en la fecha indicada abajo. Kunavo no ha ejecutado Junie CLI con su endpoint: ni una sesión, ni un turno en streaming, ni un ciclo de ida y vuelta de herramientas; tampoco se ha fijado ni aceptado ninguna compilación del cliente. Una página de configuración publicada no es una prueba, y nada de lo que aparece aquí debe interpretarse como tal. A continuación, curl es lo que puedes comprobar en diez segundos; el comportamiento de Junie con esa configuración depende de JetBrains.
¿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 Junie CLI.

Paso a paso

  1. Crea una clave en /app/keys y cópiala: se muestra una sola vez. Expórtala como KUNAVO_API_KEY en el shell desde el que iniciarás Junie o incluye una clave literal en el archivo; JetBrains señala que «Los valores que no incluyen ninguna referencia $${...} se usan tal cual».
  2. Guarda el JSON anterior como $JUNIE_HOME/models/kunavo.json para tu cuenta o como .junie/models/kunavo.json para compartirlo con un repositorio. El nombre del archivo, sin .json, pasa a ser el id del perfil; por eso el selector de abajo muestra custom:kunavo.
  3. Configura id con el id del modelo que realmente quieras usar. Se describe como «El identificador del modelo que espera el endpoint de API», así que puedes usar directamente un identificador de Kunavo de la tabla de abajo. Los ids se resuelven en el endpoint, no dentro de Junie.
  4. Inicia Junie y selecciona el perfil: junie --model custom:kunavo o el comando /model en una sesión interactiva. Los modelos personalizados «aparecen en la lista de selección de modelos después de los proveedores integrados».
  5. Asígnale una tarea que edite un archivo en lugar de un saludo. Junie es un cliente con capacidades de agente y depende de las llamadas a herramientas para casi todo lo que hace, así que una primera ejecución que lea y escriba algo te dirá mucho más que una sola respuesta.

Comprobado con Página de JetBrains sobre los LLM personalizados para Junie 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.

Esta es la versión breve. El tutorial completo —elección del modelo, coste de una sesión real y modos de fallo— está en Junie CLI frente a Claude Code: comparación de límites de endpoint.

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 Junie CLI.

# 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 Junie CLI
claude-sonnet-5$1.40 / $7.00primaryModel para el trabajo habitual: tareas que editan archivos
claude-opus-5$3.50 / $17.50un plan cuyo error sería costoso, fijado por sesión
claude-haiku-4-5$0.70 / $3.50el rol fasterModel: resumir el contexto y clasificar tareas
gpt-5-6-sol$2.00 / $12.00una segunda opinión de otra familia: un segundo perfil con la misma clave
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.

Los otros dos valores de apiType que Kunavo admite

apiType especifica un formato de solicitud, no un proveedor, y Junie acepta cuatro valores: OpenAICompletion, OpenAIResponses, Google y Anthropic. Kunavo ofrece tres rutas, así que dos de los otros tres valores tienen aquí una baseUrl correspondiente. Como Junie no añade ninguna ruta, cambiar el formato implica cambiar la URL en la misma edición:

  1. "apiType": "OpenAICompletion" con https://api.kunavo.com/v1/chat/completions: el perfil de arriba y el que recomienda esta página, porque esta ruta es la más usada de las tres.
  2. "apiType": "Anthropic" con https://api.kunavo.com/v1/messages: Kunavo responde en esa ruta con el formato Messages.
  3. "apiType": "OpenAIResponses" con https://api.kunavo.com/v1/responses.

Determinar cuál de los tres formatos de Junie funciona mejor con un modelo es justamente el tipo de pregunta que responde una prueba en tiempo de ejecución, pero no una lectura de la documentación; por eso, esta página no los clasifica más allá de lo dicho en la primera línea. Elige uno y mantén la URL y apiType sincronizados. Si un perfil con una clave definida devuelve 401, especifica la credencial en lugar de hacer conjeturas sobre la cabecera de Junie: JetBrains solo documenta apiKey en negativo —«Si se omite, las solicitudes se envían sin una cabecera Authorization»— y nunca indica qué esquema se usa cuando está presente. extraHeaders se documenta como «cabeceras HTTP adicionales que se incluirán en cada solicitud» y acepta las mismas referencias $${VAR}, por lo que "extraHeaders": {"Authorization": "Bearer $${KUNAVO_API_KEY}"} es la forma inequívoca.

Preguntas frecuentes

¿Cómo añado un proveedor personalizado a Junie CLI?

Junie CLI carga proveedores personalizados desde perfiles JSON, no desde una pantalla de ajustes. Coloca un archivo en $JUNIE_HOME/models/ para tu cuenta o en .junie/models/ dentro de un proyecto; el nombre del archivo, sin la extensión .json, pasa a ser el id del perfil. Las claves obligatorias son id, baseUrl y apiType; apiKey, displayName, providerName, extraHeaders, extraBody, temperature, maxContextLength, primaryModel y fasterModel son opcionales. Después, selecciónalo con `junie --model custom:<id>` o con el comando /model: los modelos personalizados aparecen en la lista después de los proveedores integrados.

¿La baseUrl de Junie CLI debe incluir /v1 o la ruta completa?

La ruta completa. JetBrains indica que baseUrl se usa como URL de endpoint completa y que Junie no le añade ninguna ruta; también especifica que debe configurarse con el endpoint completo del apiType elegido. Para un perfil OpenAICompletion que use Kunavo, es https://api.kunavo.com/v1/chat/completions: no el origen ni la raíz /v1 que necesitan clientes como Kilo Code. Los dos perfiles de ejemplo de la propia documentación de JetBrains incluyen una ruta completa por la misma razón.

¿Por qué Junie indica que no pudo cargar un perfil porque falta una variable de entorno?

Porque los valores de apiKey y extraHeaders admiten referencias ${VAR_NAME}, y JetBrains documenta que, si una variable de entorno referenciada no está definida, el perfil no se carga y Junie muestra un error con el nombre de la variable que falta. La resolución se lleva a cabo al cargar el perfil, así que el síntoma es que el perfil desaparece de la lista de modelos, no que falle una solicitud. Exporta la variable antes de iniciar Junie o sustituye la referencia por un valor literal.

¿Puede Junie CLI usar su propia clave BYOK con una pasarela como Kunavo?

La pantalla BYOK y un perfil personalizado son dos opciones distintas. La página BYOK de JetBrains explica cómo conectar un proveedor conocido —OpenAI, Anthropic, Google, xAI, OpenRouter o GitHub Copilot— desde /account o desde «Use your own API key» en la pantalla de bienvenida. También indica que el proveedor factura todo el uso y que no se necesita una suscripción a JetBrains AI. Si el endpoint no está en esa lista, incluido Kunavo, debes añadirlo como perfil de LLM personalizado, es decir, mediante el archivo JSON de esta página. Junie CLI permite usar tu propia clave: la documentación del complemento de JetBrains indica que el complemento Junie no admite esta opción.

¿Por qué Junie llama a un modelo que no seleccioné?

Junie divide un perfil en dos roles. Según la documentación, fasterModel es el modelo que se usa para tareas auxiliares internas, como resumir el contexto o clasificar tareas. JetBrains indica que, si no defines ese bloque, los roles heredan las propiedades de nivel superior; así que el tráfico auxiliar se ejecuta con tu modelo principal y se factura a su precio. El ajuste consiste en asignar un id más económico a fasterModel.id, como en el perfil de esta página. Ambos roles heredan baseUrl, apiType y apiKey de nivel superior, así que solo hay que cambiar el id.

¿Kunavo ha probado Junie CLI?

No. Lo que se comprobó el 21 de septiembre de 2026 fue la documentación oficial de JetBrains sobre LLM personalizados: los nombres y el orden de los campos, los valores apiType aceptados y la regla de usar el endpoint completo se citan de esa documentación. Kunavo no ha instalado Junie CLI, fijado una compilación ni enviado una solicitud a través de él, y no afirma nada aquí sobre el streaming, los ciclos de ida y vuelta de herramientas ni el enrutamiento de modelos dentro del cliente. Lo único que puedes comprobar de forma aislada es si el endpoint y la clave funcionan, y para eso sirve el curl de esta página.