Files
OPENCLAW_ARCHIVE3_17/handoffs/HANDOFF-2026-06-09-GMAIL.md
Tallagrand Thierry 5363f99b76 Gmail Phase E/F + HANDOFF global + cleanup cron/root
- 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
2026-06-26 00:28:07 +02:00

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)

Finance

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.

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


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