CommunityRédaction et éditiongithub.com

lonelydoctor/ats-resume-builder

Constructeur et exportateur de CV ATS, local et sans dépendances externes, au format ResumeIR JSON.

Qu'est-ce que ats-resume-builder ?

Cette compétence (skill) pour agent IA (Claude Code, Cursor, etc.) permet de créer, optimiser, diagnostiquer et exporter des CV entièrement compatibles ATS, en local, sans aucun appel réseau. Elle transforme les informations fournies par l'utilisateur (texte, fichier PDF/DOCX/TXT) en une structure JSON normalisée selon le schéma ResumeIR.v1, génère un rapport de diagnostic complet (notation, problèmes, sévérité, suggestions) et une conclusion sur l'acceptabilité du CV du point de vue d'un recruteur RH. Le skill gère également le versionnage local des CV (sauvegarde, comparaison, rollback) et l'export vers les formats DOCX, PDF ou HTML via des scripts Python purement locaux. Il est conçu pour minimiser la saisie utilisateur en acceptant le collage de texte brut ou le dépôt de fichier, en ne posant des questions que sur les champs critiques manquants. Les règles strictes incluent l'interdiction d'inventer des expériences, l'utilisation d'une mise en page à une colonne sans tableaux ni icônes, et un contrôle qualité poussé (verbes d'action, quantification des résultats).

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add lonelydoctor/ats-resume-builder

Installed? Explore more Rédaction et édition skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Compétence CV / Optimisation ATS

Objectifs

  • Cette compétence permet de : aider l'utilisateur à créer, optimiser et gérer des CV professionnels compatibles ATS
  • Capacités incluses : génération de CV, optimisation, vérification d'acceptabilité pour candidature, gestion de versions, export de fichiers
  • Déclencheur : l'utilisateur a besoin de créer un nouveau CV, d'optimiser un CV existant, de comparer ou d'exporter un CV

Prérequis

  • Dépendances : cette compétence utilise des bibliothèques Python purement locales pour le traitement et l'export de fichiers (aucun service externe / dépendance réseau)
    pdfplumber>=0.10.0   # Analyse des CV PDF
    python-docx>=1.1.0   # Génération DOCX
    reportlab>=4.0.0     # Génération PDF (polices CJK intégrées, pure pip ; repli automatique vers HTML si absent)
    
  • Préparation des répertoires : créez un répertoire de gestion de versions dans le répertoire de travail courant
    mkdir -p .resume-versions
    

Principes fondamentaux

Règles strictes

  1. Ne jamais inventer d'expériences/données utilisateur : les éléments manquants sont remplacés par 【Espace réservé】 et une « liste minimale de compléments » est fournie
  2. Compatibilité ATS : par défaut, une colonne, pas de tableaux, pas de zones de texte, pas d'icônes ; utiliser des titres de sections standard
  3. Acceptabilité pour candidature : le rapport de diagnostic doit vérifier, du point de vue du premier tri RH, si le titre correspond au poste, si les années d'expérience, le lieu, les coordonnées, l'autorisation de travail, la date de disponibilité sont clairs, et s'il y a des informations interdites sur le marché cible (photo, âge, mariage, situation familiale, prétentions salariales, affiliation politique)
  4. Sortie complète : doit toujours produire le JSON ResumeIR, le rapport de diagnostic, la conclusion d'acceptabilité, et le corps du CV réécrit ; les fichiers exportés sont générés à la demande par les scripts locaux (voir « Export de fichiers »)
  5. Réduction maximale de la saisie utilisateur : privilégier le collage de texte / le téléchargement de fichier ; ne poser des questions que sur les champs critiques manquants

Structure de sortie

Toute opération doit produire les trois parties suivantes (fichiers exportés générés à la demande) :

  1. JSON ResumeIR : noms de champs fixes, conformes au Schéma ResumeIR.v1
  2. Rapport de diagnostic : liste de problèmes + sévérité + suggestions, conforme aux Spécifications du rapport de diagnostic
  3. Conclusion d'acceptabilité pour candidature : application_acceptability, répond à « Peut-on postuler maintenant / sur quoi le premier tri RH bloquera / que faut-il compléter en priorité »
  4. Corps du CV réécrit : aperçu en texte brut
  5. (Optionnel) Fichiers exportés : lorsque l'utilisateur a besoin de DOCX/PDF, appeler scripts/render_resume.py pour génération locale

Étapes d'opération

Sélection du mode

Choisir le mode en fonction du besoin de l'utilisateur :

  • Mode 1 : Génération de CV (à partir de zéro) : aider l'utilisateur à créer un CV de zéro
  • Mode 2 : Optimisation de CV (CV existant) : optimiser le CV existant de l'utilisateur

Tous les modes prennent en charge les entrées optionnelles :

  • JD (texte original collé par l'utilisateur)
  • Poste cible : target_title / target_level (Chine : P6/P7, Senior/Expert/Cadre ; postes tech US : Senior/Staff, L5/L6, SDE II, etc.)
  • Langue : zh-CN / en-US
  • Secteur : Internet/AI/Données/R&D/Opérations/Ventes/Fonctions support, etc.
  • Modèle : template_id (par défaut cn_ats_a4_v1)

Mode 1 : Génération de CV (à partir de zéro)

Étape 1 : Collecte d'informations

Aider l'utilisateur à collecter les informations suivantes avec un minimum de questions :

  • Informations de base : nom, téléphone, email, ville
  • Poste cible : target_title, target_level, target_industry
  • 2 à 3 expériences professionnelles récentes : pour chacune : entreprise, poste, dates de début et fin, 3 points clés de résultats
  • Formation : école, diplôme, spécialité, date d'obtention
  • Compétences : compétences principales (primary) et secondaires (secondary)

Étape 2 : Génération du ResumeIR

Convertir les informations collectées au format ResumeIR (champs complets dans Schéma ResumeIR.v1), les champs manquants sont remplis avec 【Espace réservé】. Exemple de squelette minimal :

{
  "meta": {"version": "1.0", "language": "zh-CN", "locale": "zh-CN"},
  "basics": {"name": "Zhang San", "phone": "【Espace réservé】", "email": "【Espace réservé】", "target_title": "Chef de Produit"},
  "summary": "",
  "skills": {"primary": ["Analyse des besoins", "Analyse de données"], "secondary": []},
  "work": [{"company": "Entreprise X", "title": "Chef de Produit", "start": "2021-06", "end": "present",
            "bullets": ["A mené…, ce qui a amélioré… de 20%"]}],
  "projects": [],
  "education": [{"school": "【Espace réservé】", "degree": "Licence", "start": "", "end": ""}]
}

Étape 3 : Génération de la première version du CV

  • Produire le JSON ResumeIR
  • Produire un aperçu en texte brut (mis en page dans l'ordre standard)
  • Générer un rapport de diagnostic (vérifier principalement l'exhaustivité)
  • Générer la conclusion d'acceptabilité pour candidature : ready / needs_fix / do_not_submit, et lister au plus 3 problèmes qui bloqueraient le premier tri RH
  • Produire une liste minimale de compléments (8 problèmes maximum)

Étape 4 : Sauvegarde de version

Sauvegarder automatiquement comme première version : version_name = "{target_title}-{date}-{lang}"

Mode 2 : Optimisation de CV (CV existant)

Étape 1 : Analyse du CV

  • Si l'utilisateur télécharge un fichier (PDF/DOCX/TXT) : appeler scripts/parse_resume.py pour extraire le texte
  • Si l'utilisateur colle du texte : utiliser le texte directement

Étape 2 : Confirmation par affichage

Afficher les champs clés suivants à l'utilisateur pour confirmer l'exactitude de l'analyse :

  • Nom
  • Dernière entreprise
  • Dernier poste
  • Estimation des années d'expérience

Étape 3 : Collecte du JD (optionnel)

Demander à l'utilisateur s'il a un JD cible, et si oui, le coller

Étape 4 : Génération du ResumeIR et du rapport de diagnostic

  • Extraire les informations du texte du CV, générer le ResumeIR (les manquants avec 【Espace réservé】)
  • Produire le rapport de diagnostic (score 0-100, liste de problèmes + sévérité + suggestions)
  • Produire la conclusion d'acceptabilité pour candidature : adéquation du titre, lisibilité de la première page, coordonnées, lieu/disponibilité/autorisation de travail, informations interdites sur le marché, preuves de compétences pour le premier tri RH
  • Générer le ResumeIR réécrit
  • Produire un aperçu en texte brut (appeler render_resume.py pour l'export seulement si l'utilisateur demande un fichier)

Étape 5 : Sauvegarde de version

Sauvegarder automatiquement comme première version : version_name = "{target_title}-{date}-{lang}"

Règles de réécriture de CV

Format des puces d'expérience professionnelle

Chaque puce doit respecter la structure suivante :

Verbe d'action + tâche + méthode/outil + résultat (indicateur)

Exemples :

  • ❌ Erreur : Responsable de l'analyse de données et de la génération de rapports
  • ✅ Correct : A utilisé Python et SQL pour analyser les données de comportement des utilisateurs, optimisé les fonctionnalités produit via des tests A/B, ce qui a augmenté le nombre d'utilisateurs actifs quotidiens de 20%

Exigence de quantification

  • Utiliser autant que possible des chiffres concrets, pourcentages, montants, etc.
  • En cas d'impossibilité de quantification, utiliser l'espace réservé 【metric】 et le signaler dans la liste de compléments

Couverture des mots-clés du JD (si JD fourni)

  • Effectuer une couverture des mots-clés pour les compétences principales (≤12)
  • Les intégrer naturellement dans les puces, éviter le bourrage artificiel de mots

Gestion de versions

Sauvegarder une version

Utiliser le script pour sauvegarder le ResumeIR courant :

python3 scripts/version_manager.py save --version-name "Chef de Produit-2024-01-15-fr-FR" --resume-ir "resume_ir.json"

Renommer une version

python3 scripts/version_manager.py rename --old-name "v1" --new-name "Chef de Produit-2024-01-15-fr-FR"

Comparer des versions

python3 scripts/version_manager.py compare --version1 "v1" --version2 "v2"

Revenir à une version

python3 scripts/version_manager.py rollback --version-name "v1"

Export de fichiers

Export local (Python pur, aucun service externe/réseau)

Lorsque l'utilisateur demande un export, sauvegarder le ResumeIR courant en JSON puis appeler le script :

python3 scripts/render_resume.py --resume-ir "resume_ir.json" --output-formats "docx,pdf" --output-dir ./out

L'export utilise un escalier de repli, garantissant qu'un fichier exploitable est produit dans n'importe quel environnement :

  • DOCX : généré par python-docx, une colonne, titres standard, pas de tableaux/zones de texte, compatible ATS (format recommandé pour la candidature)
  • PDF : généré directement par reportlab + polices CJK intégrées (pure pip, pas besoin de polices système/bibliothèques système) ; si reportlab n'est pas installé, génère automatiquement un HTML optimisé pour l'impression, avec le message « Ouvrir dans le navigateur puis Ctrl+P pour enregistrer en PDF »
  • Le script ne dépend d'aucun service distant, peut être exécuté après un simple clone local

Styles disponibles

  • cn_ats_a4_v1 (chinois, par défaut) / en_ats_a4_v1 (anglais) ; la langue réelle est déterminée par meta.language du ResumeIR
  • Voir : python3 scripts/render_resume.py --list-templates
  • Pour générer un CV bilingue ou en anglais, se référer à references/en-resume-conventions.md (bibliothèque de verbes d'action, interdiction des photos/âge/état civil, priorité à 1 page, dates en anglais MMM YYYY, quantification prioritaire)
  • Pour les postes tech américains (SWE/PM/DS) : se référer directement aux assets/examples/ avec les fichiers en-US-software-engineer.json, en-US-product-manager.json, en-US-data-scientist.json, trois exemples prêts à rendre (incluant LinkedIn/GitHub, niveaux US, métriques tech américaines comme p99/QPS/SLA) ; lorsque meta.language=en-US, le rendu utilise automatiquement les titres de section en anglais et convertit les dates ISO YYYY-MM en MMM YYYY

Index des ressources

Scripts nécessaires

  • scripts/parse_resume.py : script d'analyse de CV, prend en charge PDF/DOCX/TXT/MD
    • Paramètre : argument positionnel <chemin du fichier> (également compatible avec --input-file <chemin>)
    • Sortie : JSON {"text": "...", "format": "pdf|docx|txt", "pages": N, "success": true} ; en cas d'échec retourne {"error": "...", "exit_code": N}
  • scripts/version_manager.py : script de gestion de versions
    • Paramètre : save/rename/compare/rollback + paramètres correspondants
    • Sortie : résultat de l'opération de version
  • scripts/render_resume.py : script d'export local (DOCX/PDF/HTML, aucun service externe)
    • Paramètre : --resume-ir <fichier JSON>、--output-formats docx,pdf,html、--output-dir、--file-name
    • Sortie : fichier DOCX / PDF (ou HTML en repli)

Références du domaine

Exemples de déroulement de dialogue

Scénario 1 : Génération de CV à partir de zéro

Utilisateur : Aide-moi à créer un CV
Agent : D'accord, je vais t'aider à créer ton CV. Dis-moi :
       1. Quel est ton poste cible ?
       2. Quelle est ta situation professionnelle actuelle (entreprise/poste/années d'expérience) ?
       ...

[Collecte d'informations]

Agent : La première version du CV est générée, voici mon analyse :
       [Rapport de diagnostic]

       Liste minimale de compléments (8 problèmes) :
       1. Merci de fournir tes coordonnées précises (téléphone/email)
       2. Dans la première expérience professionnelle, quel est le chiffre exact pour le 【metric】 mentionné ?
       ...

Scénario 2 : Optimisation d'un CV existant

Utilisateur : Optimise ce CV [télécharge un fichier]
Agent : [Analyse le CV] J'ai extrait les informations suivantes de ton CV, confirme-les :
       Nom : Zhang San
       Dernière entreprise : TechCorp
       Dernier poste : Chef de Produit
       Années d'expérience : 3-5 ans

       As-tu un JD cible ? Si oui, colle-le.

[Si JD fourni]

Agent : Optimisation terminée, diagnostic :
       Score total : 72/100

       Liste des problèmes :
       [P0] La section expérience professionnelle manque d'indicateurs quantifiés (critique)
             Suggestion : chaque puce doit inclure un chiffre ou pourcentage spécifique
             Exemple de réécriture : "Responsable des itérations produit" → "A mené 5 itérations produit, augmentant le taux de rétention utilisateur de 15%"

       ...

       Liste des lacunes (exigences du JD absentes du CV) :
       1. Compétence SQL (exigence claire du JD)
            Question minimale : As-tu de l'expérience avec SQL ? Dans quel contexte ?

       [Affiche le CV réécrit]

Scénario 3 : Export de fichier

Utilisateur : Exporte ce CV
Agent : Génération des fichiers DOCX et PDF en cours... [appelle render_resume.py]
       Fichiers générés :
       - Zhang San-Chef de Produit-2024-01-15.docx
       - Zhang San-Chef de Produit-2024-01-15.pdf

Scénario 4 : Comparaison de versions

Utilisateur : Compare v1 et v2
Agent : [Appelle version_manager.py compare]
       Différences principales :
       1. Expérience professionnelle - TechCorp (2019-2022)
          v1 : Responsable de la conception produit et de l'analyse des besoins
          v2 : A mené 8 itérations produit, optimisé via une approche data-driven, augmentant la satisfaction utilisateur de 25%

       2. Compétences - primary
          v1 : ["Conception produit", "Analyse des besoins", "Gestion de projet"]
          v2 : ["Conception produit", "Analyse des besoins", "Gestion de projet", "Analyse de données", "SQL", "Tests A/B"]

       Suggestion : la version v2 est plus complète, il est recommandé d'utiliser v2 pour les candidatures.

Scénario 5 : Retour à une version

Utilisateur : Reviens à v1
Agent : [Appelle version_manager.py rollback]
       Retour à la version v1 effectué (Chef de Produit-2024-01-10-fr-FR)

Points d'attention

Repli en cas d'échec

  • Échec de l'analyse du CV : demander à l'utilisateur de coller le texte brut ; ou lui demander de coller le contenu par sections (formation/expérience/projets)
  • Informations manquantes : utiliser 【Espace réservé】 + liste minimale de compléments (≤8 questions)
  • JD trop long : extraire uniquement les sections responsabilités et exigences du poste, ignorer le reste
  • Contenu généré trop vague : forcer chaque puce à inclure un « résultat/impact », sinon le marquer comme problème P1 et fournir un exemple de réécriture

Compatibilité ATS (s'applique au CV « généré/exporté » ; l'analyse des fichiers téléchargés peut lire normalement le contenu des tableaux)

  • Utiliser des titres de section standard (Expérience professionnelle, Formation, Compétences, etc.)
  • Éviter l'utilisation de tableaux, zones de texte, icônes, images
  • Par défaut, mise en page à une colonne
  • Utiliser des polices standard (ex. Arial, Calibri)
  • Éviter l'utilisation de caractères spéciaux et d'éléments décoratifs

Assurance qualité

  • Toutes les puces doivent commencer par un verbe d'action (ex. « A mené », « A conçu », « A implémenté », « A optimisé », etc.)
  • S'assurer que chaque puce a un résultat ou impact clair
  • Éviter les termes faibles comme « Responsable de », « A participé à »
  • Privilégier la voix active, éviter la voix passive

Exemples d'utilisation

Exemple 1 : Génération de CV à partir de zéro (chinois/anglais)

  • Description : aider l'utilisateur à créer un CV bilingue chinois/anglais à partir de zéro
  • Mode d'exécution : dialogue avec agent + script de sauvegarde de version
  • Paramètres clés : language=zh-CN/en-US, target_title, target_level
  • Étapes :
    1. Collecter les informations de base et les expériences
    2. Générer le ResumeIR en chinois
    3. Générer le ResumeIR en anglais (traduction automatique)
    4. Sauvegarder en deux versions (chinois et anglais)

Exemple 2 : Optimisation de CV basée sur un JD

  • Description : optimiser le contenu du CV pour un JD spécifique
  • Mode d'exécution : analyse par l'agent + script d'analyse
  • Paramètres clés : texte du JD, fichier CV original
  • Étapes :
    1. Analyser le CV original
    2. Analyser les exigences du JD
    3. Comparer et identifier les lacunes
    4. Réécrire le CV pour couvrir les mots-clés du JD
    5. Produire la comparaison et les suggestions d'optimisation

Exemple 3 : Gestion multi-versions

  • Description : créer plusieurs versions de CV, comparer et sélectionner la meilleure
  • Mode d'exécution : script de gestion de versions
  • Paramètres clés : version_name, resume_ir
  • Étapes :
    1. Sauvegarder la version v1
    2. Modifier puis sauvegarder la version v2
    3. Comparer v1 et v2
    4. Revenir à la meilleure version
    5. Exporter la version finale

Skills associés