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:

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
- Reads your messages, to show them to you.
- Organises them — labels, archive, trash, star, read — when you do.
- Sends the mail you write, from the addresses your account already has.
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.