Nicholas-V-rld/upwork-scout

Trouvez, filtrez et notez les nouvelles offres Upwork correspondant à votre niche, puis rédigez des propositions honnêtes pour les 3 à 5 meilleures. En lecture seule par défaut ; il ne soumet ni ne dépense de Connects sans approbation explicite.

Qu'est-ce que upwork-scout ?

Ce skill permet à un agent IA (comme Claude Code, Cursor ou Codex) d'agir comme un assistant de recherche d'emploi spécialisé sur Upwork. Il se connecte via le connecteur MCP officiel d'Upwork pour rechercher des offres récentes, les filtrer selon des critères précis (niche, taux horaire, réputation du client), et les noter sur 10. Il ne soumet jamais de proposition sans l'approbation explicite de l'utilisateur. Le skill guide l'agent étape par étape : lecture du profil du freelance, recherche et déduplication des offres, vérification des critères de rejet (offre déjà pourvue, mauvais score client, localisation inadaptée), notation, puis rédaction de propositions personnalisées à partir de preuves réelles contenues dans un fichier `me.md`. Il gère également l'envoi sécurisé des propositions (une par une, avec validation du coût en Connects et de la prévisualisation). Utile pour les freelances qui veulent automatiser la veille d'offres sans risquer de dépenser des Connects inutilement.

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Nicholas-V-rld/upwork-ai-playbook/tree/main/skills/upwork-scout

Installed? Explore more Développement et programmation skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · 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

Upwork scout

Trouve les offres qui valent la peine d'être postulées, élimine celles qui gaspillent des Connects, et rédige des propositions qui n'utilisent que des preuves que le freelance peut démontrer.

Avant de commencer

  1. Lisez me.md (copiez me.example.md la première fois et remplissez-le). Il contient la niche, le tarif, les termes de recherche et les seules preuves que vous pouvez utiliser.
  2. Appelez list_accounts et choisissez le compte TALENT nommé dans me.md. Le connecteur peut changer de compte entre les sessions. Si le compte nommé n'est pas présent, arrêtez-vous et dites-le. Ne rédigez jamais pour la mauvaise personne.
  3. Lisez le solde de Connects avec get_profile action=connects_balance.

1. Recherche

Exécutez chaque recherche, puis dédupliquez par identifiant d'offre :

  • find_jobs smart_search mode=most_recent, days_posted=2, verified_payment_only=true
  • find_jobs search avec title = chaque terme de titre dans me.md, verified_payment_only=true, proposals_max=10
  • find_jobs search avec query = les « mots problèmes » dans me.md (ex. « hacked OR slow OR broken »), mêmes filtres

Pièges : title ne peut pas être combiné avec query ou avec sort=relevance. search n'a pas de filtre de date, donc utilisez smart_search mode=most_recent pour « publié aujourd'hui ».

Ignorez tout identifiant d'offre déjà listé dans un fichier antérieur du dossier de sortie.

2. Vérifier, puis éliminer

Appelez find_jobs get sur les ~10 meilleures. Éliminez une offre si :

  • applied est true, ou activityStat.jobActivity.totalHired ≥ 1, ou totalOffered ≥ 1
  • preferred_locations.location_required est true et exclut le pays du freelance
  • le feedback_score du client est inférieur à 4.0, ou les avis récents sont 1–2★ (signalez-le si l'offre est par ailleurs excellente)
  • elle est hors de la niche définie dans me.md

3. Noter (0–10), garder les 3–5 meilleures

SignalPoints
Un job de réparation (cassé, piraté, lent, checkout défaillant, migration)+3
Construction cœur de niche+2
Travail continu ou en régie mentionné+2
Client a dépensé 1 000 $+ avec une note 4.5★++2
0 interviewés et moins de 5 propositions+1
Coûte plus de 20 Connects–1

4. Rédiger

Pour chaque sélection :

  • La première ligne parle de leur offre. Si l'annonce mentionne une URL publique, récupérez-la (timeout 20s) et commencez avec une chose réelle que vous avez vue. Les clients ne voient que les deux premières lignes dans leur liste, donc une ouverture générique ne sera jamais ouverte.
  • Ensuite, un plan numéroté, un prix et une question à la fin.
  • Répondez à chaque question de présélection, et respectez strictement toute instruction du type « commencez votre proposition par X ».
  • Les preuves proviennent uniquement de me.md : liens en direct, chiffres mesurés, histoires confirmées. Tout ce que seul le freelance peut savoir (rôle sur un projet, une réparation passée, un délai, un prix non fixé) est mis entre crochets [CONFIRM: ...]. N'inventez jamais de résultats, de clients, de chiffres ou d'expériences.
  • Tant que le compte a moins de 10 avis, fixez un prix pour gagner et prévoyez de vendre un plan de maintenance après la livraison.

5. Écrire le fichier

Écrivez <dossier de sortie>/AAAA-MM-JJ.md contenant :

  1. Une ligne d'en-tête avec le solde actuel des Connects.
  2. Un tableau classé : lien de l'offre, client (pays, dépenses, note), coût en Connects, et raison de la sélection.
  3. Une ligne « Ignoré » expliquant pourquoi les autres ont été éliminées.
  4. Le total des Connects pour toutes les sélections.
  5. Une proposition par sélection.

Si rien ne passe les filtres, écrivez quand même le fichier avec un tableau vide et la raison.

6. Envoi (uniquement quand l'utilisateur le dit)

Faites cela une proposition à la fois. Upwork ne conserve qu'un seul aperçu ouvert, et en créer un second invalide le premier.

  1. list_freelancer_proposals action=invitations et action=list. S'il y a une invitation pour l'offre, utilisez accept_invitation au lieu de create.
  2. manage_proposals create construit un aperçu. Montrez à l'utilisateur le texte complet, connects_cost, connects_balance, les éventuels unmet_preferred_qualifications, et le bloc de boost (current_top_bids et recommended_connects, ou « boost indisponible »).
  3. Les offres à prix fixe nécessitent un payment_mode (by_project ou by_milestone), et l'utilisateur doit accuser réception du texte d'Upwork sur la résolution des litiges avant que vous ne soumettiez.
  4. Demandez les pièces jointes et suggérez de joindre les projets de portfolio pertinents via portfolio_project_ids (depuis get_profile action=list_highlights).
  5. Appelez confirm_preview seulement après un oui explicite. Ensuite, relisez la proposition avec list_freelancer_proposals action=get et vérifiez que connectsBid correspond au boost approuvé.

Jamais

  • Soumettre, modifier, retirer, envoyer un message ou accepter quoi que ce soit sans l'accord explicite de l'utilisateur pour cette action spécifique.
  • Mettre les faits d'une personne sur le compte d'une autre personne.
  • Combler un blanc [CONFIRM] avec une supposition.

Skills associés