CLI · sep 2026

CtrlGmail

Local-first CLI die meerdere Gmail-accounts synchroniseert naar SQLite, mail categoriseert, taken extraheert met een uitwisselbaar taalmodel en opruimt, standaard als dry-run.

Status
Werkend, in eigen gebruik
Interface
ctrlgmail CLI + TUI
Tests
33 testbestanden
LLM-providers
4, te wisselen via env
Veiligheid
dry-run tenzij --apply
ArchitectuurCtrlGmail: hoofdstroom
  1. 01Gmail-sync
  2. 02SQLite-cache
  3. 03Categoriseren
  4. 04Taken extraheren
  5. 05Dry-run rapport
  6. 06--apply
  7. 07Sync naar Todoist / Notion

Probleem

Wie meerdere mailboxen beheert, verliest tijd aan sorteren, opruimen en het terugvinden van taken die in e-mails verstopt zitten. Webinterfaces werken per account, zijn traag voor bulkacties en zijn niet scriptbaar.

Randvoorwaarden

  • Lokaal: mail en tokens blijven op de eigen machine.
  • Veilig bij fouten: een verkeerde regel mag niet honderden mails verwijderen.
  • Geen lock-in voor het taalmodel, inclusief de optie om volledig lokaal te draaien.

Architectuur

Een Python-package met één entry point (ctrlgmail = "ctrlgmail.cli:main"). Gmail wordt via de officiële API en OAuth gesynchroniseerd naar een lokale SQLite-cache. Alle analyse draait op die cache, zodat herhaalde commando’s snel zijn en de API-limieten ontzien worden. Een kleine Node-dashboardserver leest dezelfde data.

Implementatie

  • Subcommando’s voor synchroniseren, organiseren, taken en uitschrijven, plus een rich-TUI voor triage.
  • Dry-run als standaard: opruimen en uitschrijven tonen eerst wat er zou gebeuren. Pas met --apply wordt er iets in Gmail gewijzigd.
  • Scheduler-daemon die jobs periodiek draait, met foutisolatie per job zodat één mislukte job de rest niet stopt.
  • Sync-adapters naar Todoist, Notion of een generieke webhook, achter één interface.
  • Tests: 33 testbestanden, inclusief een end-to-end test tegen een nagebootste Gmail-API.

AI en automatisering

Takenextractie gebruikt een taalmodel dat via omgevingsvariabelen gekozen wordt (ctrlgmail/tasks/llm.py): Gemini, OpenAI, Anthropic of een lokale OpenAI-compatibele server zoals Ollama of LM Studio. Zonder expliciete keuze pakt de tool de provider waarvan een API-key aanwezig is. Zo draait dezelfde workflow in de cloud of volledig offline.

Resultaat

Een werkende CLI die in eigen gebruik meerdere mailboxen beheert, met een testsuite die de kritieke paden afdekt.

Lessen

  • Dry-run als default is de belangrijkste UX-keuze voor een tool die destructieve acties kan uitvoeren.
  • Cache eerst, API daarna: een lokale database maakt analyses snel en herhaalbaar.
  • Provider-agnostisch vanaf het begin kost weinig extra code en maakt lokaal draaien mogelijk.
sys://contact

Iets vergelijkbaars bouwen?

Beschrijf het proces, de tool of het product in een paar zinnen. Je krijgt een concreet antwoord: wat haalbaar is, hoe je het zou bouwen en waar de risico’s zitten.