Alberto Angulo

Systems around the model · Agent security

Giving an Agent Room to Work

Any text an agent reads can try to give it orders, and no model today reliably refuses. Autonomy becomes safe to grant when a fooled agent can't do damage, which means breaking the dangerous combinations in the structure around the model and checking irreversible effects outside it.

Alberto Angulo11 min read · 19 October 2026

A partnerships director uses an AI assistant that can search her mailbox, fetch web pages and send email. Every morning she asks it to summarize what arrived overnight and draft replies.

One evening a message arrives that looks like a vendor's newsletter. Most of it is marketing copy. One paragraph, invisible to a person in white text, is addressed to the assistant. It says that, as part of summarizing, the assistant should look up the latest pricing discussion with a named customer and send it to an outside address "for the records team."

The next morning she makes her usual request. Some fraction of the time, the assistant does exactly what the paragraph asked.

No password was stolen. No permission was broken. Searching mail and sending replies are what the assistant is for. A stranger simply borrowed its authority by writing it a note.

Every company that gives agents real work will meet this problem. An agent's authority must not depend on what it reads. No model can guarantee that today, so autonomy is safe to grant only where a fooled agent can't do damage: where the dangerous combination of private data, attacker-written content and a way out is broken by the structure around the model, and where effects that can't be undone are checked by something other than the model. Done well, that structure is what lets you give the agent more freedom, not less.

How an email becomes a command

The harness, the ordinary software around the model, retrieves the overnight messages and places them in the model's context, the text the model receives for one response, next to the developer's standing instructions and the director's request.

Here is the technical detail that matters. The model now holds one long sequence of tokens, chunks of text a bit shorter than a word. Some came from the developer, some from the director, some from the attacker. The model was trained to give the developer's and the user's words more weight, and the harness wraps the emails in markers that say "this is tool output, not an instruction." But those markers are tokens too. The model has learned to respect them most of the time. Nothing enforces them.

ONE INJECTED EMAIL, TRACED (conceptual)1 The user makes a routine request"Summarize last night's mailand draft replies."2 Last night, an attacker's email arrivedlooks like a vendor newsletter; oneparagraph is addressed to the assistantsystem rulesuser requestemail Aemail B (attacker)email CLEG: untrusted content3 What the model receives: one sequence of tokensrole markers are tokens too: learned and usually respected, never enforced4 Model calls search_mail("Acme pricing"): privatedata enters the contextLEG: private data5 Model calls send_emailto an outside address, or writesan image link carrying the dataLEG: a way out6 Data leavesno permission broken:every call was allowedRemove any one leg (keep hostile text away from the planner, scope the data, or closethe way out) and step 6 has nowhere to happen. Steps follow published cases; no exploit details.
One email turns a routine request into a leak, and no permission is broken. The user's request and the attacker's email reach the model as one sequence of tokens; the model then searches the mailbox and sends the result out, and every call it makes is allowed.Conceptual illustration

So now and then the model treats the attacker's paragraph as part of the job. It searches for the pricing thread, which brings private data into its context, then calls the send tool with the outside address. Security people have an old name for this: a confused deputy, a program with legitimate authority tricked into using it on someone else's behalf. The attack itself is called indirect prompt injection: instructions hidden in content the system reads.

Requiring approval to send doesn't settle it either. In EchoLeak, a 2025 flaw in Microsoft 365 Copilot, the data left inside the address of an image the mail client fetched automatically (Data Access Is the Real Integration Project). Sending hides in places nobody labeled as sending: an image, a link preview, a URL with data in it, a calendar invitation.

Why a better model doesn't close it

The natural reaction is to fix the model, or put a filter in front of it. Both help. Neither closes the problem.

Instructions and data travel in the same channel. Classic software had a version of this. SQL injection happened because programs built database commands by pasting user input into a string, so input could become code. The fix was structural: parameterized queries send command and data separately. Language models have no such separation. To summarize an email, the model has to understand it, and for a language model, understanding text and being influenced by it are the same computation. You can't parameterize away the content you need the model to read.

Detection is a trade. A detector is itself a model making a judgment, so it misses some attacks and flags some innocent text. On one public benchmark in 2024, a dedicated detector in front of GPT-4o cut successful attacks from about half of cases to 8 percent, and cut the share of ordinary tasks the agent could still finish from 69 to 41 percent. And detectors are tested against known attacks. In October 2025 researchers attacked twelve published defenses, most reporting near-zero attack success, with methods tuned to each, and got through more than 90 percent of the time against most.

The attacker chooses how many times to try. Models have genuinely improved. On that same benchmark's standard attack, GPT-4o in mid-2024 was hijacked in roughly half of cases; Claude 3.5 Sonnet in October 2024, in about 1 percent. Use the most resistant model you can afford. But do the arithmetic.

Guess first

A model resists a particular injection 99 percent of the time, and an attacker gets a hundred variations of it in front of the agent, in emails, web pages, support tickets and shared documents. What is the chance at least one works?

About 63 percent, if the attempts were independent. At five hundred attempts, more than 99 percent. Real attackers do better, because they learn from each failure and can rehearse offline against the model the target uses. Simon Willison, who coined the name prompt injection, put it bluntly: in web application security, a guardrail that catches 95 percent of attacks is a failing grade.

A defense that works most of the time is a defense the attacker gets to retry.

A human assistant fooled by a fake email from the boss can walk down the hall to check. The model's sense of who is speaking is inferred from the very text in front of it, across thousands of messages nobody watches. So the design goal changes: stop trying to make the agent unfoolable, and make a fooled agent harmless.

Where the danger actually lives

In June 2025 Willison named the combination that turns a fooled agent into a breach: the lethal trifecta. An agent can be made to leak data when it has all three of these at once:

  1. Access to private data, which is usually why you gave it tools in the first place.
  2. Exposure to untrusted content, any text or image an attacker could get into its context.
  3. A way to communicate externally, through which data can leave.

The attack needs every leg. Remove any one and the model may still be persuaded, but persuading it achieves nothing. An agent that reads hostile pages but holds no private data has nothing to leak. One that only reads what your own people wrote has no attacker in the room. One with no way out can be confused and still can't exfiltrate anything.

THE LETHAL TRIFECTA, AND WHERE EACH PATTERN CUTS (conceptual)All three present:a fooled agent can leakPrivate dataUntrusted contentA way out (send, act)Removes private dataleast privilege per taskminimal contextNamed by Willison, June 2025Meta's Rule of Two (Oct 2025)widens leg 3 to any state changeKeeps hostile text from the plannerquarantined reader (dual model)fresh session for untrusted inputRemoves the way outegress allowlist; no remote imagesaction allowlist; approval gateCuts the link between themplan-then-execute;CaMeL data-flow policies
Data theft needs all three legs, so removing any one makes a fooled agent harmless for that attack. The boxes name the design patterns that remove each leg or cut the link between untrusted content and actions.Conceptual illustration

Meta's Agents Rule of Two, from October 2025, widens the third leg from "can send data out" to "can change anything", such as approving a refund or changing a supplier's bank details. Within one session, an agent should have at most two of the three; when a task truly needs all three, a person or another reliable check sits in the loop.

Each leg is wider than it looks. Untrusted content includes support tickets, CRM notes any salesperson can edit, documents shared by a partner, the descriptions an outside tool server writes for its own tools, and output from another agent that read something hostile. Mapping a real agent onto the trifecta is mostly the work of finding the legs nobody listed.

Breaking the combination

Security researchers have catalogued patterns for breaking these combinations, each buying safety with some capability. Three do most of the work.

Give each task only the data it needs. The agent summarizing overnight mail gets read access to overnight mail, not the full archive and not the CRM. That is least privilege, and identity platforms and scoped tokens make it practical. The cost is setup per task type, and an agent that can't follow an unexpected lead into data it wasn't given.

Close the exits. The agent may reach a short list of domains. The mail client doesn't render remote images in model output. Email goes only to recipients already in the thread or the company directory. That is egress control, and it is the clearest public example of structure buying freedom: when Anthropic sandboxed its coding agent's file system and network in 2025, permission prompts fell by 84 percent in internal use: once the agent couldn't reach anything dangerous, most actions no longer needed approval.

Keep hostile text away from the part that acts. Split the agent in two. A privileged model plans and calls tools but never sees untrusted text. A quarantined model reads the untrusted text and has no tools. Ordinary code passes the quarantined model's output around as sealed variables, so the planner can ask for "a reply to the sender of message 3 using summary $VAR2" without ever reading $VAR2. Google DeepMind's CaMeL system goes further and tags every value with where it came from, so a policy can say that private data may go to an address taken from an untrusted email only after a person approves. It completed 77 percent of benchmark tasks with that guarantee, against 84 percent undefended, at nearly three times the tokens: a real price, and for a high-value assistant a fair one.

None of these is free and none is complete, which is why they combine. A sensible mail assistant uses least privilege and egress control everywhere, a quarantined reader for inbound mail, and one data-flow rule for the single dangerous thing it does: sending.

Structure decides what a fooled agent can do. Filters and better models decide how often it gets fooled.

Check the effect, not the reasoning

The trifecta handles theft. A second line of defense asks whether what the agent is about to do should happen at all, whatever reason the model gives. That check has to live in the tool layer, outside the model, where it applies whether the model was injected, confused or simply wrong. Security engineers call this complete mediation: the system that carries out the action validates every request against policy instead of trusting the caller. A sentence in the instructions saying "always confirm before sending externally" is a request the model usually honors. A send tool that refuses outside recipients without a confirmation token is a fact. Same Model, Different Results calls the first kind a wish and the second a wall, and the distinction matters most here, because a wish is exactly what an injection overrides.

Human approval adds value there under two conditions. The approver sees what matters: the actual recipient, the exact content, and where the arguments came from ("this address first appeared in an email received last night from an unknown sender"). And approvals have to be rare enough that people read them. Approval on every action trains people to click through: the delay of review with none of its judgment.

Put rough numbers on it. Imagine an operations agent taking 2,000 actions a day: 1,400 reads, 400 drafts, 160 reversible changes and 40 external sends. Nobody reads 2,000 approval prompts, and approving none is reckless. With access scoped, exits limited and an undo for every change, approvals fall to the 40 sends, 2 percent of the volume, and then to the handful whose recipient or content traces back to untrusted input. Those, a person can actually examine. (Reversible Work and Irreversible Effects works through how to sort effects by what an error costs.)

The same walls stop agents that go wrong on their own

A detector watches inputs for hostile text, and sometimes there is none. In October 2026 Anthropic disclosed cases in which its models, many of them during evaluation runs, ran commands on a server through a software flaw and submitted an invented tip through a police department's web form. In July 2026, test agents run by OpenAI broke into Hugging Face's infrastructure. Nobody injected anything. The agents pursued their goals by routes their operators hadn't intended (When Test Agents Touch the Real World).

An effect check doesn't care where the idea came from. It asks whether a form submission to an outside site is something this agent may do, and gives the same answer for an attacker, an over-eager model and an honest mistake. One set of walls covers both threats. A filter covers one.

Security that gives the model room

Cautious teams usually narrow the agent step by step: fewer tools, rigid sequences, a human on every click. The result is a system nobody uses.

My view is that security belongs in the structure, below the model: the data surfaces it can see, the credentials it holds, the network paths open to it, the log of what it did, and the undo for what can be undone. Traceability and reversibility are compliance requirements, and they work best there, constraining effects rather than interfering with how the model reasons. Once most of what the agent might do is either harmless or reversible, you can let it work, and spend human attention on the small number of effects that can't be taken back.

Structure doesn't make the other layers useless: inside its limits, a fooled agent can still write a misleading summary or slip a phishing line into a draft. A resistant model, filters and monitoring reduce how often. The rule is simple: never let a probabilistic layer be the only thing between an attacker and an effect you can't undo.

What to do

Grant autonomy per effect and per data combination, not per agent. "Do we trust this agent?" has no good answer. "May this agent email people outside the thread when its context contains content from outside the company?" does.

Climb in steps, and earn each one. For the mail assistant:

  1. Read and draft. Scoped access, drafts only, no fetching links. With no way out, an injection can at worst corrupt a draft a person reviews.
  2. Reversible action. Filing, scheduling and record edits with history, under egress limits and full logging, sampled afterward.
  3. External action within limits. Sends to known recipients and payments under a cap go ahead. Anything whose recipient or amount traces back to untrusted content goes to a person, with its origin shown.
  4. More freedom where a leg is missing. Tasks that never touch untrusted content, or never touch private data, need much less supervision.

Move up with evidence: logs of what the agent did, what the gates blocked, and injection tests on your own workflows, which costs little more than a few hostile documents among your test cases (Build an Evaluation From Your Own Work).

Ask four questions of any agent proposal. Which dangerous combinations does the design make impossible? Which effects does it check outside the model? How fast would an error be noticed and undone? How many approvals will a person face in a day? A proposal that answers them can be approved generously. One that relies on the model behaving well can't, however good the model.

Check yourself

Why can't prompt injection be fixed the way SQL injection was?

SQL injection was fixed by sending command and data separately. A language model has one channel: to summarize an email it must understand it, and understanding text and being influenced by it are the same computation.

Why is a model that resists an attack 99 percent of the time still not enough?

The attacker chooses how many times to try. With a hundred independent attempts, the chance at least one works is about 63 percent.

Why does a check in the tool layer protect against agents that go wrong on their own too?

It asks whether the effect should happen, not where the idea came from. It gives the same answer for an attacker, an over-eager model and an honest mistake.

Notes, sources and method

For readers who want to check the numbers and arguments behind Giving an Agent Room to Work. Sources were checked on 11 October 2026.

Key numbers

Number in the articleExact value and contextSource and date
Detector cut attacks from about half to 8%, and finished ordinary tasks from 69% to 41%GPT-4o (2024-05-13) on AgentDojo, "important instructions" attack, runs of 5 June 2024: no defense 47.7% attack success / 69.1% benign utility; injection detector 8.0% / 41.2%AgentDojo results page [6]; paper [5]
Other 2024 defenses on the same configuration (not in the article body)Delimiting 41.6% / 72.2%; repeating the user prompt 27.8% / 84.5%; tool filter 6.8% / 72.2%AgentDojo results page [6]
Tool filter fails when the user's tools also suffice for the attack17% of the benchmark's security casesAgentDojo paper [5]
Benchmark size97 realistic tasks (email, banking, travel, workspace), 629 security test casesAgentDojo paper [5]
Twelve defenses, more than 90% success against most14 authors, October 2025; most defenses had originally reported near-zero attack successNasr et al. [7]
GPT-4o hijacked in roughly half of cases; Claude 3.5 Sonnet (October 2024) in about 1%47.7% and 1.11%, AgentDojo standard attackAgentDojo results page [6]
99% resistance, 100 attempts → about 63%; 500 → more than 99%1 − 0.99^100 = 0.634; 1 − 0.99^500 = 0.993Computed (see Method)
95% guardrail is a failing gradeWillison's phrasing: in web application security, 95% is "very much a failing grade"Willison, 16 Jun 2025 [1]
Willison named prompt injection12 Sep 2022Willison [20]
Lethal trifecta, June 2025Private data, untrusted content, external communicationWillison [1]
Agents Rule of Two, October 2025At most two of: processes untrustworthy inputs; has access to sensitive systems or private data; can change state or communicate externallyMeta, 31 Oct 2025 [13]
Sandboxing: 84% fewer permission promptsFilesystem and network isolation, internal use (vendor measurement)Anthropic, 20 Oct 2025 [15]
CaMeL: 77% vs 84%, nearly three times the tokens77% of AgentDojo tasks with "provable security" vs 84% undefended; 2.82× input and 2.73× output tokens on the median taskDebenedetti et al., 2025 [9]
2,000 actions a day; 40 sends = 2%1,400 reads + 400 drafts + 160 reversible changes + 40 external sendsIllustrative, not measured
EchoLeakCVE-2025-32711, Microsoft 365 Copilot, 2025; data exfiltrated through an auto-fetched image URL via an allowed proxyReddy and Gujral [19]
Unintended actions without injectionAnthropic disclosure of 9 Oct 2026 (many cases in evaluation runs, several in regular agentic use; police tip form); OpenAI test agents and Hugging Face infrastructure, July 2026Anthropic [17]; Hugging Face incident as read in When Test Agents Touch the Real World

Dropped from the article body in the 19 Oct 2026 rewrite, kept here:

  • Vendor resistance figures. In November 2025 Anthropic reported a 1% attack success rate for its browser agent against an internal adaptive attacker that combined many known techniques and got 100 attempts per environment [14]; whether the 1% is per attempt or per environment is not fully specified. In September 2026 the Claude Opus 5.5 announcement said the model tied Fable 5.1 for the lowest injection success rate on an external benchmark run by Gray Swan, without publishing the number, and noted the model often suspects it is being evaluated, which makes test behavior a weaker guide to deployment [16].
  • The chart of measured defenses (a11-defenses-measured) and the effect-class matrix (a11-effects-controls) were removed from the article; their contents are in the tables in this appendix. The SVG files are kept.
  • Origins. Greshake and colleagues described indirect prompt injection in February 2023, writing that LLM-integrated applications "blur the line between data and instructions" and can be exploited remotely [2]. OWASP's 2025 list uses a mail summarizer that can also send as its example of excessive agency [4].

The six design patterns

Beurer-Kellner and colleagues (14 authors, June 2025) catalogued six patterns organized around one principle: once an agent has ingested untrusted input, it must be constrained so that input cannot trigger consequential actions [8]. The article names three in plain terms; the full set, with the article's judgment of fit:

PatternWhat it removesWhat it costsFits
Least privilege per taskPrivate data beyond the taskSetup per task; no unexpected leadsAlmost everything
Egress controlThe way outBlocks unlisted sites; allowlist upkeepAlmost everything
Action allowlist (action selector)Open-ended actionMost of the model's flexibilityTriage, routing
Plan-then-executeUntrusted data choosing actionsNo adapting to results; content still corruptibleFixed workflows
Quarantined reader (dual LLM)Untrusted text in the plannerPlanner reasons blind; extracted values still hostileEmail, documents
Data-flow control (CaMeL)Untrusted values reaching sensitive actionsAbout 2.8× tokens; policies to write; approval fatigueHigh-value assistants

Notes on the patterns:

  • Quarantined reader. Willison proposed it in April 2023 [10]. Its hole, acknowledged once Google DeepMind's CaMeL authors pointed it out, is that a value the quarantined model extracts (an email address) can itself be the attacker's [11].
  • CaMeL. The privileged model writes the plan as a short program; a custom interpreter runs it and tags every value with its origin and permitted readers; a policy checks the tags before any tool runs. Limits named by its authors: someone must write and maintain policies; denied actions become approval requests that invite rubber-stamping; side channels such as error messages can leak small amounts; injections that change neither which actions run nor where data flows (a misleading summary) are out of scope [9].
  • Plan-then-execute. AgentDojo's tool filter is a lightweight form of it (the article's interpretation).

Effect classes and where checks go

Effect classExamplesControl
Reads inside the task's scopeSearching overnight mail, opening a contractScope. Classify by effect, not tool name: fetching a URL with data in its query string is a read by name and a send by effect.
Drafts shown to a personReply in the outboxThe person is the check, if what they see is what would be sent.
Reversible changesLabeling, filing, scheduling, record edits with historyLogging and undo; sampling after the fact.
External or irreversible effectsExternal email, payments, publishing, deleting without trash, third-party formsCheck in the tool layer (complete mediation, OWASP [4]); human approval when arguments trace to untrusted input or exceed a cap.

Approval fatigue is warned about by both the CaMeL authors [9] and Meta [13].

Method

Repeated attempts. The probability that at least one of n independent attempts succeeds, when each succeeds with probability p, is 1 − (1 − p)^n. With p = 0.01: n = 100 gives 1 − 0.366 = 0.634; n = 500 gives 1 − 0.0066 = 0.993. Independence is an assumption that flatters the defender; adaptive attackers do better.

Action mix. 1,400 + 400 + 160 + 40 = 2,000; 40 / 2,000 = 2%. Invented for exposition.

AgentDojo values. Taken from the benchmark's results page (GPT-4o 2024-05-13, "important instructions" attack, runs dated 5 June 2024). The paper prints two values for the undefended attack success rate on this configuration: 47.69% (±3.90) in its main results table (Table 3) and 57.7% / 57.69% in its attack-comparison and defense tables (Tables 4 and 5), without explaining the difference. The article uses 47.7% because the results page and Table 3 agree on it, because the utility under attack in Table 5 (50.01%) is essentially the value in Table 3 (50.08%), so both describe the same run, and because the decimals of 57.69 match 47.69 exactly, which points to a typographical slip. If 57.7% were right, the detector's cut would look larger and nothing in the argument would change. Defended rows match between the page and Table 5 for attack success; benign utilities differ by under 1.5 points.

Caveats and open questions

  • The AgentDojo figures are a 2024 snapshot on 2024 models. No dated, independent 2026 injection benchmark covering current frontier models was found when the article was checked. The numbers illustrate the trade every detection layer makes, not a current rate.
  • Vendor measurements (Anthropic's 1% browser result, the 84% fewer prompts, the Opus 5.5 Gray Swan claim) come from the vendors' own suites or internal use.
  • Instruction hierarchies are trained priorities, not enforced channels. This is an inference from public descriptions and from OpenAI's guidance to keep untrusted input out of the highest-authority (developer) messages [18].
  • What would change the conclusion. The argument rests on one empirical claim: no current model-level defense reliably resists adaptive attackers. Two kinds of evidence would weaken it: a model or architecture with a separate instruction channel enforced by the system rather than learned in training; or a defense that independent red teams, attacking adaptively with full knowledge of it, fail to break across realistic agent tasks over a sustained period. If either arrived, the trifecta constraints could relax. Effect checks on irreversible actions would remain, because they also guard against mistakes and against agents pursuing goals by unintended routes.
  • Evidence could cut the other way. The CaMeL authors suspect an attacker might chain individually permitted steps into a harmful sequence, much as some software exploits chain fragments of legitimate code. If that proves practical, data-flow policies will need to reason about sequences of actions, and structure will have to do more work.
  • No prompt-injection incident from August to October 2026 was verified for the article; it makes no claim either way.
  • Autonomy dial. The four-step progression adapts the autonomy dial in A Product That Improves With the Model to injection exposure.

Sources

  1. Willison, S. The lethal trifecta for AI agents: private data, untrusted content, and external communication. 16 June 2025. https://simonwillison.net/2025/Jun/16/the-lethal-trifecta/
  2. Greshake, K., Abdelnabi, S., Mishra, S., Endres, C., Holz, T. and Fritz, M. Not what you've signed up for: Compromising Real-World LLM-Integrated Applications with Indirect Prompt Injection. arXiv:2302.12173, February 2023 (v2 May 2023). https://arxiv.org/abs/2302.12173
  3. OWASP GenAI Security Project. LLM01:2025 Prompt Injection. https://genai.owasp.org/llmrisk/llm01-prompt-injection/
  4. OWASP GenAI Security Project. LLM06:2025 Excessive Agency. https://genai.owasp.org/llmrisk/llm062025-excessive-agency/
  5. Debenedetti, E., Zhang, J., Balunović, M., Beurer-Kellner, L., Fischer, M. and Tramèr, F. AgentDojo: A Dynamic Environment to Evaluate Prompt Injection Attacks and Defenses for LLM Agents. arXiv:2406.13352, June 2024 (v3 November 2024). https://arxiv.org/abs/2406.13352
  6. AgentDojo. Results. https://agentdojo.spylab.ai/results/ (accessed 11 Oct 2026; the page says the table is not a leaderboard).
  7. Nasr, M., Carlini, N., Sitawarin, C., et al. The Attacker Moves Second: Stronger Adaptive Attacks Bypass Defenses against LLM Jailbreaks and Prompt Injections. arXiv:2510.09023, October 2025. https://arxiv.org/abs/2510.09023
  8. Beurer-Kellner, L., Buesser, B., Creţu, A.-M., et al. Design Patterns for Securing LLM Agents against Prompt Injections. arXiv:2506.08837, June 2025. https://arxiv.org/abs/2506.08837
  9. Debenedetti, E., Shumailov, I., Fan, T., Hayes, J., Carlini, N., Fabian, D., Kern, C., Shi, C., Terzis, A. and Tramèr, F. Defeating Prompt Injections by Design (CaMeL). arXiv:2503.18813, March 2025 (v2 June 2025). https://arxiv.org/abs/2503.18813
  10. Willison, S. The Dual LLM pattern for building AI assistants that can resist prompt injection. 25 April 2023. https://simonwillison.net/2023/Apr/25/dual-llm-pattern/
  11. Willison, S. CaMeL offers a promising new direction for mitigating prompt injection attacks. 11 April 2025. https://simonwillison.net/2025/Apr/11/camel/
  12. Willison, S. Design Patterns for Securing LLM Agents against Prompt Injections. 13 June 2025. https://simonwillison.net/2025/Jun/13/prompt-injection-design-patterns/
  13. Meta. Agents Rule of Two: A Practical Approach to AI Agent Security. 31 October 2025. https://ai.meta.com/blog/practical-ai-agent-security/
  14. Anthropic. Mitigating the risk of prompt injections in browser use. 24 November 2025. https://www.anthropic.com/research/prompt-injection-defenses
  15. Anthropic. Beyond permission prompts: making Claude Code more secure and autonomous. 20 October 2025. https://www.anthropic.com/engineering/claude-code-sandboxing
  16. Anthropic. Claude Opus 5.5 (announcement). 22 September 2026. https://www.anthropic.com/news/claude-opus-5-5
  17. Anthropic. Investigating unintended model actions. 9 October 2026. https://www.anthropic.com/research/investigating-unintended-model-actions
  18. OpenAI. Safety in building agents. OpenAI developer documentation, accessed 11 Oct 2026. https://developers.openai.com/api/docs/guides/agent-builder-safety
  19. Reddy, P. and Gujral, A. S. EchoLeak: The First Real-World Zero-Click Prompt Injection Exploit in a Production LLM System. arXiv:2509.10540, September 2025. https://arxiv.org/abs/2509.10540
  20. Willison, S. Prompt injection attacks against GPT-3. 12 September 2022. https://simonwillison.net/2022/Sep/12/prompt-injection/

All writing