Communitygithub.com

ShuchangZhang/suivi-candidatures

Un outil local de suivi des candidatures avec mises à jour en langage naturel et un tableau de bord Sankey visuel.

Qu'est-ce que suivi-candidatures ?

Cette compétence pour agents IA (compatible avec Claude Code, Cursor, Codex) permet de gérer un tableau de bord de candidatures local, portable, comme source unique de vérité. L'utilisateur peut mettre à jour ses candidatures en langage naturel (par exemple "J'ai eu un entretien technique chez Google demain") et l'agent résout le bon tableau, préserve les informations existantes, applique des modifications déterministes et sans conflit. Elle supporte un workflow de données sûr avec snapshots, ETags et remplacement atomique via un script Python (`data_store.py`), évitant les écritures directes dans `data.json`. L'agent peut enregistrer ou mettre à jour des candidatures, afficher un résumé textuel des progrès, ouvrir ou reconstruire le tableau visuel (avec diagramme Sankey et launchers macOS/Windows), et installer ou activer le tableau. Les règles strictes interdisent la création silencieuse de tableaux, la numérisation du répertoire personnel, ou la combinaison non demandée de modifications de données et de reconstruction du moteur.

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add ShuchangZhang/job-application-tracker

Demander à votre IA préférée

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

Documentation

Suivi des Candidatures

Utilisez un tableau de bord local et portable comme source unique de vérité pour les enregistrements de candidatures. Laissez l'utilisateur s'exprimer naturellement ; résolvez le bon tableau, préservez les informations existantes, et appliquez des modifications déterministes et sans conflit.

Politique Linguistique

Gardez l'implémentation de la compétence, les instructions de l'Agent, les références, les scripts, les schémas, les commentaires et les tests en anglais. Traitez les noms et définitions anglais comme canoniques.

Les surfaces destinées à l'utilisateur peuvent être localisées. README.md et les fichiers front-end assets/dashboard-* incluent actuellement du chinois et de l'anglais. Stockez des codes neutres pour les étapes et les lots afin que la langue d'affichage ne change jamais le sens sous-jacent.

Références Requises

Lisez uniquement la référence nécessaire pour l'opération en cours :

  • Lisez references/data-model.md avant d'enregistrer, mettre à jour, valider, résumer ou rappeler.
  • Lisez references/deployment.md avant d'installer, d'activer, de localiser, de déplacer, de réparer ou de démarrer un tableau.
  • Lisez references/board-ui.md avant de reconstruire ou de modifier le tableau de bord, les lanceurs, le serveur local ou la logique de visualisation.

Résoudre d'Abord le Tableau

Désignez le répertoire sélectionné par BOARD_DIR.

Utilisez python3 sur macOS/Linux. Sous Windows, remplacez python3 dans les commandes ci-dessous par py -3 lorsque disponible, sinon python.

  1. Si l'utilisateur fournit un chemin, inspectez-le :

    python3 <skill-dir>/scripts/board_locator.py inspect --board-dir <path>
    

    S'il contient un data.json valide hérité mais manque le marqueur, expliquez qu'un fichier d'identité portable et non sensible sera ajouté, puis exécutez :

    python3 <skill-dir>/scripts/board_locator.py mark --board-dir <path>
    
  2. Sinon, découvrez les tableaux marqués :

    python3 <skill-dir>/scripts/board_locator.py discover
    
  3. Interprétez la découverte exactement :

    • Code de sortie 0 : utilisez l'unique tableau valide et rapportez son chemin et le nombre d'enregistrements.
    • Code de sortie 4 : demandez un chemin existant ou une permission explicite pour créer un nouveau tableau.
    • Code de sortie 5 : montrez chaque candidat et exigez que l'utilisateur choisisse.

Ne choisissez jamais par date de modification, nombre d'enregistrements ou conjecture. Ne créez jamais un tableau simplement parce que la découverte a échoué. Ne stockez jamais un registre global de chemins absolus dans le répertoire personnel de l'utilisateur.

Workflow de Données Sécurisé

Pour chaque lecture ou écriture :

  1. Résolvez BOARD_DIR.

  2. Obtenez la date réelle courante lorsque les dates affectent l'opération : exécutez date +%Y-%m-%d sur macOS/Linux ou (Get-Date).ToString('yyyy-MM-dd') dans Windows PowerShell.

  3. Prenez un snapshot :

    python3 <skill-dir>/scripts/data_store.py snapshot \
      --data <BOARD_DIR/data.json>
    
  4. Préservez le boardTitle retourné, le lang optionnel, les stageLevels optionnels, tous les enregistrements, tous les champs d'enregistrement inconnus mais valides, et l'ETag retourné.

  5. Pour une écriture, créez un fichier JSON candidat et remplacez-le en toute sécurité :

    python3 <skill-dir>/scripts/data_store.py replace \
      --data <BOARD_DIR/data.json> \
      --input <candidate.json> \
      --expected-etag <etag>
    
  6. Traitez le code de sortie 3 comme un conflit d'édition concurrent. Prenez un nouveau snapshot, réappliquez uniquement la modification demandée par l'utilisateur, et réessayez. Ne forcez jamais une écriture obsolète.

  7. Confirmez le succès uniquement après la réussite de l'outil.

N'écrivez jamais data.json directement. Ne chargez jamais d'exemples d'apprentissage sans confirmation explicite de l'utilisateur ou ne les traitez pas comme de vraies candidatures. Ne modifiez jamais les fichiers du moteur déployé lors d'une opération de données uniquement.

Opérations Principales

Enregistrer ou Mettre à Jour une Candidature

  1. Lisez references/data-model.md.
  2. Faites correspondre un enregistrement existant par entreprise et poste. Si la cible est ambiguë, demandez à l'utilisateur de choisir.
  3. Pour un nouvel enregistrement, exigez l'entreprise et le poste. Demandez une fois les détails optionnels manquants — canal, portail de candidature, ville et lot de recrutement — puis attendez la réponse de l'utilisateur ou une demande explicite de passer avant d'enregistrer.
  4. Insérez un nouvel enregistrement au début de records afin que les nouvelles candidatures apparaissent en premier par défaut. Préservez la position existante dans le tableau lors de la mise à jour d'un enregistrement.
  5. Pour un enregistrement existant, modifiez uniquement les champs mentionnés par l'utilisateur.
  6. Faites progresser en ajoutant un événement ; ne maintenez jamais un champ de statut séparé.
  7. Pour une étape personnalisée inédite, préservez son texte exact et ajoutez une règle stageLevels. Utilisez le placement demandé par l'utilisateur ; sinon, par défaut, placez-la à un niveau distinct immédiatement avant k_hr.
  8. Gardez note vide sauf si l'utilisateur demande explicitement d'y écrire quelque chose.
  9. Utilisez le workflow de données sécurisé et rapportez l'enregistrement et l'événement exacts modifiés.

N'inventez jamais une entreprise, un poste, une date, un canal, un lieu, un salaire, un résultat ou un tour d'entretien.

Afficher un Résumé Textuel des Progrès

  1. Lisez references/data-model.md.
  2. Prenez un snapshot sécurisé sans modifier les données.
  3. Placez d'abord les rappels datés éligibles d'aujourd'hui jusqu'aux sept prochains jours.
  4. Regroupez les enregistrements en : en cours, avec offre, terminés et pas encore postulé.
  5. Identifiez les enregistrements en cours obsolètes et les jalons à venir.
  6. Terminez par une action concrète à effectuer ensuite.

Ne reconstruisez pas le HTML sauf demande explicite de l'utilisateur.

Ouvrir ou Reconstruire le Tableau Visuel

  1. Lisez references/deployment.md et references/board-ui.md.
  2. Résolvez et validez le tableau existant avant de toucher aux fichiers du moteur.
  3. Normalement, dites à l'utilisateur de démarrer le tableau et d'ouvrir http://127.0.0.1:8770/.
  4. Recopiez l'ensemble du moteur front-end uniquement lorsqu'un fichier du moteur est manquant ou que l'utilisateur demande explicitement de reconstruire ou mettre à jour le moteur.
  5. Préservez data.json et toutes les sauvegardes.

Installer ou Activer

Lisez references/deployment.md et suivez son workflow de découverte d'abord. L'installation de la compétence et la création d'un nouveau tableau sont des actions distinctes. La création d'un tableau nécessite une intention explicite de l'utilisateur.

Règles Strictes

  1. Utilisez uniquement un BOARD_DIR résolu et marqué.
  2. Ne créez pas silencieusement un tableau de remplacement.
  3. Ne scannez pas récursivement le répertoire personnel de l'utilisateur.
  4. Ne stockez pas un registre global de chemins.
  5. Utilisez data_store.py pour toute écriture de données côté Agent.
  6. Préservez les données non mentionnées et les champs existants.
  7. Gardez note vide sauf demande explicite.
  8. Utilisez des codes d'étape et de lot neutres depuis references/data-model.md.
  9. Utilisez la date réelle courante ; ne vous fiez pas au calcul mental de la date.
  10. Si l'autorisation d'écriture de fichier est indisponible, expliquez les étapes manuelles exactes et ne prétendez jamais qu'une écriture a réussi.
  11. Ne combinez pas une mutation de données avec une reconstruction du moteur sauf si l'utilisateur demande explicitement les deux.
  12. N'écrasez pas data.json, .data.backup.*.json ou .job-tracker-board.json lors du déploiement ou de la mise à jour des fichiers du moteur.

Ressources Incluses

  • scripts/board_locator.py : identifier, marquer et découvrir en toute sécurité les répertoires de tableaux.
  • scripts/data_store.py : snapshot, validation, vérification des conflits, remplacement atomique et sauvegarde des données.
  • assets/dashboard-template.html, dashboard.css et dashboard-*.js : modules de tableau de bord localisés, sans dépendances.
  • assets/server.py : serveur local en boucle locale uniquement et API de données validée.
  • assets/start.command / assets/stop.command : lanceurs macOS.
  • assets/start-board.bat / assets/stop-board.bat avec assistants PowerShell correspondants : lanceurs Windows avec vérifications de santé et journaux de diagnostic.
  • assets/data.json : graine vide pour un nouveau tableau demandé explicitement uniquement.
  • tools/ : utilitaires déterministes de régression de croisement pour le diagramme de Sankey.

Skills associés