Documentación

Documentación

Jan Agent

Jan Agent no incluye un motor de inferencia, así que siempre llama al endpoint que especifiques. Un único comando jan config set guarda Kunavo en ~/.jan/config.toml, y el agente de terminal puede ejecutar modelos Claude y GPT con una sola clave.

Una línea `jan config set --base-url https://api.kunavo.com/v1` escribe Kunavo en ~/.jan/config.toml, y la CLI de vista previa Jan Agent — que no incluye motor de inferencia — funciona con esa clave.

jan config set — escribe en ~/.jan/config.toml
# Jan Agent is a preview on a nightly channel — check your build first.
jan --version

jan config set \
  --provider kunavo \
  --api-key sk-kn-... \
  --base-url https://api.kunavo.com/v1 \
  --model claude-sonnet-5 \
  --model claude-haiku-4-5 \
  --api-type openai

jan config list   # configured providers as JSON, keys redacted
La URL base debe conservar su /v1 en ambos protocolos. Jan solo añade la ruta: la página para contribuir un proveedor indica que el inicio de sesión «valida la clave contra GET {base_url}/models», y la página de proveedores dice que la primera vez que abres /model en una sesión, se consulta en la entrada configurada su GET /models. Todas las URL base impresas en esa documentación terminan en /v1, incluida la de Anthropic en el ejemplo jan cli models list. Así que --api-type anthropic también requiere https://api.kunavo.com/v1, justo al contrario de Claude Code y de los SDK oficiales de Anthropic, donde el mismo sufijo genera /v1/v1/messages y un error 404. Si la ruta aparece duplicada en el error, sabrás qué convención estás usando.
Jan Agent está en vista previa, según indica la propia herramienta. Su guía de inicio rápido advierte que el instalador de dev usa el canal agent-nightly: «se esperan compilaciones de calidad nightly». No hay una versión etiquetada que se pueda citar, así que ejecuta jan --version y anota esa cadena junto a esta configuración: las opciones indicadas abajo se obtuvieron de la documentación en la fecha que aparece al final de esta página, y el nombre de una opción puede cambiar en una versión nightly. Una compilación desde el código fuente (scripts/install-jan-agent.sh --source) no se actualiza por sí sola, lo que permite mantener una versión fija.
Esta configuración se obtuvo de la propia documentación de Jan. Kunavo no ha ejecutado Jan Agent contra su endpoint: ni una sesión, ni un turno transmitido en streaming, ni un ciclo completo de llamadas a herramientas; lo mismo se aplica a todos los clientes de esta familia. Una página de configuración publicada no equivale a una prueba de compatibilidad. Mantén a mano la ruta que ya te funciona mientras pruebas esta, y recuerda que jan config unset --provider kunavo permite deshacer todo.
Kunavo no ofrece modelos de embeddings, de texto a voz ni de voz a texto, por lo que una entrada de proveedor de Kunavo solo responde a solicitudes de chat. Jan Agent no requiere nada más: su memoria se guarda en archivos normales bajo <project>/.jan/agent/memory/, no en un almacén vectorial, así que el ciclo de trabajo del propio agente no requiere un segundo tipo de modelo.
¿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 Jan Agent.

Paso a paso

  1. Cree una clave en /app/keys y cópiela: se muestra una sola vez.
  2. Comprueba qué estás configurando: jan --version. Jan Desktop también incluye un CLI que se invoca como jan, pero tiene un conjunto de comandos distinto. Antes de escribir lo demás, confirma que jan config set --help muestra --base-url.
  3. Ejecuta la línea jan config set de arriba. --provider es un ID que eliges, no un nombre de una lista fija; el propio ejemplo de hardware local de la documentación usa --provider local. Además, --model se puede repetir y reemplaza cualquier lista existente en vez de ampliarla.
  4. Confirma que se haya aplicado con jan config list (las claves se ocultan) o con jan config path para consultar directamente el archivo; después, ejecuta jan cli models list para ver qué ofrece cada proveedor. Un ID de modelo escrito manualmente permanece aunque el endpoint deje de incluirlo en su lista; jan cli models refresh --provider kunavo usa, en cambio, la lista del endpoint como fuente de verdad.
  5. Cambia a un directorio de proyecto y ejecuta jan; después, elige el modelo con /model. Para la primera ejecución, es preferible usar jan --plan: es de solo lectura, por lo que cualquier incompatibilidad de protocolo saldrá a la luz antes de escribir datos en el disco.
  6. Asígnale una tarea que modifique un archivo. Jan Agent es un agente, así que la primera ejecución debe poner a prueba las llamadas a herramientas y el streaming: son las primeras funciones que fallarían ante un endpoint solo parcialmente compatible, y un saludo no pone a prueba ninguna de las dos.

Comprobado con Página de proveedores de Jan Agent 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 guía de modelos y costos de API de Jan, que también cubre Jan Desktop.

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 Jan Agent.

# 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 Jan Agent
claude-sonnet-5$1.40 / $7.00el modelo de trabajo predeterminado: el ID que debes colocar primero después de --model
claude-opus-5$3.50 / $17.50un plan en el que equivocarse saldría caro; combínalo con jan --plan
claude-haiku-4-5$0.70 / $3.50turnos económicos: clasificación inicial, resúmenes y el ciclo que se ejecuta todo el día
gpt-5-6-sol$2.00 / $12.00una segunda opinión de otra familia, con la misma clave y URL base
gpt-5-6-terra$0.70 / $4.20lectura de contexto largo, con el tipo de API openai
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.

Dos cosas distintas reciben el nombre de clave de API de Jan

Se guardan en el mismo archivo y tienen funciones opuestas, por eso jan config list puede parecer incorrecto a quien esperaba la otra.

QuéDe dónde procedeQué autentica
jan loginIniciar sesión en Tokamak, el backend autohospedado, desde el shell o con /login en la consolaTu propia implementación de Tokamak. Jan Agent escribe por ti la clave que recibe en ~/.jan/config.toml
jan config set --api-keyUna credencial que ya tienes para algún endpoint: aquí, la clave sk-kn- de KunavoEse endpoint, cuya facturación es por solicitud. Esta página trata sobre esta opción

Jan Desktop no emite ninguna de las dos: no tiene cuenta, así que no hay nada que generar. Su servidor de API local acepta una clave que inventas tú, que es un tercer significado y corresponde a otro host.

Qué transmite Jan Desktop y hasta dónde llega

Jan Agent lee los ajustes del proveedor de cuatro fuentes, cada una con prioridad sobre las anteriores, y la segunda es la que sorprende a la gente.

  1. ~/.jan/config.toml — la configuración base y el único archivo que escribe jan config set.
  2. El settings.json de Jan Desktop: solo para heredar. Añade proveedores que no hayas configurado en Agent, nunca sobrescribe los que ya tengas y nunca se escribe en él.
  3. Un bloque [provider] en el agent.toml de un proyecto: una elección explícita para cada proyecto, por lo que prevalece sobre ambos. Ese archivo suele incluirse en el repositorio, así que no pongas api_key en él.
  4. --provider / --api-key en la línea de comandos, o JAN_API_KEY / <PROVIDER>_API_KEY: la opción más explícita y más efímera.

Conviene conocer dos consecuencias antes de depurar lo que no corresponde. jan config list puede indicar que no hay proveedores mientras que jan cli models list devuelve varios: el segundo incluye los proveedores heredados de Desktop, que no están guardados en ~/.jan/config.toml. Además, un proveedor heredado nunca se actualiza, porque aquí no hay ninguna entrada que reescribir: si quieres que la lista de modelos de Kunavo se mantenga al día, debe tener su propia entrada jan config set, que es lo que crea el bloque anterior.

Cuando dos proveedores ofrecen el mismo id de modelo

Kunavo ofrece ids como claude-sonnet-5, al igual que una entrada de proveedor que apunta directamente al proveedor original. Jan Agent tiene que elegir uno, y el orden documentado es el siguiente: primero, una coincidencia exacta en la lista models de un proveedor; después, un prefijo <provider>/<model> que nombre a un proveedor configurado; y, si varios ofrecen el mismo id, prevalece el proveedor con credenciales frente a otro idéntico sin clave. Por eso, kunavo/claude-sonnet-5 indica cuál querías usar. El calificador solo es para Jan: se elimina antes de enviar la solicitud, porque los proveedores upstream rechazan un id calificado con un proveedor.

La misma entrada, desde la consola

Si prefieres no escribir indicadores: /settings > providers permite gestionar las mismas entradas ~/.jan/config.toml, y a abre un formulario para añadirlas con los campos name, base url, api key y models separados por espacios. El formulario hace dos cosas que no hacen los indicadores: la URL base debe ser https:// (o http:// para un endpoint localhost), para que la clave nunca se envíe por una conexión remota sin cifrar —Kunavo usa https://, así que esto no supone ningún problema—; además, al editar, el campo de la clave de API muestra (unchanged) y conserva lo almacenado salvo que escribas algo. Si dejas el campo vacío, se borra la clave en lugar de conservarla.

Preguntas frecuentes

¿Cómo apunto Jan Agent a un endpoint de API personalizado?

Con un comando: jan config set --provider <id> --api-key <key> --base-url <url> --model <model> --api-type openai. El id del proveedor lo eliges tú, no se toma de una lista fija; --model se puede repetir y sustituye cualquier lista existente; y --api-type tiene por defecto compatibilidad con OpenAI, así que puedes omitirlo para un endpoint con formato de OpenAI. La entrada se escribe en ~/.jan/config.toml, que también puedes editar desde /settings > providers en la consola. La propia página de Jan sobre cómo contribuir con un proveedor indica que un endpoint compatible con OpenAI no requiere código, solo esta configuración.

¿La URL base de Jan Agent debe terminar en /v1?

Sí, también para el tipo de protocolo Anthropic. Jan solo añade la ruta: la página sobre cómo contribuir con un proveedor indica que el inicio de sesión valida la clave mediante GET {base_url}/models, y la página de proveedores dice que, al abrir /model por primera vez en una sesión, se consulta el GET /models de la entrada configurada. Como la ruta añadida es /models y no /v1/models, la URL base guardada ya debe ser la raíz /v1: https://api.kunavo.com/v1 para Kunavo. Todas las URL base que aparecen en la documentación de Jan terminan igual, incluida la entrada Anthropic del ejemplo de su lista de modelos de jan cli. Esto es lo contrario de Claude Code y los SDK oficiales de Anthropic, donde añadir /v1 produce /v1/v1/messages y un error 404.

¿Cuál es la diferencia entre jan login y jan config set --api-key?

Autentican cosas distintas. jan login inicia sesión en Tokamak, el backend autohospedado, y guarda la clave que recibe en ~/.jan/config.toml: es un inicio de sesión en tu propia implementación. jan config set --api-key guarda una credencial que ya tienes para algún endpoint, como la que usas con un proveedor externo como Kunavo. Jan Desktop no emite ninguna de las dos, porque no tiene una cuenta desde la que emitirlas; la clave que solicita su servidor de API local es una cadena que inventas tú, otro significado distinto de la expresión.

¿Por qué jan config list no muestra nada mientras que jan cli models list sí muestra modelos?

Porque los dos comandos leen conjuntos distintos. jan config list solo muestra lo que está guardado en ~/.jan/config.toml, mientras que jan cli models list también incluye los proveedores heredados de Jan Desktop, que no están guardados ahí. La documentación de Jan lo señala directamente. La consecuencia práctica es que un proveedor heredado nunca se actualiza: no hay ninguna entrada que reescribir. Por eso, si quieres que la lista de modelos de un proveedor se mantenga al día, añádelo primero con jan config set.

¿Puede Jan Agent ejecutar modelos Claude sin una cuenta de Anthropic?

Sí. Jan Agent no incluye un motor de inferencia, así que un modelo siempre se ejecuta en el endpoint que configures, y --api-type especifica el protocolo de comunicación, no el proveedor. Un id de Claude se resuelve en la URL base que configures, lo que significa que las credenciales que tienes son las de ese endpoint. Kunavo ofrece ids de Claude y GPT mediante una sola clave en una interfaz compatible con OpenAI. Esta configuración se publicó basándose en la documentación de Jan, no en una prueba con el cliente, y Jan Agent sigue siendo una versión preliminar en un canal nightly; por eso, considera que los indicadores corresponden a la compilación que compruebes con jan --version.

Jan Agent devuelve 404 en todas las solicitudes. ¿Cuál es el problema?

Casi siempre, la URL base. Si falta /v1, Jan solicita /models y /chat/completions en el origen y recibe un 404, en lugar de un error de autenticación; si el error muestra /v1/v1 duplicado, se añadió el sufijo a una URL base que ya lo tenía. Compruébalo primero fuera del cliente: llama a GET /v1/models en el endpoint con un curl sencillo y la misma clave. Si recibes JSON, el endpoint y la clave funcionan y el problema está en la entrada configurada; un 401 indica que el problema es la clave y un 404, la URL. Después, comprueba jan config path y lee directamente el valor guardado de base_url.