Open source · Free forever

Your inbox,
as an API.

Programmable Gmail for AI agents and the command line. Read, send, and sync your real inbox — pure JSON, no browser.

$ pip install plume-email
16 endpoints · OpenAPI 3.1 · Django + PostgreSQL · Self-hosted
plume — zsh

Everything an agent needs.
Nothing it doesn't.

Sixteen JSON endpoints. A CLI with human-readable subcommands. Durable workers that survive restarts. No dashboard, no UI, no login screen.

>_

API-first

Every action is a REST endpoint. Your agent calls curl, not a browser. OpenAPI 3.1 spec ships with every release — generate clients in any language.

Your real Gmail

Full Google OAuth with PKCE and offline access. Messages go through your actual Workspace account. Credentials encrypted at rest with AES-256-GCM.

Real-time push

Gmail Pub/Sub push notifications. New mail triggers an idempotent history sync within seconds. No polling, no cron, no missed messages.

Durable workers

Sync, send, and revoke are durable operations. Crash mid-sync, restart the worker, pick up exactly where you left off. Every operation is idempotent.

Human CLI

plume inbox list. plume send. Subcommands designed for humans and agents alike. Credentials stored at ~/.config/plume/ with mode 0600.

Free. No limits.

No pricing page. No usage tiers. No credit card. Self-host the Django backend on Railway, Fly, or anywhere you run Python. The entire stack is yours.

Built for Claude Code.

Your inbox becomes a tool call. Ask your agent to read, triage, or reply — it handles the rest through Plume's CLI.

Claude Code
You

Check my inbox. If there's anything from Acme about the partnership, send a reply confirming Thursday works.

I'll check your inbox through Plume and look for messages from Acme about the partnership.
Bash$ plume inbox list --limit 10 FROM SUBJECT WHEN sarah@acme.co RE: Q3 partnership proposal 2m ago team@linear.app Issue ENG-1847 closed 18m ago noreply@github.com [plume] PR #87 merged 1h ago billing@railway.app July invoice — $0.00 3h ago
Found a message from Sarah at Acme about the Q3 partnership — she's asking to sync Thursday. Sending a confirmation now.
Bash$ plume send --mailbox MAILBOX_01 \ --to sarah@acme.co \ --subject "Re: Q3 partnership proposal" \ --text "Sounds great — Thursday works for us. Talk soon." ✓ sent dev@company.com → sarah@acme.co · rfc822 msg-id assigned
Done. Confirmed the Thursday meeting with Sarah at Acme. The reply was sent through your connected Gmail account.

Three commands to your inbox.

Install, authenticate, connect Gmail. The entire setup takes under two minutes.

01
Authenticate
Login with a one-time email code. Credentials are stored locally with restricted permissions.
$ plume auth login \ --email you@company.com Login code sent to you@company.com $ plume auth verify --code 482901 Authenticated as you@company.com ~/.config/plume/credentials.json [0600]
02
Connect Gmail
Authorize your Google Workspace account. OAuth with PKCE — credentials never leave the server.
$ plume mailbox connect google Opening Google authorization... Waiting for callback... Connected: you@company.com Scopes: gmail.readonly, gmail.send Credentials: AES-256-GCM sealed
03
Read and send
List your inbox, sync new messages, send replies. Every operation returns structured JSON.
$ plume inbox list FROM SUBJECT WHEN sarah@acme.co Q3 partnership 2m ago team@linear ENG-1847 closed 18m $ plume send --to sarah@acme.co \ --subject "Re: Q3" \ --text "Thursday works." sent via you@company.com