Documentation

Documentation

Junie CLI

Junie CLI utilise un fichier JSON pour configurer un endpoint personnalisé ; il n’y a pas d’écran de paramètres. Neuf lignes dans $JUNIE_HOME/models/kunavo.json, puis junie --model custom:kunavo : vous pouvez alors utiliser Claude et GPT avec une seule clé, tout en dirigeant le trafic des tâches auxiliaires vers un service moins cher.

Junie CLI accepte un endpoint personnalisé sous forme de profil JSON dans $JUNIE_HOME/models/, où baseUrl est l’URL complète de l’endpoint et fasterModel détermine où aboutissent les requêtes auxiliaires.

$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 désigne l’endpoint complet, chemin inclus. JetBrains le précise clairement : « baseUrl est utilisé comme URL d’endpoint complète — Junie n’y ajoute aucun chemin », et indique de « le définir sur l’endpoint complet correspondant à votre apiType ». Ce champ ne doit donc contenir ni la racine de l’hôte ni la racine /v1 attendue par la plupart des clients ; il doit contenir https://api.kunavo.com/v1/chat/completions. S’arrêter à https://api.kunavo.com/v1 est le moyen le plus probable d’obtenir une erreur 404 avec un profil par ailleurs correct.
Une variable d’environnement manquante empêche le chargement de tout le profil, pas l’envoi de la requête. Les valeurs de apiKey et extraHeaders acceptent les références $${VAR_NAME}, et JetBrains décrit exactement le problème : « Si une variable d’environnement référencée n’est pas définie, le profil ne peut pas être chargé et Junie signale une erreur indiquant la variable manquante. » Exportez KUNAVO_API_KEY avant de démarrer Junie. Le profil est lu lors du chargement, et non à la première requête. Si le shell a perdu l’export, le profil disparaît de /model au lieu de renvoyer une erreur 401.
fasterModel est le modèle auquel Junie confie les tâches que vous ne lui avez pas demandées. JetBrains le décrit comme « le modèle utilisé pour des tâches auxiliaires internes, comme résumer le contexte ou classer les tâches » et précise que si primaryModel ou fasterModel « n’est pas défini explicitement, il hérite des propriétés de premier niveau ». Sans bloc fasterModel dans le profil, les tâches de gestion courante sont donc facturées au tarif de votre modèle principal. La substitution d’une ligne ci-dessus suffit à corriger le problème ; c’est pourquoi le bloc figure dans la configuration minimale et non dans une annexe.
Ce profil est dérivé du schéma publié par JetBrains, consulté à la date indiquée ci-dessous. Kunavo n’a pas utilisé Junie CLI avec son endpoint : ni session, ni tour en continu, ni aller-retour avec un outil, et aucune version du client n’a été épinglée et validée. Une page de configuration publiée ne constitue pas un test, et rien ici ne doit être interprété comme tel. Le curl ci-dessous est le point que vous pouvez vérifier en dix secondes ; le comportement de Junie au-delà relève de JetBrains.
Pas encore de clé ? Créez un compte Kunavo, créez une clé (elle commence par sk-kn-) et ajoutez un crédit à partir de 10 $ — les appels sont payés sur ce solde et les appels échoués ne sont pas facturés. Le tableau de bord s’ouvre ensuite sur la configuration Junie CLI.

Étape par étape

  1. Créez une clé sur /app/keys et copiez-la : elle n’est affichée qu’une seule fois. Exportez-la sous le nom KUNAVO_API_KEY dans le shell depuis lequel vous démarrerez Junie, ou insérez directement la clé dans le fichier. JetBrains précise que « les valeurs sans référence $${...} sont utilisées telles quelles ».
  2. Enregistrez le JSON ci-dessus sous le nom $JUNIE_HOME/models/kunavo.json pour votre compte, ou .junie/models/kunavo.json pour le partager avec un dépôt. Le nom de fichier sans .json devient l’identifiant du profil ; c’est pourquoi le sélecteur ci-dessous affiche custom:kunavo.
  3. Définissez id sur l’identifiant du modèle que vous voulez réellement utiliser. Il est décrit comme « l’identifiant du modèle attendu par l’endpoint API » ; vous pouvez donc saisir directement un identifiant Kunavo du tableau ci-dessous. Les identifiants sont résolus par l’endpoint, et non par Junie.
  4. Démarrez Junie et choisissez le profil : junie --model custom:kunavo, ou la commande /model dans une session interactive. Les modèles personnalisés « apparaissent dans la liste de sélection après les fournisseurs intégrés ».
  5. Donnez-lui une tâche qui modifie un fichier plutôt qu’une simple formule de salutation. Junie est un client agentique et s’appuie sur les appels d’outils pour presque tout ce qu’il fait. Une première exécution qui lit et écrit quelque chose vous en apprendra donc bien plus qu’une simple réponse.

Vérifié avec Page des modèles LLM personnalisés de JetBrains pour Junie le 21 septembre 2026. Les paramètres tiers évoluent ; si le nom d’un champ ne correspond plus à ce que vous voyez ici, cette page fait autorité, pas celle-ci.

Voici la version courte. Le guide complet — choix du modèle, coût d’une session réelle et modes d’échec — se trouve dans Junie CLI et Claude Code — comparaison des limites d’endpoint.

Vérifiez avant de déboguer le client

Une requête suffit à déterminer si l’échec vient de l’endpoint, de la clé ou du fichier de configuration. Si cette requête renvoie du JSON, la même URL de base et la même clé fonctionnent dans 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-..."

Quel identifiant de modèle saisir dans le champ

Tous les modèles textuels sont accessibles sous forme d’identifiant de modèle — la liste à jour se trouve sur GET /v1/models, et le catalogue avec les prix sur la page des modèles. Les tarifs sont en USD par million de tokens, entrée / sortie.

Identifiant du modèleEntrée / sortie sur KunavoOù cela s’intègre dans Junie CLI
claude-sonnet-5$1.40 / $7.00le primaryModel pour les tâches courantes, comme modifier des fichiers
claude-opus-5$3.50 / $17.50un plan dont une erreur coûterait cher, épinglé par session
claude-haiku-4-5$0.70 / $3.50le rôle fasterModel : résumer le contexte et classer les tâches
gpt-5-6-sol$2.00 / $12.00un second avis d’une autre famille — un deuxième profil, avec la même clé
La facturation se fait au token à partir d’un solde prépayé, sans frais mensuels — consultez la facturation. Avec un contexte répété — ce qu’envoient la plupart des éditeurs et clients de chat — la mise en cache des prompts influe davantage sur la facture que le choix du modèle.

Les deux autres valeurs apiType auxquelles Kunavo répond

apiType désigne un format de requête, et non un fournisseur. Junie accepte quatre valeurs : OpenAICompletion, OpenAIResponses, Google et Anthropic. Kunavo propose trois routes ; deux des trois autres valeurs ont donc une baseUrl correspondante ici. Comme Junie n’ajoute aucun chemin, changer de format implique aussi de modifier l’URL :

  1. "apiType": "OpenAICompletion" avec https://api.kunavo.com/v1/chat/completions — le profil ci-dessus, recommandé sur cette page, car cette route est la plus utilisée des trois.
  2. "apiType": "Anthropic" avec https://api.kunavo.com/v1/messages — Kunavo répond au format Messages sur cette route.
  3. "apiType": "OpenAIResponses" avec https://api.kunavo.com/v1/responses.

Déterminer lequel des trois apiType de Junie fonctionne le mieux avec un modèle donné relève précisément d’un test à l’exécution, et non d’une lecture de la documentation ; cette page ne les classe donc pas au-delà de la première ligne. Choisissez-en un, gardez l’URL et le apiType cohérents, et si un profil avec une clé renvoie une erreur 401, indiquez explicitement les identifiants d’accès au lieu de deviner quel en-tête Junie utilise. JetBrains ne documente apiKey que sous forme négative : « Si omis, les requêtes sont envoyées sans en-tête Authorization » — et ne précise jamais le schéma utilisé lorsqu’il est présent. extraHeaders est décrit comme « des en-têtes HTTP supplémentaires à inclure dans chaque requête » et accepte les mêmes références $${VAR}, ce qui fait de "extraHeaders": {"Authorization": "Bearer $${KUNAVO_API_KEY}"} la forme sans ambiguïté.

Questions fréquentes

Comment ajouter un fournisseur personnalisé à Junie CLI ?

Junie CLI lit les fournisseurs personnalisés dans des profils JSON, et non depuis un écran de paramètres. Placez un fichier dans $JUNIE_HOME/models/ pour votre compte ou dans .junie/models/ à l’intérieur d’un projet ; le nom de fichier sans l’extension .json devient l’identifiant du profil. Les clés obligatoires sont id, baseUrl et apiType. Les clés apiKey, displayName, providerName, extraHeaders, extraBody, temperature, maxContextLength, primaryModel et fasterModel sont facultatives. Sélectionnez ensuite le profil avec `junie --model custom:<id>` ou la commande /model : les modèles personnalisés apparaissent dans la liste après les fournisseurs intégrés.

L’URL baseUrl de Junie CLI doit-elle inclure /v1 ou le chemin complet ?

Le chemin complet. JetBrains précise que baseUrl est utilisé comme URL d’endpoint complète, à laquelle Junie n’ajoute aucun chemin, et qu’il faut renseigner l’endpoint complet correspondant à apiType. Pour un profil OpenAICompletion utilisant Kunavo, il s’agit de https://api.kunavo.com/v1/chat/completions — et non de la racine de l’hôte ni de la racine /v1 requise par des clients comme Kilo Code. Pour la même raison, les deux profils d’exemple de la documentation JetBrains comportent un chemin complet.

Pourquoi Junie indique-t-il qu’un profil n’a pas pu être chargé à cause d’une variable d’environnement manquante ?

Parce que les valeurs de apiKey et extraHeaders acceptent les références ${VAR_NAME}, et que JetBrains précise qu’un profil ne peut pas être chargé si une variable d’environnement référencée n’est pas définie. Junie signale alors une erreur indiquant le nom de la variable manquante. La résolution a lieu au chargement du profil : celui-ci disparaît donc de la liste de modèles au lieu de provoquer l’échec d’une requête. Exportez la variable avant de démarrer Junie, ou remplacez sa référence par une valeur littérale.

Junie CLI peut-il utiliser votre propre clé BYOK avec une passerelle comme Kunavo ?

L’écran BYOK et le profil personnalisé sont deux méthodes distinctes. La page BYOK de JetBrains décrit la connexion à un fournisseur nommé — OpenAI, Anthropic, Google, xAI, OpenRouter ou GitHub Copilot — via /account ou « Use your own API key » sur l’écran d’accueil, et précise que l’utilisation est facturée par le fournisseur sans abonnement JetBrains AI requis. Un endpoint absent de cette liste, y compris Kunavo, doit être configuré comme profil LLM personnalisé, dans le fichier JSON présenté sur cette page. L’utilisation de votre propre clé est une fonctionnalité de Junie CLI : la documentation du plugin JetBrains précise qu’elle n’est pas prise en charge par le plugin Junie.

Pourquoi Junie appelle-t-il un modèle que je n’ai pas sélectionné ?

Junie répartit un profil entre deux rôles. fasterModel est décrit comme le modèle utilisé pour les tâches auxiliaires internes, par exemple résumer le contexte ou classer les tâches. Si vous ne définissez pas ce bloc, JetBrains précise que les rôles héritent des propriétés de premier niveau : le modèle principal est donc utilisé pour les tâches auxiliaires, au tarif correspondant. Pour changer cela, définissez fasterModel.id sur un identifiant moins cher, comme dans le profil de cette page. Les deux rôles héritent de baseUrl, apiType et apiKey définis au premier niveau ; seul l’identifiant doit donc changer.

Kunavo a-t-il testé Junie CLI ?

Non. Le 21 septembre 2026, la documentation de JetBrains sur les LLM personnalisés a été vérifiée : les noms et l’ordre des champs, les valeurs apiType acceptées et la règle de l’endpoint complet proviennent de cette documentation. Kunavo n’a pas installé Junie CLI, épinglé de version ni envoyé de requête par son intermédiaire. Il ne fait ici aucune affirmation sur le streaming, les allers-retours avec des outils ou le routage des modèles dans le client. Vous pouvez vérifier séparément une seule chose : le bon fonctionnement de l’endpoint et de la clé, à l’aide de la commande curl de cette page.