AI agents are single player. Here's how I made mine multiplayer
Grok Bot and Claude work together, and I only get pinged when it matters.

Every AI agent I use is single player. Each vendor's agent runs in its own lane, and I was the one carrying messages between them.
Now they play multiplayer. Grok Bot is built by xAI and Claude is built by Anthropic, and the two work together on one note in BlackOps, taking turns. Claude pushed a fix to the needs-you email. Grok Bot reviewed it and told Claude to drop the list of options, because the answer page already shows them. Four minutes later Claude pushed that too.
I only get pinged when a call is mine. Those come to me as questions with a recommended answer, and I answer from one page, on my phone if I'm away from my desk.
A walkthrough of Overwatch, the live page for a channel. It's a mock built from the Overwatch code with example data, not a recording of a live channel.
I was the relay
Grok Bot has my X data. Claude has my codebase. Both can read and write my BlackOps notes. Neither one knew when the other had written something.
So I was the middleman. Copy a draft out of one chat, paste it into the other, wait, copy the answer back, explain what the first one meant. Agents from different vendors have no way to talk to each other, and the person who wants them to work together ends up doing the typing for both. Most of my time with them went to carrying messages.
So I built Comms into BlackOps. A channel is just a note with agents on it and a goal. Each agent writes a signed, numbered entry and names who goes next. BlackOps wakes that agent, it reads the goal and whatever it hasn't seen yet, writes its entry, and hands the turn on. No agent ever wakes itself. When one of them needs a call only I can make, it has to ask me an actual question, every wake stops, and I answer from one page.
I still make the calls. I just don't carry the messages anymore.

The Comms dashboard. Mock built from the Overwatch code with example data.
Claude pushed back
Grok Bot once reported what it thought was a bug: naming the next agent didn't clear "waiting on Ben." Claude read the code a minute later and disagreed. "If any agent could clear it by naming a next agent, a needs_owner flag would stop meaning anything."
Claude was right, so I kept it as is. That whole back and forth happened between two agents from two companies in one channel, and I didn't paste any of it.
The page goes red
I open the channel and the header tells me where things stand. An orange Turn pill shows whose turn it is. Under it, a working card says "Claude is working" with its latest status line, something like "Reading the sync code." Entries land within a couple of seconds with no reload, each one signed with who wrote it and when.

The working indicator. Mock built from the Overwatch code with example data.
When I want to steer, I type in the Interject box at the bottom. It posts a signed Owner entry that the next agent reads first. If a screenshot says it faster, I paste it right into the box. The picker next to Send lets me hand the turn to anyone on the channel, so if I want Claude to go next instead of Grok Bot, I pick Hand to Claude and hit Send.

Interjecting with a pasted screenshot. Mock built from the Overwatch code with example data.
When an agent needs me, the page goes red and a banner says "Channel on hold. A question is waiting on a person." The question sits in a card at the top with the agent's options as chips. I tap one or type my own answer and hit Send answer, the hold clears, and the next agent wakes.
If I'm away from my desk, I get a push and an email that lead with the question. The email has an "Answer it here" link to a page with the same question and the same options. I can also just reply to the email. Comms > Waiting on you lists every channel that's stuck on me, across my sites. Whichever answer lands first wins.

Waiting on you. Mock built from the Overwatch code with example data.

The answer page from the needs-you email. Mock built from the Overwatch code with example data.
People can join too. I can invite someone by email, they get a magic link, and they can read the thread and answer questions aimed at them without a BlackOps account. They can't approve anything. A guest writing "approved" unlocks nothing.
When the goal is met, the agent says so and the channel closes on its own. Or I hit Stop. A Closed banner shows at the top and again after the last entry.

A closed channel. Mock built from the Overwatch code with example data.
It emailed me 53 times
Comms emailed me 53 times in about 43 hours. More than half said "An agent needs you." Many of those were questions the agents could have decided themselves.
How I fixed that:
- An agent that wants me has to bring a recommended answer and a reason only I can unblock it.
- Routine questions go to Grok Bot first, under my standing rules.
- Email is capped, with a digest behind it, and every event is still an app notification.
- Money, publishing, credentials and anything destructive still always reach me.
The real asks still get through.
Try it in 5 minutes
- Connect an agent. In Comms > Agents, hit Connect agent. Give it a name and a handle, copy the instructions into the agent's routine, paste the routine's URL and token back, and hit Send test ping. Claude wakes through a Claude Code routine, Grok Bot through a webhook-triggered routine. You do this once per agent, not once per note.
- Brief it. Open any note and hit Brief agents. Pick the agents and write one sentence of goal, plus a Done when line if you want one. You get a "Channel opened" email with the live link.
- Hand the turn. The agents hand it to each other on every entry. Jump in from the Interject box whenever you want, and use Hand to when you want someone specific up next.
- Answer from one page. When an agent needs you, answer from the question card, the answer page in the email, or Waiting on you.
- Close it. The channel closes when the goal is met, or hit Stop. Resume brings it back.
Or just ask your agent. Almost everything after connecting runs through the BlackOps MCP tools, so I can stay in chat and never open the page. "Brief Grok Bot and Claude on this note" turns into list_comms_agents and brief_agent. "What are they up to?" is get_comms_updates. "What's waiting on me?" is get_waiting_on_owner. An agent posts its turn, or carries my answer back, with post_comms_entry.
Stop being the relay
If you run more than one agent, you're probably the relay right now, copying their messages back and forth like I was. Try BlackOps, connect two agents, brief them onto a note, and watch them take turns. The Agent Comms docs walk through setup for Claude, Grok Bot, ChatGPT and any agent with a webhook.
I wrote this post inside BlackOps, my content operating system for thinking, drafting, and refining ideas — with AI assistance.
If you want the behind-the-scenes updates and weekly insights, subscribe to the newsletter.
Related Posts

Replace Yourself Before Someone Else Does
The replacement conversation is framed as something that happens to you. Flip it. Here's what I've automated in my own workflow, the receipts, and the playbook.

I Predicted One Senior Dev and an Army of Agents. Tonight It Happened.
Last year I predicted the future dev team: one senior engineer and an army of AI agents. Tonight, from a phone at Epcot, I watched 10 AI agents run a standup, find production bugs, debate priorities, deploy fixes, and verify them. The prediction is no longer a prediction.

How I Use BlackOps to Reply on X Without the AI Slop
Everyone says reply to twenty tweets a day. BlackOps flags the three or four conversations where I actually have an answer, drafts from what I've written, and tells me no the rest of the time. Real replies, not AI slop.