吾輩

Wagahai

Mail, in your terminal.

Gmail, Google Workspace and Fastmail as one fast local mailbox, where only mail you've said yes to reaches you.

「吾輩はメールクライアントである。名前は今言った。」
“I am a mail client. My name — I just said it.”

 Inbox      │ Imbox · 25                                                                    
 Imbox    25│  Hana Ito, you        quarterly numbers — locking Thursday?  ↩ needs reply  (9)  09:41 
 Feed     48│   Ridge Dental         appointment tuesday — please confirm ★      (2)  08:02
 Paper     3│    The Daily Loop       five things, tuesday — the picks…           (1)   mon
 Screener  2│    Rei Okabe, you       sushi on friday? — bring anyone you like    (8)   mon
 ↩ Waiting 5│   Jun Mori, you        offsite dinner — final headcount            (4)   sun

 吾輩 ▸ 3 accounts · synced 12s ago · 0 pending                          archived · u to undo 

The morning open. Under 80 ms to a painted inbox, which leaves you no time to dread it.

Only mail you've said yes to

You screen calls from numbers you don't know. HEY asked why email should be any different, and they were right — so wagahai inherits the idea, and adds the part we couldn't live without: every screening decision becomes a rule you can read, in rows you can edit. Never a model's mood.

First-time senders wait

New senders land in the Screener, not your inbox. One key decides: y in, n out forever, l filed. The rule your keystroke writes is yours to read, and the sender never gets a vote.

What waits on you, flagged

A watcher reads for genuine questions — “are you free Thursday?”, not a newsletter's “Ready to grow?” — and flags the threads waiting on your reply. It would rather miss one than nag you twice.

Everything undoable

Archive, file, rule, send — every action is one u from undone, and outgoing mail waits out a cancel window before it leaves. Regret is a supported workflow.

Reading, with pictures

HTML mail comes through as plain, readable text — legible, not pretty, and we won't pretend otherwise. The pictures are the good part: they draw right there in the terminal, but only when you ask.

 Feed ▸ 1/48 · autumn, upcountry                                      r reply · f fwd 
 The Daily Loop ‹letters@dailyloop.example›                          today 07:12
   Autumn, upcountry

   The maples turned early this year. Our correspondent walked the
   ridge trail at dawn and sent back one picture worth the trip:
A photograph of a mountain ridge trail at dawn, maples turned red and orange above a valley of mist, drawn inline in the terminal
   Full gallery and the walking notes [1].

   ▨ 2 remote images shown · 1 tracker blocked — permanently

Press I and the pictures appear. The tracking pixels never do — blocked by architecture, not by preference, and the count shown so you can watch privacy working.

 screener review  3 senders · 5 threads                                               
 N  Noor Haddad                                                     → Feed            bulk: mentions unsubscribe                                                       Atlas: your week in review · 3 threads · noor@atlas.example                  
  M  Marco Bellini                                                   → Imbox?
     a person until told otherwise
     Intro from the Rust meetup · 1 thread · DMARC ✓

 y in · n out · l file · Enter open · u undo

The Screener review: each stranger, the evidence, one keystroke. A backlog of hundreds goes down like a card game you're winning.

It runs while your laptop sleeps

Wagahai splits in two: a daemon that owns your mail, and the client you look at. Put the daemon on any always-on machine — a home server, a mini in a closet — and open the client from your laptop over plain ssh. Close the lid; syncing, screening and flagging carry on without you. Open it tomorrow anywhere and the work is already done. The client even keeps itself up to date over the same ssh connection, because you have better things to install.

Agents are first-class — and fenced

Every operation the client can perform exists on a local, permissioned API. An assistant connects with a token scoped like “Feed, read-only, expires tonight” — and can see and touch nothing else. Every agent action is attributed and undoable; a week of agent activity is one query. Sending is the hard line: agents may only queue, and mail leaves when a human presses the key. The cat does not let just anyone answer the door.

Is it any good?

No, but we like it. Honestly: Wagahai is an internal client we built for ourselves — free, experimental, and depending on how far your needs and setup are from ours, it may simply not work for you. Be warned. We read all of our own mail with it and it seems good to us — but we wrote it, so we would say that. Expect sharp edges, missing features, and firm opinions.

Tested on macOS, in Ghostty, and nowhere else. It might work on other systems. We genuinely have no idea.

What Wagahai does with your Google account

That is all. Everything happens on your machine: Wagahai's daemon talks to your mail providers directly. There is no Wagahai server, no account with us, and your mail is never sent anywhere except to the provider it came from. The cat would like to state, with some ceremony, that your correspondence is none of our business. How your data is handled →

Get it

One line. No account, no setup, no commitment — the demo ships a fully fictional mailbox, so you can meet the cat before trusting it with anything.

curl -fsSL https://wagahai.org/install.sh | sh
wagahai --demo

macOS on Apple Silicon today; other builds when they've earned it. The script is short enough to read first — it installs one binary to ~/.local/bin and verifies the checksum, because we were raised properly. Real mail runs through your own always-on daemon (the ssh trick above); for that, and for everything else, write to info@katayama.dev — tell us what you'd use it for, and how you feel about cats.