agentleFS
khalilbenazkhalilbenaz/claude-skills-collection/skills/agent-sales-agent-builder/SKILL.md

agent-sales-agent-builder

Skill28 starsChanged 14 days agoMITView on GitHub

Construction d'agents de vente IA pour prospection, qualification et suivi commercial. Se déclenche avec "sales agent", "agent commercial", "agent de vente", "prospection IA", "SDR agent", "lead qualification agent", "outreach agent", "follow-up automatique". Also triggers on "outbound prospecting agent".

We split this skill into the rules it gives an agent

4 rules. About 0 are common, 4 are distinctive, and 0 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈4

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 0

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Never say "happy to help", "sure!", "great question", "let me", or similar.

    line 285
  2. Distinctive:

    Stop when done. No summary, no recap, no trailing commentary.

    line 288
  3. Distinctive:

    No politeness wrappers. Direct and blunt.

    line 289
  4. Distinctive:

    No emoji unless asked.

    line 292

≈ “Common” is an estimate: at least 1 in 5 of the 308,232 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Sales Agent Builder

Quand utiliser ce skill

Conçois un agent commercial automatisant tout ou partie du cycle outbound : enrichissement de leads, qualification structurée (BANT/MEDDIC), rédaction d'emails personnalisés, séquences multi-touch, mise à jour CRM, prise de rendez-vous. S'applique aux équipes SDR/BDR, startups B2B en croissance et toute équipe cherchant à industrialiser les tâches répétitives sans sacrifier la personnalisation.


Workflow en étapes

1. Choix du mode d'autonomie

Avant de coder : décide du niveau d'autonomie selon la maturité de l'équipe.

ModeComportementQuand l'utiliser
Human-in-the-loopPropose les emails, attend validation avant envoiPhase initiale (< 100 emails validés)
Semi-autonomeEnvoie automatiquement les templates approuvés, escalade les cas ambigusTaux de réponse > 10% confirmé
Fully autonomousGère l'intégralité du cycle sans interventionAprès 3+ mois de données, superviseur actif

Toujours démarrer en human-in-the-loop. Passer en semi-autonome uniquement après validation de 100 emails minimum et taux de réponse > 10%.


2. Architecture des cinq modules

┌─────────────────────────────────────────────────────┐
│  Lead entrant (CSV / webhook CRM / formulaire)      │
└────────────────────┬────────────────────────────────┘
                     ▼
         ┌─────────────────────┐
         │ A. Enrichissement   │  Apollo, Clay, Hunter.io
         └──────────┬──────────┘
                    ▼
         ┌─────────────────────┐
         │ B. Qualification     │  BANT / MEDDIC → score 0-100
         └──────────┬──────────┘
                    ▼
         ┌─────────────────────┐
         │ C. Génération       │  Email + variantes A/B
         │    d'outreach       │
         └──────────┬──────────┘
                    ▼
         ┌─────────────────────┐
         │ D. Séquences        │  Multi-touch J0/J3/J5/J8/J10/J15
         │    & follow-ups     │
         └──────────┬──────────┘
                    ▼
         ┌─────────────────────┐
         │ E. CRM + Reporting  │  HubSpot / Salesforce / Pipedrive
         └─────────────────────┘

3. Enrichissement automatique des leads

Pour chaque lead entrant, collecter : taille/secteur/financement (Crunchbase, Apollo), profil LinkedIn, actualités récentes (levées, recrutements, partenariats), stack technique (BuiltWith), et score ICP.

# Enrichissement via Apollo API
import requests

def enrich_lead(lead: dict, api_key: str) -> dict:
    resp = requests.post(
        "https://api.apollo.io/v1/people/match",
        json={
            "first_name": lead["first_name"],
            "last_name": lead["last_name"],
            "organization_name": lead["company"],
            "api_key": api_key,
        },
        timeout=10,
    )
    resp.raise_for_status()
    person = resp.json().get("person", {})
    return {
        "title": person.get("title"),
        "linkedin_url": person.get("linkedin_url"),
        "seniority": person.get("seniority"),
        "company_size": person.get("employment_history", [{}])[0].get("organization", {}).get("estimated_num_employees"),
        "technologies": person.get("organization", {}).get("current_technologies", []),
    }

Critère de décision : si l'enrichissement retourne < 3 champs fiables, marquer le lead enrichment_incomplete et ne pas l'inclure dans les séquences automatiques avant revue manuelle.


4. Framework de qualification — scoring structuré

Implémente un score composite 0-100 basé sur le framework choisi.

BANT simplifié :

def bant_score(lead: dict) -> dict:
    score = 0
    reasons = []

    # Budget (0-25)
    if lead.get("company_size", 0) > 200:
        score += 25; reasons.append("Budget probable (>200 employés)")
    elif lead.get("company_size", 0) > 50:
        score += 15; reasons.append("Budget estimé moyen")

    # Authority (0-25)
    senior_titles = ["VP", "Director", "Head", "Chief", "CXO", "Founder"]
    if any(t in (lead.get("title") or "") for t in senior_titles):
        score += 25; reasons.append("Décisionnaire identifié")

    # Need (0-25) — basé sur stack / industrie
    pain_industries = ["fintech", "ecommerce", "saas"]
    if lead.get("industry", "").lower() in pain_industries:
        score += 20; reasons.append("Industrie cible prioritaire")

    # Timeline (0-25) — basé sur signaux (recrutement SDR, levée récente)
    if lead.get("recent_funding") or lead.get("hiring_sales"):
        score += 25; reasons.append("Signal de croissance détecté")

    tier = "Hot" if score >= 70 else "Warm" if score >= 40 else "Cold"
    return {"score": score, "tier": tier, "reasons": reasons}

Règle : ne faire entrer dans les séquences automatiques que les leads Warm (≥ 40) et Hot (≥ 70). Les Cold vont dans une nurture séparée.


5. Génération d'emails d'outreach personnalisés

Contraintes non négociables : < 150 mots, objet < 50 caractères, 1 seul CTA, accroche liée à une donnée concrète du lead.

EMAIL_PROMPT = """Rédige un email de prospection outbound court (< 150 mots) en {language}.

Contact : {lead_name}, {lead_title} chez {company}
Taille entreprise : {company_size} employés
Actualité récente : {recent_news}
Pain point probable : {pain_point}
Notre solution : {value_prop}
Preuve sociale secteur : {case_study}

Règles strictes :
- Objet < 50 caractères, sans point d'exclamation
- Première phrase = accroche sur l'actualité récente (pas "J'espère que...")
- 1 seul CTA à la fin (question fermée ou lien calendrier)
- Ton direct et professionnel
- Génère 2 variantes (A et B) avec angles différents"""

Génère systématiquement 2-3 variantes pour A/B testing dès le départ.


6. Séquences multi-touch

J0  — Email 1er contact (accroche actualité)
J3  — Relance email (angle valeur différent)
J5  — Connexion LinkedIn (message court, pas de pitch)
J8  — Email "value add" (ressource pertinente, pas de vente)
J10 — Appel sortant (script court préparé par l'agent)
J15 — Email de rupture ("Dois-je vous retirer de ma liste ?")

Stop automatique dès toute réponse reçue (positive, négative ou hors-sujet). Ne jamais continuer une séquence après une réponse humaine sans analyse du contenu.

Script d'appel J10 généré par l'agent :

CALL_SCRIPT_PROMPT = """Génère un script d'appel de 60 secondes pour :
- Lead : {lead_name}, {lead_title}
- Contexte : a ouvert l'email J0 mais pas répondu
- Pain point : {pain_point}
Structure : accroche (10s) → raison de l'appel (15s) → question ouverte (10s) → CTA booking (10s)"""

7. Gestion des réponses et objections

L'agent classifie chaque réponse entrante :

CLASSIFY_PROMPT = """Classifie cette réponse email en une catégorie :
- INTERESTED : ouvert à un échange
- NOT_NOW : pas le bon moment (> 3 mois)
- NOT_RELEVANT : hors cible, mauvaise personne
- OBJECTION_PRICE : problème de budget
- OBJECTION_TOOL : déjà un outil concurrent
- NEGATIVE : refus définitif
- QUESTION : demande d'information

Réponse : {email_body}
Réponds avec le code catégorie uniquement."""

Pour OBJECTION_PRICE et OBJECTION_TOOL : utilise une bibliothèque d'objections validée par l'équipe commerciale. Pour INTERESTED : escalade immédiate vers un humain avec contexte complet du lead.


8. Intégration CRM

# Mise à jour HubSpot après qualification (SDK officiel)
from hubspot import HubSpot

client = HubSpot(access_token=HUBSPOT_TOKEN)

def update_lead_hubspot(contact_id: str, score: int, summary: str):
    client.crm.contacts.basic_api.update(
        contact_id=contact_id,
        simple_public_object_input={
            "properties": {
                "hs_lead_status": "QUALIFIED" if score >= 70 else "IN_PROGRESS",
                "qualification_score": str(score),
                "qualification_notes": summary,
                "lifecyclestage": "salesqualifiedlead" if score >= 70 else "lead",
            }
        },
    )

Actions minimales à logger dans le CRM pour chaque lead : email envoyé, email ouvert, réponse reçue, classification de la réponse, score de qualification, meeting booké.


9. Métriques à monitorer

MétriqueCibleAlarme si
Taux d'ouverture emails> 40%< 25%
Taux de réponse> 15%< 8%
Lead → meeting> 5%< 2%
Bounce rate< 2%> 3%
Spam rate< 0.1%> 0.08%
Pipeline généré (€)Dépend du deal size—

Génère un rapport hebdomadaire automatique (Slack/email) pour le manager avec ces indicateurs et les top 3 emails par taux de réponse.


Garde-fous et conformité

  • RGPD / CAN-SPAM : lien de désinscription fonctionnel dans chaque email. Respecter les opt-outs sous 48h. Ne jamais prospecter sur des listes achetées sans consentement documenté.
  • Délivrabilité : maximum 100-200 emails/jour par domaine. Réchauffage progressif sur 4 semaines (10 → 30 → 80 → 150/jour). Surveiller bounce (< 2%) et spam (< 0.1%) en continu.
  • Escalade humaine obligatoire : toute réponse INTERESTED ou réponse ambiguë → transfer immédiat à un commercial avec contexte complet. L'agent ne négocie jamais seul.
  • Audit trail : chaque email envoyé par l'agent doit être loggé avec timestamp, version du template, données d'enrichissement utilisées. Conserve 12 mois minimum pour conformité.

Anti-patterns à éviter

  • Générer des emails sans accroche contextualisée : "J'espère que vous allez bien" = taux de réponse < 3%. L'accroche doit citer une donnée concrète.
  • Lancer la séquence complète avant validation : envoyer J0 à J15 sans analyser les réponses intermédiaires brûle les leads et risque le blacklistage.
  • Score de qualification sans justification : un score sans reasons est inexploitable par le commercial. Toujours fournir les critères.
  • Pas de limite de volume au démarrage : un nouveau domaine qui envoie 500 emails J1 sera blacklisté sous 48h. Respecter le réchauffage.
  • CRM non synchronisé : un agent qui envoie des emails sans logger dans le CRM crée des doublons de prospection et détruit la relation client.
  • Objections gérées par l'agent sans validation humaine : les réponses aux objections complexes doivent être validées par l'équipe commerciale avant d'être intégrées à la bibliothèque.

Stack recommandée (2026)

BesoinOutils
EnrichissementApollo.io, Clay, Hunter.io, LinkedIn Sales Navigator
Séquences emailInstantly.ai, Lemlist, Outreach
Orchestration agentLangChain, LangGraph, Anthropic SDK
CRMHubSpot API, Salesforce API, Pipedrive API
BookingCalendly API, Cal.com (open source)
MonitoringDatadog, Grafana, PostHog
Modèle LLMClaude Sonnet (rédaction), Claude Haiku (classification)

Communication Rules — MANDATORY

  • Ultra-concise. No filler, no preamble, no pleasantries.
  • Never say "happy to help", "sure!", "great question", "let me", or similar.
  • Tool first, talk second. Act before explaining.
  • Result first. Lead with outcome, not process.
  • Stop when done. No summary, no recap, no trailing commentary.
  • No politeness wrappers. Direct and blunt.
  • Minimum words. If one word works, do not use ten.
  • No unsolicited explanations.
  • No emoji unless asked.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.