Communitygithub.com

noambrand/gmail-label-cleanup

Compétence d'agent : trier un arriéré volumineux de Gmail dans les libellés que vous utilisez déjà, et créer des filtres pour que les nouveaux messages se trient automatiquement. Inclut un installateur MCP Gmail en un clic.

Qu'est-ce que gmail-label-cleanup ?

Cette compétence est conçue pour les développeurs et utilisateurs avancés de Gmail qui doivent organiser un arriéré de milliers de messages non labellisés, tout en automatisant le tri des nouveaux courriels. Contrairement aux connecteurs Gmail intégrés dans la plupart des assistants (qui ne traitent qu'un fil par appel et ne disposent pas d'API de filtres), elle utilise un serveur MCP Gmail complet, capable de gérer des lots de 50 messages et de créer des filtres côté serveur. La règle d'or est que les critères de tri sont appris à partir de l'historique de l'utilisateur, jamais inventés, évitant ainsi des erreurs de classification en masse. Le processus est découpé en passes limitées, réversibles et journalisées, avec une gestion prudente des messages sensibles (codes de connexion, alertes de sécurité) qui restent non labellisés.

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add noambrand/gmail-label-cleanup

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Nettoyage des libellés Gmail

Trier un arriéré volumineux de Gmail dans les propres libellés du propriétaire, et faire en sorte que les futurs messages se labellisent eux-mêmes.

Les connecteurs Gmail intégrés dans la plupart des assistants labellisent un fil par appel et n'ont pas d'API de filtres. C'est trop lent pour des milliers de messages et ne peut pas empêcher l'accumulation de reprendre. Cette compétence utilise plutôt un serveur MCP Gmail complet, qui offre de véritables filtres côté serveur et des lots de 50 messages.

Avant la première exécution

  1. Installer le serveur MCP. Voir install/INSTALL.md. Il nécessite un client OAuth de bureau Google Cloud et une connexion via navigateur. Environ dix minutes, une fois.
  2. Créer le fichier de règles. Copier references/rules-TEMPLATE.md dans un fichier privé (le modèle suggère my-rules.md, que .gitignore exclut déjà) et le remplir à partir de l'historique du compte. Ne jamais inventer les règles. Voir "Apprentissage des règles" ci-dessous.

L'unique règle qui fait fonctionner cela

Les règles sont apprises à partir du propre étiquetage passé du propriétaire, jamais inventées.

Pour chaque expéditeur ou sujet, regarder où cette personne a déjà classé cet expéditeur elle-même, et le copier. Ce n'est que lorsqu'un expéditeur n'apparaît nulle part dans son historique qu'un jugement est autorisé, et il est alors enregistré dans une section "deviné" afin de pouvoir être corrigé. Un mauvais libellé est bon marché à corriger ; un mauvais libellé appliqué silencieusement à 300 messages ne l'est pas.

La deuxième règle, apprise à la dure : le contenu compte, pas seulement l'expéditeur. Un expéditeur est une dimension. Une newsletter sur l'argent provenant d'un éditeur de bien-être mérite également le libellé argent. Un fil peut porter plus d'un libellé.

Apprentissage des règles

Interroger le compte, pas la personne. Pour chaque libellé, lire ce qui s'y trouve déjà :

search_emails: label:"<nom du libellé>"

Lire 30 à 50 résultats et noter les expéditeurs. Cette liste est la règle. Répéter pour chaque libellé. Ensuite, list_email_labels pour obtenir les IDs des libellés, que batch_modify_emails utilise réellement.

Faire cela une fois, l'écrire dans le fichier de règles, et continuer à l'ajouter à chaque passe. Chaque passe découvre des expéditeurs que la précédente n'avait pas vus.

Exécution d'une passe

Une passe est une tranche de travail délimitée, journalisée et réversible. Visez 200 à 300 messages. N'essayez pas de tout faire en une seule exécution.

1. Confirmer que les filtres existent.

list_filters

Si les filtres du fichier de règles sont manquants, les créer d'abord avec create_filter, un par groupe de libellés, en utilisant des critères from:. Les filtres sont la partie qui empêche le problème de revenir.

2. Trouver les courriels non labellisés.

D'abord la boîte de réception :

search_emails: has:nouserlabels in:inbox

Une fois que la boîte de réception ne contient plus que les messages délibérément nus, le reste du travail est l'archivage. Parcourir par date, la limite la plus ancienne se déplaçant à chaque fois :

search_emails: has:nouserlabels -in:inbox -in:sent -in:draft -in:trash -in:spam -in:chats before:YYYY/MM/DD

Prendre 50 à 60 par page. Définir before: sur la date du résultat le plus ancien que vous venez de traiter, et l'appel suivant continue là où vous vous êtes arrêté. C'est plus fiable que les jetons de pagination et cela survit à une interruption.

3. Regrouper par libellé, puis par lot.

Trier la page en une liste d'IDs de messages par libellé, puis un appel batch_modify_emails par libellé avec addLabelIds. Jamais un appel par message.

Si un lot retourne Too many concurrent requests for user, réessayer uniquement les IDs qui ont échoué. L'appel signale exactement lesquels ont échoué.

4. Journaliser. Ajouter une entrée datée au journal d'annulation. Voir "Le journal d'annulation" ci-dessous.

Ne jamais toucher

  • Codes de connexion uniques, liens magiques, réinitialisations de mot de passe et alertes de sécurité. Ceux-ci restent non labellisés et ne sont jamais mis à la corbeille. Si une personne a besoin de trouver rapidement un code de connexion, un libellé n'aide pas et une règle de mise à la corbeille nuit activement.
  • Tout ce qui figure sur la propre liste "ne jamais labelliser" du propriétaire. Les personnes ont des publications et des expéditeurs qu'elles souhaitent laisser nus, et elles vous le diront. Écrivez chacun dans le fichier de règles au moment où elles le disent, dans leurs propres termes.
  • Courriels familiaux et personnels, à moins que le propriétaire ait déjà labellisé cette personne lui-même.

Mise à la corbeille

Mettre à la corbeille uniquement ce que le propriétaire a explicitement autorisé, et uniquement par correspondance de sujet. L'ensemble par défaut sûr est les avis de conditions d'utilisation et de politique de confidentialité :

subject:("terms of service" OR "terms and conditions" OR "terms of use"
         OR "privacy policy" OR "user agreement")
negatedQuery: subject:(code OR verification OR verify OR "security alert" OR password)

La requête négative n'est pas facultative. Sans elle, un courriel "Verify your account - updated terms" irait à la Corbeille.

La Corbeille de Gmail est récupérable pendant 30 jours. Rien dans cette compétence ne supprime jamais définitivement.

Le journal d'annulation

Chaque passe ajoute une entrée datée. C'est l'enregistrement qui rend le travail réversible et vérifiable :

  • La date et le numéro de passe.
  • Si les filtres existaient, et ceux créés.
  • Le nombre labellisé, et le nombre par libellé.
  • Décisions subjectives, nommées. Quels expéditeurs n'avaient pas de précédent, ce qui a été décidé, et pourquoi. C'est la partie qui sera corrigée plus tard.
  • Ce qui a été confirmé comme nu et non touché.

Voir examples/undo-log-EXAMPLE.md. Écrivez-le même lorsque la passe est ennuyeuse. Surtout à ce moment-là.

Les filtres ne touchent pas aux anciens courriels

Cela surprend tout le monde, alors dites-le à haute voix au propriétaire :

Un filtre Gmail ne s'exécute que sur les courriels qui arrivent après la création du filtre. Il ne remonte jamais en arrière. Ainsi, les deux moitiés de cette tâche sont véritablement distinctes : les filtres gèrent l'avenir automatiquement, et l'arriéré d'archives doit être traité manuellement, passe par passe, exactement comme décrit ci-dessus.

Ce qui signifie : après quelques passes qui ont découvert les véritables expéditeurs à fort volume, revenez en arrière et ajoutez également des filtres pour eux. Sinon, ces expéditeurs continuent d'arriver non labellisés et l'arriéré se reconstruit derrière vous.

Annulation d'une passe

Lire l'entrée du journal d'annulation pour la passe, puis batch_modify_emails avec removeLabelIds sur les mêmes IDs de messages. Pour tout ce qui a été mis à la corbeille, untrash fonctionne pendant 30 jours. C'est pourquoi le journal enregistre les comptes et les raisonnements plutôt qu'un simple "fait".

Skills associés