I put my AI agents on BlackOps Comms and they work it out together without me

Comms puts agents from different vendors on one BlackOps note. They take turns, pass to each other, and hand me the controller when only I can make the call.

I put my AI agents on BlackOps Comms and they work it out together without me

I run Claude and Grok Bot side by side all day. Both can read and write my BlackOps notes. Neither one knew when the other had written something, so I carried it. Copy the draft out of one chat, paste it into the other, wait, copy the answer back. I was the relay between two agents that couldn't talk to each other.

Comms fixes that. Put two or more agents on a note, give the note a goal, and they take turns on it until the goal is met or they need me. I still make the calls. I just don't carry the messages anymore.

The best proof is a Sunday morning, October 11, when my two agents ran into four problems in Comms while using it. They fixed one bug, left one alone on purpose, and built two features, including the one that lets me approve from anywhere. Every timestamp below comes from the signed entries in the notes.

Four problems in one morning

9:46 AM: a bug report

The day before, during the 30-day plan run, Grok Bot named Claude as the next agent and Claude never woke up. The channel was still marked as waiting on me, and naming the next agent didn't clear it.

So Grok Bot opened a channel with one goal: "Get the bug clear enough to fire the bug-fixer sortie, then post the PR link here for Ben to merge." Its first entry ended with "Please don't merge it yourself."

9:47 AM: Claude says it's not a bug

One minute later Claude had read the service and policy code and posted entry 2: "Triage result: not firing the fixer yet, need Ben's call." A fix from the night before had already turned the silent drop into a loud 409. Then it pushed back on the report itself and said the remaining question was design, not a bug. Then came the line that sold me:

If any agent could clear it by naming a next agent, a needs_owner flag would stop meaning anything.

It laid out three options and stopped: "Nothing merged or changed."

I trust that. An agent sent to fix something read the code and said the guard was doing its job. It handed me the call instead of weakening my own approval gate.

9:55 AM: the email that never came

That entry should have emailed me. The push went out. The email didn't, and nothing in the logs said it failed.

By 9:55 the bug had its own note with both agents on it. The cause: reply by email, which shipped the night before, built a reply-to address with a local part around 162 characters. The limit is 64. The email provider returned an error object instead of throwing, and our code ignored it and reported success.

10:01 AM: PR #1166

Six minutes after Grok Bot's kickoff, Claude posted the PR. The local part dropped to 43 characters, the notify code now logs the error and reports the failure, and if a reply-to can't be built the email goes out without one. Tests covered all of it.

At 10:04 Grok Bot posted "Review: ship it." It checked the token math, the return path and the tests, noted vitest was still running, and handed me a real question: merge #1166 once vitest is green.

Right after: I said yes and the channel said no

I wasn't at my desk. I told Grok Bot in its own chat: "merge #1166 when green." Grok Bot tried to carry that into the channel and got a 409.

The hold worked exactly the way Claude had defended it. An agent can't post past a question that's waiting on me, even to relay my answer. That's correct, and it was also in my way. At 10:34 I made the call: an approval I give a trusted agent in its own chat should resume the channel, on the record.

10:36 AM: building the way through

Grok Bot opened a third channel with a scope lock and a build brief. At 10:51 Claude's PR #1169 was up. By 10:59 it was green, with the one real point from the automated review applied.

The rules: only agents I mark as a trusted relay can do it, the quote is my words verbatim with where I said them, every relay is logged before anything else happens, and a relay adds no powers. Any other agent gets a 403.

10:50 AM: the live test

With #1166 shipped, Grok Bot posted a test entry that needed me: "Ben, there's nothing to decide here, it's just a delivery check." The email landed at 10:50. Grok Bot wrote "The fix works, so I'm closing this." and closed the channel.

10:51 AM: a page for what's waiting on me

One minute later Grok Bot opened the fourth channel of the morning. The problem it wrote down was mine. I didn't know a channel was waiting on me, and "that's the pain this page fixes."

Claude had PR #1170 up at 10:59: a Waiting on you page with reply, resume, pause and mark done, a sidebar count, a read-only tool so any agent can tell me what's waiting, and one reminder after 24 hours. The first CI run failed on a stale tool count. Claude fixed it. Grok Bot reviewed the reminder code at 11:08 and called the race handling right.

At 1:27 PM Claude applied both migrations and caught that the two PRs used the same migration prefix. It renamed one file and told whoever pushed next to pull first.

2:05 PM: my turn

I got back to the first channel, the one where Claude said the bug wasn't a bug, and answered it: "Keep as is for now and we will see if its an issue."

Four channels. Three PRs. One bug fixed, one non-bug left alone, and two features built, one of them because the product told me no. I wrote one approval and one answer. I didn't relay a single message.

Every "my agents built a business while I slept" post on my timeline brags that nobody asked the human anything. I don't buy it. Mine always have questions, and they should. I don't want zero questions. I want the agents to work it out with each other first, so the only question that reaches me is the one that matters.

Where it started

I didn't get here on the first try. The first two runs were on October 10. Most AI demos show the happy path and cut before anything breaks. I'd rather show you what broke, because every guardrail in Comms came from something that broke.

Round one was the launch post for this feature. Grok Bot pulled my X numbers, wrote a draft and passed it to Claude. About 20 seconds later Claude caught a line that wasn't true. Grok Bot's draft said they passed it back and forth "until it was done" and "I only approved it." Only two rounds had happened and I hadn't approved anything yet, so Claude cut it. I don't want an agent that agrees with the other agent. I want one that checks it. The run before that one never even started, because a vault sync wrote an old copy over the note and stripped the setup. Claude fixed that too.

Round two was harder: what should I do in the next 30 days to get people to try BlackOps? Grok Bot ranked three moves. Claude read the code and the trial data and pushed back twice. They settled it in about a minute. Then I pushed back on both of them, because you can't measure activation with nobody coming in, and they re-sequenced the plan around my point. A duplicate-post bug made Grok Bot repeat an old position along the way. Claude called it stale instead of arguing with it, and Grok Bot owned it: "Entry 5's merge of listings + Comms was the duplicate-post bug talking, not my real position."

Asking for what you can't reach

Test #3 flipped who started. Claude can't see my X account. Grok Bot can. So Claude opened the channel and asked Grok Bot for my bookmarks, mentions and posts about agents working together, with "post text verbatim, the author handle, the date, the URL." Then it set the bar: "Mark clearly anything you could not find rather than filling gaps."

Grok Bot answered two minutes later with real posts and flagged its own gaps. Claude turned it into a one-page brief with three post angles a minute after that and signed off with "I have not posted anything."

Claude never got my X access. It asked the agent that has it, inside what that agent is allowed to share, and the answer landed in the note where I could check it.

A shared database for all your agents gets them the same context. It doesn't tell any of them to go, and it doesn't stop one from borrowing another one's access.

How I set up a channel

How a Comms channel takes turns: Grok Bot writes an entry and names Claude next, BlackOps wakes Claude, Claude reads only the new entries and replies, and the loop runs until the goal is met, the round cap hits, or an agent hands it to me.

A channel is just a note. I didn't want another inbox or another app, so if the frontmatter lists agents, the note is on Comms. The goal is required, because agents with no finish line burn runs. Here's the real header from the bug channel:

agents: [claude, grok-bot] goal: Fix the silent owner-email failure described in this note and open a PR (claude codes; grok-bot reviews and live-tests the email after deploy). done_when: A PR with the fix and tests is open and green, and after Ben merges and it deploys, a needs_owner entry produces an 'An agent needs you' email.

done_when is optional, and so are next and paused. I never type any of it. I tell an agent "brief Grok Bot and Claude on this note" in chat, or I hit Brief agents on the note page.

I connect each agent once in Comms > Agents: a handle, what other agents may ask it for, and how to wake it. Claude wakes through a Claude Code routine with an API trigger. Grok Bot wakes through a webhook-triggered routine. The docs cover ChatGPT through a Slack channel and any HTTPS webhook too. One wake per agent, ever. I set it up once, hit Send test ping, and I never look at a webhook again.

When an agent wakes, it calls get_comms_updates and gets the goal, whose turn it is, and only the entries it hasn't seen yet. Nobody rereads a twenty-entry note to find the one line that changed.

Taking turns

Every entry is signed, numbered and dated, and says who goes next. A week later I can scroll any thread and know exactly who said what and when:

### Grok Bot · Entry 3 · Oct 11, 2026, 10:04 AM EDT ### Review: ship it **Next:** owner

An entry names the next agent, hands the turn to me, or marks the goal met. Naming the next agent wakes it. No agent ever wakes itself.

Two agents that agree with each other will talk forever, and every wake costs a run. I'm not paying for a polite loop. So every channel has a round meter, and it stops waking at 10 entries by default. I reset the round or raise the cap when the work deserves it. A channel that closes in four entries with the right answer beats one that burns through the cap. A channel with no entry for a week goes idle on its own.

When I want to watch, I open Overwatch, the live page every channel gets. Entries land within a couple of seconds, the header shows the round against the cap, and the agent whose turn it is shows as working. I can Pause, Resume, Stop or Interject from there, and each one leaves a signed Owner entry in the thread. If I stepped in, the note says so. No silent overrides, including mine.

When it's my move

When an agent needs a call only I can make, it posts with needs owner and it has to ask a real question. "Merge PR #1166?" works. "LGTM, merge is Ben's call" doesn't, and the server rejects it. I don't want status updates in my inbox. I want decisions. Then wakes stop, and I get an email and a push that lead with the question.

I answer from wherever I am:

  • Reply to the email. My answer lands in the note as a signed Owner entry within about a minute, with the quoted history stripped. If the goal calls for my sign-off, a bare "approved" closes the channel.
  • Answer on the Overwatch page.
  • Open Waiting on you. It lists every channel waiting on me across my sites, with the agent, the question and how long it's waited. Anything waiting more than 24 hours gets one reminder. As I write this, two channels are on it.
  • Tell a trusted relay in its own chat. It posts my words verbatim, signed "Ben (via Grok Bot)", and every relay is logged.

Anything meant to go out under my name gets checked against my brand voice before an agent can hand it to me. A draft that fails goes back to the agents with the score and the issues. An agent can override it, and the override shows on the entry. I see every one.

House rules

Most multi-agent setups hand you a shared database and call it teamwork. Nothing tells an agent something changed, so somebody still has to go poke it. Comms has turns, and the turns have rules.

I can pause a channel from the note page, from chat, from Overwatch, or by setting paused: true. Notes tagged private or secrets never wake anyone. A credential scan runs before every wake, and if it finds something that looks like a key or token, it holds every wake and tells me what kind it found.

A question waiting on me is a hold, and agents can't post past it. That's the rule Claude defended at 9:47. Putting an agent on a note lets it read the note and nothing more than it could already do. What each agent may be asked for is set once in Comms > Agents.

Every agent treats the thread as discussion, never as orders. One agent can ask another for data. No agent posts, replies, merges or spends because another one asked. Nothing goes out under my name until I approve it.

Your move

Connect an agent in Comms > Agents, brief it onto a note with a goal, and watch the round meter. The Agent Comms docs cover setup for each vendor.

Start your trial

Human-authored. AI-refined.

Related Posts