Documentação

Documentação

Junie CLI

O Junie CLI aceita um endpoint personalizado em um arquivo JSON, não em uma tela de configurações. Com nove linhas em $JUNIE_HOME/models/kunavo.json e junie --model custom:kunavo, você executa Claude e GPT usando uma chave só — e direciona o tráfego auxiliar para uma opção barata.

O Junie CLI aceita um endpoint personalizado como um perfil JSON em $JUNIE_HOME/models/, onde baseUrl é a URL completa do endpoint e fasterModel decide para onde vai o tráfego auxiliar.

$JUNIE_HOME/models/kunavo.json — ou .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 é o endpoint completo, incluindo todo o caminho. A JetBrains afirma claramente: “O baseUrl é usado como a URL completa do endpoint — o Junie não acrescenta um caminho a ele” e orienta a “defini-lo como o endpoint completo para o apiType escolhido”. Portanto, este campo não é nem a origem nem a raiz /v1 que a maioria dos clientes requer — é https://api.kunavo.com/v1/chat/completions. Parar em https://api.kunavo.com/v1 é a causa mais provável de um erro 404 em um perfil que, de resto, está correto.
A ausência de uma variável de ambiente invalida o perfil inteiro, não a solicitação. Os valores de apiKey e extraHeaders aceitam referências $${VAR_NAME}, e a JetBrains documenta exatamente o que acontece: “Se uma variável de ambiente referenciada não estiver definida, o perfil não será carregado e o Junie exibirá um erro identificando a variável ausente.” Exporte KUNAVO_API_KEY antes de iniciar o Junie — o perfil é lido no carregamento, não na primeira solicitação; por isso, se o shell perdeu a exportação, o perfil desaparece de /model em vez de retornar um 401.
fasterModel é onde o Junie envia tarefas que você não solicitou. A JetBrains descreve essa opção como “O modelo usado em tarefas auxiliares internas, como resumir o contexto ou classificar tarefas” e diz que, se primaryModel ou fasterModel “não for definido explicitamente, eles herdarão as propriedades do nível superior”. Portanto, sem um bloco fasterModel, as tarefas de manutenção são cobradas à tarifa do seu modelo principal. A substituição de uma linha acima é a solução completa e é por isso que o bloco aparece na configuração mínima, em vez de ficar em um apêndice.
Este perfil foi derivado do esquema publicado pela JetBrains, consultado na data abaixo. A Kunavo não executou o Junie CLI com seu endpoint — nenhuma sessão, nenhum turno transmitido em streaming, nenhuma interação completa com ferramentas e nenhuma versão do cliente fixada e aprovada. 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 verificar em dez segundos; o comportamento do Junie sobre essa base depende de você e da JetBrains.
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 Junie CLI.

Passo a passo

  1. Crie uma chave em /app/keys e copie-a — ela será exibida uma única vez. Exporte-a como KUNAVO_API_KEY no shell a partir do qual iniciará o Junie ou insira uma chave literal no arquivo; a JetBrains observa que “os valores sem qualquer referência $${...} são usados como estão”.
  2. Salve o JSON acima como $JUNIE_HOME/models/kunavo.json para sua conta ou como .junie/models/kunavo.json para compartilhá-lo com um repositório. O nome do arquivo sem .json se torna o ID do perfil — é isso que faz o seletor abaixo mostrar custom:kunavo.
  3. Defina id como o ID do modelo que você realmente quer usar. Ele é descrito como “O identificador do modelo esperado pelo endpoint da API”, então basta inserir um slug da Kunavo da tabela abaixo; os IDs são resolvidos no endpoint, não dentro do Junie.
  4. Inicie o Junie e escolha o perfil: junie --model custom:kunavo ou o comando /model em uma sessão interativa. Os modelos personalizados “aparecem na lista de seleção de modelos depois dos provedores integrados”.
  5. Dê a ele uma tarefa que edite um arquivo, em vez de apenas cumprimentá-lo. O Junie é um cliente agêntico e depende da chamada de ferramentas para quase tudo o que faz; por isso, uma primeira execução que lê e grava algo informa muito mais do que uma única resposta.

Verificado em Página de LLMs personalizados da JetBrains para o Junie 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 Junie CLI e Claude Code — comparação dos limites dos endpoints.

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

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 Junie CLI
claude-sonnet-5$1.40 / $7.00o primaryModel para tarefas comuns — tarefas que editam arquivos
claude-opus-5$3.50 / $17.50um plano em que seria caro errar, fixado por sessão
claude-haiku-4-5$0.70 / $3.50a função fasterModel: resumir o contexto e classificar tarefas
gpt-5-6-sol$2.00 / $12.00uma segunda opinião de outra família — outro perfil, a mesma chave
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.

Os outros dois valores de apiType atendidos pela Kunavo

apiType indica um formato de solicitação, não um fornecedor, e o Junie aceita quatro valores: OpenAICompletion, OpenAIResponses, Google e Anthropic. A Kunavo oferece três rotas, então dois dos outros três valores têm uma baseUrl correspondente aqui — e, como o Junie não acrescenta nenhum caminho, mudar o formato também exige mudar a URL na mesma edição:

  1. "apiType": "OpenAICompletion" com https://api.kunavo.com/v1/chat/completions — o perfil acima e o recomendado nesta página, pois essa rota é a mais amplamente utilizada das três.
  2. "apiType": "Anthropic" com https://api.kunavo.com/v1/messages — a Kunavo atende ao formato Messages nesse caminho.
  3. "apiType": "OpenAIResponses" com https://api.kunavo.com/v1/responses.

Qual dos três funciona melhor no Junie para determinado modelo é exatamente o tipo de pergunta que um teste em tempo de execução responde e uma leitura da documentação não; por isso, esta página não os classifica além da primeira opção. Escolha um, mantenha a URL e o apiType alinhados e, se um perfil configurado com chave retornar 401, informe a credencial explicitamente, em vez de tentar adivinhar o cabeçalho usado pelo Junie: a JetBrains documenta apiKey apenas em termos negativos — “Se omitido, as solicitações são enviadas sem um cabeçalho Authorization” — e nunca informa qual esquema é usado quando ele está presente. extraHeaders é documentado como “cabeçalhos HTTP adicionais a incluir em cada solicitação” e aceita as mesmas referências $${VAR}, o que torna "extraHeaders": {"Authorization": "Bearer $${KUNAVO_API_KEY}"} a forma inequívoca.

Perguntas frequentes

Como adiciono um provedor personalizado ao Junie CLI?

O Junie CLI lê provedores personalizados de perfis JSON, não de uma tela de configurações. Coloque um arquivo em $JUNIE_HOME/models/ para sua conta ou em .junie/models/ dentro de um projeto; o nome do arquivo sem a extensão .json se torna o ID do perfil. As chaves obrigatórias são id, baseUrl e apiType; apiKey, displayName, providerName, extraHeaders, extraBody, temperature, maxContextLength, primaryModel e fasterModel são opcionais. Depois, selecione o perfil com `junie --model custom:<id>` ou o comando /model — os modelos personalizados aparecem na lista depois dos provedores integrados.

A baseUrl do Junie CLI precisa de /v1 ou do caminho completo?

Do caminho completo. A JetBrains afirma que baseUrl é usada como a URL completa do endpoint, que o Junie não acrescenta um caminho a ela, e orienta defini-la como o endpoint completo correspondente ao apiType escolhido. Em um perfil OpenAICompletion para a Kunavo, use https://api.kunavo.com/v1/chat/completions — não a origem nem a raiz /v1 que clientes como o Kilo Code exigem. Os dois perfis de exemplo na documentação da própria JetBrains incluem um caminho completo pelo mesmo motivo.

Por que o Junie informa que um perfil não foi carregado porque falta uma variável de ambiente?

Porque os valores de apiKey e extraHeaders aceitam referências ${VAR_NAME}, e a JetBrains documenta que, se uma variável de ambiente referenciada não estiver definida, o perfil não será carregado e o Junie exibirá um erro com o nome da variável ausente. A resolução ocorre quando o perfil é carregado; por isso, o sintoma é o desaparecimento do perfil da lista de modelos, e não uma solicitação com falha. Exporte a variável antes de iniciar o Junie ou substitua a referência por um valor literal.

O Junie CLI pode usar sua própria chave BYOK com um gateway como a Kunavo?

A tela BYOK e um perfil personalizado são duas opções distintas. A página BYOK da JetBrains trata da conexão com um provedor identificado — OpenAI, Anthropic, Google, xAI, OpenRouter ou GitHub Copilot — por meio de /account ou de “Use your own API key” na tela de boas-vindas, e informa que todo o uso é cobrado pelo provedor, sem necessidade de uma assinatura do JetBrains AI. Um endpoint que não esteja nessa lista, incluindo a Kunavo, deve ser configurado como um perfil de LLM personalizado, ou seja, o arquivo JSON desta página. Usar sua própria chave é um recurso do Junie CLI: a documentação do plugin da JetBrains informa que esse recurso não é compatível com o plugin do Junie.

Por que o Junie está chamando um modelo que não selecionei?

O Junie divide um perfil em duas funções, e fasterModel é documentado como o modelo usado em tarefas auxiliares internas, como resumir o contexto ou classificar tarefas. Se você não definir esse bloco, a JetBrains informa que as funções herdam as propriedades do nível superior — então o tráfego auxiliar usa seu modelo principal e é cobrado à tarifa dele. Definir fasterModel.id como um ID mais barato, como no perfil desta página, é a solução; baseUrl, apiType e apiKey do nível superior são herdados pelas duas funções, então basta alterar o ID.

A Kunavo testou o Junie CLI?

Não. O que foi verificado, em 21 de setembro de 2026, foi a documentação de LLMs personalizados da própria JetBrains — os nomes e a ordem dos campos, os valores aceitos para apiType e a regra de endpoint completo são citados dessa documentação. A Kunavo não instalou o Junie CLI, não fixou uma versão nem enviou uma solicitação por meio dele e não afirma nada aqui sobre streaming, interações com ferramentas ou roteamento de modelos dentro do cliente. A única coisa que você pode verificar de forma isolada é se o endpoint e a chave funcionam, e o curl desta página faz isso.