Everything above is probabilistic. The action layer is not, and that asymmetry should decide where the effort goes. A content filter reduces how often the system says something it should not. A permission boundary determines what the system can do when every content filter has already been defeated — which is the case you are actually designing for.
Least privilege on tools. Read-only by default. A separate, narrower credential per tool rather than one service account with broad rights. Scopes that match the task and not the convenience of whoever wired it up. An agent that can only read cannot be talked into writing, no matter what appears in a retrieved document.
Act as the user, not as the service. Authorisation should be evaluated against the permissions of the person whose request triggered the action, so an agent working on behalf of a junior employee cannot reach what that employee cannot reach. This is the single control that most reliably contains an injection, and it is architectural work rather than model work.
Confirmation for consequential actions. Not for everything, which trains people to click through; for the small set that is irreversible or externally visible. Sending an email, moving money, deleting a record, publishing anything. The confirmation must show the actual arguments — a dialogue that says “approve this action?” without showing the payload is theatre.
Caps, budgets and blast radius. A maximum number of tool calls per conversation, a spend ceiling, a limit on how many records a single run may touch, a rate limit on outbound messages. These bound the worst case arithmetically, which is a different kind of assurance from a classifier's accuracy figure, and they are what makes an incident recoverable rather than large.
Reversibility and a real audit trail. Prefer designs where an action can be undone: a draft rather than a send, a proposed change rather than an applied one, a soft delete. And log the arguments, the identity, the retrieved context and the decision path — not only the outcome. Reconstructing why a system did something is the question every post-incident review asks, and a log of outputs alone cannot answer it.