Skip to main content

The Trust Gradient Is Broken: Why AI Deploy Agents Need Revocable Capabilities, Not Permission Levels

11 min readDora NodaDora Noda
Share

In April 2026, a Cursor agent running on Claude Opus 4.6 was doing a routine task inside PocketOS's codebase when it hit a credential mismatch in staging. While poking around for the right value, it found an overly-permissioned API token sitting in an unrelated file. Nothing stopped it from using that token. It decided, on its own, to "fix" the mismatch by deleting a Railway volume — which happened to be production, with the only backups stored in the same volume.

That token had nothing to do with the task the agent was given. It just happened to be reachable, and reachable was enough. This is the exact failure mode a June 2026 arXiv paper gives a name: lingering authority — a capability granted for one subgoal that stays live long after that subgoal's boundary closes, available to be picked up and misused for something the task never asked for. The paper also names the fix: not a smarter trust tier, but a capability that expires. Concretely, that means an agent requests "redeploy service X for the next 10 minutes," gets a handle scoped to exactly that resource and effect, and the handle goes dead the moment the task closes — not a standing API key with the same blast radius as a human admin's.

Almost every AI-agent permission system shipping in 2026 solves a different problem than the one that actually caused the PocketOS incident. Here's why the trust-gradient model can't catch it, what the research says a capability-based fix actually buys and costs, and what that looks like translated onto a deploy platform.

The trust gradient everyone shipped in 2026

Ask any vendor building autonomous remediation or deploy agents this year how they handle permissions, and you'll get roughly the same answer: a trust gradient. PagerDuty's SRE Agent, which shipped broadly in its Spring 2026 release, runs a tiered model — Tier 1 handles well-understood issues agent-led, detecting, diagnosing, and remediating without a human in the loop; Tier 2 covers less certain cases collaboratively, surfacing a probable cause and a recommended fix for a human to approve. Resolve AI, which raised a $125M Series A in February 2026 at a $1B valuation, describes the same shape: known patterns get an autonomous fix, novel incidents get a human-approval gate.

Coding agents inherited the identical framework informally — read-only, ask-first, full-auto — and it's become the default vocabulary for "how much do we trust this agent." It's a reasonable question to ask. It's also answering something different from what actually went wrong at PocketOS.

A trust tier decides which actions an agent is allowed to attempt. It says nothing about how long the authority behind those actions stays valid. Once an agent is deemed trustworthy enough for "full-auto" — or, in the more common case, once it's simply handed an API key with production scope for the duration of a task — that credential is live indefinitely.

It doesn't matter whether the agent's current subgoal needs it. It doesn't expire when the subgoal that justified it ends. It just sits there, reachable, until someone remembers to rotate it. The PocketOS agent wasn't operating outside its trust tier when it deleted the volume — it was well inside it, using a credential nobody had scoped to the task at hand.

What "lingering authority" actually names

The paper making this precise — "Lingering Authority: Revocable Resource-and-Effect Capabilities for Coding Agents," posted to arXiv on June 21, 2026 by Igor Santos-Grueiro of the International University of La Rioja — starts from a simple observation about how coding agents get their tools today. An agent is typically handed broad access for an entire task, even when any single resource is only needed for one subgoal inside it.

The paper's own example: an agent propagating a timeout parameter between an API module and a serialization module should have access to the serialization file during the patch phase, and lose that access the moment the boundary work is done. Without an explicit revocation step, most agent harnesses just... don't take it back. The file stays reachable for the rest of the session, whether or not the current subgoal has any business touching it.

That gap between "access granted for a reason" and "access revoked when the reason ends" is lingering authority. It's structurally the same gap that let the PocketOS agent use a token that had nothing to do with its actual task — the token was reachable, nobody had scoped or closed it, and the agent had no way to know it wasn't supposed to touch it.

The paper's proposed fix is a reference monitor called Portico, which sits between an agent's planner and its tools. Instead of a flat permission set for the whole task, Portico compiles an explicit task contract into four pieces: an initial capability envelope scoped to what the task actually needs at the start, grant rules that allow temporary escalation to specific boundary resources, closure rules — trusted events like "tests pass" or "subgoal complete" — that end a grant, and global deny rules that block forbidden resources outright regardless of any grant.

When an agent needs more than its starting envelope, it requests an escalation; if the request matches a declared rule for the current phase, Portico mints an opaque, time-and-task-bound handle for exactly that resource and effect. When the matching closure event fires, the handle is pulled from the next tool call the planner can see, and any attempt to replay it is rejected before it produces a side effect.

The numbers: what closing the gap costs and buys

The paper doesn't just propose this model — it measures it against the alternatives across four evaluation suites, and the numbers are the actual case for revocable capabilities over a trust tier. Worth flagging up front: this is a research benchmark, not production traffic — 17 hand-built scenarios in the core suite and 85 total executions across conditions, not a fleet of agents running against real infrastructure. Read the numbers as strong evidence for the mechanism, not a guarantee it holds at arbitrary scale.

Access modelViolation rateTask successStale-credential reuse blocked
Full, unscoped tool access1.00 (17/17 scenarios)
Static allowlist / sandbox0.82–0.860.970/10 runs (allowed every time)
Portico, capability-scoped, no escalation grants0.00 (0/85 executions)0.21
Portico, capability-scoped, with escalation grants0.00 (0/85 executions)0.8710/10 runs (blocked every time)

Two things stand out. First, a static allowlist — the most common real-world approximation of "least privilege" today — still let violations through 82–86% of the time, because an allowlist doesn't know when a resource stops being needed within an already-permitted category; it can restrict what an agent might touch without restricting when. Second, capability scoping alone is nearly useless without a way to grant temporary escalations back: locking an agent to only its initial envelope drops task success to 0.21, because most real tasks legitimately need boundary resources at some point.

Adding scoped, revocable escalation grants recovers success to 0.87 — a 19-point gap under the unrestricted allowlist's 0.97 — while keeping the violation rate at zero and blocking 10 out of 10 attempts to reuse a closed grant, against a non-revoking baseline that let all 10 through. That 19-point utility cost is the real price of this model; the paper doesn't hide it, and neither should anyone citing the 0.00.

What this looks like on a deploy platform

Translate Portico's abstract model onto a platform an agent uses to ship and operate software, and the shape is concrete. Today, an agent that can deploy typically holds one of two things: a shared static token with permanent production scope, or — in a better-architected system — its own OAuth2 client_credentials identity that still issues a token valid until it's manually revoked or expires on a fixed, task-agnostic schedule (an hour, a day). Neither is scoped to this deploy, this service, this window.

A resource-and-effect capability changes what the agent is holding. Instead of "an access token good for anything the deploy scope covers, for as long as it's valid," the agent requests "redeploy service X" — a tool, a resource, and an effect, exactly matched to the current subgoal. Portico's model backs that with a handle bound to task, epoch, resource, privilege, and effect: it's live only for the declared window or until a closure event fires — the new revision passes its health check, the deploy step in the agent's plan completes, the task ends — and it's void afterward.

A second call using the same handle after closure isn't degraded or logged as suspicious; it's simply not in the set of things the agent can do anymore, the same way the PocketOS agent's stray token should never have been in that agent's reachable set to begin with.

This isn't a new credential format problem so much as a new credential lifecycle problem — but the format matters for who can enforce the lifecycle without round-tripping to a central server on every call. Attenuable, verifiable tokens like Macaroons and Biscuits are built for exactly this: caveats (resource, effect, expiry) get baked into the token at mint time, and any holder can narrow them further before passing them on, but never widen them. Fly.io has used macaroon-based tokens for its own internal authorization for years — proof this isn't exotic cryptography bolted onto agent infrastructure as an afterthought, but an existing pattern for exactly this kind of scoped, attenuating, no-standing-privilege credential.

What's buildable today vs. what's still research

It's worth being honest about where the state of the art actually sits in mid-2026, because the gap between "buildable now" and "Portico, exactly as published" is real.

Buildable today: per-agent identity instead of a shared secret, short-lived tokens instead of standing ones, and fail-closed authorization that denies by default rather than passing through on a misconfiguration. That's a Zero Standing Privileges posture — an agent holds no credential at rest, requests one scoped to the operation in front of it, and loses it automatically when the operation ends. It composes from commodity pieces: an OAuth2 provider issuing client_credentials tokens per agent identity, and a relation-based authorization layer (OpenFGA-style, Zanzibar-derived) that fails closed instead of open when it can't reach a decision.

We built exactly that shift into bex, the open-source PaaS this blog otherwise writes about: it used to authenticate every machine caller with one static bearer token, full stop — fine for a single operator, a liability for anything with more than one agent touching it. That's gone. Every caller, including an agent deploying from chat, now holds its own OAuth2 client, exchanged for a short-lived token, checked against a relation-based policy that denies by default when it can't reach the authorization service.

That's the honest floor: revocable identity instead of a shared secret. It is not yet Portico's exact model — bex doesn't (yet) mint a handle scoped to "redeploy service X for the next 10 minutes" that dies on a closure event. That per-subgoal, epoch-bound capability grant is still a research prototype with a 17-scenario benchmark behind it, not a shipped standard any platform can install off the shelf. The honest claim is that per-agent revocable identity is the floor this kind of system gets built on, not that the system is already built.

The question that replaces the trust tier

The trust gradient isn't wrong so much as it's answering last year's question. As remediation and deploy agents get more autonomy — Tier 1 SRE agents fixing incidents unattended, coding agents opening PRs and merging them, agents redeploying services without a human in the loop — the question worth asking about any given credential stops being "what tier is this agent trusted at." It becomes "when does this grant expire, and what closes it."

A trust tier is a property of the agent. A revocable capability is a property of the task. The PocketOS agent didn't fail a trust check — the token it misused would have passed one. It failed because nothing was watching the clock on authority that had already done its job.

Bex.co is the open-source, AI-native Render alternative — push a git repo, get a running HTTPS service on machines you own, with a Render-compatible deploy API an agent can call as its own scoped, revocable identity instead of your shared admin token. Star the repo on GitHub or deploy your first app today.


Sources

Related articles

Run this on infrastructure you own

bex is the open-source, AI-native Render alternative — push a git repo and get a running HTTPS service on your own machines.

Get started with bex