# 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 1. messages.delete permanent (toujours messages.trash) 2. Toucher la whitelist (abort silencieux si match) 3. >200 actions par batch Gmail (en pratique 300 OK) 4. >2000 actions par jour sans confirmation humaine 5. Modifier labels système (INBOX retirable mais pas SENT/DRAFT/IMPORTANT) 6. Lancer une vague sans dry-run préalable validé ### ALWAYS 1. Dry-run obligatoire avant toute action en masse 2. Logger chaque batch dans gmail-housekeeping.md 3. Respecter gmail-rules.md comme source de vérité unique 4. Vérifier la whitelist au runtime (pas seulement au design) 5. Pause 5s entre 2 batchs gog gmail trash/archive 6. 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 : 1. gog filters create (à explorer via gog gmail filters --help) 2. Gmail API directe : users.settings.filters.create (Python) 3. 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-token` qui n'existe pas — la vraie commande est `gog 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