CLI
Email, from your terminal
Send, read and set up everything in AI Inbx from a shell, a script or the coding agent beside you.
$ curl -fsSL https://aiinbx.com/install.sh | sh✓ Installed aiinbx 0.4.0 to ~/.aiinbx/bin$ aiinbx loginOpened your browser to sign in.✓ Signed in to Northwind as profile default$ aiinbx send --from ada@northwind.io --to grace@harbourly.com \ --subject "Q4 report" --text-file report.md --attach q4.pdfIdempotency key 4e306697-7390-43c4-8e61-cb5a455ff376✓ Sent eml_018f2c… to grace@harbourly.com (queued)$ aiinbx wait --from grace@harbourly.com --json \ | jq -r .stripped_textLooks great. One question on page 3: is the EMEA number net?One binary for macOS, Linux and Windows. Install it with curl, PowerShell, npm or Homebrew.
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.
curl -fsSL https://aiinbx.com/install.sh | shYou 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.
$ aiinbx threads --limit 3id subject mailboxthr_8f2c… Re: Q4 report ada@northwind.iothr_1b2c… Invoice 2291 billing@northwind.iothr_2c3d… Kickoff Monday? hello@northwind.io$ aiinbx threads --limit 3 | jq '.data[0]'{ "id": "thr_8f2c…", "space_id": null, "subject": "Re: Q4 report", "mailbox": "ada@northwind.io", "participants": [ "ada@northwind.io", "grace@harbourly.com" ], "message_count": 2, "last_message_at": "2026-09-26T14:02:11Z", "forward_of": null}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
On your machine
Your dev loop, on localhost
$ aiinbx listen --forward-to localhost:3000/hooksReady. Forwarding every event to http://localhost:3000/hooksSigning secret whsec_jeMe… (aiinbx listen --print-secret)14:02:11 email.sent evt_a1b2… → 200 38 ms14:02:13 email.delivered evt_b2c3… → 200 21 ms14:03:40 email.received evt_c3d4… → 500 112 ms14:03:52 email.received evt_d4e5… → 200 44 ms$ aiinbx wait --to qa@northwind.io --subject "your code" \ --timeout 1m --json | jq -r .stripped_textYour verification code is 482 913.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.
$ aiinbx doctor rheinbau.de✗ rheinbau.de not verified → Publish the records below, then: aiinbx domains verify dom_4kq2…✗ DKIM TXT aibx._domainkey.rheinbau.de pending → Publish TXT aibx._domainkey.rheinbau.de with the value p=MIGfMA0…✓ INBOUND MX rheinbau.de✓ RETURN_PATH MX bounces.rheinbau.de✓ SPF TXT bounces.rheinbau.de✓ DMARC TXT _dmarc.rheinbau.de✗ The DKIM record ended up at the wrong name The value is published — but at aibx._domainkey.rheinbau.de.rheinbau.de instead of aibx._domainkey.rheinbau.de, so nothing finds it. → Edit that record and set its name to just "aibx._domainkey", without "rheinbau.de" on the end. Your DNS provider adds that part for you.Around it
The small things a shell needs
--react emails/welcome.tsx --props '{…}' renders the template with your project’s own React and sends the HTML and a plain-text body.--idempotency-key and a retried job sends once.aiinbx commands prints the whole tree as JSON — every flag, its type, whether it repeats — for an agent to read before it types.-p staging for one command, auth switch for all of them. A CI login never changes what your own commands act as.--all walks every page for you. --data @file.json or stdin takes a whole body, with flags laid over it.