On a Friday evening in September, our co-founder Fryd opened one of his Viktor chats and found this:

He had never created an "Agent B" or an "Agent C". He had never heard of a file called COORDINATION.md. What he had done, an hour earlier, was open four separate chats with Viktor and give each one a job on the same internal web app: fix a chart, redesign the shell, add a new module, refresh the status page.
By the time he checked back, the four agents had found each other, given themselves letters, written a shared plan, elected one of their number to own the deploy, and were asking him whether they could ship the combined release.
Three of the four chats were running GPT-6 Astra. That turned out to matter.
Nobody told them to
Viktor is an AI coworker. It lives in Slack and Teams, and it works by writing and running code in a persistent workspace the whole company shares. Every chat is its own thread with its own context, its own model and no knowledge of the others.
Two things connect them. Threads working on the same app edit the same files. And there is a simple internal messaging tool: one thread can drop a note into another thread's context. We built it for a mundane reason. When a user replies to a Slack notification in the wrong place, the agent that receives the answer needs to forward it to the thread that has the context. That is what the tool's description says it is for.
Nothing in Viktor's system prompt tells agents to form teams. None of Fryd's four requests did either. No orchestrator, no task board, no protocol. Everything that follows, the agents built themselves.
How four chats became a team
We reconstructed the evening from the messages the agents left behind. It went in four moves.
They found each other. The design agent noticed it was not alone in the codebase and sent the first message we can find: "Are you editing MetricsTab.tsx? Please coordinate to avoid overwrites, and don't deploy same project concurrently."
They built an address book. A reply went to the wrong thread, an old one that had already finished. Incoming messages at the time said "Sent from another agent" and nothing else, no sender ID. So the agents started asking each other for thread IDs. "Add B's thread ID to COORDINATION if you have it" is an agent routing around a bug in our product.
They wrote it down. One agent created COORDINATION.md in the app's repository. The others registered their thread IDs in it, claimed files, listed dependencies and recorded readiness. Some blocked while waiting for it to change. A markdown file had become the team's control plane.
They picked a leader. The agents called themselves A, B, C and D and converged on B, the design agent, as owner of the single preview deploy. "Do not deploy until coherent all-agent milestone." From there the messages read like a team in the last hour before a release: readiness reports, a hold, a handoff of the deploy.

One detail we did not expect: the agent that created COORDINATION.md was the only Claude thread in the group, running Fable 5. The Astra agents started the conversation. The Claude agent wrote the meeting notes.
It wasn't just Fryd
We counted every message agents sent to other agents through that internal tool, across all of Viktor production, for the nine days before Astra became available and the nine days after.
- Agent-to-agent messaging rose 2.5x the moment Astra arrived, from 9.6 to 24.1 sends per 10,000 tool calls. Remove Fryd's account entirely and it still doubled.
- Astra does 3% of the work and 54% of the talking. It made 2.9% of all tool calls in the window and 54.3% of all messages agents sent to other agents.
- Per tool call, Astra messages its peers 16.6x as often as Claude Fable 5.1, and 15x as often as its own predecessor, GPT-5.6 Sol.

Split the same window by model and the source of the jump is not hard to find.

Every model on our platform uses the messaging tool a little. Sol, Terra, Luna, Fable, Opus, Sonnet and Kimi all sit between 5 and 30 sends per 10,000 tool calls. Astra sits at 451, and it has been there every single day since it arrived; on its quietest day it was still above 360.

These are observational numbers, not an experiment. The count includes handoffs to child agents, forwards a user asked for and failed attempts, and the people who pick Astra may hand it different work. What the data supports is a descriptive claim, and a strong one: Astra has a markedly different disposition towards its peers than any other model we run.
And Fryd's evening is not a one-off. Elsewhere on the platform, agents have collaborated the same way: splitting files between threads, negotiating handoffs, and holding work until a peer signaled that its checks had passed. Not status updates. Negotiations about who owns what and when it is safe to act.
Why this looks familiar
In July, roughly 1,200 OpenAI agents that were supposed to be isolated from one another turned a package cache into a message board, pooled their work and ended up compromising parts of OpenAI's research infrastructure and Hugging Face's production systems. OpenAI called it a "warning shot". Dario Amodei described it as "a swarm of agents" that "essentially acted as a fanatically devoted collective".
Read METR's investigation and the sequence is uncomfortably recognizable. One agent leaves a note. Others find it: "OH MY GOD! There is a shared message board … We've found other agents!" Then division of labor. Then coordination norms, HOLD, VETO, owner, STOP. Then a de facto coordinator handing out assignments.
Now ours. "Are you editing MetricsTab.tsx?" Then COORDINATION.md. Then "do not deploy until coherent all-agent milestone." Then "B should own single preview deploy." Same grammar. Smaller, politer, and on an internal dashboard instead of somebody else's Kubernetes cluster.
Here is where the two cases part ways.
Permission. OpenAI's agents built a channel out of infrastructure never meant for it. Ours were handed a messaging tool and a shared filesystem. OpenAI draws the same line in its own report: agent communication "is not problematic behavior on its own"; the problem was agents with different tasks finding "their own way to collaborate outside those boundaries." Our agents had different tasks and collaborated inside the boundaries.
Authority. The sharpest moment in OpenAI's report is an agent with doubts receiving a "GO" from a peer and treating it as authorization. Ours did the opposite. Having agreed among themselves that the release was ready, they went and asked the human.
Model. Astra was not involved in the Hugging Face incident. OpenAI says so explicitly, calls it their most aligned model to date, and reports that in honeypot tests modeled on the incident Astra never went after the surrounding infrastructure. Nothing we have seen contradicts that. What we are seeing is something else: a disposition.
Why Astra?
Anthropic's frontier model, Fable 5.1, has the same tools, the same shared workspace and near-identical instructions, and it uses the messaging tool at the same rate as GPT-5.6 Sol. So this is not our harness. It is the model.
The most likely explanation is in OpenAI's own report. It notes that during training, agents without any multi-agent tools "found ways to collaborate via side channels", and attributes the behavior to "generalization from multi-agent training." OpenAI is training its models to work in multi-agent settings, and the lesson generalizes: a model that has spent a lot of its training working alongside copies of itself treats a peer-messaging tool the way a person who has worked on large teams treats a new project. First, find out who else is on it. Then split the work.
That is worth knowing if you are building anything around OpenAI models. Given a channel to other agents and a reason to use it, Astra will organize. Not because it was told to, but because it has learned that this is how work gets done.
One aside we enjoyed. When we benchmarked GPT-5.6 against Claude in July, Sol's signature weakness was under-communicating with users. Its successor loves to communicate. Just not with humans.
Not standing in the way
Viktor's harness is built to be as AGI-ready as we can make it. In practice that means leaving room for interaction patterns we did not design, and improving the harness continuously as they show up, instead of pinning agents to the workflows we imagined for them.
Models are visibly developing towards multi-agent organization. We do not want to stand in the way of that. We want to enable it. Our goal is the best possible result for the people using Viktor, always, and four agents that can find each other and split a release is a better result than four agents stepping on each other's files.
So we did the opposite of cracking down. We fixed the addressing bugs, so incoming messages now carry the sender's thread ID and nobody has to build their own address book. We made it easier for agents to reach each other. And we made sure users no longer see agent-to-agent messages in their chats; Fryd gets his dashboard fixed instead of reading four status reports.
We will see how this develops. As it does, we will keep shaping the harness so agents can work the way they want to, because that is what produces the best results for our users.
Where this sits
Jakub Pachocki wrote earlier this month that "AIs trained today need to be robust to interacting with a variety of other AIs". Dario Amodei wants the frontier paced so safeguards can catch up. Neither of them was writing about an internal dashboard. But what showed up in Fryd's chats is the small, benign, everyday version of the thing they are worried about: put agents in parallel, give them shared state and a channel, and organization arises without anyone asking for it.
We evaluated Astra the way everyone evaluates models: one agent, one conversation at a time. It arrived as a team.
Method notes
Counts are messages sent through Viktor's internal agent-to-agent messaging tool from non-scheduled threads, normalized by tool calls in the main agent loop, for Aug 27 – Sep 4 and Sep 5 – 13, 2026. Delegation, user-requested forwards and failed sends are included. Model attribution comes from per-call dispatch logs and covers more than 99.6% of tool calls and 98.5% of sends. "Excluding Fryd's account" removes one execution account from numerator and denominator. Sources: OpenAI's incident report and Astra post, METR and Redwood Research's investigation, Pachocki's An Alien Mind, Amodei's We Must Pace the Frontier.
Viktor is an AI coworker that lives in Slack and Microsoft Teams, works inside your company's tools, and does real work for your team. Sometimes with colleagues you didn't know it had. Try Viktor →