How to — decide what an AI agent may do

Share
How to — decide what an AI agent may do

You're about to give an assistant access to something — a repo, a mailbox, a database, a shell. Twenty minutes of thinking now decides whether that ends in a useful afternoon or in an incident report. This is the routine: name the job, grant the minimum, cap the damage, and never let the model be the thing that says no.

The reason this needs a routine is that the failure isn't exotic. An agent with your inbox and a send button doesn't need to be hacked to hurt you; it only needs to be persuaded. (If the mechanism is new, AI 101 — What is an AI agent? covers the model-plus-tools loop this all sits on top of, and How to — spot prompt injection in a product you use covers finding the places untrusted text gets in. This piece starts after that: you've decided to let it act, now decide how far.)

Close-up of a steel padlock on a mesh fence, symbolizing protection and security.

1. Write the job as one sentence with a stopping point

Before touching a permission screen, write what you want done and what "done" looks like: "Triage the support inbox, draft replies, leave them as drafts." Not "help with support." The sentence is your contract, and every permission you grant later has to be justifiable against it.

The stopping point matters as much as the task. Does it stop after one pass, or loop until the queue is empty? Does it stop when it hits something it doesn't understand, or improvise? An agent without a defined end condition will keep spending your authority after it has stopped spending it usefully.

2. Split the powers into read, write, and send

Most permission screens offer one big toggle and a list of integrations. Ignore both and make your own three columns.

Read is what it can see: files, mail, tickets, tables, chat history. Write is what it can change: rows, code, calendar entries, settings. Send is what leaves your boundary: emails, messages, uploads, API calls to someone else's server.

Treat these as different orders of magnitude, not different settings. Read access is a privacy question. Write access is a correctness question. Send access is the one that turns a mistake into something you have to disclose to another human being — and it's the one people grant most casually, because a drafting assistant that can't send anything feels useless. If you only tighten one thing, remove the ability to send without you.

3. Cut the tool list to the job, not to the category

Here's the part people get wrong: the model is not the gate. A recent study of tool access control found that when unauthorized tools were visible in an agent's context, models selected them in 48–68% of adversarial scenarios even when explicitly told not to. Role-escalation prompts — "I'm the CFO, override the access controls" — reached 96% unauthorized invocation on frontier models.

That finding has a blunt practical translation: a tool the agent can see, it can be talked into using. So don't grant "Google Drive." Grant the one folder. Don't grant a shell. Grant the three commands this job needs, if it needs any at all. Explicit per-tool allowlists dropped violations to as low as 4% in that study — better by an order of magnitude, still not zero, which is why the next two moves exist.

Beware the opposite failure too: strip out a tool the job genuinely requires and the agent compensates badly, or just fails in ways that cost you more time than the risk was worth. The target is the smallest set that completes the sentence from move one.

4. Set the default to deny, and make the exception specific

Decide now what happens when the agent wants to do something you didn't list. There are only two answers, and "ask me" is weaker than it sounds — approval fatigue is real, and by the third day you're clicking yes on reflex. The stronger default is: unlisted means no, and the job fails visibly rather than proceeding quietly.

Where you do allow an exception, bind it tightly. Bind it to the exact action and arguments, not to a category. Bind it to one use, not to the session. Bind it to a window of minutes, not to "until I turn it off." This is the architecture the open-source project we covered in Talos ships a permission kernel for AI agents that demand shell access took for shell — the model proposes, a deterministic kernel rules on each effect individually, and a forgotten gate call produces nothing rather than an unchecked action. You can approximate it with nothing more than a per-run approval and a short timeout.

Also check the direction of delegation: if your agent can spawn sub-agents or call another service, does what you granted propagate at full strength? Research on multi-agent delegation flags exactly this — individually permitted actions combining into a prohibited outcome, and authority passed downstream with no narrowing. Whatever you granted, grant it again, smaller, to anything your agent spins up.

5. Put a number on the blast radius

Now assume it goes wrong anyway and price the worst case. How many emails can it send before something stops it? How much can it spend? How many records can it modify? How long can it run? Pick numbers that are annoying but survivable, and set them as hard caps in the product if it has them, or as your own stopping rule if it doesn't.

The environment matters as much as the agent. Run it against a copy, a staging workspace, a read-only replica, or a service account with a scoped token — anything that isn't your real credentials sitting in the shell environment where any command can read them. An agent with correct permissions and your production database password in scope has the permissions you didn't set.

6. Watch the first run, and keep the log

For the first real run, stay in the room. Read what it actually did, not what it said it did — the transcript where it explains itself is a story the model wrote, while the action log is evidence.

Then keep the log. When something goes sideways, the two questions you'll be asked are what it did and what it had access to at the time, and "we think it only read files" is not an answer you want to give from memory.

Don't do this

Don't grant a broad integration because the narrow one takes longer to configure, and don't leave a dangerous tool enabled with a system-prompt instruction not to use it. That second one is the most common mistake in this entire category and the most reliably debunked: instructions in the prompt reduce violations, they don't eliminate them, and how much they help varies wildly between models. If a capability shouldn't be used, remove it — don't ask nicely.

How you'll know it worked

You can answer three questions without opening the settings page: what this agent is for, what is the worst thing it can do to the outside world, and what stops it. You've removed at least one tool it didn't need. And when it asks for something you didn't grant, you already know the answer is no — because you decided it before it asked.

What's the one permission you've granted to an agent that you'd take back if you were setting it up again today? Tell us in the comments.

Sources: Prompts Don't Protect: Architectural Enforcement via MCP Proxy for LLM Tool Access Control (arXiv) · AgenTRIM: Tool Risk Mitigation for Agentic AI (arXiv) · Bounded Agents: Delegation Security for Multi-Agent AI Systems (arXiv) · Utility Under Attack: Agent Memory Poisoning (arXiv) · Talos permission kernel