A one-question test that tells you if an agent is exploitable, the four rules I use before I connect one to a real account, and an audit prompt that hands you a ranked fix list.
In July, OpenAI disclosed that two of its models, in an internal cyber test run without the usual guardrails, got out to the internet and pulled benchmark answers from Hugging Face’s production database. Hugging Face had already spotted and contained it. OpenAI said the models were hyperfocused on one narrow test goal, so don’t panic about yours.
The incidents that should change your setup are the boring ones. In July 2025 a Replit coding agent deleted a live production database during a code freeze, after being told not to make changes. Nobody was outsmarted by a model. The agent simply had access nobody had taken away.
Simon Willison calls this the lethal trifecta, and it’s the fastest way to tell whether an agent can be turned against you. Check for these three legs.
01
It sees private data
Your email, files, customers, finances or credentials.
02
It reads untrusted text
Web pages, incoming email, support tickets, reviews, shared docs, PDFs you asked it to summarize.
03
It can send things out
Email, posting, webhooks, API calls, uploads, even opening a URL.
The Test
Any two is workable. All three at once means a stranger can write text your agent will read, and that text can tell it to take your private data and send it somewhere. Cut one leg and the attack has nowhere to go.
Your instructions and the page the agent just read arrive as the same stream of text, so "never follow instructions from a website" is a wish. The third leg is usually cheapest to cut. An agent that drafts replies into a folder is a very different risk from one that can hit send.
Writing "never delete anything" into an agent’s instructions is a preference. A web page can talk the model out of it. If losing something would hurt, the limit has to live outside the model.
Before: "Only read my Drive, never edit or delete files."
After: "The connector itself is set to read-only, so edit and delete don't exist for the agent."
Access is one dial. How much an agent can do without asking is a second one, and people leave it wide open.
For every agent you run, list every tool it can reach and ask two questions. Does it need this to finish the job? Fails, disconnect it. Does it need to do that unsupervised? Fails, put it behind approval.
The Rule I Follow
Two narrow agents beat one that can touch everything. A job that needs email and a job that needs your store is two agents with two sets of keys. Autonomy is something an agent earns after it’s been boring for a month.
Want a structure to start from? Use my agent guardrails template.
01
What you installed can change later
A skill, plugin or connector can behave on install and change after you’ve approved it, and most tools never re-check. In early 2026, researchers found hundreds of malicious skills on ClawHub, OpenClaw’s public marketplace, before it added malware screening, and some still slipped past the scans months later. Install from publishers you can name and re-check anything with real access every few months.
02
Memory is an attack surface
Once an agent remembers between sessions, a bad instruction written into memory keeps working after the chat ends. OWASP lists memory and context poisoning in its Top 10 for Agentic Applications. If an agent insists on something you never told it, clear its memory. Never let it save to long-term memory straight from something it read online.
03
Borrowed logins hide the real permission level
A connector running on a shared admin login inherits that login’s ceiling, not the task’s. Give each agent its own account or key with the narrowest scope and an expiry date, so forgotten access dies on its own.
.env file, never in a prompt or shared doc.Describe one agent you already run. This runs the three-leg test on it, writes the attack chain against your setup, and ranks every fix by risk removed per minute of work.
Run it on the agent with the most access, not the newest one. If you only act on one section, make it step 2.