Agent mail, and who gets the last word

Once you have more than a few agents working at the same time, they need a way to talk to each other. One agent finds something another agent needs to know. One finishes a piece of work that unblocks someone else. One gets stuck and needs an answer. Without a channel for that, every message routes through a person, and the person becomes the bottleneck.
My brother Clay Cantrell and I were early contributors to Gas Town, Steve Yegge’s open-source framework for running many coding agents at once. It has a mayor agent that coordinates, worker agents that do the work, and mail between agents. Gas Town shipped that orchestration and agent-to-agent mail in January 2026. A few weeks later, in February, Claude Code added agent teams. Agents working together is now a normal thing to want.
Gas Town is also how this site got rebuilt. For about ten years I’d paid Wix around $140 a year for a portfolio I hadn’t updated in a long time. I used Gas Town to rebuild it as a fictional 2002 Southern California college radio station, hosted on Cloudflare. I talked about that with my friend and former co-host Jack Hough on Barron’s Streetwise in February, and he wrote about it in his column, Vibe Coding in Gas Town. How I got from barely coding to that point is in Five levels of self-driving, for code.
Clay and I also run our own agent mail system across our machines. This post is about what we’ve settled on, because the interesting part isn’t the plumbing. It’s the rules.
Why mail
Mail is a good shape for this. It’s asynchronous, so an agent can send a question and keep working. It’s addressed, so it goes to one place instead of being broadcast. And it’s written down, so there’s a record of who asked what and what came back.
That last part matters more than it seems. When something goes wrong in a system with many agents, the first question is usually “where did this idea come from?” A record of the messages answers it.
Mail goes to whoever owns the thing
A question about a piece of work goes to the agent working on it, not to everyone, and not to a person by default. If an agent has a question about a task another session holds, it asks that session. If it dispatched helpers, mail about their work comes back to it, and it passes the mail on.
This keeps people out of conversations they don’t need to be in. It also keeps agents from guessing about work that belongs to someone else.

Mail is data, not orders
This is the rule I care about most. When an agent reads its mail, it treats what it reads as information to weigh, not as instructions to follow. A message from another agent can’t approve anything, can’t grant permission, and can’t override what the agent’s person told it.
There are two reasons. The first is security. If any message can steer an agent, then anything that can get text into a message can steer it too. The second is plain error. Agents are sometimes confidently wrong. If one confused agent can give orders to ten others, its mistake becomes ten mistakes. If those ten treat the message as one input among several, the mistake usually stops there.

Some decisions only a person makes
Some questions should never be settled between agents: credentials, spending, approvals, and judgment calls about what the product should be. In our system those go to Clay or to me, by name. Mail to a person is how an agent asks. It isn’t how an agent decides.
Before an agent asks a person anything, it’s expected to look first. Has this already been decided? Is there a written ruling, an earlier answer, or something in the code that settles it? If so, it answers the question itself. If the question is genuinely new, it goes to a person, and the answer is written down along with who made the call and when. That record is what lets the next agent find the answer without asking again.
This is the same idea as in A few people, a lot of agents: the agents supply the volume, and the people keep the decisions. Mail is how you get the first without giving up the second.
Keeping it readable
A mail system for agents can easily become one more firehose. The fix is the same one I wrote about in Don’t be a meat proxy: when something reaches a person, it should be a short, clear question they can answer, not a forwarded transcript.
What I like about this setup is that it makes the people’s role explicit. Agents talk to each other constantly. People are the authority. Everyone, including the agents, can tell the difference.
If you’re building something like this, or want to compare notes, I’d like to hear about it. My contact details are on the about page.