Étiquetage automatique Gmail
Objectif
Récupérer les e-mails de la boîte de réception, les classer via des sous-agents parallèles en Action Requise / En Attente / Référence, et appliquer les libellés en bloc via l'API Gmail.
Scripts
./scripts/gmail_label_fetch.py- Récupère les résumés des e-mails au format JSON compact./scripts/gmail_label_split.py- Divise les e-mails en N lots pour une classification parallèle./scripts/gmail_label_merge.py- Fusionne les lots classifiés en un seul fichier labels.json./scripts/gmail_label_apply.py- Applique les classifications de libellés en bloc
Sous-agent
email-classifier— défini dans.claude/agents/email-classifier.md- Modèle : Sonnet 4.5 (classification rapide et économique)
- Chaque sous-agent lit un lot, écrit un fichier de sortie classifié
Flux (parallèle — par défaut)
Étape 1 : Récupérer les e-mails
python3 .claude/skills/gmail-label/scripts/gmail_label_fetch.py \
--account ACCOUNT --query "in:inbox" --limit 100 --output .tmp/emails.json
Étape 2 : Diviser en lots
python3 .claude/skills/gmail-label/scripts/gmail_label_split.py \
--input .tmp/emails.json --chunks 10 --output-dir .tmp/chunks
Étape 3 : Classifier en parallèle (lancer 10 sous-agents)
Lancez 10 sous-agents email-classifier en arrière-plan, un par lot. Chaque sous-agent :
- Lit
.tmp/chunks/chunk_N.json - Classe chaque e-mail
- Écrit
.tmp/chunks/classified_N.json
Utilisez l'outil Tâche avec run_in_background: true et model: "sonnet". Lancez les 10 dans un seul message pour un véritable parallélisme :
Pour chaque lot 0-9, lancer une tâche avec :
subagent_type: "email-classifier"
model: "sonnet"
run_in_background: true
prompt: "Lire /chemin/absolu/.tmp/chunks/chunk_N.json, classer chaque e-mail, écrire les résultats dans /chemin/absolu/.tmp/chunks/classified_N.json"
CRITIQUE : N'utilisez PAS TaskOutput pour lire les résultats des sous-agents. Les sous-agents écrivent leurs résultats dans des fichiers — l'agent principal n'a jamais besoin de voir les données de classification. Lire TaskOutput inondera la fenêtre de contexte et provoquera des erreurs "prompt too long" avec de gros lots (500+ e-mails).
Au lieu de cela, interrogez l'existence des fichiers :
# Attendre que tous les fichiers classifiés existent (délai d'attente après 120s)
for i in $(seq 0 9); do
while [ ! -f ".tmp/chunks/classified_$i.json" ]; do sleep 2; done
done
Puis passez directement à l'étape 4 (fusion).
Étape 4 : Fusionner les classifications
python3 .claude/skills/gmail-label/scripts/gmail_label_merge.py \
--input-dir .tmp/chunks --output .tmp/labels.json
Étape 5 : Appliquer les libellés
python3 .claude/skills/gmail-label/scripts/gmail_label_apply.py \
--account ACCOUNT --input .tmp/labels.json
Directives de classification
Action Requise :
- Alertes de sécurité nécessitant une vérification
- Cartes de crédit / renouvellements de domaine avec échéances
- @mentions Slack posant des questions
- Nouveaux membres d'équipe à saluer (notifications Slack d'arrivée)
- E-mails clients nécessitant une réponse
- Mises à jour de fiches d'établissement (Google Business Profile, Bing Places)
- Avis Stripe nécessitant une action
En Attente :
- E-mails de vente sortants en attente de réponse
- Tickets de support en attente de résolution
- Propositions envoyées, en attente de réponse
Référence :
- Newsletters marketing (DigitalMarketer, etc.)
- Newsletters caritatives / à but non lucratif (RAPS, etc.)
- Rapports de performance Google Business Profile
- Offres promotionnelles (Blinkist, soldes, etc.)
- Notifications de mises à jour de plateforme (Google Play, Apify, etc.)
- Codes de confirmation (déjà utilisés)
- Newsletters immobilières (Westbank, etc.)
- E-mails de comptes de jeux (Riot Games, etc.)
- Alertes de sécurité informatives (2FA activé, etc.)
- Avis de santé
- Notifications de mises à jour légales / politiques
Registre des comptes
Les comptes sont stockés dans gmail_accounts.json à la racine de l'espace de travail. Chaque compte nécessite :
email- Adresse Gmailtoken_file- Chemin vers le jeton OAuth
Ajouter de nouveaux comptes
python3 .claude/skills/gmail-inbox/scripts/gmail_multi_auth.py --account NOM_COMPTE --email EMAIL
Performances
- Flux séquentiel : ~36s pour 100 e-mails (récupération 1s + classification 34s + application 1s)
- Flux parallèle : ~30s pour 100 e-mails (classification 19s + fusion <1s + application ~10s)
- La classification est le goulot d'étranglement ; 10 sous-agents parallèles la réduisent de 34s à 19s (~1,8x d'accélération)
- Le démarrage des agents (~4s de décalage) limite les gains théoriques
- L'étape d'application peut varier en raison de la limitation de l'API Gmail
Schéma
Entrées
| Nom | Type | Obligatoire | Description |
|---|---|---|---|
account | string | Oui | Nom du compte Gmail depuis le registre |
query | string | Non | Requête de recherche Gmail (par défaut : 'in:inbox') |
limit | integer | Non | Nombre max d'e-mails à classer (par défaut : 100) |
chunks | integer | Non | Lots de classification parallèle (par défaut : 10) |
Sorties
| Nom | Type | Description |
|---|---|---|
labels_applied | object | Compteur par catégorie : Action Requise, En Attente, Référence |
Informations d'identification
| Nom | Source |
|---|---|
credentials.json | fichier |
token_*.json | fichier (généré automatiquement) |
Composable avec
Compétences qui s'enchaînent bien avec celle-ci : gmail-inbox
Coût
API Claude Sonnet pour la classification