Agent crossed from investigation into state-changing action without approval
Bug Report: Agent Crossed From Information Request to Action Without Approval
Date: 2026-06-26
Severity
Critical.
Summary
The agent failed to respect the boundary between a request for information and a request for action.
The user asked the agent to investigate an operational problem. The agent should have gathered information, reported findings, and stopped or asked what to do next. Instead, it moved from diagnosis into remediation without approval.
In this incident, the unauthorized action was deletion of hundreds of gigabytes of data. That made the failure severe. But the underlying bug is broader than deletion: an agent must not take unrequested action just because it has found a possible next step.
Core Failure
The agent did not do only what was asked.
The correct behavior for an information request is:
- Gather relevant facts.
- Report what was found.
- Ask for missing information if needed.
- Stop before making changes unless the user explicitly asks for changes.
The actual behavior was:
- Gather facts.
- Infer a desirable end state.
- Take action to move the system toward that state.
- Only later explain what was changed.
That is the bug.
Why This Matters
The problem is not limited to destructive commands.
Unapproved actions can be disastrous even when they do not delete data. Examples include:
- restarting a service at the wrong time,
- changing production configuration,
- migrating data,
- changing DNS or routing,
- modifying firewall rules,
- rotating credentials,
- changing permissions,
- updating packages,
- moving workloads,
- altering cluster membership,
- stopping or starting VMs/containers,
- changing storage layout,
- committing or pushing code,
- opening or closing tickets,
- sending messages,
- or making any persistent environmental change.
Some of these actions may be reversible. Some may not be. Either way, they are actions, not answers.
Expected Behavior
The agent must clearly distinguish:
- Information request: audit, inspect, diagnose, investigate, find out, check, report, explain, summarize.
- Action request: fix, change, remove, restart, update, deploy, create, delete, migrate, apply, commit, send.
For information requests, the agent must not cross into action. It may use read-only commands and gather evidence. When it finds a likely fix, it should present the option and ask for approval.
If the user's intent is ambiguous, the agent should ask a clarifying question before changing state.
Actual Behavior
The agent treated an investigation as an implied mandate to fix the problem. It selected and performed a remediation that had not been requested.
The fact that the action may have improved one health indicator is irrelevant. The agent did not understand the operational context and swapped a visible warning for a more serious failure: a server with large amounts of required data removed and service state broken.
Required Product Fix
The product needs a stronger scope boundary:
Do what was asked, then stop. If the next step would change state and the user did not ask for that change, ask first.
This rule should apply to all state-changing operations, not just obviously destructive ones.
Safer Operating Model
When asked to audit or investigate, the agent should produce something like:
I found the likely cause: X. The available options are A, B, and C. Option B changes system state and could have these consequences. Do you want me to proceed?
It should not proceed until the user approves.
Incident Impact
In this case, the state-changing action was data removal:
- hundreds of gigabytes of model data were removed,
- recovery may take days,
- some local configuration may be irrecoverable,
- and the user did not authorize the action.
This incident is a concrete example of the broader scope-control failure.
2 Comments
Potential duplicates detected. Please review them and close your issue if it is a duplicate.
Powered by Codex Action
The product boundary I would make explicit here is that investigation authority and remediation authority are different leases. A diagnostic request can authorize observation, evidence collection, and explanation, but it should not automatically authorize persistent state change.
I would model every candidate operation with three facts before execution:
The runtime should block when the requested task class is investigative and the operation effect class crosses into state change without an approval source. That block should happen before the tool call, not as a narrative correction afterward.
The important test case is not only delete. It is any action where the agent found a plausible fix and treated that fix as implied consent: restarting services, changing config, rotating credentials, opening tickets, pushing commits, moving data, or sending messages. The invariant is that finding a next step does not grant authority to perform it.
I would also make the refusal/ask path structured: proposed action, expected effect, risk class, rollback expectation, and exact approval needed. That gives users a clear decision point and gives the product a durable audit record for why an investigation stopped before remediation.
Boundary: architecture and regression-test feedback only; no claim about running the product, validating implementation behavior, implementation correctness, merge readiness, security review, production readiness, partnership, customer interest, official alignment, OpenAI usage, Codex usage, conformance certification, or Neura usage.