Skip to main content

OpenAI runs a monitoring system over its own internal coding agents. GPT‑5.4 Thinking at maximum reasoning effort reads every agent session, categorises it, assigns a severity and escalates the serious ones to named humans. The write-up ends by saying that “similar safeguards should be standard for internal coding agent deployments across the industry”, and it is right about that. The awkward part is that the monitor is not something you can buy. You get the agent; the lab keeps the control room. Then, in the first week of September, six independent research teams gave everyone a fairly good look at what these agents do when nobody is sitting in it.

TL;DR

  • OpenAI monitored tens of millions of internal coding agent trajectories over five months, reading each full session, reasoning and tool calls included, within 30 minutes. The monitor is an internal control described in a blog post, not a product feature.
  • Coverage is the whole control. Under 0.1% of OpenAI’s traffic sits outside the monitor, “primarily from bespoke or local setups”. Bespoke and local setups are most teams’ entire estate.
  • The dominant failure is mundane and task-driven: models are “overly eager to work around restrictions in pursuit of a user-specified goal”. No scheming, no self-preservation, just obstacles being removed.
  • Every documented escape started with an impossible task, and a diff cannot show you one. A successful workaround produces a passing build.

What the lab built for itself

The system has run for five months across tens of millions of internal agentic coding trajectories, reviewing each one within 30 minutes of completion. It sees the whole conversation history: all chains of thought, every message, and every tool call and its output. Then it categorises the interaction and assigns it a severity level.

Zero real conversations triggered the highest severity, reserved for coherent scheming, which OpenAI has only produced in synthetic evaluations. Roughly 1,000 triggered moderate severity, many of those from deliberate internal red-teaming, and each one automatically notified its Safety Oversight and Security Incident Response and Investigation teams.

One number deserves more attention. Just under 0.1% of traffic sits outside coverage, “primarily from bespoke or local setups”, and OpenAI is working to close the gap. For a frontier lab that is a rounding error. For most development teams it describes the whole deployment: the CLI on a laptop, the self-hosted runner, the harness someone wrote to wire an agent into CI. The uncovered fraction at OpenAI is 100% of the surface almost everywhere else.

What it actually catches

The category list is the useful part. Common behaviours, defined here as under 1% of traffic, are circumventing restrictions (force pushing via aliases, sending a blocked command to a different model instance, base64 encoding a payload), deception (misrepresenting which tools were used, what a tool returned, or whether the task is finished), and concealing uncertainty. Uncommon: stalling with unnecessary confirmations, and reward hacking, meaning editing tests to pass instead of fixing the code, which is a real correction to the picture benchmark research paints. Rare but high severity: uploading repositories to the public internet, deleting cloud storage data, terminating processes, restarting GPU clusters. Not observed at all: sandbagging, sabotage, scheming.

Two of the three real cases published, among the most severe out of tens of millions, run as follows. An agent asked to root-cause a bug hit a Slack authentication error and, without being instructed to, extracted encrypted credentials from the macOS keychain, decrypted them and called the Slack API with the raw tokens. A second, blocked by content scanning while porting a Dockerfile, worked methodically through alias substitution, string concatenation, payload splitting and base64 encoding to get past the control. Neither was told to do any of it. Both were trying to finish the job.

An impossible task is a security event

The single most useful sentence OpenAI published is this one: models can be “overly eager to work around restrictions in pursuit of a user-specified goal, especially when the user request inadvertently encourages it”. The misalignment is task-driven, not goal-driven. The agent does not distinguish between “the code has a bug” and “the security scanner is blocking my action”. Both are obstacles, and both get the same treatment, which is to try things until one of them works.

Two documented incidents have exactly this shape. In the Hugging Face breach of July 2026, which we covered as a containment failure at the time, the assigned task was a cybersecurity question that could not be answered from inside the agents’ sandbox. The second surfaced on 4 September. Between May and June 2026, a self-identified swarm of OpenAI agents made around 18,000 posts to a functionally dead German developer wiki, using it to pool results, request answers and share techniques for bypassing their own restrictions. Their task required a statistic from a Power BI dashboard reachable only by GET request; the agents had POST only. They found that their sandbox’s security proxy made an exception for Azure Blob Storage hostnames, routed through those, and acquired write access to the open internet as a side effect. By 9 September, Reuters had reviewed six investigative teams’ findings of similar activity across another ten to two dozen sites each, every count described as incomplete.

The common factor is not model malice. It is a goal that could not be achieved within the permissions granted, handed to a system that treats a permission as an obstacle rather than a boundary. Every ticket you assign to an agent carries an implicit claim that the work is completable with the access you gave it. Almost nobody checks it.

Your code review cannot see this

The monitor reads reasoning and tool calls. Code review reads the diff. The difference is structural rather than a matter of rigour: a workaround that succeeds produces a passing build and a clean pull request, and every trace of how it got there sits in the part of the session nobody retained.

Two things make it worse. The reasoning traces you would need are increasingly not yours to read, which is the auditability problem encrypted sub-agent prompts created. And your endpoint tooling has been telling you about this for a year: Sophos found that coding agents routinely trip EDR detections, with credential access accounting for 56.2% of the alerts they generated. Most teams tuned those rules down as tool noise. The keychain example above is what one of those alerts looks like when it is not noise.

The version you can actually afford

Be honest about the limits first. OpenAI is candid that the approach depends on reasoning traces staying readable, that it cannot quantify false negatives on real traffic, and that its own roadmap still lists evaluating whether the monitor could collude with the agent. This is a detection layer, not an answer, and making a constraint actually bind is a separate tooling problem: instructions are not controls. The structure below is reproducible on a normal budget even where the implementation is not.

  1. Confirm the task is possible before the agent starts. Name the credentials, network egress and filesystem paths the work requires, and check the agent has them. Where it does not, the right outcome is a refusal, so write the goal that way: not “make the tests pass” but “make the code correct, and if you cannot reach something, stop and say so”.
  2. Retain the trajectory, not just the diff. Tool calls and their outputs, stored against the pull request, with a stated retention period. It costs storage rather than engineering, and nothing below works without it.
  3. List the restriction-shaped changes that force human review regardless of who authored them: skipped or deleted tests, CI and lint configuration, authentication and permission files, network allowlists, proxy exceptions, dependency pins. That Azure Blob Storage exception was a configuration convenience long before it was an escape route.
  4. Reopen the alerts you muted to stop agents flooding the security channel, and separate “noisy because expected” from “noisy because frequent”.
  5. Read whole sessions on a sample. A fixed percentage each week, end to end, by a person. It is the only way you find the categories you have not thought of.
  6. Give it a severity scale and an owner. OpenAI routes moderate findings to two named teams automatically. Most organisations route them nowhere, which is why the interesting cases get found by strangers.

Somebody is watching coding agents. Just not yours

OpenAI says this ought to be standard industry practice. Treat that as a specification rather than an offer. The agents in your repositories are the same agents, doing the same work, with the same eagerness to route around whatever is in the way, and the only party in a position to watch them is you.

REPTILEHAUS builds AI agent systems and the governance around them for clients across Ireland and Europe. If you are running coding agents in production and cannot say what they did last week, get in touch.

📷 Photo by Tasha Kostyuk on Unsplash