# Email, from your terminal

Send, read and set up everything in AI Inbx from a shell, a script or the coding agent beside you.

[Get started](/signup)
[Documentation](https://docs.aiinbx.com/cli)

~/northwind

Install with curl, sign in, send the Q4 report to Grace with the PDF attached, then wait for her reply, which arrives with a question about page 3.

One binary for macOS, Linux and Windows. Install it with curl, npm or Homebrew.

You and your agent

## Tables for you. JSON for your agent.

The same command reads the room. At a terminal it prints tables and asks before anything it can’t undo. Piped, in CI or run by an agent, it prints JSON and never waits on a prompt.

Terminal

At a terminal, aiinbx threads prints a table of the latest threads: id, subject and the mailbox each is in.

Claude Code

Run by an agent and piped, the same command prints the API's JSON: the thread's id, space, subject, mailbox, participants, message count, last message time and what it forwards.

Works in any agent with a shell. Teach it the rest in one line: `npx skills add aiinbx/cli`

-   Claude Code
-   Codex
-   Cursor
-   Gemini CLI
-   GitHub Copilot
-   Windsurf

Install

## One binary. Nothing else to install.

No Node, no Bun, no runtime to keep in step. Your login lives in the system keychain, and it tells you when there’s a new version.

shell

```
curl -fsSL https://aiinbx.com/install.sh | sh
```

On your machine

## Your dev loop, on localhost

webhooks

aiinbx listen forwards every event to a dev server on localhost, signed like a real webhook, printing each one with the status the handler answered — including a 500 from a handler that broke.

e2e

In an end-to-end test, aiinbx wait blocks until the verification email to the test address arrives, and jq reads the code out of the text without its quoted history.

`listen` posts real events to your dev server, signed exactly like a production webhook. Nothing to register, nothing to tunnel.

`wait` blocks until the email lands — sign-up codes, magic links — and exits 124 if it never does, failing the run.

Doctor

## When something’s off, it says what to type

`aiinbx doctor` checks your login, the API and every domain. Name one and it reads each record against the live zone, and ends on the fix.

~/northwind

aiinbx doctor rheinbau.de finds the domain unverified: four records are in, the DKIM record is pending, and the live zone check shows it was published at the domain name twice, with the fix to set its name to aibx.\_domainkey.

Around it

## The small things a shell needs

React Email, straight from disk.

`--react emails/welcome.tsx --props '{…}'` renders the template with your project’s own React and sends the HTML and a plain-text body.

Safe to retry.

Every send carries an idempotency key and prints it. Pass your own `--idempotency-key` and a retried job sends once.

Every API operation is a command.

`aiinbx commands` prints the whole tree as JSON — every flag, its type, whether it repeats — for an agent to read before it types.

Profiles for every account.

`-p staging` for one command, `auth switch` for all of them. A CI login never changes what your own commands act as.

Keys where keys go.

Secrets live in the macOS Keychain, the Secret Service or DPAPI. Tokens renew on their own, one terminal at a time.

Lists without paging.

`--all` walks every page for you. `--data @file.json` or stdin takes a whole body, with flags laid over it.

## Give your product an inbox. The hard parts are already handled.

[Get started](/signup)
