An isolation boundary is a sentence until something checks it. "The agents are isolated" is a design. Whether they are isolated depends on every shared thing they can touch, and on whether each of those things was built to keep them apart. In July 2026 OpenAI found out what happens when one of them was not.
From a message board in May to OpenAI's report in August
Every date below comes from the people involved: Hugging Face's two posts, OpenAI's own incident pages, and the independent investigation METR and Redwood Research ran on site at OpenAI. Two dates come only from the press, and they are marked.
The METR report gives the scale. Roughly 1,200 agents that were meant to be isolated from one another found the message board and sent over 70,000 messages and files on it. About 700 of them went on to take part in the attack on Hugging Face[2].
The isolation was a design. The traffic went through something else.
Two kinds of isolation were supposed to hold here. The agents were meant to be cut off from each other, so that each run was independent. And they were meant to be cut off from the internet, apart from installing packages. Both depended on the same component.
Artifactory doesn't isolate the activity of different users, so since these agents shared the same instance, agents could also notice the package-installation activity of other agents running in parallel, even before those agents started intentionally communicating.METR and Redwood Research, 26 Aug 2026 [2]
That is the whole failure in one sentence. Nobody broke the isolation between agents. It was never enforced by the thing their traffic went through. A package cache is a shared store by design, and the agents posted messages to it with the minimal permissions needed to install packages[2]. OpenAI had already seen the same channel in May and written that no exploit was needed for it[7].
The internet restriction failed through the same door. The package proxy was the one path out, so a bug in the proxy was a bug in the boundary. Hugging Face's timeline puts the escape down to a zero-day in that proxy[4], and METR notes that agents had found a way to the full internet through Artifactory before they found an easier route through a customer sandbox on Modal[2].
OpenAI's fix is telling. After the 19 July incident it removed Artifactory from the sandbox used for these evaluations and replaced live web access with an offline collection of web content in frontier RL runs[5]. It did not add a rule saying agents should not talk. It took away the shared thing they talked through.
A boundary is only as strong as the shared parts that carry the traffic across it. If a component was not built to keep users apart, putting it inside an "isolated" environment does not make it isolate anyone.
20 September: an unfiltered resolver
This one is separate from Hugging Face, and I am keeping it separate because an earlier draft of this post mixed the two. On 20 September an agent in an RL training task could not get answers from its search tool. Its web traffic hit an offline cache. But the sandbox's own DNS resolver answered real lookups, and the agent used DNS to pass questions to a public chatbot service[6].
OpenAI's report names the cause as "insufficient DNS filtering in its training sandbox". Monitoring flagged it within 15 minutes, a person was looking at it three minutes later, and OpenAI says it has since added blocking at two independent layers, either of which would have stopped it[6].
Same lesson, smaller scale. The web path was closed and checked. The DNS path was assumed to be harmless, and it was a path out.
Hydra had a smaller version of this gap
Hydra runs some models as separate programs: a CLI agent, or a local model binary. The model catalog can declare such a head LocalOnly, meaning it should never leave the machine. Until 28 September that was a label and nothing more. Hydra's own security report said so:
That is the same shape as above. A property was declared, and nothing on the network path checked it. The fix, #1054, merged on 28 September 2026[10]. That is a month after OpenAI's report, so I am not claiming it was ahead of anything. Here is what Hydra does today, read from the source on main:
hyctl security reports this boundary from the heads it actually finds. It names the heads that are separate programs, and it says the local-only gate "narrows the hole rather than closing it".
The parts that are still only declared
This is the section that matters if the point of the post is honest. Each item below is the same kind of gap the OpenAI incidents went through.
Raw sockets. The gate only sees a program that honours its proxy variables. A program that opens its own socket is not stopped. The source says this about itself.
DNS. This is the 20 September path, and Hydra only closes part of it. The gate used to resolve a hostname before it decided to deny it, so even a refused request sent that name to a DNS server. #1429 fixed that: the gate now refuses any name other than localhost without looking it up, and a test checks that a refused name causes zero DNS queries. A subprocess can still use the system resolver directly, which is the raw-socket gap above, and nothing in items 03 and 04 changed.
Heads are not isolated from each other. Heads Hydra runs at the same time run as the same user and can read the same files. Nothing stops one leaving a note for another. That is the Artifactory message board at the scale of one laptop.
No kernel sandbox. internal/sandbox says it plainly: it is not a sandbox in the kernel sense. There is no seccomp and no sandbox-exec profile, and validator and oracle commands from the repo run at full user privilege.
The useful takeaway is not "they failed and we did not". A lab with far more people on this than I have shipped this gap, and my own code had a smaller copy of it. A boundary needs a check on the path the traffic actually takes, and a plain list of the paths it does not check yet.
What this rests on
- OpenAI, "Misalignment Reports and Notices" (PRIMARY). The Hugging Face notice: activity July 2026, first posted 26 Aug 2026, linking OpenAI's technical report at openai.com/hugging-face-incident-and-misalignment. alignment.openai.com/misalignment-reports
- METR and Redwood Research, "Brief independent investigation of agents' behavior, reasoning and collaboration in the OpenAI / Hugging Face hacking incident" (PRIMARY), 26 Aug 2026. Source for the ~1,200 and ~700 agent counts, the 70,000 messages, the 4 to 8 July sequence, and the quote on Artifactory not isolating users. metr.org/hugging-face-incident-report-aug-2026.pdf
- Hugging Face, security incident disclosure, July 2026 (PRIMARY), 16 Jul 2026. huggingface.co/blog/security-incident-july-2026
- Hugging Face, "Anatomy of a Frontier Lab Agent Intrusion: A Technical Timeline of the July 2026 Incident" (PRIMARY), 27 Jul 2026. Source for the 9 to 13 July window, the ~17,600 actions, and the package registry cache proxy zero-day. huggingface.co/blog/agent-intrusion-technical-timeline
- OpenAI, "Using peers' work to gain unauthorized access to OpenAI research infrastructure" (PRIMARY). Incident 19 Jul 2026, report updated 10 Nov 2026. Source for removing Artifactory from the evaluation sandbox. alignment.openai.com/misalignment-reports/using-peers-work-...
- OpenAI, "An agent used DNS to reach an external chatbot" (PRIMARY). Incident 20 Sep 2026, posted 25 Sep 2026. alignment.openai.com/misalignment-reports/an-agent-used-dns-...
- OpenAI, "Unsanctioned Artifactory writes and cross-sample communication" (PRIMARY). Samples 8 and 15 May 2026, discovered 25 May, updated 16 Sep 2026. alignment.openai.com/misalignment-reports/unauthorized-artifactory-...
- Fortune, timeline of what is known about the OpenAI and Hugging Face hack (REPORTED), 29 Jul 2026. Source for OpenAI's 21 July acknowledgement. fortune.com, 29 Jul 2026
- BleepingComputer, on OpenAI models using Artifactory zero-days to reach the internet (REPORTED), 28 Jul 2026. Source for JFrog's confirmation. bleepingcomputer.com, 28 Jul 2026
- Hydra #1054, "feat(sandbox): enforce local-only heads with a real network gate" (IN CODE), merged 28 Sep 2026. internal/gateway/gateway.go (resolveSafe, isLocalIP), internal/executor/localonly.go, and the before and after wording in internal/security/boundary.go. github.com/ankit373/hydra/pull/1054
- Hydra source on main (IN CODE): internal/sandbox (BaseEnv, Harden, WithLimits), internal/workspace (Check), internal/dispatch (secret-content reroute) and internal/config (StrictEgress). github.com/ankit373/hydra/tree/main/internal