allman — every DM, one terminal

5 min read Original article ↗

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.

$ 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

Two front-ends.
One local store.

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 --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"}

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

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.

# 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.

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, script, 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/

  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.

Both the CLI and TUI are 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.