Retour
Comment nous avons reconstruit la présélection des CV avec un workflow AI-native
June 4, 2026
12 min de lecture
Partager cet article

Comment nous avons reconstruit la présélection des CV avec un workflow AI-native

Nous avons exécuté 125 agents IA en parallèle pour évaluer 115 candidats selon une grille d'évaluation cohérente, produisant une liste restreinte classée, argumentée et entièrement auditable, pour 65 $.

Cet article porte sur une petite expérience : brancher notre base de données Notion de recrutement sur Claude Code et exécuter un workflow dynamique qui déploie plus de 100 agents IA en parallèle pour lire des CV, les noter selon une grille cohérente, et vérifier mutuellement leurs jugements — produisant une liste restreinte classée sur laquelle nous pouvions agir immédiatement.

L'ensemble a coûté 65 $ et s'est déroulé en environ 13 minutes pour 115 candidats. Mais plus intéressantes encore que le coût étaient les questions méthodologiques soulevées — quand utiliser une flotte d'agents plutôt qu'un seul, comment éviter l'inflation des scores par l'IA, et ce que signifie encoder « l'excellence » dans quelque chose qu'une machine peut réellement exécuter.

1. Qu'est-ce qu'un workflow dynamique

Commençons par le concept, car c'est la fondation sur laquelle tout le reste repose.

La plupart des usages de l'IA aujourd'hui suivent un schéma prompt-réponse : envoyer un message, obtenir une réponse, itérer. Cela fonctionne bien pour des tâches ponctuelles, mais devient maladroit lorsqu'il faut faire la même chose sur 115 objets — soit on copie-colle 115 fois, soit on demande à une seule conversation de les traiter séquentiellement, ce qui devient de plus en plus lent et bruyant au fil du temps.

Un workflow dynamique est un modèle différent : du code qui orchestre une flotte d'agents IA. Ses propriétés déterminantes sont :

  • Flux de contrôle déterministe + jugement IA, gardés séparés. Les boucles, la répartition, l'agrégation et l'application des quotas sont gérées par le code (reproductible, auditable) ; le jugement subjectif (ce CV est-il assez solide ?) est délégué aux agents IA.
  • Parallélisme en éventail (fan-out). Un seul appel parallel(...) peut lancer simultanément des dizaines, voire des centaines d'agents indépendants, chacun travaillant sur sa propre part sans contaminer les autres.
  • Pipelines multi-étapes. Le résultat d'une étape alimente la suivante. Le code gère le filtrage, le classement et la déduplication entre les étapes.
  • Sortie structurée. Chaque agent renvoie un JSON conforme à un schéma — pas du texte de chat en format libre — afin que le code en aval puisse le consommer directement.

Une analogie : une conversation unique, c'est comme consulter un seul expert pendant un après-midi. Un workflow dynamique, c'est comme réunir un panel d'évaluation de 125 personnes, remettre à chaque membre une grille et un dossier de candidat, faire tourner toutes les évaluations en parallèle, vérifier les meilleurs résultats de manière croisée, et agréger le tout en une liste classée — avec la logique d'assemblage, de répartition et d'agrégation intégrée au script.

Le tri de CV se prête naturellement à ce schéma : volume élevé, critères uniformes, jugement subjectif, exigence d'équité.

Pour une introduction technique plus approfondie : A harness for every task: dynamic workflows in Claude Code

2. Le workflow de recrutement : objectifs et conception

Le problème

Nous avions un point de friction concret : plus d'une centaine de candidats en statut « examen initial » dans notre base de données Notion de recrutement, sans moyen réaliste de les traiter manuellement sans dérive de standard — le niveau d'exigence appliqué au CV n° 80 n'est presque jamais le même que celui du CV n° 5.

Je voulais tester une idée précise : peut-on abstraire « à quoi ressemble l'excellence à l'ère des agents IA » en une grille exécutable par une machine et lisible par un humain, puis faire passer les 115 candidats par cette même grille, au même calibrage ?

L'objectif n'était explicitement pas de laisser l'IA prendre les décisions de recrutement. L'objectif était :

  1. Comprimer 115 candidats en une liste restreinte, classée et justifiée, afin que l'attention humaine se porte sur les personnes qui la méritent réellement.
  2. Rendre les critères transparents et itérables — si le résultat est erroné, on modifie un fichier Markdown, pas du code ni une intuition.

Trois décisions de conception clés

Décision 1 : critères et code sont totalement séparés

Les critères d'évaluation résident dans des fichiers Markdown autonomes (criteria/), et non intégrés dans le code du workflow. N'importe qui — y compris des coéquipiers non techniques — peut modifier le comportement de tri en éditant ces fichiers :

criteria/
├── 00-philosophy.md          Philosophie générale : ce que nous recherchons + la règle « relever la barre »
├── 01-pedigree.md            Base académique / initiale solide    (poids 20%)
├── 02-ai-agent-fluency.md    Aisance native avec l'IA               (poids 35%)
├── 03-grit-problem-solving.md  Résolution de problèmes & dépassement de difficultés  (poids 30%)
├── 04-talent-lens.md         Signal de talent exceptionnel          (poids 15%)
└── scoring.md                Formule de notation + tranches de grade + règle du quota de 5%

Ces quatre dimensions constituent notre « standard d'excellence pour l'ère des agents IA, v0.1 ». La logique derrière chacune :

  • L'aisance native avec l'IA a le poids le plus élevé (35%). En 2026, le fait qu'une personne utilise réellement des outils agentiques comme Claude Code comme partie centrale de sa façon de travailler constitue un facteur majeur de productivité différenciant. Nous pénalisons spécifiquement le bourrage de mots-clés — lister « Claude Code » sans preuve de projet vérifiable est traité comme un signal faible.
  • Preuves concrètes de résolution de problèmes (30%). Nous recherchons des « cicatrices » : des choses construites de manière autonome depuis zéro, des récits de dépassement d'obstacles réels — pas des reproductions de niveau tutoriel.
  • Base solide (20%). Le parcours académique sert de proxy pour le potentiel brut — c'est un signal, pas une exigence. Un diplôme d'université sélective associé à une production médiocre est pénalisé ; un autodidacte sans diplôme prestigieux mais avec un vrai travail livré obtient un bonus.
  • Signal de talent exceptionnel (15%). Cette dimension est délibérément subjective. Le prompt demande : une équipe comme celle d'Anthropic ou un fondateur comme Musk voudrait-il immédiatement le contacter ? Elle capture l'agentivité, le goût et la vélocité que les trois autres dimensions ne capturent pas.

Décision 2 : encoder « relever la barre » comme une contrainte dure, pas un slogan

scoring.md inclut une règle ferme : les candidats atteignant le niveau supérieur (S) doivent représenter ≤ 5% du pool total. Une fois toute la notation terminée, le code applique un plafond global : même si de nombreux candidats obtiennent techniquement un score dans la tranche S, seuls les 5% supérieurs sont autorisés à passer. Cela contre directement un mode d'échec connu — la notation par IA est naturellement indulgente. Sans contrainte dure, elle notera la moitié du pool comme « excellent ».

Décision 3 : ajouter une revue contradictoire pour repérer les scores gonflés

La notation seule ne suffit pas. Un seul agent de notation peut se laisser influencer par des mots-clés impressionnants — « publié dans une revue de premier plan », « a construit mon propre framework ». Les candidats les mieux classés passent donc par une seconde phase : un panel d'agents « avocat du diable » dont la mission explicite est d'argumenter contre le fait que « cette personne mérite une note de premier niveau » et de faire baisser les scores partout où les preuves ne les soutiennent pas pleinement.

Le workflow

Configuration 📋 Base de données Notion de recrutement — extraction via Notion CLI → un fichier de données structuré par candidat

IA Phase 1 : Notation (115 agents en parallèle)

  • Lit 6 fichiers MD de critères + le fichier de données de ce candidat
  • Visite activement les liens GitHub / portfolio pour vérifier les preuves
  • Produit un JSON structuré : scores sur 4 dimensions + raisonnement + points forts + signaux de risque

Code Synthèse déterministe

  • Calcule les totaux pondérés
  • Tri global par classement, calcule les places du quota de 5%
  • Sélectionne les meilleurs candidats pour la file de revue contradictoire

IA Phase 2 : Revue contradictoire (agents en parallèle)

  • Le personnage « avocat du diable » examine chaque candidat du haut du classement
  • Argumente contre la désignation de premier niveau
  • Fait baisser les scores là où les preuves sont insuffisantes

Code Verdict déterministe

  • Retrie selon les scores calibrés
  • Applique le plafond dur de 5%
  • Attribue les tranches de grade finales : S / A / B / C / D

Résultat : Rapport classé Markdown structuré avec scores par candidat, raisonnement et verdict de la revue contradictoire

Les étapes bleues (notation / revue) sont de l'IA. Les étapes grises (synthèse / verdict) sont du code. Cette séparation est intentionnelle : tout ce qui est mathématique — pondération, classement, application des quotas — va au code pour la reproductibilité ; tout ce qui exige un jugement — cette personne est-elle assez solide ? — va à l'IA.

3. Ce que nous avons observé : résultats et enseignements

Tous les candidats ci-dessous ont été anonymisés. Nous décrivons le type de travail, pas les noms ni les détails identifiants.

Ce que nous avons exécuté

MétriqueValeur
Candidats115 (postes Agent Researcher / Agent Engineer / Growth)
Total d'agents125 (115 notation + 10 revue contradictoire)
Durée d'exécution~13 minutes (plafond de concurrence ~14, complété en 8 vagues)

Répartition

GradeNombre
S — Exceptionnel0
A — Solide0
B — Qualifié6
C — Moyen26
D — Non recommandé83

Le quota de 5% (5 places) est resté totalement inutilisé — ce n'est pas le quota qui a bloqué qui que ce soit ; c'est le seuil de score absolu. Personne n'a franchi seul le plancher de la tranche A. Plus de détails sur la raison pour laquelle c'est en fait un signal utile ci-dessous.

À quoi ressemblait le haut du classement (anonymisé)

Sans exception, les candidats les mieux classés étaient des personnes qui avaient réellement construit des agents — pas des personnes qui avaient simplement entendu parler de l'IA :

  • N° 1 : Un étudiant en master qui a construit de zéro un atelier multi-agents de type Claude Code — incluant la boucle principale de l'agent, l'analyse des appels d'outils, la compression du contexte, le lancement de sous-agents et les garde-fous de sécurité. Tout le code est vérifiable, pas de simples descriptions.
  • N° 2 : Un autre étudiant en master qui avait déployé un système multi-agents réel et publiquement accessible (application de domaine vertical), avec une production académique en complément.
  • Plus bas : quelqu'un qui a écrit un moteur d'orchestration d'agents en Go depuis zéro ; quelqu'un qui a livré un agent de codage léger en étudiant l'architecture de Claude Code ; quelqu'un qui a construit de manière autonome un jeu avec un LLM local en sept jours en utilisant des outils IA de bout en bout.

Ce qu'ils avaient en commun : leurs signaux forts n'apparaissaient presque jamais dans le corps du CV — ils se trouvaient dans les dépôts GitHub et les portfolios. C'est précisément pourquoi chaque agent de notation avait pour instruction de visiter activement les liens et de vérifier les preuves plutôt que de simplement lire le texte du CV.

Trois enseignements

Enseignement 1 : la revue contradictoire a réellement détecté des scores gonflés

L'exemple le plus clair concerne les deux premiers candidats. Après la phase de notation, les deux affichaient des totaux pondérés autour de 82 points — suffisant pour entrer dans la tranche A et frôler le seuil S. Après la revue contradictoire, les deux se sont retrouvés autour de 75 points, avec un raisonnement très précis :

« A construit un atelier multi-agents vérifiable — l'aisance native avec l'IA est un signal fort. Mais le projet a environ 3 semaines, un seul contributeur, 0 étoile, aucun test. Conceptuellement une réimplémentation, pas une résolution de problème originale. Presque aucune preuve à l'appui au-delà de la ligne diplôme : un candidat solide à fort potentiel, mais pas exceptionnel. »

« Un vrai bâtisseur natif de l'IA, vérifiable. Mais la publication revendiquée dans une revue de premier plan n'apparaît que dans les notes du recruteur, sans source vérifiable de manière indépendante. Le backend du système principal est privé ; la contribution individuelle ne peut être confirmée. Utiliser des titres académiques non vérifiés pour prétendre au niveau supérieur relève de l'inflation de score par mots-clés. »

C'est exactement ce que la conception visait à accomplir : elle n'a pas écarté ces candidats — elle a ramené les scores à ce que les preuves peuvent réellement soutenir. Un seul agent de notation peut se laisser emporter ; un panel d'agents distinct dont le rôle est de contester ramène cela de manière fiable.

Enseignement 2 : S:0 / A:0 n'est pas un bug — c'est un miroir

Le premier réflexe est de se demander si la barre a été mal placée. Mais en regardant le pool honnêtement :

  • Une large part des candidats avait des CV très épars — des dimensions clés (expérience IA, travail vérifiable) tout simplement absentes.
  • De nombreux candidats aux postes d'Agent Engineer n'avaient aucune preuve d'utilisation d'outils agentiques et aucun lien GitHub.
  • Le pool contenait aussi des e-mails commerciaux de recruteurs et des notifications système LinkedIn — ceux-ci ont été correctement identifiés comme non pertinents et notés 0, ce qui a révélé au passage que notre base de données de recrutement avait besoin d'un nettoyage.

Autrement dit, une grille stricte a nettement séparé le signal du bruit. Les vrais bâtisseurs (top 6) et les « généralistes accomplis » (tranche intermédiaire) se sont retrouvés dans des positions clairement distinctes. C'est là tout l'intérêt — manquer quelques-uns plutôt que gonfler tout le monde.

Cela soulève aussi une question ouverte qui mérite d'être discutée : le seuil actuel de la tranche A (78 points) est-il trop sévère pour des candidats étudiants avec un solide historique GitHub mais sans encore de parcours professionnel ? Fait intéressant, les agents de revue contradictoire eux-mêmes ont décrit les deux premiers comme des « candidats à fort potentiel » — mais le score pondéré les a maintenus dans la tranche B. La décision d'assouplir ce seuil pour les candidats à fort potentiel en début de carrière est un jugement à prendre après avoir observé la qualité réelle des entretiens du groupe B. La bonne nouvelle : ce changement se résume à un chiffre dans un fichier Markdown. Aucun code requis.

Enseignement 3 : « les critères en tant que code » rend le désaccord productif

Les discussions sur les standards de recrutement restent généralement vagues — « nous voulons des gens motivés », « quelqu'un capable de se débrouiller ». Comme cette grille est écrite avec des poids et des exemples de référence, la conversation devient immédiatement concrète : « La capacité IA devrait-elle peser 35% ou 40% ? » « Combien un bâtisseur atypique sans diplôme prestigieux gagne-t-il réellement ? » « Le quota devrait-il être de 5% ou 8% ? » — chaque désaccord correspond à une ligne précise dans un fichier Markdown qui peut être modifiée, versionnée et débattue. Le standard devient un actif que l'on entretient, pas un consensus que l'on répète à chaque réunion.

4. Coût et retour sur investissement

Dépense exacte

Nous avons utilisé Claude Opus 4.8 (niveau supérieur). Répartition précise par catégorie de tokens :

CatégorieTokensTarif / MSous-total
Entrée (cache manqué)2 306 6915,00 $11,53 $
Écriture cache6 536 4626,25 $40,85 $
Lecture cache12 806 4040,50 $6,40 $
Sortie248 31225,00 $6,21 $
Total~65 $

Cela revient à environ 0,57 $ par candidat.

Une découverte contre-intuitive : les écritures de cache constituent le plus gros poste

L'hypothèse naturelle est que, puisque 115 agents lisent tous les 6 mêmes fichiers de critères, la mise en cache des prompts devrait beaucoup aider. Ce n'est pas le cas, du moins pas de la façon attendue.

La mise en cache des prompts fonctionne sur une correspondance exacte de préfixe, et chaque session d'agent est indépendante. 125 agents signifient 125 sessions indépendantes — chacune avec une description de tâche différente (données de candidat différentes) — donc un cache écrit par l'agent A ne peut pas être atteint par l'agent B. La mise en cache aide bien au sein de la propre exécution multi-tours de chaque agent (lire les critères → visiter GitHub → visiter le portfolio → produire un résultat, en relisant le contenu précédent à chaque tour).

Cela révèle un compromis architectural : le parallélisme en éventail multiplie les coûts d'écriture de cache (chaque agent construit son propre cache), mais achète un jugement isolé, non contaminé, et élimine l'accumulation quadratique de contexte du traitement séquentiel. Pour les tâches sensibles à la qualité du jugement, ce compromis en vaut la peine.

Comment penser le retour sur investissement

Comparaison directe avec la revue manuelle : un responsable du recrutement lisant attentivement un CV, vérifiant le GitHub et rédigeant des notes — de manière conservatrice, 5 à 10 minutes par candidat. Sur 115, cela représente 10 à 19 heures de travail concentré, avec des standards qui dérivent tout au long du processus.

Ce workflow a produit :

QuoiÀ quel point c'est bon
Coût0,57 $ par candidat, résultat classé complet en ~13 minutes
ProfondeurScores sur quatre dimensions, raisonnement écrit, signaux de risque et verdict de revue contradictoire par candidat
CohérenceLe candidat n° 1 et le candidat n° 115 évalués selon exactement la même grille
AuditabilitéChaîne complète de raisonnement pour chaque placement

Mais le retour sur investissement le plus important est attentionnel : cela a redirigé l'attention humaine loin des 83 candidats clairement inadaptés et vers les 6 véritables bâtisseurs en tête de classement. C'est la chose la plus utile qu'un tri initial puisse accomplir.

Pourrait-on faire moins cher ?

Oui, mais ce n'est probablement pas nécessaire. Si cela devenait une opération à haute fréquence et à haut volume (des centaines de candidats par jour), l'optimisation pratique consisterait à :

  • Utiliser Sonnet pour la phase de notation, Opus uniquement pour la revue contradictoire — probablement une réduction de coût de 70 à 80% avec une perte de qualité minimale.
  • Ou utiliser un modèle moins cher pour un premier passage grossier, puis Opus pour l'évaluation détaillée du niveau supérieur.

Mais le recrutement est peu fréquent, à fort enjeu et difficile à défaire. À 65 $ pour traiter un pipeline entier avec une auditabilité complète et des critères itérables, la conclusion est claire : utilisez le meilleur modèle. N'échangez pas la qualité du jugement contre des économies marginales.

La vue d'ensemble

Ce qui est réellement enthousiasmant dans cette expérience, ce n'est pas « l'IA peut trier des CV » — ce n'est pas une idée nouvelle. C'est que le modèle du workflow dynamique — du code orchestrant une flotte d'agents IA — rend certaines catégories de travail structurables, reproductibles et itérables pour la première fois.

Le recrutement n'est qu'un point d'entrée. Le même schéma — critères en tant que fichiers lisibles + évaluation parallèle en éventail + revue contradictoire + agrégation déterministe — se transpose à tout domaine où il faut porter des jugements subjectifs cohérents à haut volume : modération de contenu, revue de code, tri des retours utilisateurs, analyse concurrentielle, diligence raisonnable.

La grille est en v0.1. Elle n'est pas parfaite. Mais c'est désormais un actif versionné, débattable, améliorable — pas un accord implicite qui vit dans la tête de quelqu'un. Ce changement, plus que n'importe quel résultat individuel, est ce dont cette expérience parlait vraiment.

Publié le June 4, 2026
Plus d'articles