r/AIAgents 2026 regorge de publications sur les agents sortants construits avec Claude Code. La recette : Claude Code comme boucle de raisonnement, Scavio comme backend de recherche, et une écriture CRM. Ce tutoriel livre l'agent sortant minimal viable avec une recherche déclenchée par prospect.
Prérequis
- Dernière version de Claude Code
- Une clé API Scavio
- Une destination email/CRM (Gmail, HubSpot)
- Node.js 20+
Parcours
Étape 1: Enregistrer Scavio MCP dans Claude Code
Donne à Claude Code l'accès à l'outil de recherche Scavio.
{
"mcpServers": {
"scavio": { "command": "scavio-mcp", "env": { "SCAVIO_API_KEY": "sk_live_..." } }
}
}Étape 2: Écrire la compétence de recherche
Une compétence Claude Code qui se déclenche sur les nouveaux prospects.
// ~/.claude/skills/outbound-research.md
Instructions: For each prospect, use scavio to search:
1. Company recent news
2. Prospect LinkedIn activity
3. Reddit threads about their industry
Return a 3-bullet brief.Étape 3: Rédiger un email personnalisé
Insérer le brief dans un modèle d'email dans Claude Code.
// Claude Code prompt
> Using the brief from outbound-research for {prospect_name} at {company}, draft a 3-sentence cold email referencing the most recent specific signal.Étape 4: Mettre en file d'attente pour l'envoi
Enregistrer les brouillons dans l'API Gmail ou un dossier de révision.
// ~/.claude/skills/queue-draft.md
After drafting, call the Gmail create_draft tool to queue for human review.Étape 5: Exécuter selon un planning
Un cron ou une GitHub Action déclenche l'agent pour chaque nouveau prospect.
# cron
0 9 * * * cd ~/projects/outbound && claude-code run ./agent.mdExemple Python
import os, requests
API_KEY = os.environ['SCAVIO_API_KEY']
def research(prospect):
queries = [
f'"{prospect["company"]}" news',
f'site:linkedin.com/posts "{prospect["name"]}"',
f'{prospect["industry"]} pain points'
]
out = []
for q in queries:
r = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': API_KEY},
json={'query': q, 'num_results': 3})
out.append(r.json().get('organic_results', []))
return out
print(research({'name': 'Jane Doe', 'company': 'Acme', 'industry': 'saas'}))Exemple JavaScript
const API_KEY = process.env.SCAVIO_API_KEY;
export async function research(prospect) {
const queries = [`"${prospect.company}" news`, `site:linkedin.com/posts "${prospect.name}"`];
const out = [];
for (const q of queries) {
const r = await fetch('https://api.scavio.dev/api/v1/search', {
method: 'POST',
headers: { 'x-api-key': API_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({ query: q, num_results: 3 })
});
out.push(((await r.json()).organic_results || []).slice(0, 3));
}
return out;
}Sortie attendue
Per-prospect research brief + email draft in Gmail drafts ready for human send. Typical run: 45s per prospect, $0.02 in Scavio credits.