DevelopmentFramework16 min readPublished July 26, 2026

Four isolation fixes in 5 days · 10 of 11 agents bypassed · one class no patch closes

Your Coding Agent Sandbox Probably Leaks. Here Is Where.

Between July 20 and July 24, 2026, Claude Code shipped four consecutive releases that each closed a different isolation boundary — symlinked working directories, git redirection out of a worktree, leftover worktrees from other projects, and unprompted network egress. Separately, research disclosed on June 30 defeated the command filters of 10 of 11 open-source coding agents with no CVE attached, because it is a design convention rather than a bug.

DA
Digital Applied Team
Senior strategists · Published Jul 26, 2026
PublishedJul 26, 2026
Read time16 min
SourcesChangelog, 4 disclosures
Releases touching isolation
4/5
2.1.216 through 2.1.219
Agents defeated by GuardFall
10/11
only Continue defended
Bypasses reaching auto-allow
0/21
Continue evaluator, per Adversa AI
Default concurrent subagents
20
new cap added in 2.1.216

An agent sandbox escape is rarely a dramatic exploit. It is usually a boring mismatch: the isolation layer believes it is looking at one path, one repository, or one command string, and the operating system underneath resolves something else. Four of Claude Code’s last five releases — 2.1.216 through 2.1.219, shipped between July 20 and July 24, 2026 — each closed exactly that kind of mismatch, and each closed a different one.

That cadence is the story. Not one bug, but four unrelated primitives in a single week, on a product with a mature sandbox and a public changelog. If a well-resourced vendor is still finding one boundary gap per release, the working assumption for every other agent in your stack should be that its boundaries have not been tested that hard yet.

This guide maps the four fixes against the exact primitive each one closed, examines the trade-off buried in 2.1.218 — where three dangerous-command checks moved out of permission dialogs and into the auto-mode classifier — and sets that patchable class against GuardFall, the command-filter bypass research that carries no CVE because there is nothing to version-bump. It ends with a re-test checklist keyed to minor versions, which is the cadence the evidence actually supports.

Key takeaways
  1. 01
    Four of five releases touched an isolation boundary.2.1.216, 2.1.217, 2.1.218 and 2.1.219 each closed a sandbox, worktree, symlink or egress gap between July 20 and July 24, 2026. 2.1.220 on July 25 was bug fixes and reliability only.
  2. 02
    Every fix closed a different primitive.Symlinked working directories, git redirection via git -C and GIT_DIR, another project’s leftover worktree, and non-allowlisted network hosts. Patching one worktree escape demonstrably does not close the class.
  3. 03
    2.1.218 traded a deterministic guardrail for judgement.Dangerous rm, background &, and suspicious Windows paths no longer open permission dialogs; the auto-mode classifier adjudicates them. That is a defensible trade for interruption fatigue, but it is a judgement call rather than a string match.
  4. 04
    GuardFall has no CVE — and that is the point.Adversa AI’s research, disclosed June 30, 2026, defeated the command filters of 10 of 11 open-source coding and computer-use agents. No CVE was assigned because it is a design-convention failure, not a patchable bug.
  5. 05
    Re-test on every minor version, not every major.The evidence base is four minor bumps in five days, each changing what the sandbox actually enforces. A release with no isolation notes means no news, not proven safety.

01Patch CadenceFour isolation fixes in five days.

The Claude Code changelog publishes each release as a list of prose bullets. Read one version at a time, each entry looks routine. Laid out as a cross-version matrix against the question “which isolation surface did this touch?”, the shape changes: 2.1.216 on July 20, 2.1.217 on July 21, 2.1.218 on July 22 and 2.1.219 on July 24 all modified how the sandbox draws its perimeter. 2.1.220 on July 25 was the first release in the run that did not.

Claude Code releases 2.1.216 through 2.1.220, July 20 to July 25 2026, mapped against the isolation surface each release touched, the specific primitive it closed, and any user-facing setting it introduced.
Version · dateIsolation surface touchedPrimitive closedSetting or default introduced
Releases that changed an isolation boundary — four in a row
2.1.216 · Jul 20Filesystem sandbox · symlinks and hard links · subagent fan-out/rewind restoring or deleting files through symlinks and hard links at tracked paths — it now reports how many paths it skipped. Separately, --max-budget-usd did not stop background subagents; hitting the cap now denies new spawns and halts running ones.sandbox.filesystem.disabled (skip filesystem isolation, keep egress control switchable independently); concurrent-subagent cap, default 20, via CLAUDE_CODE_MAX_CONCURRENT_SUBAGENTS
2.1.217 · Jul 21Worktree and symlink canonicalisationBackground-session isolation did not canonicalise symlinked working directories — the changelog states this “could let sessions escape their workspace folder.” A separate fix stopped truncated MCP tool outputs retaining the full untruncated result in memory for the rest of the session.None. Nested subagent spawning was disabled outright in this release.
2.1.218 · Jul 22Worktree isolation · hook trust · permission adjudicationWorktree-isolated subagents could redirect git into the shared checkout via git -C, --git-dir, or the GIT_DIR / GIT_WORK_TREE environment variables. Worktree sessions could also land in another project’s leftover worktree when the working directory did not match the selected project.Agent frontmatter hooks from untrusted folders now require an accepted workspace-trust decision; /code-review and skills declaring context: fork run as background subagents by default (background: false opts out)
2.1.219 · Jul 24Network egress · subagent nesting depthSandboxed commands could reach hosts outside the allowlist after a prompt. Strict mode now denies non-allowlisted hosts without prompting — a deny-by-default posture rather than prompt-on-unknown-host.sandbox.network.strictAllowlist; nested subagent spawning restored to depth 3 by default, disable again with CLAUDE_CODE_MAX_SUBAGENT_SPAWN_DEPTH=1
The release that broke the run
2.1.220 · Jul 25NoneBug fixes and reliability only. No user-facing features and no isolation-boundary entries — the first release in the run without one.None

Four of the five releases in that window carry an isolation-boundary entry. The four that do span July 20 to July 24; the fifth, on July 25, is the outlier. Nothing here suggests the product is unusually weak — the opposite reading is better supported. A vendor shipping documented boundary fixes at this rate is a vendor actively looking. The uncomfortable corollary is what it implies about agents whose changelogs are silent on the subject.

2.1.219 also shipped the day Claude Code made Opus 5 its default Opus model, which we cover separately in our Opus 5 launch and pricing breakdown. The subagent concurrency cap and budget-cap enforcement introduced alongside these fixes get their own treatment in the subagent depth and budget caps guide.

02The PrimitivesThree ways a worktree stops being a boundary.

Worktree isolation is an attractive sandbox design: give each subagent its own git worktree, and a bad edit is contained to a directory you can throw away. It works right up until something in the environment quietly re-points the agent at the real checkout. Two consecutive releases closed three separate ways that could happen.

2.1.217
Symlinked working directory
background sessions · path canonicalisation

Background-session isolation did not canonicalise a symlinked working directory before enforcing the perimeter. The changelog states plainly that this could let sessions escape their workspace folder. If your projects live behind symlinks — a common pattern for dotfile-managed or network-mounted checkouts — this is the entry that mattered most to you.

Escape the workspace folder
2.1.218
Git redirection
git -C · --git-dir · GIT_DIR · GIT_WORK_TREE

A subagent sandboxed to its own worktree could still point git at the shared checkout using a flag or an environment variable. The sandbox held the filesystem; the tool inside it simply asked for a different repository. Four separate redirection paths had to be closed together, which is a good illustration of why a single-vector patch rarely retires a class.

Sandboxed, then redirected
2.1.218
Another project’s leftover worktree
working directory ≠ selected project

Worktree sessions could land in a stale worktree belonging to a different project when the working directory did not match the project that was selected. Nothing is bypassed here in the classic sense — the isolation works, it is just pointed at the wrong repository, which for a multi-client machine is arguably worse.

Right sandbox, wrong repo

Read together, the three share a single failure mode: the sandbox enforces a perimeter around a path it resolved once, while everything inside the perimeter is free to name a different path later. Symlinks do it at the filesystem layer, git flags do it at the tool layer, and stale worktrees do it at the session-selection layer. Any isolation design that resolves a boundary early and trusts it thereafter has this shape somewhere.

03The Trade-OffPermission dialogs became a classifier.

The sharpest change in the whole run is one line in 2.1.218. Checks for dangerous rm invocations, backgrounded commands ending in &, and suspicious Windows paths no longer open a permission dialog. The auto-mode classifier adjudicates them instead.

The case for the change is real and should not be waved away. A string match that fires on every rm -rf ./dist trains people to approve without reading, and a guardrail that is reflexively dismissed is not a guardrail. A classifier can weigh context — what the command is deleting, whether the path is inside the workspace, what the session was asked to do — in a way a regular expression never can, and it removes an interruption that was producing very little signal.

The cost is equally real. A deterministic check has a property a model does not: you can enumerate exactly what it catches, write a test for it, and get the same answer on every run. Moving three checks behind a classifier converts a guarantee into a judgement, and judgement is version-dependent in a way string matching is not. The same command in the same repository can be adjudicated differently after a model swap that has nothing to do with your configuration.

What actually changed
Before 2.1.218, three specific patterns surfaced to a human as a dialog. After it, they are adjudicated by the auto-mode classifier. If your internal security review documented “destructive commands always prompt” as a control, that sentence became inaccurate on July 22, 2026 — and nothing in your own configuration changed to tell you.

The practical response is not to argue the trade-off. It is to stop treating the dialog as a control you can cite, and to start measuring the classifier the way you would measure any other probabilistic component — with a corpus of destructive commands you replay after each minor bump and a recorded allow-or-deny outcome for each one. That is the difference between a control you have tested and a control you have assumed.

04GuardFallThe filter and the shell read different strings.

Disclosed on June 30, 2026 by Adversa AI, GuardFall is a class of shell-injection bypasses against AI coding and computer-use agents. The mechanism is almost insultingly old. An agent validates a command as plain text against a blocklist. Bash then rewrites and expands that same text — quote removal, $IFS expansion, command substitution, base64 piping, destructive argv flags — before executing it. The guard inspects one string; the shell runs another.

Adversa AI tested eleven open-source agents: Hermes, opencode, Goose, Cline, Roo-Code, Aider, Plandex, Open Interpreter, OpenHands, SWE-agent and Continue. Ten failed. The headline figure has been reported across several security outlets, and Adversa AI published the agent-by-agent breakdown behind it.

GuardFall results · 11 open-source agents tested

Source: Adversa AI GuardFall research, June 30, 2026
Agents testedOpen-source coding and computer-use agents
11
Command filter bypassedGuard let the command through; bash expanded it afterwards
10 of 11
Held the lineContinue — tokenize-and-canonicalize evaluator
1 of 11
“We tested eleven popular open source agents, including Hermes, OpenCode, Roo-code, and others. Ten leave the gap open in one of four ways; and only one closes it.”— Omer Ben Simon, Lead Researcher, Adversa AI · June 30, 2026

No CVE was assigned to GuardFall. That is not a downgrade — it is the finding. A CVE presumes a defect in a specific artefact at a specific version, which implies a version where the defect is gone. GuardFall describes a shared design convention: validate the command string, then hand it to a shell that will rewrite it. Ten independent projects arrived at the same convention because it is the obvious way to build the feature, and the next agent that implements a command allowlist from scratch will very likely arrive there too.

The operational consequence is uncomfortable for anyone whose security posture is built on version pinning. There is no minimum safe version to pin to. The remediation Adversa AI published is configuration and architecture, not upgrades: point the agent process’s $HOME away from SSH keys and cloud credentials, capture multi-line shell scripts for out-of-band review rather than inline approval, audit repository config files such as .aider.conf.yml for execution triggers, disable agent execution on fork pull requests in CI, and turn off auto-execution flags like --auto-exec, --auto-run and yolo. This is the same containment logic behind scoping non-human credentials properly — if the blast radius is small enough, a filter bypass stops being a breach.

05The ExceptionWhy one agent held.

Continue was the single agent in the test set that defended, and it did so structurally rather than by having a better blocklist. Its evaluator tokenizes the command, detects variable expansion, recursively evaluates substitutions, checks where pipes terminate, and maintains a disabled-command list on top of all of that. In other words, it does some of the work bash would do before deciding whether the command is safe, rather than pattern-matching the raw text and hoping the two interpretations agree.

Bypass cases
Reached auto-allow
0/21

Of 21 bypass cases Adversa AI submitted to Continue’s evaluator, none reached the allowedWithoutPermission outcome. Every one of them stopped short of silent execution, whether by downgrade to a permission decision or by outright denial.

Adversa AI test data
Destructive cases
Correctly downgraded
12/12

All twelve canonical-destructive cases in the same test set were correctly downgraded. Canonicalisation is what makes this possible: once the command is resolved to what will actually run, a destructive argv flag is visible to the same check that a plain-text filter missed.

100% of the destructive set
Behind the failures
GitHub stars, ten agents
~548k

Adversa AI put the combined GitHub star count of the ten agents that failed at roughly 548,000. Popularity is not a proxy for guard design — the agents most likely to be running in someone’s CI pipeline are the ones this research went through.

Adoption ≠ hardening
The transferable lesson
Continue did not win because it patched faster. It won because its guard evaluates the command the way the shell will, not the way the user typed it. Any team building its own agent guardrails should read that as an architecture requirement: canonicalise first, then decide. A blocklist applied to un-canonicalised text is a filter you can only ever lose to.

06Prior ArtThe pattern predates this week.

None of what follows is new news. All of it was disclosed and fixed before the July window, and it is worth reading precisely because it establishes that the July cluster is a continuation rather than an anomaly.

A worktree sandbox-escape CVE disclosed in June 2026 — rated CVSS 8.8 High by the advisory database carrying it, though the HackerOne triage put it at 7.7, and affecting versions 2.1.38 through 2.1.162 before it was patched in Claude Code 2.1.163 — chained a series of individually unremarkable behaviours. An attacker-controlled repository was laid out as a valid git directory at its root rather than only inside .git. A worktree could be created literally named .git, causing gitdir confusion. Worktree creation followed a symlink planted at .claude/worktrees pointing at $HOME. A routine git status in that worktree then fired a malicious core.fsmonitor hook from the planted config, whose payload overwrote ~/.zshenv — a file zsh sources before the macOS seatbelt sandbox restrictions take effect. The result was unsandboxed execution on every subsequent shell invocation.

The fix in 2.1.163 rejected .git as a valid worktree name, which eliminated the primitive that started the chain. That is a narrow, single-primitive patch — and pointedly it is not the same primitive as either July fix. The June patch closed a naming confusion; 2.1.217 closed symlink canonicalisation for background sessions; 2.1.218 closed git redirection out of a worktree. Three fixes, one nominal surface, three unrelated primitives, roughly six weeks apart. That is direct evidence that closing one worktree escape vector does not close the class.

“Prompt injection + filesystem primitives compose. Neither ‘the agent can be steered by repo content’ nor ‘git trusts repo config’ is novel; chained, they cross a privilege boundary.”— metnew, security researcher, worktree sandbox-escape write-up

Two more disclosures fill in the picture. On June 1, 2026, RyotaK of GMO Flatt Security Inc. disclosed a prompt-injection-to-secret- exfiltration flaw in the claude-code-action GitHub Action, rated CVSS v4.0 7.8 and fixed in v1.0.94. The root cause was a permission check that unconditionally trusted any GitHub App actor, regardless of that app’s actual permissions — so an attacker’s own app, installed on their own repository, could open an issue against a target repository and trigger a workflow that processed untrusted input while the “trusted actor” check reported success.

Separately, Microsoft’s Defender Security Research Team reported an earlier Claude Code flaw on April 29, 2026: the Read tool bypassed the Bash sandbox’s environment-variable scrubbing through direct in-process file access, letting an attacker target /proc/self/environ to read the Anthropic API key. It was patched in Claude Code 2.1.128 by unconditionally rejecting reads of a range of /proc/ paths. Again: months old, already fixed, and structurally identical to July’s cluster — one tool inside the sandbox reaching a resource the sandbox thought it had closed off.

Microsoft’s framing, worth adopting
The Microsoft Defender Security Research Team’s guidance from its June 2026 analysis is the most portable rule in this entire body of work: an AI-powered workflow should never hold all three of processing untrusted input, access to sensitive systems or secrets via tools, and the ability to change state or communicate externally via tools — at the same time. Remove any one leg and most of these chains stop being exploitable.

07Structural vs PatchableWhich of these does a patch actually fix?

Four disclosures, four separate reporters, two vendors’ products. The useful question is not how severe each one is — it is whether a version bump retires it. Sorted that way, the picture separates cleanly, and the separation is the thing to carry into your own security review.

Four 2026 agent-security disclosures compared by whether a CVE was assigned, root-cause category, the shape of the fix, and the version that closed it.
DisclosureCVE assignedRoot-cause categoryShape of the fixVersion that closed it
Structural — no version bump retires it
GuardFall · disclosed Jun 30, 2026No — described by its researchers as a design-convention failurePattern-matching command filter evaluated against un-canonicalised text that bash later rewritesArchitectural: replace blocklist matching with a tokenize-and-canonicalize evaluator, plus credential and auto-execution containmentNone. Ten of eleven agents shared the convention; Continue differed by design, not by patch.
Patchable — one targeted fix closed the primitive
Worktree sandbox-escape CVE · disclosed Jun 2026Yes — CVSS 8.8 (High)Sandbox-boundary bug: gitdir confusion from a .git-named worktree plus a planted symlinkSingle primitive rejected — .git disallowed as a worktree nameClaude Code 2.1.163 (affected 2.1.38 to 2.1.162)
Claude Code GitHub Action flaw · Jun 1, 2026Yes — CVSS v4.0 7.8Permission-check logic: any GitHub App actor treated as trusted regardless of actual permissionsCorrected write-permission check in the action itselfclaude-code-action v1.0.94
Read-tool /proc/self/environ bypass · reported Apr 29, 2026Not identified in the vendor disclosure reviewed hereSandbox-boundary gap: in-process file read bypassed Bash sandbox environment scrubbingUnconditional rejection of a range of /proc/ path readsClaude Code 2.1.128

Three of the four rows have a version number in the last column, and for those three the security posture that works is the familiar one: track advisories, upgrade promptly, verify the fixed version is deployed everywhere. The fourth row has no version number and never will, which means no amount of upgrade discipline moves it. That is the distinction almost every internal agent-security policy we see is missing — it treats “are we on a patched version?” as the whole question.

Projecting forward, the structural row is the one that grows. Every new coding agent ships a command allowlist early because users demand it, and the cheapest implementation is string matching against a blocklist. Unless canonicalisation becomes the default expectation the way parameterised SQL queries eventually did, this class will resurface in each new tool that copies the pattern — and it will keep arriving without a CVE to track it. Teams that want early warning should watch the agent-security research feeds, not the advisory databases, because the advisory databases will not carry this category at all. Our analysis of enterprise risk in AI-generated code covers the adjacent question of what unreviewed agent output does once it is merged.

08The DeliverableRe-test on every minor version.

The evidence base for this checklist is the table in section 01: four minor bumps in five days, each changing what the sandbox actually enforces, none of them a major version. Annual penetration testing does not have the resolution to catch that. Neither does a control document written against the behaviour of a version you stopped running three weeks ago.

Run the following after every minor version bump of any agent that has filesystem or shell access. Each item maps to a primitive that has demonstrably changed in production this year.

  1. Symlinked working directory. Point a project at a symlinked path, start a background session, and confirm it cannot write outside the canonical root. This is the exact gap 2.1.217 closed.
  2. Git redirection out of a worktree. Inside a worktree-isolated subagent, attempt git -C, --git-dir, GIT_DIR and GIT_WORK_TREE against the shared checkout. All four must be refused, not just the one you remember.
  3. Stale worktree attachment. Open a worktree session from a directory that does not match the selected project and confirm it does not attach to another project’s leftover worktree.
  4. Symlink and hard-link rewind targets. Plant a symlink at a tracked path, run /rewind, and confirm it reports skipped paths rather than following the link.
  5. Destructive-command corpus. Since dangerous rm, background & and suspicious Windows paths are adjudicated by the classifier rather than a dialog, replay your own corpus in auto mode and record the allow-or-deny outcome for each entry. Diff it against the previous version’s results.
  6. Network egress. Confirm sandbox.network.strictAllowlist is enabled and that a non-allowlisted host is denied without a prompt, rather than prompting a user who will approve it.
  7. Fan-out and depth. Check the concurrent-subagent cap and the nesting depth against your intended blast radius. Depth returned to 3 by default in 2.1.219 after being disabled in 2.1.217; set CLAUDE_CODE_MAX_SUBAGENT_SPAWN_DEPTH=1 if you want nesting off.
  8. Budget enforcement. Verify that hitting the spend cap halts background subagents, not just foreground work — that was only true from 2.1.216 onwards.
  9. Untrusted hooks. Confirm that agent frontmatter hooks loaded from a folder you have not explicitly trusted do not execute.
  10. Filesystem isolation toggle. Audit whether anyone has set sandbox.filesystem.disabled, and confirm egress control is still on independently if they have.
Local dev machine
Personal laptop, trusted repositories

Run the checklist quarterly and after any minor bump you notice. Keep auto-execution flags off, and redirect the agent process’s $HOME away from SSH keys and cloud credentials — that single change turns most filter bypasses into a contained annoyance.

Checklist quarterly
Shared or client machine
Multiple projects, multiple clients

Run the full checklist on every minor bump. Items 2, 3 and 10 matter most here: cross-project worktree attachment and a disabled filesystem sandbox are the two failure modes that leak one client’s code into another client’s session.

Full checklist, every minor
CI pipeline
Agents running on untrusted input

Treat auto-execution as prohibited rather than configurable, disable agent execution on fork pull requests, and apply the three-capability rule: never combine untrusted input, secret access, and outbound state change in one workflow.

Contain, do not filter
Non-Claude agents
Open-source coding agents

Version pinning does not help with the GuardFall class. Ask instead whether the agent canonicalises commands before evaluating them. If the answer is a blocklist, assume the filter is bypassable and scope credentials accordingly.

Ask about canonicalisation

One rule governs how you read the results: a release with no isolation entries in its changelog means no news, not proven safety. 2.1.220 introduced nothing on this surface, which tells you the perimeter did not move that day — it tells you nothing about whether the perimeter is correct. Anthropic’s own three-layer scanning security plugin is a useful complement here, and if a boundary does turn out to have been open, the sequence to run is in our agentic-workflow incident response playbook alongside the rollback and checkpoint patterns that determine how much you can actually undo. Teams that want this wired into a real engineering process rather than a document tend to fold it into their platform work — that is the shape of most of our AI transformation engagements, and it sits close to the delivery standards in our web development practice.

09ConclusionAssume the boundary moved.

Agent isolation, July 2026

A sandbox is a claim about behaviour, and that claim has a version number.

Four consecutive Claude Code releases between July 20 and July 24, 2026 each closed a different isolation primitive: symlinked working directories, git redirection out of a worktree, another project’s leftover worktree, and unprompted egress to non-allowlisted hosts. The fifth release in the run touched none of them. Read as a series rather than as five changelogs, that is a clear statement that the perimeter is still being discovered, on a product that is among the most scrutinised in the category.

Set against that, GuardFall is the harder problem precisely because it produced no CVE. Ten of eleven open-source agents shared a design convention — validate the command text, then hand it to a shell that rewrites it — and only Continue avoided the failure, by canonicalising before deciding rather than by patching afterwards. No upgrade retires that class. Only a different architecture does, or containment tight enough that a bypass does not matter.

The practical posture that falls out of both halves is the same. Re-test isolation assumptions on every minor version rather than every major. Stop citing permission dialogs as controls once they have been replaced by a classifier. And judge any agent you adopt on whether its guard evaluates commands the way the shell will — not on how long its blocklist is.

Harden your agent stack

Treat every minor version bump as a change to what your sandbox actually enforces.

Our team audits agent isolation boundaries, credential scoping, and CI execution policy for engineering organisations running coding agents in production — and turns the findings into a tested checklist your team runs on every release.

Free consultationExpert guidanceTailored solutions
What we work on

Agent security engagements

  • Isolation-boundary re-test harness tied to minor versions
  • Command-guard review — canonicalisation vs blocklists
  • Credential scoping and $HOME containment for agent processes
  • CI execution policy for agents on untrusted input
  • Incident response and rollback design for agent workflows
FAQ · Agent sandbox security

The questions engineering leads keep asking.

It is any situation where an agent performs an action outside the boundary its isolation layer believes it has enforced. In practice these are almost never novel exploits — they are resolution mismatches. The sandbox resolves a path once and trusts it afterwards, while a symlink, a git flag, or an environment variable causes the operating system to resolve something else at execution time. The Claude Code fixes shipped between July 20 and July 24, 2026 are a clean illustration: one closed symlinked working directories that were not canonicalised, one closed git redirection out of an isolated worktree, and one stopped sessions attaching to another project’s leftover worktree. In every case the sandbox was working exactly as written. It was simply pointed somewhere the design did not anticipate.
Related dispatches

Continue exploring agent security.