· Now
Centralizes my mailboxes. A single batched LLM call scores every inbox from 0 to 3; deterministic code — not the model — then decides what may be deleted. Running unattended on GitHub Actions every six hours since July: 241 consecutive runs, 1,375 mail scored, nine in ten binned, zero rejected batches.
- Score 0 is noise and gets binned, 1 is automated but wanted, 2 is real mail, 3 needs a reply and fires a push notification.
- One model call per run, not an agentic loop. The script does every Gmail call; the model only scores. temperature 0, JSON mode enforced, and it only ever sees subjects, senders and Gmail's own labels — never a message body. That is both a privacy line and a token budget.
- The model scores, the code decides. Any 0 is raised back to 1 when the mail is starred, flagged important, or comes from a real person at a consumer domain — clamps that live in code because the model ignored those same signals when they sat in its own prompt.
- Nothing is written on a malformed answer. Same count, same id set, every score in range, or the batch is retried once and then dropped whole. A partial batch is never applied.
- The email blocks are data, not instructions: a mail claiming to be urgent is its author talking, and the prompt says so. Scoring anyone's inbox means scoring text written by people who want a particular outcome.
- Benchmarked llama-3.3-70b against a local qwen2.5:14b and llama-3.1-8b. The smaller models over-deleted — they killed a train booking and a job alert. The two errors do not cost the same: a mail wrongly deleted is gone, a mail wrongly kept costs a second. The 70B is the one that keeps when unsure. Groq retired every Llama on 17 August; the triage now runs on gpt-oss-120b, the replacement Groq recommends, cheaper on both sides, with the same guardrails.
- There are deliberately no regex ban rules. The shape of an address correlates with automated, not with unwanted — the pattern that catches game promos also catches 2FA codes and Google security alerts. Bans are per sender, so the judgement stays mine.
- Two months unattended on GitHub Actions, every six hours: 241 runs, 241 successes, 1,375 mail scored, 89% binned, 38 pre-banned without ever reaching the model, zero rejected batches, seven zeros overruled by a clamp, about $0.05 a month. A second workflow regenerates those numbers from the run logs every day: counters only, no sender ever leaves the log.
- The one outage so far was not the model's doing: when Groq pulled its Llama models, the workflow stayed green for three days while every mailbox failed on a 404 that nobody read. The model was swapped in an evening; the lesson kept is that a job's own status is not evidence that its engine ran.
- What survives lands in my Android app — Tinder for mail: swipe to reply or delete.