Développer avec Junie
Développement
10 min de lecture
Mis à jour le

Développer avec Junie

Cursor, Windsurf, Kiro, Aider : ce sont les noms qui reviennent le plus souvent quand on parle d’IDE boostés à l’IA et d’agents IA. Mais il y en a un dont on parle assez peu : Junie de JetBrains.

J’ai toujours développé avec PhpStorm, j’y ai mes habitudes. Au fil des années, je l’ai personnalisé pour qu’il devienne l’IDE que je maîtrise du bout des doigts, que je connais par cœur.

Quand les premiers agents IA sont apparus, il faut quand même avouer que JetBrains a mis un temps fou à s’y mettre et a même pris un retard considérable : la sortie de AI Assistant était assez anecdotique. En dehors de l’autocomplétion, l’outil de chat intégré était assez limité : pas de génération de code, lent, pas de choix du modèle ; seule son intégration à l’environnement était le point fort.

Depuis, l’outil s’est amélioré. Ils ont sorti leur premier vrai agent IA, Junie (9 mois après tout le monde), et ce dernier s’est considérablement amélioré depuis (plus rapide, choix du modèle, intégration à l’IDE toujours au top, gestion MCP, etc.).

Aujourd’hui, j’ai envie de vous montrer comment j’utilise Junie au quotidien, comment je l’ai configuré et quelques conseils pour l’utiliser au mieux. Je ne prétends pas donner la meilleure façon, mais c’est celle que j’utilise et qui, pour le moment, me convient très bien (et qui évolue au fur et à mesure que je travaille avec).

Installation

Avant de commencer, sachez que Junie vous donne « gratuitement » 3 crédits utilisables par mois pour les prompts, ce qui permet de faire quelques prompts avec des LLM peu coûteux comme Gemini 3 Flash ; on n’en fait même pas un avec Opus, par exemple. Donc je vous conseille de prendre à minima la formule Pro (10 crédits) avec un LLM peu coûteux pour essayer. Sachez que vous avez la possibilité d’acheter des crédits supplémentaires (1 crédit = 1 € HT, valable 1 an) si vous dépassez votre quota mensuel.

Commencez par récupérer le plugin depuis le marketplace. Deux nouvelles icônes seront visibles à droite et en haut à droite de votre fenêtre.

junie-icons
junie-icons

L’icône de droite ouvre le panneau Junie, celle du haut vous donne des infos sur votre quota restant, l’accès aux paramètres, etc.

quota
quota

Les paramètres

Plusieurs paramètres peuvent être configurés depuis les Settings de Junie :

  • Action Allowlist pour définir quelles commandes pourront être exécutées par Junie sans votre confirmation
  • Mcp Settings pour paramétrer les MCP auxquels Junie pourra accéder. Notez que depuis cette fenêtre vous ajoutez des MCP pour l’ensemble des projets. Si vous voulez des MCP spécifiques au projet, ajoutez leur configuration dans .junie/mcp.
example-mcp-conf
{
  "mcpServers":
  {
    "nuxt-ui" : {
      "command": "npx",
      "args": ["mcp-remote", "https://ui.nuxt.com/mcp"]
    },
    "nuxt": {
      "command": "npx",
      "args": ["mcp-remote", "https://mcp.nuxt.com/sse"]
    },
    "context7": {
      "command": "npx",
      "args": ["-y", "@upstash/context7-mcp", "--api-key", "YOUR_API_KEY"]
    }
  }
}
  • Models pour choisir quel modèle utiliser
  • Project Settings pour définir le chemin du projet et celui vers vos guidelines ou vers le dossier de rules

Guidelines et Skills : guider Junie

À l’instar de Cursor avec ses cursor rules, Junie dispose de son propre système de guidelines pour définir vos règles de développement.

Tout se passe dans votre répertoire .junie.

Les guidelines

Par défaut, Junie se base sur .junie/guidelines.md, que vous devez créer à la racine de votre projet. Ce fichier contiendra l’ensemble de vos règles spécifiques à votre projet, comme l’architecture, les best practices des langages et frameworks utilisés, etc.

Comme ça peut vite devenir le bazar si vous regroupez tout dans un seul fichier, Junie offre depuis peu la possibilité de se baser sur un répertoire de rules et non plus sur un fichier unique (oui, Cursor le fait depuis longtemps). Dans les paramètres de Junie, plutôt que de pointer les guidelines vers guidelines.md, faites pointer vers .junie/rules. Vous pourrez ainsi mettre vos différents fichiers de règles à l’intérieur.

project-root/
|-- .junie/
    |--rules/
      |--typescript.md
      |--nuxt.md
      |--zod.md

Ces fichiers de rules seront chargés et lus par Junie à chaque nouvelle fenêtre de prompt (donc au premier prompt uniquement). Si vous éditez ces rules, il faudra ouvrir une nouvelle fenêtre de prompt.

Skills

Pendant que j’écrivais cet article, Junie a sorti une mise à jour qui ajoute la prise en charge des Agents Skills.

Pour la faire simple, un skill va indiquer à Junie comment exécuter des tâches précises, comme la génération de PDF par exemple. Je vous laisse regarder la documentation officielle pour plus de détails, mais c’est un bon plus pour éviter de laisser Junie trop faire ce qu’elle veut.

Les skills pourront être placés dans .junie/skills.

project-root/
|-- .junie/
    |--rules/
        |--typescript.md
        |--nuxt.md
        |--zod.md
    |--skills
        |--my-super-skill
            |--SKILL.md # obligatoire, contient les instructions
            |--scripts/ # optionnel, code éxécutable
            |--references/ # optionnel, documentation
            |--assets/ # optionnel, contient des templates, ressources, etc....

Un exemple de skill pourrait être un doctrine-migration qui indiquerait à Junie comment réaliser une migration Doctrine.

Fenêtre de prompt

Ouvrez votre panneau Junie.

junie-panel
junie-panel

À gauche, vous avez votre fenêtre de prompt, à droite la liste des derniers prompts exécutés et quelques exemples de prompts proposés par JetBrains.

Depuis la fenêtre de prompts, plusieurs options :

  • +vous donne accès à plusieurs options :
    • Attacher une image à votre prompt
    • Accéder aux guidelines (on y reviendra plus tard)
    • Créer un .aiignore (même utilité que le .gitignore, permet d’exclure des fichiers/dossiers de votre agent)
    • Attacher un fichier récemment ouvert à votre fenêtre de prompt
  • À côté du +, vous avez 3 choix (Autopar défaut) pour indiquer à Junie ce que vous voulez qu’elle fasse :
    • Auto laisse Junie choisir si elle doit juste vous répondre, écrire du code, ou les deux
    • Code : Junie doit produire du code
    • Ask : Junie vous répondra dans un .md
  • Ensuite, vous avez le Brave Mode pour autoriser ou non Junie à exécuter des commandes sans vous demander de confirmation (faites attention avec ça)
  • Pour finir, le Think More pour laisser ou non plus de temps à Junie pour traiter la demande. Pour des demandes complexes, ça peut améliorer le résultat, mais ça consomme évidemment plus de crédits.

Let's prompt

Maintenant que votre Junie est configuré, on peut se lancer.

Organiser son prompt

On le sait depuis le temps, mais un prompt doit être le plus précis possible sur la feature que vous souhaitez faire développer ou sur ce que vous voulez que votre agent fasse. On oublie les implémente-moi la feature X qui vont laisser trop de liberté à l’agent. Le but, ce n’est pas non plus de copier le contenu des rules, mais de diriger au maximum l’IA. Pour ça, moi je découpe mes prompts en plusieurs parties :

  • Objectif : on définit l’objectif global du prompt
  • Rules : on définit les règles à respecter pour la feature
  • Steps : les étapes que notre agent doit suivre
  • Examples : on peut aussi ajouter des exemples pour aider davantage Junie.

Prenons en exemple ce prompt :

# Objective
Be able to create income types

# Rules
* The entity is called "income type".
* The entity has the folowing parameters
  * id --> auto generated UUID
  * name --> string, length 255, mandatory
  * user --> The user who created the income type. It's a Uer object.
* A User can be associated with multiple income types, but an income type is linked to only one User.
* This entity must be exposed as an API resource with GET, GET collection, POST, PUT, and DELETE operations.
* It must be secured: only the User associated with the income type can PUT, GET (both collection and single), and DELETE it (based on JWT).

# Steps
* Create the IncomeType entity
* Run `make migration`
* DO NOT run `make exec-migration`

N’hésitez pas à mettre votre prompt en forme dans un scratch par exemple.

Quand votre prompt est prêt, exécutez-le, et Junie va commencer à bosser un peu.

Avant de produire votre code, Junie va mettre en place un plan basé sur votre prompt. Exemple :

junie-plan
junie-plan

Derrière, Junie va produire le code nécessaire, et après un temps plus ou moins long :

junie-done
junie-done

Contrôler le résultat

Super, vous avez votre petit done qui s’affiche et vous avez un petit compte-rendu ainsi que les fichiers modifiés/ajoutés/supprimés. En cliquant sur l’un d’eux, vous pourrez directement voir les ajouts via un git diff. À ce stade, il faut toujours relire ce qu’a produit Junie. Si vraiment rien ne vous convient, vous pouvez toujours effectuer un rollback depuis le résultat dans Junie.

Attention ceci dit : vous ne pouvez pas rollback une partie du code produit, au mieux vous pouvez rollback un fichier spécifique. De même, si vous effectuez un nouveau prompt dans la même fenêtre, vous ne pourrez plus rollback le prompt précédent à moins de rollback les suivants avant.

Pendant votre relecture, évitez de trop demander les corrections à Junie, surtout si elles sont mineures : vous allez consommer du crédit pour rien et alourdir le contexte, en plus de risquer de tomber dans une boucle infinie dans laquelle l’IA va se perdre (et vous avec).

Si le résultat vous convient vous pouvez le committer et passer au suivant ! Essayez aussi de faire une fenêtre par feature pour garder des contextes clairs et légers.

Mon avis

Je vous ai donné un peu ma méthode de travail avec Junie, comment le configurer et comment il fonctionne dans les grande lignes. Je sais pas trop comment donner mon avis alors on va faire un pour/contre classique

  • Les +
    • Intégration parfaite avec l'IDE qui lui donne directement accès à l'ensemble du projet
    • Enfin un large choix de modèles
    • Le fait que Junie affiche son plan avant exécution
    • Suivit de quota plutôt clair
  • Les -
    • Un peu lent
    • Les features intéressantes qui débarquent des mois après la concurrence (même si ça a tendance à s'accélerer)
    • L'historique disparait à chaque mise à jour
    • Un aperçu du nombre de crédit utilisé à la fin d'une exécution serait pas mal
    • Cher (ultimate à 36€/mois obligatoire, pro à 10€ beaucoup trop limité en terme d'usage)

Quelques ressources

J’espère vous avoir donné un aperçu clair de comment utiliser Junie au mieux. Ça fait bientôt un an que je l’utilise régulièrement, et même s’il n’est pas parfait, il continue d’évoluer régulièrement et fait le job. Je vous laisse avec quelques liens :