Recherche d'emploi assistée par IA sur votre machine : un framework Claude Code

Un workflow Claude Code local qui évalue les offres, personnalise les candidatures, vérifie les PDF pour les systèmes ATS et prépare les candidats aux entretiens.

Recherche d'emploi assistée par IA sur votre machine : un framework Claude Code

La recherche d'emploi est souvent considérée comme un problème de rédaction : trouver une offre, modifier un CV, rédiger une lettre de motivation, puis recommencer. En pratique, la difficulté consiste à gérer l'ensemble du parcours sans perdre le contexte ni envoyer par accident des documents génériques et inexacts.

ai-job-search aborde le processus comme un workflow d'ingénierie. Il transforme Claude Code en assistant local de candidature capable de créer un profil candidat structuré, de rechercher des portails d'emploi, d'évaluer l'adéquation, de générer des documents personnalisés, de vérifier leur rendu PDF et de préparer les supports d'entretien. Comme le workflow s'exécute dans votre propre dépôt, vos données professionnelles restent sous votre contrôle et peuvent être adaptées à votre marché.

Le projet est également particulièrement facile à évaluer : son auteur indique avoir utilisé ce workflow après avoir perdu son poste fin 2025. Le processus a produit 69 candidatures personnalisées, 20 premiers entretiens et un contrat signé. L'auteur a commencé à travailler comme ingénieur IA en juin 2026. Ces chiffres ne garantissent pas le même résultat pour chaque candidat, mais ils fournissent un exemple concret d'un système utilisé comme véritable outil de recherche d'emploi plutôt que comme démonstration.

Le workflow principal

Le workflow principal est volontairement court :

/setup -> /scrape -> /apply <url>
   |        |            |
 profil  recherche    évaluer l'adéquation
 fichiers portails    rédiger les documents
                       relire et réviser

/setup crée les fondations. Il peut lire un répertoire documents/ rempli contenant un CV, un export LinkedIn, des diplômes, des références et des candidatures précédentes. Il peut également importer un CV unique collé dans le chat ou recueillir les informations au moyen d'un entretien. Le chemin du dossier de documents est idempotent : il peut donc être réexécuté à mesure que de nouvelles sources deviennent disponibles.

/scrape recherche les offres sur les portails configurés, supprime les doublons et présente les résultats triés par adéquation. Si l'ensemble des résultats est trop important pour être inspecté manuellement, /rank attribue un score par lots aux offres et renvoie une liste restreinte classée. L'évaluation prend en compte les compétences, l'expérience, la culture, le lieu et la cohérence avec le parcours professionnel, plutôt que de se limiter à la correspondance de mots-clés.

Enfin, /apply accepte l'URL d'une offre ou une description de poste collée et exécute l'ensemble du processus de candidature. Cette séparation est importante : la découverte des offres, leur priorisation et la génération des documents sont des décisions différentes, et les combiner dans un seul prompt non structuré rend plus difficile l'examen du raisonnement du système.

Ce que /apply fait différemment

La commande de candidature suit un modèle rédacteur-relecteur :

  1. Analyser l'offre d'emploi.
  2. Évaluer l'adéquation du candidat selon les critères configurés.
  3. Rédiger un CV et une lettre de motivation personnalisés.
  4. Lancer un second agent Claude avec un contexte vierge pour rechercher des informations sur l'entreprise et critiquer les documents.
  5. Réviser les documents à partir de cette relecture.
  6. Compiler et inspecter les PDF finaux.
  7. Effectuer une vérification de la couche de texte orientée ATS et présenter une checklist de vérification.

La conception à deux agents est importante. Un passage unique peut produire un texte fluide mais générique tout en manquant une exigence, en présentant faiblement une compétence transférable ou en donnant à la recherche sur l'entreprise un aspect superficiel. Le relecteur reçoit les brouillons directement dans le contexte au lieu de les relire, ce qui permet de limiter le nombre de tokens nécessaires à sa sollicitation. La vérification n'est exécutée qu'à la fin, même si la nouvelle étape d'inspection des PDF consacre une partie du budget économisé au rendu et aux itérations de mise en page.

Le workflow impose également une règle de factualité : les affirmations du CV et de la lettre de motivation doivent être étayées par le profil du candidat. Une compétence manquante reste une lacune. Le système n'ajoute pas de mots-clés non justifiés uniquement pour améliorer une correspondance apparente.

La mise en page PDF fait partie de la correction

Le dépôt traite les documents générés comme des artefacts de build qui doivent être testés. Le CV est compilé avec lualatex, tandis que la lettre de motivation utilise xelatex, car le fichier personnalisé cover.cls dépend de fontspec. Le workflow continue ses itérations jusqu'à ce que le CV fasse exactement deux pages et que la lettre de motivation fasse exactement une page, avec une signature visible et des polices cohérentes.

Cela permet de détecter des problèmes invisibles dans les fichiers sources : un intitulé de poste isolé en bas d'une page, une lettre de motivation qui déborde sur une deuxième page ou des icônes de liste qui utilisent silencieusement la police du texte courant. Le projet utilise des corrections LaTeX ciblées telles que \\needspace et \\enlargethispage, ainsi que des wrappers permettant d'assortir la police des éléments de liste.

Lorsqu'un CV dépasse deux pages, le contenu n'est pas supprimé mécaniquement du poste le plus ancien. Les lignes du candidat sont évaluées selon leur pertinence par rapport à l'offre ciblée, leur caractère unique dans le document et le fait que la lettre de motivation en dépende ou non. Une puce pertinente provenant d'un poste plus ancien peut donc être conservée au détriment d'une puce récente mais sans rapport.

La vérification ATS examine le texte intégré au PDF plutôt que son apparence visuelle. Avec pypdf ou pdftotext, elle vérifie que les coordonnées sont du texte littéral, que les glyphes ne sont pas corrompus, que l'ordre de lecture est cohérent et que les mots-clés pris en charge de l'offre apparaissent dans le document extrait. Si aucun des deux outils d'extraction n'est disponible, le processus se rabat sur une vérification visuelle des mots-clés.

Installation et configuration

Le framework nécessite :

  • Le CLI Claude Code, même si les compétences liées aux portails peuvent également être utilisées avec d'autres outils d'agents via AGENTS.md.
  • Python 3.10 ou une version ultérieure.
  • Bun pour les outils CLI de recherche d'emploi.
  • Une distribution LaTeX comprenant lualatex et xelatex, comme TeX Live, MacTeX, TinyTeX ou MiKTeX.

Pour le parseur ATS optionnel, installez pypdf :

pip install pypdf

pdftotext, fourni par Poppler, reste une solution de repli. Sur macOS, il peut être installé avec brew install poppler ; sur Debian ou Ubuntu, utilisez apt install poppler-utils ; sous Windows, utilisez choco install poppler. Les distributions TeX minimales peuvent également nécessiter les paquets supplémentaires listés dans SETUP.md.

Après avoir cloné le dépôt, installez les outils des portails :

gh repo fork MadsLorentzen/ai-job-search --clone
cd ai-job-search

for tool in jobbank-search jobdanmark-search jobindex-search jobnet-search linkedin-search freehire-search; do
  (cd .agents/skills/$tool/cli && bun install)
done

Les outils linkedin-search et freehire-search n'ont aucune dépendance à l'exécution ; leur installation est donc facultative et ne récupère que les types TypeScript de développement.

Un aspect important concernant la confidentialité apparaît dans les instructions de configuration : un fork GitHub public ne peut pas être rendu privé, tandis que /setup écrit dans des fichiers suivis des informations personnelles telles que les coordonnées, l'historique professionnel et les prétentions salariales. Pour une recherche d'emploi personnelle, il est recommandé d'utiliser un dépôt privé configuré avec ce projet comme dépôt distant en amont. Ne créez un fork public que si vous contribuez des modifications au projet.

Aller au-delà du Danemark

Les intégrations fournies pour Jobindex, Jobnet, Jobdanmark et Akademikernes Jobbank sont conçues pour le marché danois. L'architecture est toutefois conçue pour être portable. Chaque compétence de portail est un dossier autonome sous .agents/skills/, doté d'un CLI commun de recherche et de consultation des détails, d'une sortie --format json|table|plain, de tests et d'un indicateur enabled: dans sa définition.

/add-portal peut étudier les modèles d'URL, la structure des résultats, les règles robots et les restrictions d'accès d'un site d'emploi local, puis créer la structure et tester une nouvelle intégration. Les portails protégés par authentification sont refusés et les conditions restrictives donnent lieu à un avertissement concernant l'usage personnel. LinkedIn constitue un point de départ indépendant du pays grâce à ses endpoints publics jobs-guest, avec un indicateur de lieu explicite tel que -l "Berlin, Germany" ou -l "Remote". Le dépôt inclut également freehire-search, qui utilise l'API REST publique de freehire.me et prend en charge les filtres de région, de pays et de travail à distance.

Les compétences de portail copiées depuis un autre fork doivent être lues et testées avant utilisation. Le projet recommande notamment de vérifier les destinations réseau, les dépendances, les scripts de cycle de vie, l'accès au système de fichiers, les tests, les remarques relatives aux conditions d'utilisation et le paramètre enabled:. Comme les outils installés peuvent s'exécuter avec des autorisations Claude Code préapprouvées, cette inspection manuelle constitue un contrôle de sécurité délibéré.

Suivi, entretiens et planification de carrière

Le framework continue d'être utile après la génération d'une candidature. /outcome archive l'offre exacte, le CV envoyé et la lettre de motivation dans documents/applications/<company>_<role>/, tout en enregistrant les entretiens, les offres, les refus ou l'absence de réponse dans le suivi. /outcome followup recherche les candidatures restées sans réponse pendant le délai par défaut de 10 jours et rédige une relance adaptée au canal. Il n'envoie jamais le message et limite les relances à deux par candidature.

/interview crée des supports de préparation à partir des documents effectivement vus par l'intervieweur, des retours des tours précédents, de la recherche sur l'entreprise et de celle concernant l'intervieweur. Les questions probables sont associées à de vrais exemples STAR, et l'expérience manquante est traitée au moyen de réponses de transition honnêtes plutôt que d'histoires inventées.

Pour les rapports, /html-report génère un tableau de bord hors ligne autonome avec des graphiques sur le statut, le secteur, le canal et le tunnel de conversion, ainsi qu'un tableau des candidatures filtrable. /notion-sync propose une vue unidirectionnelle en lecture seule dans Notion via le serveur MCP officiel, tout en conservant les fichiers du dépôt comme source de référence. /gmail-sync peut proposer des changements de statut à partir de Gmail, mais nécessite une approbation et cite l'e-mail source pour chaque modification.

Le projet prend également en charge /expand pour enrichir un profil à partir de sources publiques liées, /upskill pour produire une carte thermique priorisée des lacunes de compétences et un plan d'apprentissage, ainsi qu'un script d'analyse comparative des salaires qui accepte les données fournies par l'utilisateur à partir de statistiques syndicales, d'exports Glassdoor ou de recherches personnelles.

Le multiplicateur de qualité est la profondeur du profil

Le système ne peut pas personnaliser des documents à partir d'informations absentes du profil. « Python » est une donnée faible ; « a créé des pipelines de ML pour prédire l'attrition des clients en Python avec scikit-learn » fournit au workflow une réalisation concrète, une chaîne d'outils et un contexte qu'il peut réutiliser.

Des descriptions détaillées des postes, des résultats mesurables, des précisions sur les projets, des préférences, des critères rédhibitoires et les réflexions sur ce qui vous a stimulé ou épuisé influencent tous les recommandations. Le framework peut prendre en charge un ciblage explicite, mais il peut aussi découvrir des parcours professionnels adjacents en analysant le travail réel qui se cache derrière les intitulés de poste. Les exigences linguistiques bénéficient d'un traitement dédié : les langues non déclarées peuvent entraîner un rejet automatique, tandis qu'une offre demandant un niveau supérieur à celui déclaré est signalée pour décision humaine.

Cette combinaison d'évaluation structurée, de génération de documents, de validation PDF, de suivi des candidatures et de préparation aux entretiens fait de ai-job-search bien plus qu'un simple prompt de CV. Il s'agit d'un système d'exploitation local et inspectable pour une recherche d'emploi, avec des points d'extension clairs pour les portails, les modèles de documents et les critères d'évaluation. Le projet est distribué sous licence MIT et disponible à l'adresse github.com/MadsLorentzen/ai-job-search.

Source

MadsLorentzen/ai-job-search : La recherche d'emploi qui s'exécute sur votre machine. Framework de candidature assisté par IA basé sur Claude Code : évaluer les offres, personnaliser les CV, rédiger des lettres de motivation et préparer les entretiens. Forkez-le et faites-en votre outil.