from sendmail to your DMs
A local-first, AI-native CLI and terminal UI for the messages humans send each other. Read, search, reply, and pipe to agents — all from your shell.
▸ LinkedIn today. iMessage, Slack, Discord, email, SMS next.
Messages are plain JSONL in a local git repo. No cloud sync. No telemetry.
cat, grep, and git log work exactly as you'd expect.
Every command speaks --json.
NDJSON event streams feed agents in real time. No SDK to learn — just shell out.
Full terminal UI with vim bindings, inline search, and emoji reactions.
Designed for people who already live in tmux.
Channels
allman's ambition is the same as sendmail's was for email — one open, programmable, local-first layer for every messaging channel. One adapter at a time.
Full sync · real-time listen · send · react · search
Local macOS DB adapter
Workspace DMs + threads
DMs across servers
IMAP + Gmail API
Twilio + macOS Messages
Direct messages
Adapter API · write your own
Interface
Sync, search, send, and listen from the command line. Pipe to scripts, feed to agents, or wire into your shell the way you'd wire any Unix tool.
allman sync — pull conversations with incremental or full re-sync allman listen — stream live events as NDJSON allman send — reply by slug, URL, or URN with pre-send safety allman grep — full-text search over every message you've had allman inbox — watermarked unread feed built for agent polling A full inbox experience in your terminal. Browse, read, compose, react, search — everything a mail client does, with keys instead of clicks.
j/k, g/G, / search For Agents
allman, exactly like you do. No protocol. No SDK. No long-running server to negotiate with. Agents call the CLI, parse JSON, pipe to the next step — the same tools every developer already knows. Sendmail was an executable, not a service. allman follows the same rule.
Works inside Claude Code, Cursor, Windsurf, or any framework with shell access. Inspectable, replayable, composable with jq, grep, and every other Unix tool.
Every command takes --json. stdout is data, stderr is logs — agents parse without prompting tricks.
allman listen --json emits messages, reactions, and typing indicators as newline-delimited JSON. Pipe it into anything.
Aborts if a new inbound arrived since your agent's last read. Per-channel throttles enforced in the client. Your agent can't be too eager.
How It Works
One binary, no package manager. Works on macOS and Linux.
curl -fsSL https://raw.githubusercontent.com/tarkaai/allman-tui/main/install.sh | bash
Real browser session. Cookies stay on your disk.
allman login
History → JSONL. Incremental by default.
allman sync
Browse, script, or hand off to an agent.
allman-tui
Store
Every message you receive is a line in a JSONL file on your disk.
cat, grep, jq — they all work. Back it up with
git push. There is no other database.
Credentials never leave your machine. Authentication happens through a real browser session — the same way you'd log in yourself.
Lineage
Eric Allman wrote sendmail in 1981 — the open, programmable mail transfer agent that moved a generation of human messages.
Forty-five years later, those messages live in a dozen closed silos. allman is the same idea, for the channels that actually matter now.
allman is in private beta. Sign up for the CLI, TUI, docs, and direct support from the team building it.
No credit card. No spam. We'll email you setup instructions.