Lint de lettre de motivation
Objectif : une lettre de motivation de 50 à 90 mots qu'un client occupé lit jusqu'au bout et à laquelle il répond, avec chaque affirmation étayée par le fichier de faits de l'utilisateur.
Le linter est scripts/lint-cover.mjs dans le dossier de ce skill (Node 20+, aucune dépendance). Appelez-le par son chemin complet :
node ${CLAUDE_SKILL_DIR}/scripts/lint-cover.mjs dans Claude Code (également pour une installation via plugin).
Les autres agents ne remplissent pas cette variable, utilisez donc le dossier, par exemple node .claude/skills/cover-letter-lint/scripts/lint-cover.mjs pour une installation dans le projet ou node ~/.claude/skills/cover-letter-lint/scripts/lint-cover.mjs pour une installation globale.
1. Trouver le fichier de faits
Cherchez facts.md, me/facts.md ou un fichier .cover-lint.json avec un chemin "facts" dans le projet actuel.
- Trouvé : lisez-le. Les affirmations proviennent uniquement de là.
- Pas trouvé : proposez de créer
facts.mdà partir detemplates/facts.mddans le dossier de ce skill, et remplissez-le avec l'utilisateur (compétences, rôles, historique, liens de preuve, choses à ne jamais dire). N'inventez rien. Si l'utilisateur refuse, effectuez le lint sans--factset dites-lui que les affirmations n'ont pas été vérifiées.
2. Rédiger (passer cette étape si l'utilisateur a fourni son propre brouillon)
Enregistrez l'annonce dans un fichier si l'utilisateur en a collé une (par exemple job.md). Ensuite, rédigez en phrases simples, sans puces ni titres :
- Une salutation dans le style du client, puis un détail concret DE SON annonce (le bug, la stack, la date limite) et ce qui le cause probablement ou comment vous l'aborderiez. Ne reformulez jamais l'annonce.
- Une ligne de preuve issue du fichier de faits qui correspond vraiment (un travail similaire, un rôle, un lien de démo). Un projet personnel est appelé un projet personnel. Pas de correspondance honnête : omettez la preuve.
- Le plan en une ou deux phrases, avec les heures et un prix si l'utilisateur vous a donné ses tarifs.
- Une question, celle dont la réponse change le périmètre ou le prix.
- Le prénom de l'utilisateur sur sa propre ligne.
Miroir de l'annonce : trois lignes décontractées donnent trois lignes décontractées en retour, une autre langue donne cette langue.
3. Linter et corriger
node ${CLAUDE_SKILL_DIR}/scripts/lint-cover.mjs --facts facts.md --job job.md proposal.md
(- lit depuis l'entrée standard ; --mode message pour les réponses client, sans plage de mots ; --json pour une sortie machine.)
Corrigez chaque erreur et relancez jusqu'à ce qu'il sorte avec le code 0. Avertissements : corrigez-les sauf s'il y a une raison, et dites la raison.
Pour unlisted-skill, soit retirez l'affirmation, soit demandez à l'utilisateur s'il veut ajouter la compétence au fichier de faits.
Ne modifiez jamais le fichier de faits pour faire passer une affirmation sans que l'utilisateur confirme qu'elle est vraie.
| Règle | Niveau | Ce qu'elle détecte |
|---|---|---|
| ai-phrase | erreur | ~75 phrases types : « J'espère que ce message vous trouvera bien », « sans couture », « Je suis ravi de », « la clé est »… |
| not-x-but-y | erreur | Contrastes du style « Ce n'est pas seulement X, mais Y » |
| dash | erreur | Tirets cadratins et tirets utilisés comme tels |
| placeholder | erreur | [Votre nom], {{name}}, <client>, TODO, lorem ipsum |
| off-platform | erreur | Emails, numéros de téléphone, « envoyez-moi un message sur WhatsApp », paiement en dehors de la plateforme |
| unbacked-claim | erreur | Liens et « N années » qui ne figurent pas dans le fichier de faits |
| never-say | erreur | Phrases listées sous « Ne jamais dire » dans le fichier de faits |
| word-count | erreur / avertissement | Plus de 90 mots (erreur), moins de 50 (avertissement) en mode couverture |
| unlisted-skill | avertissement | Un framework ou service nommé dans la lettre qui n'est ni dans le fichier de faits ni dans l'annonce |
| question | avertissement | Pas de question, ou plus d'une |
| list, greeting, exclamation, emoji, long-sentence, i-start | avertissement | Listes, « Cher Monsieur », « !! », emoji, phrases de 35 mots ou plus, trop de phrases commençant par « Je » |
Les ajustements par projet se font dans .cover-lint.json (toutes les clés sont optionnelles) :
{"facts": "facts.md", "maxWords": 90, "minWords": 50, "extraPhrases": [], "allowPhrases": [], "disable": []}.
4. Remettre le résultat
Affichez la lettre et la dernière ligne du linter. Nommez le prix et la question que vous avez choisis pour que l'utilisateur puisse les modifier. Relisez-la ensuite une fois de plus par rapport au fichier de faits vous-même : le linter vérifie les liens, les années et les noms de technologies, pas chaque phrase. L'utilisateur l'envoie ; ne soumettez jamais rien à sa place.