A tool call is never neutral. Each one either changes something in a system or reveals something to the agent, and both are consequences. So every tool call is a decision, and it deserves the same treatment as any other action: checked against the agent's bounds at the moment it runs, given a verdict, and filed.
Why do teams treat tool calls as plumbing?
Tool calls look like implementation detail. In most agent frameworks, a tool is a function the model can choose to call, with a name, some arguments and a return value. Engineers wire them up the way they wire up any API, and review happens at the level of "does the integration work".
That framing misses the point at which the agent stops talking and starts acting. A model can write any sentence it likes and nothing changes in the world. The moment it calls update_address or issue_refund, something does. The same is true of reads: a call to get_customer_record puts personal data into the agent's context, where it can be repeated, summarised or stored.
If tool calls are plumbing, nobody owns them. If they are decisions, each one needs a rule about when it is allowed and a record of what happened.
What kinds of decision does a tool call make?
It helps to sort tool calls by what they do, because each kind carries a different risk and needs a different check.
| Kind of call | What it decides | Example | The question to ask before it runs |
|---|---|---|---|
| Read | What the agent gets to know | Fetching a customer's transaction history | Does this role need this data for this task? |
| Draft | What a person will be asked to approve | Preparing a payment for release | Is the draft within the agent's scope, and who approves it? |
| Write | What changes in a system of record | Updating a contact address | Is the change within the customer's limits and reversible? |
| Hand-off | Who takes over the work | Routing a call to a specialist team | Is this the right destination, and does the customer know? |
| Spawn | Which other agent acts next | An orchestrator assigning a sub-task | Does the sub-agent hold less authority than the caller? |
Reads are the kind most often waved through. They should not be. A read decides what information leaves its system and enters a model context, which is a data decision with its own retention questions. Our piece on why what an agent remembers is a data decision follows that thread further.
Why is "the model chose it" not a reason?
When something goes wrong, the first question is why the action happened. "The model decided to call the refund tool" explains the mechanism but not the authority. A person reviewing the incident wants to know which rule allowed it, who set that rule, and what evidence the agent relied on.
That answer has to exist before the call, not be reconstructed afterwards. A tool call checked at the moment of action against role scope, certificate, sources, the customer's limits and the platform guardrails produces a verdict that names the deciding bound. If the refund was allowed because it sat under the customer's limit of 50 and the agent held a current certificate for refunds, the record says so. If it was held because the amount was 500, the record says that too.
Without that check, the only authority behind the action is the model's own judgement in the moment. No regulated business would accept that from a new member of staff, and it should not accept it from an agent.
What about tool calls that seem harmless?
Some calls look trivial: checking a branch's opening hours, looking up an exchange rate, searching a knowledge base. These rarely need a person. They still need a bound, because "harmless" is a property of the context, not the tool.
Take a transfer. Moving a phone call to another queue sounds routine, and whether an agent should be allowed to transfer a call usually has a simple answer. But transferring a customer who has just disclosed a bereavement to a sales queue is a poor outcome, even though the tool did exactly what it was told. The bound is not on the transfer itself. It is on the transfer given what the agent knows.
So even low-risk calls should run through the same check. Most will be allowed in milliseconds. The point is that each one passes through a gate that can say no, and leaves a line in the record when it says yes.
How should a new tool connection be approved?
Adding a tool to an agent is granting it a new kind of decision. That deserves a request with a stated purpose, an owner, a depth and the data it exposes. A tool connection request template gives reviewers a consistent set of questions so connections are not added on the strength of a pull request alone.
The request should also name who responds when the tool misbehaves at three in the morning. Tool failures are operational incidents, and somebody has to be on call for AI agents in the same way they are for any production system. If no one can be named, the connection is not ready.
Where Pryme fits
In Pryme, every tool call passes through the minimum chain at the moment of action. The verdict is one of four: allowed, held for a named person, refused as outside the agent's bounds, or withheld at the platform floor. Each verdict names the bound that decided it and is filed in an append-only record, so any call can be traced back to the rule that permitted it.
What should you change?
Stop reviewing tool integrations only for whether they work. Review each one as a grant of authority: what it reveals, what it changes, and at what depth. Put every call, reads included, through the same check, and make the verdict and its reason part of the record. For the wider architecture that makes this enforceable, see the governed agentic operating system, explained.
Questions people ask
Does checking every tool call slow the agent down?
The check is a rules evaluation, not a model call, so it adds very little time to each action. Calls that need a person are slower by design, because a person is the point of the hold.
Should read-only tools be logged as well?
Yes. A read decides what data the agent saw, and that is often the first thing an investigation or a data subject request asks about. A record that only shows writes cannot answer it.
Can an agent call a tool that is not in its brief?
It should not be able to. If a tool is not listed among the agent's connections, the platform should refuse the call and file the refusal, so the attempt itself is visible.