Deny by default
also called default deny · deny-by-default · implicit deny
The mechanism is short enough to state completely. Collect every permission on every role the caller holds. If any of them matches the resource and the action and its effect is deny, refuse immediately and record which role and which pattern decided it. Otherwise, if any matching permission allows, permit and record that one. Otherwise refuse, with a reason that says so in those words. Three properties fall out of that ordering, and each is worth more than it looks.
The first is that precedence does not depend on ordering. Because the deny path returns before any allow is settled on, a narrow guardrail wins whether it is written above the broad grant, below it, or inside the same role. That is what makes a subtractive guardrail a pattern an operator can rely on rather than a race: you can grant a whole tool namespace to a team and remove one action from one agent, without rewriting the broad grant or duplicating it into a narrower one. Under allow-wins semantics the same configuration is a coin toss decided by role iteration order, which is exactly the kind of thing that changes silently in a refactor.
The second is that absence is an answer. There is no implicit grant anywhere, so the empty cases are all safe: an agent with no roles can do nothing, a role someone created and never populated grants nothing, and a resource nobody thought about is refused. This is the property that keeps working when everything cleverer has failed, which is why deny by default is worth having before any policy engine, any anomaly detection and any classifier.
The third is that the failure mode is inverted deliberately, and that has a cost somebody has to pay. Deny by default produces breakage, and the breakage lands on whoever shipped the agent. That is the point — under-privilege arrives as a ticket an engineer raises, while over-privilege arrives as an incident eighteen months later that nobody files at all — but it only holds if refusals are legible. A refusal has to name the role and the pattern that produced it. When it does not, the engineer debugging a failing agent widens the broadest grant they can find until the error stops, and the model has been defeated by its own error messages.
It helps to be precise about what deny by default is not. It is not least privilege: a system can deny by default and still hand out a wildcard permission that allows everything, and in most estates that grant exists somewhere. It is not zero trust, which is a network and authentication posture rather than an authorisation default. It is not argument-aware — a rule such as refunds above a threshold need a human is a policy, because a permission model knows the tool and not the amount. And it says nothing about time: a grant stands until someone edits the role, so deny by default without periodic review is a snapshot of intentions from whenever the roles were last written.
The recurring ways it is defeated are worth listing because they are all local decisions that look reasonable. A wildcard grant issued to unblock a launch and never narrowed. Roles scoped to a team rather than to an agent, so every agent on the team holds the union of what the team needs. A deny list used as though it were an allowlist, which only covers the resources someone had already thought of. And a filtered catalogue mistaken for enforcement: hiding a tool from the list an agent is shown is a usability feature, and the authorisation decision still has to be taken when the call arrives.
One role, two answers
A role called finance-support carries two permissions: allow invoke on every tool on the payments server, and deny invoke on the refund tool specifically. A call to the payment status tool is allowed, and the record names the role and the wildcard pattern that permitted it. A call to the refund tool is refused, and the record names the role and the exact pattern that denied it — and it is refused whichever order the two permissions happen to be listed in, and whether they sit in one role or two. A third call, to a tool on a server nobody has granted at all, is refused with a reason ending in “deny by default”: no permission mentions it, and no permission mentioning it is the answer.
What deny by default is routinely confused with
- Least privilege
- Least privilege is a goal about how much authority a principal ends up with. Deny by default is a mechanism about what happens when nobody has said anything. You can satisfy the mechanism and miss the goal entirely by granting a wildcard, which is why the two claims should never be made as one.
- Allowlist and blocklist
- Deny by default is the allowlist stance made structural: everything absent is refused. A blocklist refuses only what somebody has already named, so its coverage is bounded by imagination. A system with both — an allowlist plus explicit denies that override it — uses the deny list for subtraction inside a grant, not as the primary control.
- Zero trust
- Zero trust is about not granting authority on the basis of network position, and it is satisfied by authenticating and authorising every request. It is silent on what the authorisation decision should be when no rule matches. Deny by default answers exactly that question, and a system can be one without the other.
Related terms
Action-level permissions
Action-level permissions authorise a specific operation on a specific named resource — one tool on one server, or one model — rather than granting access to a system as a whole. The unit is what matters: an agent granted a system inherits every operation that system exposes, including the ones next to the operation it actually needed.
Delegation chain
A delegation chain is the ordered list of agent identities a request has passed through when one AI agent asks another to act for it. The rule that makes it a security control rather than a breadcrumb trail is that effective permissions are the intersection of every link and never the union: the request proceeds only if every agent in the chain would have been permitted to perform that exact action alone, so passing work along a chain can only narrow authority.
Agent registry
An agent registry is the system of record for the AI agents an organisation runs: one record per agent carrying its identity, a named human owner, a declared purpose, its permissions, its lifecycle status and its operating limits. It becomes a control rather than a document only when it is the same record the enforcement point resolves on every call, because an inventory maintained alongside the runtime is updated by whoever remembers while the runtime is updated by whoever ships.
Agent recertification
Agent recertification is a periodic attestation by a named person that a specific AI agent’s configuration — its owner, declared purpose, permissions, limits and lifecycle status — is still appropriate, recorded against the exact configuration that was reviewed. Its value depends entirely on that binding: a review that records which roles an agent held, rather than what those roles granted, certifies nothing the moment somebody edits the role.
Where Token Observe does this
The definition above is the field's, not the product's. This is the part of the product that implements it, for a reader who wants to see one.
Agent permissions
Deny by default, explicit deny wins, and delegation intersects — so an agent cannot borrow authority it was never granted.
Off by default; only enforce refuses anything
Policy engine
One deterministic verdict on every governed request: allow, block, redact, or park it for a human.
Injection scoring is nine fixed patterns, not a model
The terms next to this one
What it means for an agent to be allowed to do something, and why the answer stops being obvious the moment one agent can ask another.
Definitions are the easy part.
The glossary is written to be useful whether or not you ever buy anything. If you have got to the point of deciding how to implement one of these in your own estate, say what your agents do and you will get a straight answer about what it would actually take.
no form · no qualification step · no sales desk · the other three ways in