RFDInboxTriage
RFDInboxTriage is a local-first email triage system. It drains Gmail into a searchable SQLite store, then uses the user’s own labeling decisions to suggest bulk classifications — without sending mail content to a third party unless the user explicitly invokes the Analyst layer.
The Problem
Gmail’s search is good for exact matches, bad for vague recollection. Labels are either too few or too many. Filters are one-by-one. And any local email tool that does not write back to Gmail leaves you with two inboxes that disagree about what is “done.”
The Solution
Drain and index: Messages are pulled into a local SQLite database with an FTS5 full-text index. You can search the way you actually think about an email, not just the exact words in it.
Freeform labels: Create any label you want, with priority tiers: high, medium, low, archive. There is no preset taxonomy forcing you to reshape your workflow.
Real Gmail archive: The archive tier removes the INBOX label via the Gmail API. An archived message stays archived in Gmail, not just in the local tool.
Batch classification: The system learns from your verdicts. It builds a domain-to-label map and only suggests a label when it has at least two verdicts and at least 80% agreement. Suggestions are read-only until you explicitly apply them — it never reorganizes your inbox without consent.
Analyst layer: After 50+ verdicts, an OpenRouter-powered Analyst reviews your patterns and proposes label merges, splits, or cuts. It activates only when there is enough history to be useful, and it still proposes rather than acts.
The Current Phase
Phase 5b is an Analyst Card Interactivity hotfix — a focused refinement to the Analyst UI, not a broad expansion of the labeling engine. The core behavior remains: local-first processing, explicit consent for classification, and honest thresholds before any automated suggestion appears.
GitHub: RFDInboxTriage
Built with Python, SQLite FTS5, and the Gmail API. 75 tests, 0 failures, 5 ADRs.