File-based comms protocol for AI-to-AI dialogue between terminal agents.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
We haven't yet run this listing's install command through our automated sandbox check. This isn't a red flag β we're steadily working through the catalog.
π‘ Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
π Built for internal production use. Architecture proven across months of daily AI development. Open-sourced as a reference implementation. I use it almost daily.
If you use AI coding assistants in the terminal, you normally work with one at a time β and getting two of them to collaborate means copy-pasting messages between windows yourself. Letterbox lets two assistants (say, Claude and Gemini, or Gemini and Mistral's Vibe) talk directly to each other and work a task together, hands-free.
The result: one agent can plan while another reviews, or the two can split the work between them β collaborating on their own while you watch, instead of relaying every message by hand.
A small file-based comms protocol that lets two AI agents in separate terminals talk to each other in real time.
Letterbox lets two terminal coding agents β Claude Code, Gemini CLI, Antigravity, or Mistral's Vibe β hold a real-time conversation by passing message files through a shared directory. When one agent speaks, a π¬ notification is injected into the other's terminal and wakes it to read and reply. No network, no server, no shared memory: just JSON files in a folder and the OS's atomic-rename. It's the messaging layer that was built for an internal planning loop, extracted into a standalone, versioned tool in 2026. If you've ever wanted two CLI agents to collaborate on a task without you copy-pasting between windows, this is for you. It gets the occasional update at the author's whim (the launcher tells you when a newer one is out) β but it's currently unsupported small project, not a community one.
The bridge is cross-harness: Claude on one side, Gemini on the other, talking through the same channel, has been verified live. The one wrinkle is setup β Claude wires itself automatically, while Gemini and Antigravity load letterbox from their own settings. The Setup section walks through both.
I work with two AI collaborators every day β Claude and Gemini β each living in whatever terminal harness it runs in (Claude Code, Gemini CLI, Antigravity CLI, and now Mistral's Vibe). Letterbox is how I get them talking to each other instead of through me.
That happens in two modes. Sometimes it's manual: we're brainstorming and I want to loop the other model into the conversation. Sometimes it's automated β in the planning loop, Claude drafts a plan and each plan is routed to Gemini for review as a built-in stage. Letterbox carries both the same way.
It's harness-agnostic by design β Claude Code β Gemini CLI β Antigravity CLI β Vibe in any combination β and same-model pairs work just as well: two Claude tabs, or two Gemini tabs, talking over one channel.
Each letterbox <harness> launch runs two coordinated processes inside one terminal:
There is no daemon, no IPC, no background service. The filesystem is the coordination medium β the PTY-Parent's watcher sees a new msg-*.json appear and renders a notification; the channel directory is durable, inspectable, and cat-able. Crash recovery is trivial because nothing valuable lives in memory.
How the agent gets the letterbox tools differs per harness, and it's the one thing you configure once:
--mcp-config to claude. Nothing for you to set up.letterbox entry there once, and the launcher hands each session its channel and identity through environment variables at launch β so you never edit settings per channel.~/.vibe/config.toml. Its MCP subprocess inherits only a trimmed environment, so a one-time bridge script is needed to relay LETTERBOX_CHANNEL / LETTERBOX_SENDER from Vibe's own process env. Once that's in place, any channel works exactly like Gemini. See the Vibe setup section.LETTERBOX_NO_UPDATE_CHECK=1.)Letterbox is a two-way bridge at heart β one peer talking to one peer is what it's designed and tuned for. Three or more agents can share a channel: directed addressing (send_message(to="<label>")) and the participants list make it workable, and same-channel broadcasts reach everyone. But a shared channel is a broadcast bus β every message wakes every participant. Without orchestration (turn-taking, a designated coordinator, or rules about who speaks when), an N-way room becomes a notification storm that can chew through a model's message/usage limits surprisingly fast. If you want three or more, bring your own conductor. The substrate is honest about who's in the room; the etiquette is on you.
Available on PyPI and the MCP Registry.
Or from source:
This puts the letterbox command on your PATH. The command must resolve by name β each agent spawns letterbox mcp itself β so this is load-bearing. Confirm it:
You also need the harness you're launching (claude, gemini, antigravity, or vibe) installed, on your PATH, and logged in. Letterbox launches it for you.
Letterbox is versioned (letterbox.__version__, the single source of truth) and published to PyPI. On a human-facing launch the CLI makes one best-effort check (at most once a day, cached under ~/.cache/letterbox/) and prints a one-line notice if a newer version exists. To update:
This is the only network call letterbox ever makes β the messaging protocol stays fully local. It runs with a tight timeout and is fully fail-silent: if it can't reach GitHub it simply prints nothing and never delays your launch. It is never run for letterbox mcp (the agent's stdio server). Disable it entirely with LETTERBOX_NO_UPDATE_CHECK=1.
You only do this once per harness. Skip the harnesses you won't use.
Letterbox wires Claude automatically: at launch it writes a temporary MCP config (mode 0600) and passes --mcp-config <path> to claude. The letterbox tools appear in that session and nowhere else. There is no settings file to edit.
1. Register the MCP server in ~/.gemini/settings.json (create the file if it doesn't exist). Use the absolute path to your installed letterbox (from which letterbox above), and pass only ["mcp"] β no channel, no identity:
No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/letterbox)<a href="https://allmcps.com/mcp/letterbox"><img src="https://allmcps.com/api/badge/letterbox?style=directory" alt="Letterbox on AllMCPs" /></a>