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.
{
"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.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.curl ci-dessous est le point que vous pouvez vérifier en dix secondes ; le comportement de Junie au-delà relève de JetBrains.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
- Créez une clé sur
/app/keyset copiez-la : elle n’est affichée qu’une seule fois. Exportez-la sous le nomKUNAVO_API_KEYdans 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 ». - Enregistrez le JSON ci-dessus sous le nom
$JUNIE_HOME/models/kunavo.jsonpour votre compte, ou.junie/models/kunavo.jsonpour le partager avec un dépôt. Le nom de fichier sans.jsondevient l’identifiant du profil ; c’est pourquoi le sélecteur ci-dessous affichecustom:kunavo. - Définissez
idsur 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. - Démarrez Junie et choisissez le profil :
junie --model custom:kunavo, ou la commande/modeldans une session interactive. Les modèles personnalisés « apparaissent dans la liste de sélection après les fournisseurs intégrés ». - 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.
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èle | Entrée / sortie sur Kunavo | Où cela s’intègre dans Junie CLI |
|---|---|---|
claude-sonnet-5 | $1.40 / $7.00 | le primaryModel pour les tâches courantes, comme modifier des fichiers |
claude-opus-5 | $3.50 / $17.50 | un plan dont une erreur coûterait cher, épinglé par session |
claude-haiku-4-5 | $0.70 / $3.50 | le rôle fasterModel : résumer le contexte et classer les tâches |
gpt-5-6-sol | $2.00 / $12.00 | un second avis d’une autre famille — un deuxième profil, avec la même clé |
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 :
"apiType": "OpenAICompletion"avechttps://api.kunavo.com/v1/chat/completions— le profil ci-dessus, recommandé sur cette page, car cette route est la plus utilisée des trois."apiType": "Anthropic"avechttps://api.kunavo.com/v1/messages— Kunavo répond au format Messages sur cette route."apiType": "OpenAIResponses"avechttps://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.