EmailOps
Documentation

Fonctions d'IA

Discutez avec votre boîte, générez des réponses, classez le courrier, extrayez des tâches — le tout sur un modèle que vous contrôlez.

Toutes les fonctions d’IA ci-dessous passent par le backend que vous avez choisi, et chacune peut être désactivée séparément. Avec le backend intégré par défaut, aucun prompt ni aucun e-mail ne quitte jamais votre machine.

Choisir un backend

Paramètres → IA : backend et modèles détermine où se déroule l’inférence :

  • Dans l’app — un runtime llama.cpp intégré. Rien à installer et pas de démon ; une fois le modèle téléchargé, répondre ne génère aucun trafic réseau. C’est le choix par défaut. Il utilise automatiquement votre GPU quand il y en a un — Metal sur Apple Silicon, Vulkan sous Windows et Linux — et le CPU sinon. Sur Mac, il exige une puce Apple Silicon (M1 ou plus récente) ; sur un Mac Intel il reste indisponible.
  • Ollama — un serveur Ollama que vous faites déjà tourner sur http://localhost:11434. Utile si vous entretenez une bibliothèque de modèles partagée. À noter : sur un Mac Intel, Ollama ne bénéficie pas non plus d’accélération GPU, il sera donc lent.
  • OpenRouter — une API cloud payante. Nécessite une clé d’API, gère un plafond budgétaire mensuel et envoie le contenu de vos e-mails à un tiers — elle reste donc désactivée tant que vous ne l’activez pas. Son panneau affiche les dépenses de la période en cours face à ce plafond, avec Démarrer une nouvelle période pour remettre le compteur à zéro.

Le catalogue de modèles

Le backend intégré télécharge les modèles depuis un catalogue sélectionné, chacun épinglé à une somme de contrôle vérifiée :

ModèleTaille de téléchargementMémoire exigée par EmailOps
Qwen 3.5 4B~3,0 Go8 Go
Qwen 3.5 4B Q8~4,6 Go12 Go
Qwen 3.5 9B~5,7 Go16 Go
Gemma 4 12B Instruct~6,7 Go16 Go
Qwen 3.5 27B~17,6 Go24 Go
Qwen 3.6 35B A3B~22,4 Go32 Go
Nomic Embed Text v1.5 (embeddings, inclus)~84 Mo1 Go

La colonne de droite est la mémoire qu’EmailOps exige avant de proposer un modèle — une marge volontairement large, pas ce que le modèle consomme. Pic mesuré pendant la réponse, avec le contexte attribué à un Mac de 16 Go : environ 3,7 Go pour Qwen 3.5 4B, 4,3 Go pour sa version 8 bits, 5,6 Go pour Qwen 3.5 9B et 7,1 Go pour Gemma 4 12B. Dans quelle mémoire il doit tenir dépend de votre matériel :

  • Apple Silicon — mémoire unifiée, partagée entre CPU et GPU, via Metal. Comparez le chiffre à la mémoire totale de votre Mac.
  • Un GPU sous Windows ou Linux — la VRAM de la carte, pas votre RAM système, via Vulkan. Une carte de 8 Go fait tourner la ligne 8 Go et rien au-dessus, quelle que soit la RAM de la machine.
  • Sans GPU — la RAM système, sur le CPU. Cela fonctionne ; c’est simplement plus lent.

Un modèle porte la mention Recommandé, choisie pour la machine que vous utilisez : EmailOps examine la mémoire système et, si vous avez une carte graphique dédiée, sa mémoire également, puis propose le plus grand modèle qui tient confortablement. Un portable et une station de travail verront donc des suggestions différentes. Les gros modèles répondent mieux et tournent plus lentement : la mention est un point de départ, pas une règle. Les exigences complètes sont dans Installation.

Réglages de performance

  • Maintenir le modèle chargé — combien de temps le modèle reste en mémoire entre deux tours (30 minutes par défaut). Des valeurs plus élevées évitent le rechargement lent ; 0 le libère immédiatement et rend la mémoire aux autres applications.
  • Fenêtre de contexte — combien de jetons le modèle peut traiter par tour. Plus grande, elle contient davantage d’e-mails récupérés et coûte plus de mémoire — c’est le premier réglage à baisser quand un modèle tient tout juste.
  • Mode raisonnement — chain-of-thought sur les modèles compatibles. Plus lent, plus précis, et vous pouvez afficher ou masquer la trace.
  • Limiter le traitement IA — borne ce que couvrent embeddings et classification : tous les e-mails d’un compte jusqu’à une limite d’e-mails (1000 par défaut) et, pour les comptes plus volumineux, seulement le courrier plus récent qu’une limite en jours (365 par défaut).

Discuter avec votre boîte

Posez vos questions en langage naturel — « qu’a dit l’avocat à propos du contrat ? », « résume ce fil », « qui me doit encore une réponse ? » — et obtenez une réponse citant les e-mails sources. Les réponses arrivent en flux au fur et à mesure de leur génération. Afficher dans la liste des e-mails, sous une réponse, place dans la liste exactement les e-mails qu’elle cite, pour que vous puissiez les ouvrir et les traiter.

Le chat occupe un panneau redimensionnable ancré à droite de la boîte de réception : vous pouvez continuer à lire tout en posant vos questions, et une vue plein écran reste disponible pour les sessions plus longues. Lorsqu’un e-mail est ouvert, le panneau propose ce fil comme contexte via une puce que vous pouvez retirer : les questions sur cet e-mail trouvent leur réponse dans le fil, et une question sur le reste de votre boîte (« qu’est-ce qui est arrivé aujourd’hui ? ») continue d’y chercher. Ce contexte ne vaut que pour une question et n’est jamais enregistré dans la conversation : vous pouvez donc passer d’un e-mail à l’autre au sein d’un même chat.

Le chat interroge un compte à la fois, et un sélecteur indique lequel — une réponse ne provient donc jamais silencieusement de la mauvaise boîte. Chaque compte conserve sa propre conversation tant que l’application reste ouverte : changer de compte vous ramène là où vous en étiez, et non à un chat vide.

Tapez /clear puis Entrée pour démarrer une nouvelle conversation. L’application le traite elle-même — rien n’est envoyé au modèle, cela ne coûte donc ni temps ni tokens.

Le chat répond aussi aux questions sur EmailOps lui-même — « comment connecter Ollama ? », « où sont stockées mes données ? », « que montre le tableau des étiquettes ? » — à partir de ces guides, dans votre langue et sans chercher dans votre boîte. La réponse renvoie à la section du guide utilisée, et suivre le lien ouvre le paramètre ou la vue correspondants. Lorsqu’un e-mail est ouvert comme contexte, le chat répond à partir de ce seul fil : retirez la puce pour poser une question sur l’application. Désactivez-le avec Répondre aux questions sur EmailOps dans Paramètres → IA : backend et modèles ; le chat ne connaît alors que votre boîte.

Chaque réponse dispose d’un panneau Afficher le raisonnement qui liste ce qui s’est passé, dans l’ordre : la route suivie par la question et ce qui l’a décidée, le planificateur de requêtes, la recherche dans la boîte, les sections des guides utilisées, chaque appel au modèle avec sa durée et chaque appel d’outil avec ses arguments et son résultat.

Le mode Recherche sert aux questions qui demandent tous les e-mails correspondants, et non les quelques-uns qu’une réponse normale lit : « liste toutes les factures de cette année », « combien de clients ont demandé un devis ? ». Il estime d’abord combien d’e-mails il lirait et combien de temps cela prendrait, et demande confirmation avant une exécution importante. L’estimation affiche aussi la recherche effectuée — expéditeur, dates, mots — pour que vous jugiez si elle a du sens, même quand elle ne trouve rien. Il les lit ensuite par lots, et les listes et les décomptes sont exacts, avec un lien vers chaque conversation. Annuler la recherche interrompt l’exécution.

Demandez quelque chose pour lequel l’application a un formulaire — « crée un filtre dynamique qui suit les factures fournisseurs avec montant et date » — et le vrai formulaire s’ouvre avec les champs remplis, pour que vous le relisiez et l’enregistriez. Le chat ne crée jamais rien de lui-même.

Arrêter la génération interrompt une réponse en cours d’écriture ; ce qui était déjà affiché est conservé.

Sous le capot, le chat combine la récupération (recherche sémantique sur vos e-mails indexés) et des appels d’outils (interrogations directes de la base). Le mode de routage est configurable :

  • Toujours RAG en premier — le mode par défaut ; récupérer le contexte, puis répondre.
  • Auto — une heuristique décide, question par question, s’il faut d’abord récupérer du contexte.
  • Toujours les outils en premier — passer directement aux requêtes structurées, sans récupération.

Quel que soit le mode, les outils restent disponibles ; le mode décide seulement si la récupération a lieu avant la réponse.

Les utilisateurs avancés peuvent modifier le prompt système et les prompts de récupération (réécriture de requête, reclassement) dans Paramètres → IA : backend et modèles → Prompts du chat.

Brouillons d’IA

Un bouton Brouillon IA à côté de Répondre à tous rédige une réponse ancrée dans le fil que vous consultez. Configurez une persona (une phrase sur l’identité de rédaction) et un style d’écriture — ou remplacez tout le modèle de prompt. Les brouillons arrivent dans l’éditeur pour relecture avant tout envoi.

Un brouillon lit le fil jusqu’au message auquel vous répondez, jamais les réponses postérieures. Vous pouvez dire à l’IA quoi répondre avant qu’elle écrive, et Régénérer le réécrit.

Classification

Chaque e-mail entrant est étiqueté sur trois axes — priorité, intention et sujet — si bien que la boîte se trie pratiquement d’elle-même et que les filtres intelligents ont de quoi filtrer. Le chat les utilise aussi : si vous demandez les e-mails urgents, il ne liste que ceux étiquetés urgents, et vous le dit s’il n’y en a aucun.

La classification fonctionne en deux couches :

  1. Les Règles correspondent à des motifs d’expéditeur ou d’objet (*@*.beehiiv.com, *facture*) et attribuent des étiquettes instantanément, sans appel au modèle.
  2. Le modèle traite tout ce que les règles ne couvrent pas, avec un prompt d’instructions que vous pouvez modifier.

Vous choisissez quelles catégories Gmail sont classées, vous pouvez tout reclasser après avoir modifié le prompt, et rattraper le courrier non classé à la demande.

Tableau d’étiquettes

Le Tableau d’étiquettes (sous Vues dans la barre latérale, à côté de la boîte de réception) transforme ces étiquettes en tableau. Choisissez une dimension — Entreprise, Priorité, Intention ou Sujet — et chaque valeur d’étiquette devient un bloc qui liste ses fils ; dans Tous les comptes, vous obtenez un bloc par compte et par étiquette. Un fil ne figure que dans un seul bloc, sous l’étiquette de son message classé le plus récent.

Les blocs sont ordonnés selon l’attention réelle que reçoit une étiquette — à quelle fréquence vous répondez à ses fils et les lisez, avec plus de poids pour l’activité récente — les promotions et notifications venant en dernier. Les filtres intelligents de la barre latérale suivent le même ordre. Glissez les blocs pour les réordonner (l’ordre est mémorisé par dimension), masquez une étiquette depuis son menu ⋮ — l’étiquette suivante monte prendre sa place, et le filtre quitte aussi la barre latérale — et récupérez les étiquettes masquées avec le lien Afficher les étiquettes masquées.

La barre d’outils restreint le tableau par période (Aujourd’hui, Hier, 7 derniers jours ou une plage de dates personnalisée), par catégorie Gmail, par nom d’étiquette, et avec le même interrupteur Masquer les indésirables que la boîte de réception ; deux icônes règlent la largeur des blocs. Un clic sur une carte ouvre le fil dans le volet de lecture, son menu ⋮ propose les mêmes actions qu’une ligne de la boîte de réception, et l’icône de chat du volet de lecture démarre une conversation avec ce fil en contexte.

Le tableau a besoin de la classification : il reste vide tant que le courrier n’est pas étiqueté, et n’apparaît pas lorsque les fonctions d’IA sont désactivées.

Les e-mails sont indexés pour que la recherche corresponde au sens et pas seulement aux mots-clés — décrivez ce dont vous vous souvenez et EmailOps le retrouve. Cela alimente aussi l’étape de récupération du chat. Choisissez les catégories indexées et reconstruisez l’index de zéro après un changement de modèle d’embeddings, dans Paramètres → Recherche IA.

Avec les deux backends locaux, l’indexation se fait sur votre machine. Avec OpenRouter, elle n’a lieu que si vous choisissez un Modèle d’embeddings dans son panneau : le texte de chaque e-mail indexé, ainsi que de chaque recherche et question du chat, est alors envoyé à OpenRouter et compte dans le budget mensuel. Sans modèle, la recherche sémantique est désactivée et la recherche se fait uniquement par mots-clés. Le modèle est vérifié à l’enregistrement, et celui qui ne produit pas les vecteurs de 768 dimensions dont l’index a besoin est refusé.

Traduction

Des boutons de traduction apparaissent sur les e-mails rédigés dans une autre langue et dans la fenêtre de rédaction. Le prompt de traduction est modifiable comme les autres.

Tâches

Expérimental. EmailOps parcourt le courrier à la recherche d’actions, d’engagements et d’échéances, et les rassemble dans un panneau Tâches. Comme les vrais engagements se trouvent généralement dans ce que vous avez écrit, un mode « apprendre uniquement des e-mails que j’ai écrits » existe. Vous pouvez exclure des expéditeurs et des étiquettes (les newsletters le sont par défaut), plafonner le nombre de tâches par e-mail, limiter la profondeur d’extraction et traiter à la demande le courrier plus ancien.

Activez-les dans Paramètres → Tâches IA avec Extraire des tâches des courriels ; les tâches trouvées apparaissent sous Tâches dans la barre latérale.

Mémoire

Expérimental. Les faits que l’assistant apprend sur vos contacts, domaines et projets sont conservés comme contexte de long terme, pour que le chat ne reparte pas de zéro à chaque fois. Les faits candidats sont notés et promus au-delà d’un seuil ; ceux qui obtiennent une note faible expirent. Tout ce qui a été appris est consultable, et l’ensemble du sous-système dispose d’un interrupteur général.

Activez-la dans Paramètres → Mémoire de l’IA avec Laisser l’assistant retenir des informations ; ce qu’elle a appris est listé sous Mémoire dans la barre latérale.

Lentilles

Des vues typées sur votre boîte — des projections structurées, enregistrées et extraites par l’IA (par exemple « toutes les factures avec montant et échéance ») que vous créez et exécutez depuis la barre latérale. Une ligne exclue disparaît de la vue ; Afficher les lignes exclues les réaffiche pour que vous puissiez en réintégrer une.

Les filtres dynamiques sont activés par défaut : créez et exécutez chaque vue depuis l’entrée Filtres dynamiques de la barre latérale. Désactivez-les dans Paramètres → Filtres dynamiques IA.

Un filtre dynamique peut être limité à certains Dossiers d’un compte, dossiers IMAP personnalisés compris.

Skills

Expérimental. Un skill est une procédure enregistrée que le chat suit pour un type de demande : la présentation de votre résumé hebdomadaire, la façon de répondre à un fournisseur. Chaque skill est un dossier dans le dossier de données de l’app, skills/<nom>/SKILL.md : un court en-tête avec un name (le nom du dossier) et une description de ce qu’il fait et quand l’utiliser, puis les instructions en Markdown. Seuls le nom et la description restent dans le prompt du chat ; les instructions sont lues lors des tours qui utilisent le skill. Rien de ce que contient le dossier d’un skill n’est jamais exécuté.

Les skills sont désactivés par défaut. Activez-les dans Paramètres → Skills IA avec Activer les skills ; une entrée Skills apparaît alors dans la barre latérale.

La vue Skills liste chaque skill avec son propre interrupteur et ouvre le SKILL.md du skill sélectionné dans un éditeur. Nouveau crée un skill à partir d’un modèle. Enregistrer l’écrit, et refuse un texte que le chat ne pourrait pas charger ou un fichier qu’un autre éditeur a modifié depuis son ouverture ; changer le name dans le fichier renomme le skill. Supprimer le déplace vers skills/.deleted, d’où il peut être restauré à la main.

Le chat applique un skill de trois façons : il en choisit un dont la description correspond à votre question, l’assistant en charge un pendant sa réponse, ou vous commencez le message par / suivi du nom du skill (/weekly-report la semaine dernière ; /a /b applique les deux). Taper / liste vos skills actifs. La trace de raisonnement indique le skill suivi par le tour et qui l’a choisi.

Tout désactiver

Paramètres → IA : backend et modèles → Fonctions IA est un interrupteur général. Désactivez-le et EmailOps fonctionne comme un client e-mail classique : pas de chat, pas de classification, pas d’embeddings, aucun modèle chargé. Vos données d’IA locales sont conservées au cas où vous le réactiveriez.