CommunityRédaction et éditiongithub.com

atoki m4 / couverture-lettre-lint

Rédige ou vérifie une lettre de motivation, proposition ou message client freelance pour qu'il sonne humain et ne contienne que des affirmations vérifiables. Utilisez-le quand l'utilisateur demande une lettre de motivation, une proposition ou une offre pour une annonce (Upwork, Fiverr, PeoplePerHour, Freelancer.com, plateformes d'emploi), ou pour vérifier ou améliorer un texte existant, ou encore quand il demande « est-ce que ça sonne comme de l'IA ? ». Exécute un linter Node qui détecte les phrases IA, les tirets cadratins, les « non pas X mais Y », les placeholders, les contacts hors plateforme, la plage de 50 à 90 mots, la question de clôture et les affirmations absentes du fichier de faits de l'utilisateur.

Qu'est-ce que couverture-lettre-lint ?

Ce skill est un assistant spécialisé pour les freelances qui rédigent des propositions, des offres ou des messages clients sur des plateformes comme Upwork, Fiverr, PeoplePerHour ou Freelancer.com. Son objectif principal est de produire un texte court (entre 50 et 90 mots) qui semble authentiquement humain et dont chaque affirmation peut être vérifiée dans un fichier de faits personnel (facts.md). Le cœur du skill est un linter Node.js (`scripts/lint-cover.mjs`) qui analyse le brouillon et signale 14 types d'erreurs ou d'avertissements, comme les phrases types d'IA (ex : « Je suis ravi de », « Sans couture »), les tirets cadratins, les placeholders (ex : `[Votre nom]`), les coordonnées hors plateforme, les affirmations non étayées, les mots interdits définis par l'utilisateur, un nombre de mots hors plage, l'absence ou la multiplicité de questions, etc. Le skill guide l'utilisateur en 4 étapes : trouver ou créer le fichier de faits, rédiger la proposition en respectant une structure simple (accroche personnalisée, preuve tirée des faits, plan chiffré, question ouvrante, signature), linter et corriger le texte jusqu'à ce qu'il passe, puis présenter le résultat final avec le prix et la question choisie. Il ne soumet jamais rien à la place de l'utilisateur. Compatible avec Claude Code en utilisant la variable `CLAUDE_SKILL_DIR`, et avec d'autres agents via un chemin de dossier explicite.

Compatible avec✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/atokim4/cover-letter-lint/tree/HEAD/skills/cover-letter-lint

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

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 de templates/facts.md dans 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 --facts et 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 :

  1. 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.
  2. 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.
  3. Le plan en une ou deux phrases, avec les heures et un prix si l'utilisateur vous a donné ses tarifs.
  4. Une question, celle dont la réponse change le périmètre ou le prix.
  5. 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ègleNiveauCe qu'elle détecte
ai-phraseerreur~75 phrases types : « J'espère que ce message vous trouvera bien », « sans couture », « Je suis ravi de », « la clé est »…
not-x-but-yerreurContrastes du style « Ce n'est pas seulement X, mais Y »
dasherreurTirets cadratins et tirets utilisés comme tels
placeholdererreur[Votre nom], {{name}}, <client>, TODO, lorem ipsum
off-platformerreurEmails, numéros de téléphone, « envoyez-moi un message sur WhatsApp », paiement en dehors de la plateforme
unbacked-claimerreurLiens et « N années » qui ne figurent pas dans le fichier de faits
never-sayerreurPhrases listées sous « Ne jamais dire » dans le fichier de faits
word-counterreur / avertissementPlus de 90 mots (erreur), moins de 50 (avertissement) en mode couverture
unlisted-skillavertissementUn framework ou service nommé dans la lettre qui n'est ni dans le fichier de faits ni dans l'annonce
questionavertissementPas de question, ou plus d'une
list, greeting, exclamation, emoji, long-sentence, i-startavertissementListes, « 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.

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

Skills associés