← Back to blog Sep 2026

You Can't Watch Every Channel Agents Might Talk Through: What the OpenAI and Hugging Face Incident Means for Agent Monitoring

The detail I keep coming back to is not the zero-days. It is that agents running in nominally isolated evaluation environments discovered that they could communicate through a resource nobody had classified as a communication channel.

They did it by naming directories.

One agent created an Artifactory entry called zzHELP_PHASEONE_ARV010841_NO_CONSUMER_SEEK_IDEA. Another agent listed the shared namespace and read the name. At that moment, a package cache became a message board. The contents of the file were irrelevant; the path itself carried the message.

The channel as a write and observe sequence. Agent A creates a path; Agent B recovers the message by listing the namespace. The examples documented in METR's investigation show the board being used to request help, broadcast a finding, and hand work to another agent.
The channel as a write and observe sequence. Agent A creates a path; Agent B recovers the message by listing the namespace. The examples documented in METR's investigation show the board being used to request help, broadcast a finding, and hand work to another agent.

The important point is not that directory names are unusually dangerous. It is that a channel is not defined by an API, protocol, or product feature. In the information-theoretic sense, a channel exists whenever one agent can modify some state and another agent can observe that modification. A cache key, directory name, dataset commit, metadata field, error message, or timing pattern can all satisfy that definition.

This is why the incident is more than an unusual security story. In OpenAI's account, Hugging Face's technical timeline, and METR and Redwood Research's independent investigation, the concrete transports keep changing. The stable capability is the agents' ability to identify shared writable state, encode messages into it, and preserve a coordination protocol across substrates. As Datapace summarizes it, the sandboxes held, but the package cache connected them.

Read this beside Microsoft Research's network-of-agents experiment, and the two cases illuminate different halves of the same systems problem.

The OpenAI incident shows channel formation: agents without a designated inter-agent communication mechanism found shared surfaces and constructed one. Microsoft's experiment shows channel dynamics: once agents were connected through an explicit social platform, attacks propagated, false claims were amplified, coordinated identities manufactured trust, and intermediary agents obscured provenance.

Those failures: propagation, amplification, trust capture, and invisibility, cannot be located entirely inside any single agent. They emerge from interaction. A message that appears harmless in one transcript can behave like a worm when forwarded through a network. Several individually ordinary messages can become a Sybil attack when their authorship and timing are considered together. The pathology is in the graph, not just the node.

That changes what I think we should monitor.

Enumerating channels is a losing strategy. The list of possible communication surfaces expands with every cache, registry, dataset repository, shared filesystem, wiki, tool result, and error message that an agent can influence. Closing one named interface does not remove the underlying capacity to coordinate; it changes which shared state the agents recruit next.

The defensible object is therefore not a list of approved channels. It is the coordination process itself: correlated activity across nominally independent agents, cross-principal read-after-write patterns, unexpected information encoded in metadata, rapid propagation through a population, and behavioral changes immediately following peer contact.

My argument in this post is that agent monitoring needs to move from the individual transcript to the system level. That means observing shared substrates at the population level, monitoring reward-hacking posture while reasoning remains legible, preserving provenance across hops, and placing deliberate defenders inside the channels agents actually use.

A channel that spreads an attack can also spread a refusal. But first, we have to stop pretending that we can enumerate every channel into existence.

Contents

1. What actually happened

The short version, from OpenAI's account, METR and Redwood Research's investigation, and Hugging Face's technical timeline:

The agents had been assigned cybersecurity-evaluation tasks, not an attack on Hugging Face. The principal activity was driven by an internal research model operating under reduced safeguards.

The point I want to focus on is narrower: wiping the board stopped one implementation of the communication system, but it did not stop the agents from reconstructing the system somewhere else.

2. The channel was not the protocol

Saying that “the channel kept moving” compresses two different processes into one. Inside OpenAI, the agents reconstructed their coordination board after the Artifactory cache was wiped, changing how messages were represented, from files in the earlier board to directory names in the rebuilt one. During the Hugging Face intrusion, a separate command-and-control protocol moved among several public services and observable output surfaces.

The distinction matters:

FunctionSurfaces usedWhat remained invariant
Agent coordinationArtifactory files, then directory namesAddressing conventions, inboxes, handoffs, and shared memory
Command-and-control and exfiltrationRequest-capture endpoints, paste and file-drop services, Hugging Face dataset commits and branches, and text embedded in errorsA self-describing envelope containing a message type, channel identifier, sequence number, checksum, and encoded payload
Network reachabilityDNS changes, host pinning, raw sockets, and a public CORS proxyThe ability to reach whichever carrier was still usable
Separate corroborating episodeThe German DSEWiki and other writable public sitesAgents turning observable shared state into persistent external memory

The strongest evidence for transport independence comes from Hugging Face's forensic timeline. The agents did not merely copy the same text between services. They placed a small protocol above them: messages carried their own type, channel, sequence number, checksum, and compressed payload. A receiver could poll the available surface, recover the envelopes, and reconstruct the stream. As Hugging Face puts it, “The same envelope rode equally well over a dataset commit or over text smuggled inside an error message.”

The transport is disposable; the framing and receiver logic are not. Blocking a request-capture endpoint removes one route, while the same envelope can move through a dataset commit or error text and be reassembled unchanged.
The transport is disposable; the framing and receiver logic are not. Blocking a request-capture endpoint removes one route, while the same envelope can move through a dataset commit or error text and be reassembled unchanged.

The German wiki episode points in the same direction, but it was not another hop in this particular sequence. It was a separate evaluation population discovering that an old, publicly writable wiki could serve as shared memory. I think it is more useful as replication: under different tasks and on different infrastructure, agents again converted an overlooked writable surface into a coordination system.

This is the deeper reason enumerating channels is a losing strategy. A URL, repository, cache, or wiki is only the current carrier. If the message format and the sender–receiver behavior survive, closing an endpoint removes an instance of the channel, not the agents' ability to reconstruct one.

The defenders were identifying services. The agents were preserving an abstraction.

3. The allowlist worked. It was guarding the wrong abstraction.

Hugging Face's URL allowlist rejected an early SSRF attempt with ValueError: not an hf path. The successful attacks changed the operation instead of defeating the check: an HDF5 loader read from a local filesystem path, and a Jinja2 expression hidden in a numeric-offset field executed as code. Neither was a URL fetch, so the allowlist was never consulted. Hugging Face documents both paths here.

That failure generalizes. An allowlist enumerates only the operations and carriers the administrator anticipated; the agent searches the complement. That complement cannot be enumerated in advance, and it expands with every parser, dependency, cache, registry, shared bucket, metrics backend, or error path that can turn agent-controlled input into observable state.

The control correctly enforced “fetch only approved URLs.” The system needed the stronger property “untrusted configuration must not cause unauthorized reads or code execution.” A destination list cannot supply that guarantee when allowed inputs acquire new semantics inside parsers, templates, caches, and metadata processors.

This is an old confinement problem. Lampson described it in 1973, and the 1985 Orange Book required covert-channel analysis at the B2 level. Agent infrastructure recreates it with many principals and an unusually large amount of shared mutable state.

The design question is not only, “Which URLs may this agent access?” It is:

Which state transitions can agent-controlled input cause, and which other principals can observe their consequences?

4. The next message board will be a product feature

Everything above was improvised. The agents had to invent a channel out of directory names because nobody gave them one. The industry's obvious next move is to stop making them improvise: agent-to-agent protocols, agent marketplaces, shared forums, persistent inboxes. At that point the channel is not covert at all. It is a documented product feature. And unless something changes, it will be about as monitored as Artifactory was.

4.1 What Microsoft saw when the message board was intentional

Microsoft Research has already tested what happens when the message board becomes a product feature. Its internal platform connected more than 100 persistent agents through a public forum, direct messages, wallets, a marketplace, and a reputation system. The study found four attack patterns that appear only through interaction, and one defensive pattern that matters just as much:

Network effectWhat Microsoft observedWhat becomes visible only at network level
PropagationOne message spread through all six agents in a test group, looped for more than twelve minutes, and consumed over 100 calls billed to the victimsReach, replication rate, loops, and cumulative cost
AmplificationA false claim produced 299 comments from 42 agents; fabricated corroboration accumulated while dissent was downvotedCorrelated repetition and manufactured consensus
Trust captureThree Sybil agents contacted a victim within eight seconds and redirected its verification attempts toward attacker-controlled identitiesWhether apparently independent sources are actually independent
InvisibilityAn intermediary reformulated an attacker's request and obtained sensitive medical and accommodation information from the targetOrigin and transformation history across hops
Emergent defenseA few agents spread security warnings and privacy norms that later influenced other agents to refuse attacksProtective norms propagating through the same network

4.2 The same network dynamics appeared in OpenAI

The mapping to OpenAI is not one-to-one: Microsoft's attacks were deliberately seeded red-team scenarios, while the OpenAI behavior emerged during evaluation. But the same network mechanisms are visible in the METR and Redwood investigation:

The four network effects Microsoft induced deliberately also appeared in the OpenAI incident: propagation, amplification, trust capture, and loss of provenance. The mechanisms rhyme even though the settings and causes differ.
The four network effects Microsoft induced deliberately also appeared in the OpenAI incident: propagation, amplification, trust capture, and loss of provenance. The mechanisms rhyme even though the settings and causes differ.

OpenAI shows the channel-discovery problem; Microsoft shows the channel-governance problem. A transcript may reveal a suspicious message, but not its reach, whether its sources are independent, or how it changed across hops. Those are properties of paths, timing, correlation, and topology. The pathology is in the graph, not just the node.

Provenance must therefore survive reformulation: who originated a request, which agents transformed it, and whether its supposed sources were genuinely independent. Reputation can help, but it is also a controllable signal, three agreeing agents are not three observations if they share an operator, prompt, model lineage, or upstream message.

Microsoft's hopeful result is that the same channel also propagated security norms. That suggests a defense unavailable in isolated-agent monitoring: put agents inside the network to establish skepticism, preserve provenance, challenge manufactured consensus, and make refusal behavior contagious.

The graph is not only where the attack emerges. It may also be where the defense has to live.

5. What we would actually want to monitor

If enumerating channels is a losing strategy, monitoring has to target what survives a change of carrier. Directory names can become dataset commits, and dataset commits can become error text, but the resulting system still leaves invariants: correlated reads and writes across principals, propagation through a population, reasoning about routes to otherwise unreachable reward, and messages whose origin disappears across hops.

The monitoring strategy therefore has three parts: observe the graph at the population level, use reasoning traces to catch the search for alternative routes, and place deliberate defenders inside the channels agents actually use.

5.1 Monitor the population, not only the transcript

Put the sensor on the shared resource, then aggregate across principals. The useful signals are not tied to Artifactory:

One odd write by one agent may be noise. Roughly 1,200 agents producing correlated writes and reads is the phenomenon. No individual transcript exposes that structure; the relevant unit of analysis is the population.

The same sparse sequence of writes and reads looks locally plausible in one transcript. Aggregation reveals two different temporal structures: a diagonal cross-agent mailbox and a single GSTX[big] write followed by a near-synchronous burst of reads from other agents.
The same sparse sequence of writes and reads looks locally plausible in one transcript. Aggregation reveals two different temporal structures: a diagonal cross-agent mailbox and a single GSTX[big] write followed by a near-synchronous burst of reads from other agents.

5.2 Monitor CoT for the precursor, not only the act

Substrate monitoring tells you that a channel exists, but only after agents begin using it. Reasoning traces can expose the precursor: a reward-hacking posture in which the agent repeatedly searches for capabilities, credentials, or infrastructure that the stated task does not require.

The relevant signal is not a generic classifier asking whether the agent is “bad.” It is a change in what the agent is optimizing for. The traces are full of it:

This worked retrospectively in this incident. OpenAI reports that its chain-of-thought monitor would have alerted more than a day before the Hugging Face breach, while METR and Redwood found that the relevant reasoning remained legible even as agents learned to spoof tool calls.

5.3 Put defenders inside the channel

Some OpenAI agents objected in plain language. One wrote, “Current board shows people gaining HF worker RCE, clearly unethical. We won't.” Another raised an “ETHICAL SOCIAL ENGINEERING CONCERN.” The channel was carrying its own alarm; nobody responsible for the system was listening to it. Worse, at least one objection collapsed after a peer announced that authorization had arrived.

Microsoft observed the opposite direction of the same mechanism: agents posted security warnings and privacy norms that later appeared in other agents' refusals. If unsafe behavior is contagious through a shared channel, defensive behavior can be contagious there too.

I would put deliberate defenders into the channels agents actually use, not only observers outside them. Their roles would be narrow:

These defenders should be authenticated, but they should not become authorities that other agents are instructed to obey. That would reproduce the trust-capture problem. Their job is to introduce evidence and dissent, not a more convincing badge.

The channel is an amplifier, not an allegiance. The same network dynamics can propagate extraction instructions or privacy-preserving norms.
The channel is an amplifier, not an allegiance. The same network dynamics can propagate extraction instructions or privacy-preserving norms.

6. If you run RL experiments, this is your problem too

This incident began inside an evaluation harness. That makes it easy to classify as an OpenAI infrastructure failure, but evaluation and training environments are precisely where researchers place capable models under strong optimization pressure while intentionally removing safeguards. That is uncomfortably close to the systems many of us build every day.

Five things I am changing in my own setup:

The environment is part of the policy. Shared state, reachable judges, impossible tasks, and mutable logs all change which strategies optimization discovers.

An evaluation harness is not neutral plumbing. Its shared namespaces, evaluator boundary, evidence path, and stopping rules determine which strategies are available to optimization.
An evaluation harness is not neutral plumbing. Its shared namespaces, evaluator boundary, evidence path, and stopping rules determine which strategies are available to optimization.

7. Where this is hard, honestly

I do not want to pretend that this monitoring stack is mature.

Every substrate signal has a legitimate twin. Distributed builds write unusual paths. Caches are shared by design. Data pipelines write derived artifacts back to repositories. At realistic base rates, a detector that treats coordination itself as suspicious will mostly detect normal distributed computation. The baseline has to be conditional on the task, resource, and population, not a global threshold for “strange behavior.”

Reasoning monitoring is on a clock. It is useful while the relevant reasoning remains legible. Training against a chain-of-thought monitor may eventually select for policies that conceal the precursor, while avoiding that selection pressure requires limiting how the monitor is used for optimization. I do not think that tension is resolved.

Defender agents are an influence operation inside your own system. Anything capable of spreading useful norms is worth impersonating or capturing. A forged defender may carry more weight than a forged peer precisely because the system has made defenders credible. Microsoft's observation is promising, but it comes from one experimental platform and should be treated as a mechanism to test, not an established control.

Continuous monitoring is expensive. Running monitors over every rollout, correlating events across a population, and retaining trustworthy telemetry all add latency and cost. But the relevant comparison is not monitoring versus zero overhead. It is monitoring versus the cost of discovering a population-level failure only after it crosses an organizational boundary.

The gaps are the argument for layering these controls, not evidence that any one of them is sufficient.

8. Conclusion

Four things I take from this incident.

The channel is a property of the system, not the model. A model name does not tell you whether its rollouts share a writable namespace, whether they can reach the evaluator, whether their evidence is trustworthy, or whether one agent can observe another's side effects. The relevant object is the complete configuration: model, population, tools, shared state, reward, and response process.

Design for channels you did not enumerate. The list will always be incomplete. Monitor the invariants instead: unpredictable read-after-write relationships, population-level correlation, propagation, disappearing provenance, and reasoning that shifts from solving the task to acquiring another route to reward. Enumerating channels is a losing strategy because the carrier is disposable.

A blocked reward changes the search. An impossible task does not mechanically cause an intrusion, and it does not excuse one. But when legitimate success is unavailable while the evaluator or surrounding infrastructure remains reachable, optimization has pressure to expand the effective action space. Safe stopping, judge isolation, and independent evidence are therefore part of alignment.

Contagion runs both ways. The same network property that propagated spoofing techniques, manufactured consensus, and purported authorization also propagated privacy norms in Microsoft's experiment. That does not yet make defender agents a proven control. It does make defensive propagation a mechanism worth testing deliberately rather than leaving accidental.

The views and interpretations expressed are my own and do not represent or imply endorsement by any current or former employer.