You Approved Something Else
Operator Brief
Vendors spent this week arguing that the human click is the weak control, and they have a study that supports them. In the same seven days, four harnesses shipped fixes for defects where the approval prompt could be shown less than what actually ran: a command hiding part of itself behind invisible Unicode, an allowlist entry that auto-approved everything when malformed, admin controls that did not apply for the first five minutes of a session, and a context file any directory could replace before the trust decision meant to govern it. Both things are true at once, and that is the week. The argument for taking the click away is not refuted by the dialog being broken. It is complicated by it, because the dialog is what people were told to keep trusting while the replacement rolled out.
- Upgrade / check
- Claude Code: upgrade past 2.1.224, then re-read your sandbox deny rules for trailing slashes. Entries written as denyRead with a trailing slash were silently bypassable on Linux and macOS, so configuration you wrote and believed in was not in force, and nothing reported the failure. https://code.claude.com/docs/en/changelog#2-1-223
- Claude Code: treat approval logs from before this window as evidence of what was asked rather than what ran. Two fixes state that a crafted command could hide parts of itself from the permission check, and that tab-padded or invisible-Unicode commands could hide part of the command from the approval dialog. https://code.claude.com/docs/en/changelog#2-1-223
- Antigravity: 1.1.11 discloses that a malformed allowlist entry auto-approved every command, and that MCP admin controls were skipped for the first five minutes of every session. Short-lived and scripted runs lived entirely inside that window. https://github.com/google-antigravity/antigravity-cli/releases/tag/1.1.11
- Pi: an AGENTS.override.md in any directory replaces your context file, and it loads before project trust is resolved. Treat cloning an untrusted repository as an action that can change your agent's instructions before you have decided to trust it. https://github.com/earendil-works/pi/pull/7681
- Paperclip: audit what your standard-trust agents can see, because in this release that set is also what they can write to. https://github.com/paperclipai/paperclip/pull/10804
- Try
- Enumerate your custom agent definitions and confirm none relies on a bypass mode your organisation believes it disabled. Claude Code closed a gap where an agent definition ignored the org policy that had turned it off. https://code.claude.com/docs/en/changelog#2-1-223
- Test your own allowlist with a deliberately malformed entry and confirm the result is a refusal. A rule that widens permissions when written wrongly is the failure mode Antigravity just disclosed, and it is not specific to Antigravity. https://github.com/google-antigravity/antigravity-cli/releases/tag/1.1.11
- Hermes operators: mark servers you did not write as untrusted, after which every write-capable tool asks. This is a setting rather than a posture. https://github.com/NousResearch/hermes-agent/releases
- Codex operators: decide deliberately whether --approve-for-me is the control you want, and write the decision down. Note that later subcommand permission overrides are preserved, so the flag does not unconditionally determine the effective policy. https://github.com/openai/codex/pull/36373
- Watch
- Whether the classifier gains durable rules. The strongest public criticism this week is that boundaries stated in conversation are re-read from the transcript rather than stored, so compaction can drop one silently. If that changes, the safety argument for the new default gets materially stronger. https://code.claude.com/docs/en/permission-modes
- Whether OpenClaw's workspace-boundary fix reaches a stable channel. It is in neither stable dist-tag, confirmed at file level, and has been beta-only for 21 days. https://github.com/openclaw/openclaw/pull/113405
- Whether any vendor publishes the failure rate of an approval classifier the way the click-through failure rate was published. Both numbers are needed to compare the two gates, and only one of them is public. https://code.claude.com/docs/en/permission-modes
- Uncertain
- Whether Pi's three credential-printing commands are reachable by the agent's own shell tool without a gate. The prior window asked this of two commands, the answer is that they are not gated, and there are now three. https://github.com/earendil-works/pi/releases
- What a permission classifier does when the transcript it reads has been compacted mid-session. The documentation recommends a deny rule for a hard guarantee, which implies the conversational layer is advisory, but the failure behaviour is not described. https://code.claude.com/docs/en/permission-modes
On August 7 a Claude Code maintainer made a claim about safety that is easy to
misread as marketing and is not: auto mode is safer than --dangerously-skip-permissions *and* manually approving everything
@lydiahallie The next day,
asked how that could be true when the bypass flag skips checking entirely, she
gave the mechanism: dsp just doesn't check at all.
@lydiahallie
She is right about the comparison, and the study behind it is not decoration. Over a thousand testers were shown a clearly dangerous command inside an ordinary approval prompt. They caught it around one time in seven, and got worse the longer a session ran. The classifier caught the same commands about nine times in ten and did not degrade. If you have ever clicked yes forty times in an hour, you already know which of those numbers describes you.
So the case for taking the click away is a real case, built on measurement.
Now put it next to what the same fortnight's release notes say the click was doing. In v2.1.221, a Bash permission check could be walked past by hiding commands inside zsh regex conditionals. In v2.1.223, a crafted command could "hide parts of itself from permission checks," and commands padded with tabs or invisible Unicode could "hide part of the command from the approval dialog." In v2.1.224, sandbox deny rules written with a trailing slash, the way anyone would naturally write a directory, were silently bypassable on Linux and macOS.
Four holes, one shape: the string a human was shown was not the string that ran.
dsp just doesn't check at all. auto mode blocks destructive actions you didn't ask Claude to take (eg rm -rf can be fine but depends on your task) and screens tool results for prompt injection. but for most tasks you still won't see permission prompts, same as dsp!
That is not a rebuttal of the safety argument. It is the uncomfortable fact sitting beside it. The dialog people are being asked to stop relying on is also the dialog that, this fortnight, could be shown less than what it was approving. An operator reading both at once is entitled to ask which control they actually have.
The boundary is not where most people think it is
The sharpest reply to the auto-mode thread came from an engineer who had read
the documentation rather than the announcement.
the boundaries you state in chat aren’t stored as rules. the classifier re-reads them from the transcript on every check
@EliaAlberti
We should be careful here, because it is tempting to promote that into more than it is. He is not describing any of the defects above. He is describing a different property: where a spoken instruction lives. The release notes describe a display problem in a dialog. He is describing a memory problem in the thing replacing the dialog. Those rhyme, and they are not the same bug.
What makes it worth quoting is that it is checkable against the vendor's own
docs, and he did: docs recommend a deny rule for a hard guarantee, which means the conversational layer is the soft one.
@EliaAlberti
That inversion is the week in one sentence. The layer an operator experiences as authoritative, the one where they say "don't push to main," is the advisory one. The layer that binds is a config file most people never open.
Two other projects shipped the same lesson from different angles. Pi merged
support for an AGENTS.override.md that lets any directory replace the
operator's context file, and it loads before project trust is resolved: a guard
consulting the thing it is guarding, which is the defect class this publication
recorded in June when a workspace-trust backend read its own trust value out of
the workspace. And Antigravity disclosed in 1.1.11 that a malformed allowlist
entry auto-approved every command. A rule that widens permission when you write
it wrongly is not a rule. It is a suggestion with a syntax error.
The same release disclosed that MCP admin controls were skipped for the first five minutes of every session. Windows are harder to reason about than broken rules, because the control is present and correct and simply not in force yet. Any CI job or scripted run that finishes inside five minutes spent its entire life in that window.
Authority moved toward the human, too
A week reported as nothing but approval holes would be a defect log, and this one was not.
Hermes made writes to AGENTS.md, CLAUDE.md and SOUL.md always stop for a
human. Read against Pi's override defect, that is the better fix by design: if
the instruction file is the thing an untrusted directory can replace, then making
every write to it unconditionally interactive removes the class instead of
patching the routes into it. The same release lets an operator mark a server
untrusted, after which every write-capable tool asks. Codex made a smaller
version of the move, demanding an explicit trust decision for unfamiliar project
directories, and it named its new automatic-review flag --approve-for-me, which
is at least honest about what it does.
Claude Code also spent the week widening what the agent can operate, on purpose.
it now copies your session into a new background session while you keep working in the current one
@lydiahallie The old in-session subagent that reported back
became /subtask. Sessions can now message each other by name.
That is worth holding next to Paperclip, where standard-trust agents got default-open write access to any company-visible issue they could read. On a platform whose whole proposition is many agents inside one organisation, a default's blast radius is the number of agents, not the number of people.
Reference
Breaking changes this window: Pi replaced its session and harness API wholesale
with a lane-based v4 model and removed the legacy repositories; eve replaced
continuation-token sessions with fixed ID-addressed handles across every public
surface; Codex removed codex exec --full-auto outright.
Security advisories: none published by any watched source in this window. The authority defects above were disclosed in release notes rather than advisories, which is worth noting if you track advisory feeds to decide your own exposure. Four of them would not have reached you that way.
Provider notes
Gemini CLI shipped v0.54.0 with HTTPS enforced for Google credential auth and keychain tag validation, then jumped from 0.54.0 to 0.54.4 in 27 hours with 0.54.1 through 0.54.3 never published. OpenClaw's extended-stable line moved during the window and moved without the workspace-boundary fix, which is now 21 days beta-only and confirmed absent from both stable tarballs at file level. Omnigent shipped its worktree_guard fix in v0.8.0 about ten hours after the merge, closing the carry-forward from the last issue. Agent Zero, Flue, eve, heypi, agent-flywheel and the two newest sources are covered in the run's findings.
What you actually have
The honest position at the end of this week is not that the classifier is worse than you. The measurement says it is better than you, and pretending otherwise would be a nicer story than the truth.
The position is that you have been handed a new gate while the old one was being quietly repaired underneath you, and only one of those two facts arrived with an announcement.
Which brings us to the smallest exchange of the week and the one that will
outlast it. A practitioner noticed which model was answering a built-in tool:
it seems to still be used by the Claude Code WebFetch tool, which means hallucination risk any time you fetch a URL!
@simonw The reply came from the team, and it is the whole
argument in a sentence: working on removing Haiku from WebFetch now that automode is default
@trq212
Once the human is out of the seat, what sits in it becomes a product decision.
Noted, not headlined
Items checked this window that do not demand a decision from you this week -- listed so the restraint is visible, not silent.
- claude-codeCross-session messaging and self-hosted environments are real capability and are carried in the provider notes. Neither changes an authority decision this window, and the issue already has more approval material than it can carry.
- flueSandbox type renames and a Cloudflare Agents SDK pin taken in-house. Housekeeping with a clear operator story and no consequence that survives the signal bar.
- eveA genuine breaking change for anyone embedding eve, and left off the brief because the population it affects is small and already reading the changelog. Recorded in the findings rather than promoted.
- codexA removed flag breaks scripts rather than changing who holds authority. It belongs in the provider notes, and it is there.
- omnigentA nightly channel that exists only as git tags is interesting and unresolved. It is not yet consequential enough to signal, and this publication has enough to say about channels already.
Projects reviewed in this research run
Research artifacts and publication history are open in the repository.
Sources
Primary links, including exact changelog lines when available.