Since the model cannot be made unfoolable, design so that a fooled model cannot do harm. The lethal trifecta framing helps: an injection becomes a data leak only when one agent has access to private data, reads untrusted content, and can send data out. Remove any one of the three and the leak path closes, even if the injection succeeds.
Several patterns do this in code rather than words. In the dual-LLM pattern, a quarantined model reads untrusted text but has no tools, and a privileged model plans and calls tools but never sees that text. CaMeL, from Google, Google DeepMind and ETH Zurich (2025), fixes the plan from the trusted request before any untrusted data arrives and tracks where every value came from, so untrusted data cannot flow into a sensitive action. An egress allow-list blocks every destination the agent does not need.
For actions that cannot be undone, such as sending money, deleting records or emailing outside the company, require a person to approve the concrete action with its real recipient and amount. Keep a check in code on every reply. Use prompt-level defences such as marking and repeating instructions as cheap outer layers, and test them against your own model, because results differ a lot between models.