from sendmail to your DMs

Every DM,
one inbox.

A local-first, AI-native CLI for the messages humans send each other, with a terminal inbox and a native Mac app on top. Read, search, reply, and pipe to agents.

▸ LinkedIn today. iMessage, Slack, Discord, email, SMS next.

allman
$ allman sync
syncing inbox · 47 conversations · 312 messages fetched
done in 8.2s
$ allman inbox --json | claude
→ 3 unread · agent drafting replies...
$ allman send jamie-rivera "Thursday works. 2pm?"
sent to Jamie Rivera
$ _
Local-first

Your data, on your disk.

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.

AI-native

Built to be piped.

Every command speaks --json. NDJSON event streams feed agents in real time. No SDK to learn — just shell out.

Keyboard-driven

Never leave the shell.

Full terminal UI with vim bindings, inline search, and emoji reactions. Designed for people who already live in tmux.

Channels

Today LinkedIn.
Tomorrow, everywhere humans message.

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.

LinkedIn SHIPPING

Full sync · real-time listen · send · react · search

iMessage NEXT

Local macOS DB adapter

Slack PLANNED

Workspace DMs + threads

Discord PLANNED

DMs across servers

Email PLANNED

IMAP + Gmail API

SMS PLANNED

Twilio + macOS Messages

X / Bluesky LATER

Direct messages

Your channel SDK

Adapter API · write your own

Interface

One CLI.
Two front-ends.

The allman CLI owns the store, the sync, the rate limits and every call to the platform. The terminal inbox and the Mac app are front-ends over it: both bundle the binary, and both shell out to it for every write.

allman — the CLI

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
allman listen
$ allman listen --json
connected · streaming events...
{"type":"message","from":"jamie-rivera",
 "body":"Thursday at 2 works!","ts":...}
{"type":"reaction","from":"taylor-osei",
 "emoji":"👍","msgUrn":...}
{"type":"typing","from":"morgan-patel"}
allman-tui
CONVERSATIONS
▸ Jamie Rivera 2m
  Taylor Osei 1h
  Morgan Patel 3h
  Casey Tanaka 1d
  Riley Johansson 2d
Jamie Rivera @jamie-rivera
Product Lead at Acme Corp
─── Today ───
you 2:15 PM
Thursday works. 2pm?
Jamie 2:18 PM
Thursday at 2 works!
↳ 👍
[browse] your-account · 47 convs · 3 unread · ● live · ? help

allman-tui — the inbox

A full inbox experience in your terminal. Browse, read, compose, react, search — everything a mail client does, with keys instead of clicks.

  • ▸ Vim-style nav: j/k, g/G, / search
  • ▸ Live updates via the platform's real-time event stream
  • ▸ Inline emoji picker with search-as-you-type
  • ▸ Quick-reply templates with variable substitution
  • ▸ Open profiles and threads in browser with one key

Allman.app — the Mac app

A native macOS inbox in your menu bar. iMessage-style threads, labels as split inboxes, notes, snooze, group messages, your network, and insights — all over the same store the CLI keeps in ~/.allman.

  • ▸ Keeps allman listen running; re-syncs on wake and network changes
  • ▸ Native notifications with inline reply; several accounts at once
  • ▸ Labels, notes, snooze, reminders, archive, snippets — kept outside the store
  • ▸ Every write goes through the embedded CLI; nothing leaves your Mac
  • ▸ macOS 26, Apple Silicon. Download the latest release →
Allman for Mac: the messenger window with the inbox, a thread and the contact panel, shown with mock data

For Agents

Your agent shells out
to 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.

  • SHELL
    A CLI is a tool. Agents use tools.

    Works inside Claude Code, Cursor, Windsurf, or any framework with shell access. Inspectable, replayable, composable with jq, grep, and every other Unix tool.

  • JSON
    Structured output, everywhere.

    Every command takes --json. stdout is data, stderr is logs — agents parse without prompting tricks.

  • STREAM
    NDJSON for long-running agents.

    allman listen --json emits messages, reactions, and typing indicators as newline-delimited JSON. Pipe it into anything.

  • SAFE
    Pre-send guards + rate limits.

    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.

agent + allman
# Poll for new messages as JSON
$ allman inbox --json --since 5m
[{"from":"jamie-rivera",
  "body":"Can we reschedule?",
  "channel":"linkedin"}]
# Filter with jq, hand to the model
$ allman inbox --json \
  | jq '.[] | select(.unread)' \
  | claude -p "draft replies"
# Stream for long-running agents
$ allman listen --json | agent
connected · waiting...

How It Works

Four commands.
That's the whole setup.

01

Install

One binary, no package manager. Works on macOS and Linux. On a Mac you can grab the app instead.

curl -fsSL https://raw.githubusercontent.com/tarkaai/allman-tui/main/install.sh | bash
02

Login

Real browser session. Cookies stay on your disk.

allman login
03

Sync

History → JSONL. Incremental by default.

allman sync
04

Use

Browse in the terminal or the Mac app, script it, or hand off to an agent.

allman-tui

Store

Plain files.
In a git repo.

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.

~/.allman
.allman/
  ACoAAA.../ # your account
    conversations/
      2-abc123/
        meta.json # name, headline
        messages.jsonl # full history
      @jamie-rivera → 2-abc123
      @taylor-osei → 2-def456
    config.json
    COOKIES.json (gitignored)

Lineage

Named after a mail carrier.

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.

Open Source

MIT-licensed.
Read the code, send a PR.

The CLI, the TUI and the Mac app are all public on GitHub. Build from source, fork it, wire it into your own tools — that's the whole point.

Stay in the loop.

Occasional updates from the team — new channels, major releases, and the things we're learning along the way. No funnels, no drip campaigns, no upsells. Unsubscribe in one click.

Roughly monthly. We'll never share your address.