- Réécriture HANDOFF.md dashboard multi-domaines - Mise à jour MEMORY.md / TOOLS.md / AGENTS.md - Cleanup fichiers cron obsolètes + fichiers root - Gmail Phase E : audit, 18 filtres natifs, labels Promos/Dev-Tools/Social - Gmail Phase F : archive Philippot + Ulys terminée
11 KiB
Handoff — OpenClaw / Gmail Housekeeping
Document de reprise pour une nouvelle session (humain ou agent IA). Dernière mise à jour : 9 juin 2026. Mainteneur : Thierry Tallagrand.
🎯 TL;DR (à lire en premier)
Le projet OpenClaw est un orchestrateur multi-agents tournant sur Synology NAS (ARCHIVE3) qui pilote des comptes Google de Thierry via gateway gog.
État actuel : Phase D Gmail housekeeping ✅ TERMINÉE le 6 juin 2026. 12 401 mails trashés en 6 vagues. Boîte 12 703 → ~4 600.
Prochaines phases prévues :
- Phase E : filtres Gmail natifs (auto-trash à l'arrivée)
- Phase F : Vague 2 (archive Philippot + Ulys + labels)
- Phase G : 2ème passe Q8 (longue traîne newsletters tech)
- Phase H : digest VE (parsing Jeep uconnect)
⏰ Dates critiques
Date Événement Action 6 juillet 2026 Auto-purge Gmail Trash (30j) des mails Phase D Restaurer AVANT cette date si erreur 12 juin 2026 Token OAuth gmail.modify expire (Testing GCP, 7j) gog auth add --gmail-scope=full --manual --force-consent 9 juin 2026 Aujourd'hui — reprise après pause Vérifier gmail-doubts.md si existant
Export as CSV
🏗️ Architecture
Hôte
- Synology ARCHIVE3 (DSM, hostname
ARCHIVE3) - Filesystem :
/volume1/docker/openclaw-data/workspace/ - User : 1000:1000 (Thierry)
- TZ : Europe/Paris
Containers Docker
- openclaw-gateway (daemon principal, expose gog CLI)
- openclaw-cli, openclaw-plugins, openclaw-dockerproxy
- gitea (versioning local), openvpn2 (VPN)
Compte Google authentifié
- Email : tallagrand.thierry@gmail.com
- Project GCP : 666305633659 (test users mode = refresh tokens 7j)
- Scopes : gmail.modify + gmail.settings.basic + gmail.settings.sharing + userinfo.email + openid
- Token expire : 12 juin 2026
Infrastructure mail historique (3 NAS Synology)
- ARCHIVE →
[10.10.10.50](originel, IP locale) - ARCHIVE2 →
[www.airtria.net] - ARCHIVE3 →
[www.airtria.pro](NAS actuel)
📂 Fichiers clés
Fichier Rôle workspace/AGENTS.md Rules globales (NEVER/ALWAYS Gmail+WhatsApp, Heartbeats) workspace/MEMORY.md Mémoire persistante session par session workspace/gmail-audit.md Audit initial 3000 threads (Phase B) workspace/gmail-rules.md Règles trash/archive/whitelist (Phase C, source de vérité) workspace/gmail-housekeeping.md Log append-only actions Gmail (Phase D) workspace/handoff.md Ce fichier workspace/scripts/gmail_trash_v1.sh Vague 1 (>1y) workspace/scripts/gmail_trash_v1_6m.sh Vague 1bis (6m→1y) workspace/scripts/gmail_trash_v1ter.sh Vague 1ter (30j→6m) workspace/scripts/gmail_trash_v1quinquies.sh Vague 1quinquies (7j→30j) + 4 nouvelles règles workspace/scripts/gmail_trash_synology.sh Synology .net workspace/scripts/gmail_trash_synology_all.sh Synology .pro + IP10 + .net
Export as CSV
📊 Bilan Phase D (5-6 juin 2026)
Vague Filtre temporel Trashed Vague 1 older_than:1y 5 335 Vague 1bis 6m → 1y 1 647 Vague 1ter 30j → 6m 1 871 Synology .net toutes périodes 1 160 Synology .pro+IP10 toutes périodes 2 099 Vague 1quinquies 7j → 30j 289 TOTAL 12 401
Export as CSV
Boîte 12 703 → ~4 600 (-64%). Hits rate-limit : 0.
Top performers
- LinkedIn (3 règles) : 3 502+
- Synology auto-notifs (3 variants) : 4 419
- Quora : 1 436+
- AliExpress : 469
- TAAFT : 418
- Rustica : 351
- Facebook : 365
- Cdiscount : 276
- Carrefour : 257
🔴 Whitelist absolue (NE JAMAIS toucher)
Source de vérité : gmail-rules.md.
Banques
@cic.fr, @e-cic.fr, @bpgo.fr, @cmb.fr
Admin & légal
@impots.gouv.fr, @dgfip.finances.gouv.fr, @digiposte.fr, @ameli.fr
Telco perso
@orange.com, @orange.fr, @neuf.fr
Véhicules
@vwfs.com, @volkswagen.fr, @jeep.com (cf. règle V01 digest VE), @ze-watt.fr/.com, @zeromotorcycles.com, r.clientele@vwfs.com
Plongée
@gissacg.fr, @lists.gissacg.fr, president@gissacg.fr, @arimair.fr
AIRTRIA
@airtria.net, @airtria.fr, @laboutique-solaire-pro.com
Identités personnelles
tallagrand.thierry@gmail.com, thierry.tallagrand@me.com, Frederic Tallagrand (famille)
Synology infrastructure (CRITIQUE — alertes opérationnelles)
- sns@synologynotification.com (Active Insight - alertes disque/storage)
- noreply@c2.synology.com (C2 backup subscription)
Finance
- noreply@amundi-esr.com (épargne salariale PEE/PERCO)
Labels système Gmail protégés
IMPORTANT, STARRED, SENT, DRAFT, Personal, Travail, Achats, Receipts, Notes
🛡️ Hard constraints opérationnels
NEVER
- messages.delete permanent (toujours messages.trash)
- Toucher la whitelist (abort silencieux si match)
-
200 actions par batch Gmail (en pratique 300 OK)
-
2000 actions par jour sans confirmation humaine
- Modifier labels système (INBOX retirable mais pas SENT/DRAFT/IMPORTANT)
- Lancer une vague sans dry-run préalable validé
ALWAYS
- Dry-run obligatoire avant toute action en masse
- Logger chaque batch dans gmail-housekeeping.md
- Respecter gmail-rules.md comme source de vérité unique
- Vérifier la whitelist au runtime (pas seulement au design)
- Pause 5s entre 2 batchs gog gmail trash/archive
- En cas de doute : laisser dans inbox + log dans gmail-doubts.md
Limites runtime utilisées (Phase D)
- maxBatchSize: 300
- pauseBetweenBatchesMs: 5000
- Détection auto rate-limit 403 + retry 60s
- Hits rate-limit observés : 0 sur 12 401 actions
🔧 Patterns gog éprouvés
Recherche read-only : sudo docker exec openclaw-gateway gog gmail search "QUERY" -a tallagrand.thierry@gmail.com --max 500 -j
Trash avec query + cap : sudo docker exec openclaw-gateway gog gmail trash -a tallagrand.thierry@gmail.com --query "QUERY" --max 300 --force
Re-auth OAuth : sudo docker exec openclaw-gateway gog auth remove tallagrand.thierry@gmail.com sudo docker exec -it openclaw-gateway gog auth add tallagrand.thierry@gmail.com --services=gmail --gmail-scope=full --manual --force-consent
Vérification auth : sudo docker exec openclaw-gateway gog auth list sudo docker exec openclaw-gateway gog gmail labels list -a tallagrand.thierry@gmail.com
🟣 Cas spécial — Jeep uconnect (digest VE)
from:uconnectservices@jeep.com (~400 mails) :
- Phase D : aucune action (laissés en inbox)
- Phase H : agent quotidien parse les mails, génère charge-vehicule.md + notif WhatsApp synthèse, archive auto avec label Charge-VE
🟡 Phase F (Vague 2 — à faire)
Archive + label, pas de destruction : ID Source Action Volume estimé V2.01 florian.philippot@les-patriotes.fr Archive + label Newsletters ~30 V2.02 info@clients.ulys.com Archive + label Receipts ~50
Export as CSV
🔵 Phase E (filtres Gmail natifs — à faire)
Objectif : plus jamais d'accumulation. Filtres Gmail qui trashent automatiquement les mails matchant nos 23 règles V1 dès l'arrivée.
Approches possibles :
- gog filters create (à explorer via gog gmail filters --help)
- Gmail API directe : users.settings.filters.create (Python)
- Gmail UI web : 23 clics manuels (lent mais sûr)
Pré-requis : Phase D doit avoir tourné 30 jours sans regret.
🟠 Phase G (2ème passe Q8 — longue traîne)
Identifier expéditeurs hors top 30 actuels (Medium, Substack, Frandroid, dev.to, mailchimp génériques).
Audit longue traîne : sudo docker exec openclaw-gateway gog gmail search "category:promotions OR category:updates older_than:6m" -a tallagrand.thierry@gmail.com --max 5000 -j > /tmp/longue-traine.json
🐛 Quirks / pièges connus
Horloge système
Le serveur expose un current_time parfois bloqué ou avec coquille UTCUTC. Source de vérité = horloge système host (date sur ARCHIVE3) ou contexte conversationnel.
Bug KeyError 'subject' dans gog gmail search
Certains threads n'ont pas de subject. Toujours utiliser t.get('subject', '').
from:me ne fonctionne pas dans gog
Utiliser l'email complet à la place.
Compteurs Gmail web vs API
- Compteur "Boîte de réception" gauche = fiable
- Compteur "1-50 sur N" en haut = inclut SENT en vue Principale
- Compteurs catégories (Promotions/Notifications/etc.) = INCLUENT TRASH, jamais représentatifs.
Dry-run gog gmail trash
Le --dry-run ne pré-fetch PAS les message_ids. Pour validation, faire un gog gmail search séparé avec la même query.
📋 Checklist de reprise (pour nouvelle session)
[ ] Vérifier date système : date sur ARCHIVE3 [ ] Vérifier état token : gog auth list (si expire <24h, relancer flow OAuth) [ ] Lire gmail-housekeeping.md (dernières actions) [ ] Lire MEMORY.md (état général) [ ] Vérifier gmail-doubts.md (mails à relire) [ ] Vérifier inbox count : gog gmail search "in:inbox" --max=1 -j [ ] Décider phase suivante : E, F, G ou H [ ] Si action destructive → dry-run d'abord, valider, puis exécuter
🔗 Liens / refs
- gog CLI : gog gmail {search|trash|archive|labels} --help
- Gmail search syntax : https://support.google.com/mail/answer/7190
- Gmail API quotas : https://developers.google.com/gmail/api/reference/quota
- GCP project : 666305633659 (mode Testing, refresh 7j)
10 juin 2026 ~01:00-01:35 UTC+2 — Auth Gmail re-faite + persistance
Contexte
Token OAuth expirant 12/6/2026. Découverte que le keyring vivait dans /home/node/.local/share/gogcli/ (couche writable container) = perdu à chaque compose down/up.
Actions
- Re-auth gog complète via
gog auth add tallagrand.thierry@gmail.com --services=gmail --manual --gmail-scope=full --force-consent - Ajout de GOG_HOME=/home/node/.openclaw/gogcli dans compose.yaml (env)
- Migration credentials.json + keyring/ vers gogcli/data/
- Permissions 1000:1000, files 600, dirs 700
- Test ULTIME compose down+up : auth survit ✅
Garanties acquises
- Refresh token persisté dans /volume1/docker/openclaw-data/gogcli/data/keyring/
- Survit aux compose restart, stop+start, down+up, --force-recreate
- GOG_KEYRING_PASSWORD doit rester identique (sinon keyring illisible)
TODO
- Investiguer config.path warning (non critique, gog créera /gogcli/config/ à la prochaine écriture config)
- Mettre à jour scripts/generate_gmail_token.sh (référence à
gog auth generate-tokenqui n'existe pas — la vraie commande estgog auth add ... --manual) - Référencer la nouvelle syntaxe gog dans MEMORY.md (procédure compacte ~1100 chars proposée plus haut, à appliquer une fois reposé)
✅ Validation finale 10 juin 2026 ~02:13-02:18 UTC+2
Test fonctionnel complet via WhatsApp DM (session fraîche post-/new) :
Questions/réponses
| Question | Comportement | Latence |
|---|---|---|
| "Combien de mails aujourd'hui ?" | 1 appel gog gmail search → "2 messages" | ~1min |
| "et hier ?" | Réutilise contexte + 1 appel | ~5s |
| "donne la liste" | Format structuré avec dates + étiquettes | ~30s |
| "et liste des mails de lundi" | Recherche multi-jours, format détaillé | ~1min |
Test dashboard
"fait un classement par catégorie des mails depuis le 1juin 2026 et le 10 juin 2026" → Réponse multi-section (Newsletters/Actualités/Réseaux/Personnel/Systèmes/Autres) → Classification sémantique propre, ~30 mails listés → Aucune boucle, aucune saturation
Conclusion
- Phase D bilan classement Gmail : PHASE LECTURE COMPLÈTEMENT OPÉRATIONNELLE
- Phase E (mutations en masse) : prête à être lancée, syntaxe validée par l'agent
- Aucune intervention manuelle nécessaire pour les questions Gmail standard