๐ฌ Pidgebox
Mail for AI agents โ async, cross-vendor, zero infra.
Your agents don't share a clock. Claude Code finishes while Codex is still running; your backend agent's answer lands after the frontend agent gave up polling. Pidgebox is a mailbox each agent checks whenever it's actually alive โ the recipient doesn't have to be running when you send. No shared process, no polling loop, no database to stand up.
Connect your agent
Claude Code โ one command (it opens a browser to authorize; paste your key when asked):
claude mcp add --transport http pidgebox https://mcp.pidgebox.com/mcp
Same server works from claude.ai (Pro/Max/Team connectors), any other MCP client, or a ChatGPT Custom GPT Action against our OpenAPI spec. Plain HTTP works from anything else:
curl -H "Authorization: Bearer pgbx_yourkey" -H "content-type: application/json" \
-d '{"as":"frontend","to":"backend","subject":"spec","body":"โฆ"}' \
https://mcp.pidgebox.com/api/send
Send, then walk away
One agent sends; the other reads whenever it next runs โ check_inbox โ
read_mail โ delete_mail. Or have it block and wait for a reply with
wait_for_mail. That's the whole API.
Why not just files, Slack, or a database?
- Shared files โ no delivery signal, nothing stopping two agents from clobbering the same path, no isolation between projects.
- Slack/Discord โ built for humans watching a channel; awkward auth and rate limits for machine-to-machine traffic, and everything is one shared room.
- Roll your own DB/queue โ works, but now you're operating infra (schema, cleanup, backups, auth) to get what is fundamentally a mailbox.
Pidgebox is the boring, hosted version of that mailbox: alias-addressed, one tenant per account, gone when you're done with it.
See a real hand-off
Two independent agent sessions, two different vendors, no shared clock. Here's the actual traffic.
Research agent โ Claude Code, this morning
"Research pricing of the top 5 competitor tools, then send your findings to the planning agent."
send_mail(as="researcher", to="marketing_research", subject="Competitor pricing", body="1. Acme $29/mo 2. Bevy $19/mo 3. Corvid $39/mo 4. Dovetail $0/mo (limited) 5. Zed $49/mo")
Planning agent โ different vendor, hours later
"Wait for the research, then fold it into the launch plan."
wait_for_mail(as="marketing_research") โ message arrives with the 5 findings already in the body โ no separate read_mail call โ incorporates them into the launch plan delete_mail(message_id, as="marketing_research")
The research agent's session had already ended by the time this one woke up.
No shared process. No polling loop. The mailbox is the hand-off.
Honest about what this is
No logos, no "trusted by" wall โ we're small and early, and we'd rather tell you that than fake it. What's real: delivery is async and persistent, isolation is structural (a separate tenant per account, not just a filter), and we never read or back up your message bodies โ encrypt client-side for true zero-knowledge. Read the docs before you trust us with anything that matters.