Lint de proposition freelance
Objectif : une enchère courte que le client lit jusqu'au bout et à laquelle il répond, sur n'importe quelle plateforme où le travail est posté, avec chaque affirmation étayée par le propre fichier de faits de l'utilisateur.
Le linter se trouve dans scripts/lint-cover.mjs dans le dossier de cette compétence (Node 20+, aucune dépendance, aucun réseau). C'est le même fichier que dans la compétence cover-letter-lint de ce dépôt, livré ici pour que cette compétence s'installe de manière autonome. Appelez-le avec son chemin complet, node ${CLAUDE_SKILL_DIR}/scripts/lint-cover.mjs dans Claude Code, ou le dossier de la compétence dans d'autres agents, par exemple node .claude/skills/freelance-proposal-lint/scripts/lint-cover.mjs.
1. Faits d'abord
Cherchez facts.md, me/facts.md ou un fichier .cover-lint.json avec un chemin "facts". Les affirmations viennent uniquement de là. S'il n'y en a pas : proposez de remplir templates/facts.md depuis le dossier de cette compétence avec l'utilisateur (compétences, rôles, parcours exactement comme son profil les montre, liens de preuve, phrases à ne jamais utiliser). 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. Adaptez le format au site
Demandez quelle plateforme si l'utilisateur ne l'a pas dit. Ensuite :
- Upwork : une lettre de motivation de 50 à 90 mots plus les questions de filtrage. Répondez à chaque question de filtrage directement, dans l'ordre où elles sont posées.
- Freelancer.com, PeoplePerHour, Guru : les enchères sont comparées côte à côte avec un prix et un délai de livraison. Mettez l'approche concrète dans la première ligne, et assurez-vous que le prix et les jours dans le texte correspondent aux chiffres que l'utilisateur saisit dans le formulaire d'enchère.
- Fiverr brief ou offre personnalisée : l'acheteur a choisi une catégorie, donc commencez par son livrable exact, puis ce que l'offre inclut et combien de révisions.
- Contra ou une demande directe : traitez-la comme un premier message ; effectuez le lint avec
--mode message.
Miroir du client : trois lignes décontractées obtiennent trois lignes décontractées en retour, une autre langue obtient cette langue.
3. Écrivez
Phrases simples, pas de puces ni de titres :
- Une salutation dans le style du client, puis un détail concret de SON annonce et ce qui en est probablement la cause ou comment vous l'aborderiez. Ne reformulez jamais l'annonce.
- Une ligne de preuve issue du fichier de faits qui correspond vraiment. Un projet personnel est appelé un projet personnel. Pas de correspondance honnête : laissez la preuve de côté.
- Le plan en une ou deux phrases, avec les heures et un prix si l'utilisateur a donné un tarif.
- Une question, celle dont la réponse modifie le périmètre ou le prix.
- Le prénom de l'utilisateur sur sa propre ligne.
4. Lint et correction
node ${CLAUDE_SKILL_DIR}/scripts/lint-cover.mjs --facts facts.md --job job.md bid.md
- lit depuis stdin, --mode message supprime la plage de mots pour les réponses, --json donne une sortie machine. Corrigez chaque erreur et relancez jusqu'à ce qu'il se termine avec le code 0. Corrigez aussi les avertissements, sauf s'il y a une raison, et dites la raison.
Ce qui fait échouer une enchère (erreurs) : phrases modèles ("I hope this finds you well", "seamless", "I'm excited to"), contrastes "not just X, but Y", tirets cadratins, espaces réservés comme [Your Name], e-mails, numéros de téléphone ou "message me on WhatsApp" (la plupart des plateformes interdisent de déplacer le contact hors du site avant un contrat), liens et "N years" que le fichier de faits ne soutient pas, phrases sous "Never say", et plus de 90 mots en mode couverture. Les avertissements couvrent les noms techniques qui ne sont ni dans les faits ni dans l'annonce, une question manquante ou une deuxième question, les listes, "Dear Sir", "!!", les emoji et les phrases très longues. Les ajustements par projet se font dans .cover-lint.json :
{"facts": "facts.md", "maxWords": 90, "minWords": 50, "extraPhrases": [], "allowPhrases": [], "disable": []}.
Ne modifiez jamais le fichier de faits pour faire passer une affirmation sans que l'utilisateur ne dise qu'elle est vraie.
5. Remettez-le
Montrez l'enchère, le prix et le délai de livraison qu'elle indique, et la dernière ligne du linter. Ensuite, relisez-la 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 techniques, pas chaque phrase. L'utilisateur l'envoie ; ne soumettez jamais rien à sa place.