Recruter, c’est comparer des personnes que l’on rencontre à quelques jours d’intervalle, sur la base de notes prises à la volée et d’une impression qui s’estompe vite. À la fin d’une série d’entretiens, le souvenir du premier candidat est déjà flou, les notes sont éparpillées entre un carnet et un fichier, et la décision finit par pencher du côté du dernier rencontré ou du plus sympathique. C’est exactement le problème que nous avons voulu éviter en recrutant notre développeur junior à Tallinn.
Plutôt que de tenir nos notes dans un tableur, nous avons construit une petite application web pour mener le processus. Elle réunit au même endroit ce qui était dispersé : la fiche du poste, la fiche du candidat, la prise de notes pendant l’entretien, l’évaluation chiffrée et, au bout, un classement pondéré qui rend la comparaison explicite. Cet article décrit ce qu’elle fait et comment elle est pensée. C’est un outil que nous avons construit pour notre propre usage, et nous en ouvrons le code sur GitHub : rien ne vous empêche de le lancer chez vous.
Le contexte toujours sous les yeux
L’application suit la hiérarchie réelle d’un recrutement : une entreprise, des postes, et pour chaque poste des candidats. Cette cascade reste affichée dans la barre latérale, si bien qu’on sait toujours où l’on se trouve sans avoir à se rappeler par où l’on est passé.
La fiche entreprise se définit une seule fois et sert à tous les postes. On colle une adresse web ou un texte, et l’application en tire une présentation propre que l’on peut ensuite retoucher. Chaque poste fonctionne de la même façon : une description de fonction, importée depuis une annonce ou rédigée à la main, et surtout des critères de sélection propres au poste. Ce sont eux qui donneront, plus tard, leur sens aux notes.
La fiche candidat rassemble l’identité (nom, prénom, date de naissance d’où l’âge se calcule, contact, statut), les CV téléversés en PDF, et un résumé de profil. Rien de tout cela n’est laissé au hasard au moment de l’entretien : avant de noter quoi que ce soit, on a sous les yeux qui l’on reçoit et pour quel poste.
L’entretien : encoder ce qui compte, pendant qu’on l’entend
La feuille d’entretien est le cœur de l’outil. Elle place le contexte du recrutement (entreprise, poste, critères, identité du candidat) juste à côté de la grille de notation, pour qu’on n’ait jamais à changer d’écran au milieu d’une réponse.
La notation repose sur quatre critères de base, notés de 0 à 10 : l’aisance dans la langue, le professionnalisme, les compétences techniques et les langues étrangères. Chaque note s’accompagne d’un champ libre, parce qu’un chiffre seul ne dit pas pourquoi on l’a donné. À cela s’ajoutent des évaluations personnalisées en nombre libre : un titre, une note sur 10, une remarque. C’est là qu’on loge ce qui est propre à un poste donné et qui n’entre pas dans les quatre cases standard.
Deux champs de texte libre complètent la feuille : les attentes du candidat et ses spécificités. L’idée n’est pas de tout réduire à des chiffres, mais de garder une trace fidèle de l’échange pendant qu’il a lieu, quitte à la relire à froid.
L’IA assiste, elle ne tranche pas
L’application s’appuie sur un modèle de langage à plusieurs endroits, toujours en appui et jamais à la place du recruteur.
Elle lit les CV (y compris les PDF, via un modèle capable de « voir » la page) et propose une identité : nom, prénom, date de naissance. Le mot important est « propose » : ces champs sont soumis à validation, jamais écrits par-dessus une saisie existante. Elle rédige aussi un résumé de profil à partir des CV, que l’on peut corriger ou régénérer. Et à la fin, elle produit un résumé d’entretien qui reprend le contexte, confronte le candidat aux critères de sélection et formule une recommandation.
Deux principes guident cette assistance. D’abord, tout reste modifiable : aucun texte généré n’est figé. Ensuite, tout est transparent : une fenêtre permet de lire le prompt exact envoyé au modèle avant de relancer une génération. On voit ce que la machine a sous les yeux, on garde la main sur ce qu’elle en fait.
L’interface existe en cinq langues : français, anglais, estonien, allemand et néerlandais. L’IA suit ce choix et rédige ses résumés dans la langue d’affichage. Un recruteur qui mène l’entretien en estonien obtient un résumé en estonien ; un collègue qui repasse l’interface en français le relit en français, à partir des mêmes notes.
Côté infrastructure, l’application parle à n’importe quel point de terminaison compatible OpenAI. On choisit l’URL, la clé et le modèle dans la configuration, qu’il s’agisse d’un service hébergé ou d’un modèle que l’on fait tourner soi-même.
Le classement et les pondérations
C’est ici que l’outil rend service au moment de décider. Le tableau de bord d’un poste classe les candidats par score global décroissant, avec pour chacun une pastille de score et de petites barres par critère pour voir d’un coup où se situent ses forces.
Le score global n’est pas une moyenne aveugle. Chaque critère reçoit une pondération de 0 à 3, propre au poste, réglable par un curseur. Le score se recalcule en direct quand on bouge un curseur, ce qui permet de répondre à des questions concrètes : et si les compétences techniques comptaient double ? Et si l’aisance linguistique pesait moins pour ce poste-ci ? Les critères non notés sont simplement ignorés, sans pénaliser le candidat.
Vendredi, fin de la série d’entretiens. Trois candidats se tiennent à un demi-point l’un de l’autre. On monte la pondération des compétences techniques, et le classement se réorganise : celui qui parlait le mieux passe derrière celui qui codait le mieux. La décision n’a pas changé d’humeur, elle a changé de critère, et on peut l’expliquer.
L’outil permet aussi de comparer deux candidats côte à côte : un graphique en radar superpose leurs profils, un graphique en barres détaille l’écart critère par critère, et leurs résumés d’entretien s’affichent l’un à côté de l’autre. La comparaison cesse d’être un effort de mémoire pour devenir une lecture.
Léger et local, là où les outils classiques sont lourds
La plupart des logiciels de recrutement sont des plateformes en ligne facturées au mois, où vos données de candidats partent vivre sur les serveurs d’un tiers. Pour un poste à pourvoir de temps en temps, c’est beaucoup d’abonnement, beaucoup de fonctionnalités dont on ne se sert pas, et des CV de personnes réelles confiés à un service externe.
Nous avons pris le chemin inverse. L’outil tient dans un seul conteneur que l’on lance chez soi ; les données restent en local, dans une base de fichier qui ne quitte pas votre machine. Pas d’abonnement, pas de compte à créer, pas de CV qui s’en va sur une plateforme. Les seuls appels vers l’extérieur sont ceux que vous décidez, vers le service d’IA de votre choix, et même celui-là peut être un modèle que vous hébergez vous-même. C’est la même conviction qui guide notre approche de l’automatisation : traiter les données au plus près, n’externaliser que ce qui doit l’être.
Conçu pour s’adapter
Parce que nous recrutions en Estonie, l’outil sait gérer l’isikukood, le code d’identification estonien, avec sa validation propre. Ce n’est pas un détail anecdotique : c’est la preuve que l’outil se moule sur un contexte plutôt que d’imposer le sien. Là où un logiciel généraliste vous oblige à entrer vos cas particuliers dans ses cases, un outil que l’on maîtrise se plie aux vôtres. Vos critères, vos pondérations, vos champs : tout est modelable parce que le code est à vous.
Sous le capot
L’application tient dans un seul conteneur. Le serveur est écrit en Python avec FastAPI, les données vivent dans une base SQLite (en mode WAL pour rester fiable avec un seul processus), et l’interface est une application React servie par le même serveur. Le tout se lance avec Docker et un volume pour la persistance.
Ce sont les briques que nous utilisons sur nos projets en production, et c’est précisément le genre de stack que nous voulions faire découvrir à un profil junior. L’outil que nous avons construit pour le recruter est, en quelque sorte, déjà un échantillon de ce sur quoi il travaillera.
Pourquoi nous le partageons
C’est un outil que nous avons d’abord construit pour nous-mêmes, et nous en ouvrons le code sur GitHub : vous pouvez le lire, le lancer en local pour vos propres entretiens, et l’adapter à votre processus. C’est un bon exemple de notre façon de travailler, la même que nous appliquons à l’automatisation des processus métier ou au registre d’injections intravitréennes : un outil ciblé, sobre, qui rend une décision plus claire sans la confisquer.
Si vous voulez un outil de ce genre façonné autour de votre propre processus, réservez un échange avec transtorm.ai ci-dessous.
Réserver un appel