Documentação

Documentação

Jan Agent

O Jan Agent não inclui um mecanismo de inferência, por isso sempre chama o endpoint que você indicar. Uma linha jan config set grava a Kunavo em ~/.jan/config.toml, e o agente de terminal funciona com Claude e GPT usando uma única chave.

Uma linha `jan config set --base-url https://api.kunavo.com/v1` grava a Kunavo em ~/.jan/config.toml, e a CLI de prévia do Jan Agent — que não inclui mecanismo de inferência — roda com essa chave.

jan config set — grava em ~/.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
A URL base mantém seu /v1, nos dois tipos de protocolo. O Jan acrescenta apenas a rota: a página de contribuição de provedores diz que o login “valida a chave contra GET {base_url}/models”, e a página de provedores diz que uma entrada configurada é consultada para obter seu GET /models na primeira vez que você abre /model em uma sessão. Todas as URLs base impressas nessa documentação terminam em /v1 — inclusive a da Anthropic no exemplo jan cli models list. Portanto, --api-type anthropic também usa https://api.kunavo.com/v1, o oposto do Claude Code e dos SDKs oficiais da Anthropic, nos quais o mesmo sufixo resulta em /v1/v1/messages e um 404. Um caminho duplicado no erro revela qual convenção você está usando.
O Jan Agent está em versão prévia, e ele mesmo deixa isso claro. O guia de início rápido avisa que o instalador em dev obtém conteúdo do canal agent-nightly — “espere versões com qualidade de nightly”. Não há uma versão publicada com tag para consultar; portanto, execute jan --version e anote essa string junto desta configuração: as opções abaixo foram consultadas na documentação na data indicada no rodapé desta página, e uma versão nightly pode alterar alguma delas. Uma compilação a partir do código-fonte (scripts/install-jan-agent.sh --source) não se atualiza automaticamente, o que é uma forma de manter a versão fixa.
Esta configuração foi consultada na documentação do próprio Jan. A Kunavo não executou o Jan Agent contra o endpoint — nem uma sessão, nem um turno transmitido em fluxo, nem uma interação completa com ferramentas; o mesmo vale para todos os clientes desta família. Uma página de configuração publicada não é um teste de compatibilidade. Mantenha disponível a rota que já estiver funcionando enquanto experimenta esta, e lembre-se de que jan config unset --provider kunavo é a reversão completa.
A Kunavo não oferece modelos de embeddings, conversão de texto em fala ou conversão de fala em texto, portanto uma entrada de provedor da Kunavo responde a conversas e nada mais. O Jan Agent não precisa de mais nada: sua memória consiste em arquivos comuns em <project>/.jan/agent/memory/, não em um armazenamento vetorial, então nada no próprio ciclo do agente precisa de outro tipo de modelo.
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 Jan Agent.

Passo a passo

  1. Crie uma chave em /app/keys e copie-a — ela é exibida uma única vez.
  2. Confira o que você está configurando: jan --version. O Jan Desktop também inclui uma CLI chamada jan, mas com um conjunto diferente de comandos; portanto, confirme que jan config set --help lista --base-url antes de digitar o restante.
  3. Execute a linha jan config set acima. --provider é um ID escolhido por você, não um nome de uma lista fixa — o próprio exemplo da documentação para hardware local usa --provider local — e --model pode ser repetido; ele substitui qualquer lista existente em vez de acrescentar itens a ela.
  4. Confirme que a configuração foi aplicada com jan config list (com as chaves ocultadas) ou jan config path para ver o próprio arquivo; em seguida, execute jan cli models list para conferir o que cada provedor oferece. Um ID de modelo digitado manualmente permanece mesmo quando o endpoint deixa de listá-lo; jan cli models refresh --provider kunavo considera como verdadeira a lista do endpoint.
  5. Acesse um projeto e execute jan; depois, escolha o modelo com /model. Prefira jan --plan na primeira execução: ele é somente leitura, então uma incompatibilidade de protocolo aparece antes de qualquer gravação no disco.
  6. Dê a ele uma tarefa que edite um arquivo. O Jan Agent é um agente, portanto o uso de ferramentas e a transmissão em fluxo são o que uma primeira execução deve exercitar — são os recursos que falhariam primeiro se a compatibilidade do endpoint fosse apenas parcial, e uma saudação não exercita nenhum dos dois.

Verificado em Página de provedores do Jan Agent 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.

Esta é a versão resumida. O guia completo — escolha do modelo, custo de uma sessão real e modos de falha — está em o guia de modelos e custos da API do Jan, que também aborda o Jan Desktop.

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 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-..."

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 Jan Agent
claude-sonnet-5$1.40 / $7.00o modelo de trabalho padrão — o ID a colocar primeiro em --model
claude-opus-5$3.50 / $17.50um plano em que seria caro errar; combine-o com jan --plan
claude-haiku-4-5$0.70 / $3.50turnos econômicos: triagem, resumos e o ciclo que funciona o dia todo
gpt-5-6-sol$2.00 / $12.00uma segunda opinião de outra família, com a mesma chave e a mesma URL base
gpt-5-6-terra$0.70 / $4.20leitura de contexto longo, ainda usando o tipo de API openai
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.

Há duas coisas diferentes chamadas chave de API do Jan

Elas ficam no mesmo arquivo e têm significados opostos; por isso, jan config list pode parecer incorreto para quem espera a outra.

O queDe onde vemO que autentica
jan loginEntrar no Tokamak, o backend auto-hospedado, pelo shell ou com /login no consoleSua própria implantação do Tokamak. O Jan Agent grava a chave recebida em ~/.jan/config.toml para você
jan config set --api-keyUma credencial que você já tem para algum endpoint — aqui, a chave sk-kn- da KunavoEsse endpoint, cuja cobrança é feita por solicitação. Esta é a opção abordada nesta página

O Jan Desktop não emite nenhum dos dois: ele não tem conta, então não há nada para gerar nele. O servidor de API local aceita uma chave que você mesmo inventa, que é um terceiro significado e pertence a outro host.

O que o Jan Desktop fornece e onde isso termina

O Jan Agent lê as configurações do provedor em quatro fontes, cada uma prevalecendo sobre as anteriores, e a segunda surpreende muita gente.

  1. ~/.jan/config.toml — a base e o único arquivo que jan config set grava.
  2. O settings.json do Jan Desktop — apenas herdado. Ele adiciona provedores que você não configurou no Agent, nunca substitui os que você já configurou e nunca grava alterações de volta nesse arquivo.
  3. Um bloco [provider] no agent.toml de um projeto — uma escolha explícita por projeto, que prevalece sobre as duas fontes anteriores. Esse arquivo normalmente é enviado para o repositório, então mantenha api_key fora dele.
  4. --provider / --api-key na linha de comando, ou JAN_API_KEY / <PROVIDER>_API_KEY — a opção mais explícita e mais efêmera.

Há duas consequências que convém conhecer antes de depurar o problema errado. jan config list pode não mostrar nenhum provedor, enquanto jan cli models list retorna vários — o segundo inclui os provedores herdados do Desktop, que não estão armazenados em ~/.jan/config.toml. Além disso, um provedor herdado nunca é atualizado, porque não há uma entrada aqui para reescrever: se você quiser manter atualizada a lista de modelos da Kunavo, ela precisa ser uma entrada jan config set própria, como a criada pelo bloco acima.

Quando dois provedores oferecem o mesmo ID de modelo

A Kunavo oferece IDs como claude-sonnet-5, assim como uma entrada de provedor apontada diretamente para o fornecedor. O Jan Agent precisa escolher um deles, e a ordem documentada é: primeiro, uma correspondência exata na lista models de um provedor; depois, um prefixo <provider>/<model> que indique um provedor configurado; e, quando vários oferecem o mesmo ID, um provedor com credenciais prevalece sobre um equivalente sem chave. Portanto, kunavo/claude-sonnet-5 é como você indica qual deles queria usar. O qualificador serve apenas para o Jan — ele é removido antes do envio da solicitação, pois os provedores upstream rejeitam IDs qualificados com o nome de um provedor.

A mesma entrada, dentro do console

Se preferir não digitar opções: /settings > providers gerencia as mesmas entradas ~/.jan/config.toml, e a abre um formulário de adição com os campos name, base url, api key e models separados por espaços. O formulário faz duas coisas que as opções de linha de comando não fazem: a URL base precisa usar https:// (ou http:// para um endpoint localhost), para que uma chave nunca seja enviada por uma conexão remota sem criptografia — a Kunavo usa https://, então isso não é um impedimento — e, ao editar, o campo da chave de API mostra (unchanged) e mantém o valor armazenado, a menos que você digite algo nele. Se você deixar esse campo em branco, a chave será apagada, em vez de permanecer como está.

Perguntas frequentes

Como aponto o Jan Agent para um endpoint de API personalizado?

Com um comando: jan config set --provider <id> --api-key <key> --base-url <url> --model <model> --api-type openai. O ID do provedor é escolhido por você, não selecionado de uma lista fixa; --model pode ser repetido e substitui qualquer lista existente; e --api-type usa por padrão a compatibilidade com OpenAI, então pode ser omitido para um endpoint compatível com o formato da OpenAI. A entrada é gravada em ~/.jan/config.toml, que você também pode editar em /settings > providers, dentro do console. A própria página do Jan sobre como contribuir com um provedor informa que um endpoint simples compatível com OpenAI não requer código algum, apenas essa configuração.

A URL base do Jan Agent precisa terminar em /v1?

Sim, inclusive para o tipo de protocolo Anthropic. O Jan acrescenta apenas a rota: a página sobre como contribuir com um provedor informa que o login valida a chave usando GET {base_url}/models, e a página de provedores diz que uma entrada configurada é consultada com GET /models quando você abre /model pela primeira vez em uma sessão. Como o caminho acrescentado é /models, e não /v1/models, a URL base armazenada já precisa ser a raiz /v1 — https://api.kunavo.com/v1 para a Kunavo. Todas as URLs base mostradas na documentação do Jan terminam da mesma forma, inclusive a entrada Anthropic no exemplo da lista de modelos do jan cli. Isso é o oposto do Claude Code e dos SDKs oficiais da Anthropic, nos quais adicionar /v1 resulta em /v1/v1/messages e em um erro 404.

Qual é a diferença entre jan login e jan config set --api-key?

Eles autenticam coisas diferentes. jan login entra no Tokamak, o backend auto-hospedado, e salva em ~/.jan/config.toml a chave que recebe — é um login na sua própria implantação. jan config set --api-key armazena uma credencial que você já tem para algum endpoint, como no caso de um provedor de terceiros, por exemplo, a Kunavo. O próprio Jan Desktop não emite nenhuma das duas, pois não tem uma conta para emitir uma chave; a chave solicitada pelo servidor de API local é um texto que você inventa, um terceiro significado da expressão.

Por que jan config list não mostra nada, mas jan cli models list mostra modelos?

Porque os dois comandos leem conjuntos diferentes. jan config list mostra apenas o que está armazenado em ~/.jan/config.toml, enquanto jan cli models list também inclui provedores herdados do Jan Desktop, que não estão armazenados nesse arquivo. A documentação do Jan aponta isso diretamente. Na prática, isso significa que um provedor herdado nunca é atualizado — não há uma entrada para reescrever —, então, se quiser manter atualizada a lista de modelos de um provedor, adicione-o primeiro com jan config set.

O Jan Agent consegue executar modelos Claude sem uma conta da Anthropic?

Sim. O Jan Agent não inclui um mecanismo de inferência, então um modelo sempre é executado no endpoint que você configurar, e --api-type indica o protocolo de comunicação, não o fornecedor. Um ID Claude é resolvido na URL base que você definir, ou seja, as credenciais usadas são as desse endpoint. A Kunavo oferece IDs Claude e GPT por meio de uma interface compatível com OpenAI usando uma única chave. Esta configuração foi publicada com base na documentação do próprio Jan, e não em uma execução de teste do cliente; além disso, o Jan Agent ainda está em prévia em um canal nightly, então considere que as opções correspondem à versão que você verificar com jan --version.

O Jan Agent retorna 404 em todas as solicitações. Qual é o problema?

Quase sempre, o problema está na URL base. Se faltar /v1, o Jan solicitará /models e /chat/completions na origem, que retornará 404 em vez de falhar na autenticação; um /v1/v1 duplicado no erro indica que o sufixo foi acrescentado a uma URL que já o continha. Primeiro, verifique fora do cliente fazendo uma chamada GET /v1/models ao endpoint com um curl simples e a mesma chave: se retornar JSON, o endpoint e a chave estão corretos e o problema está na entrada configurada; 401 indica problema na chave; 404, na URL. Depois, confira o caminho da configuração com jan config path e leia diretamente o valor armazenado em base_url.