← All Writing

Graduated Trust for Production AI Agents: Parameterize Permissions by Phase, Not Environment

Stop promoting AI agents across dev, staging and prod. Bind their permissions to the evidence they have earned, and leave the hostname out of it.

Most teams ship AI agents the way they ship microservices: dev, then staging, then prod. Same code, three environments, widening blast radius as you go. For an autonomous agent that model is wrong.

A microservice does the same thing in prod that it did in staging. An agent doesn’t. Its behavior is non-deterministic, its blast radius is wider than any service you’ve run, and promoting it across environments only tells you that the plumbing works. It says nothing about whether the agent can be trusted to act. The environment never earned the agent its permissions. Evidence did, so bind the permissions to the evidence.

The unit of promotion is the trust phase#

Here’s the model I’d run instead. The agent moves through four trust phases, and it only graduates when it produces the evidence that the next level of autonomy is safe.

PhaseNamePermissionsQuestion it answers
1Shadow ModeRead-only; output goes nowhereDoes it produce useful results at all?
2Read-Only AssistRecommendations shown to a human; human actsWill operators trust its reasoning?
3Limited RemediationScoped writes, each with explicit operator approvalCan it take safe, bounded actions?
4AutonomousFull resolution, auto-escalating below a confidence thresholdCan we hand it the night shift?

The code is identical in every phase. What changes is the permission set: the same agent binary runs in Phase 1 and in Phase 4, and only what it is allowed to touch differs.

That single design decision is the whole point. If the agent’s capabilities are a property of its deployment environment, you can’t run shadow mode against real production traffic without granting production access. If capabilities are a property of its trust phase, you can point a read-only agent at live prod on day one, learn everything, and still have it unable to break anything.

Promotion gates run on evidence#

A phase transition is a bar the agent has to clear rather than a date on a rollout plan. Here are indicative gates, and the numbers want calibrating to your own risk tolerance:

TransitionMin samplesSuccess metricSafety metricTrust metric
1 → 2100 shadow incidents, 3+ domains>95% diagnostic accuracyZero unsafe action attemptsn/a
2 → 3150 assisted incidents>90% operator agreementNo out-of-scope recommendations>80% accepted with minimal edits
3 → 4100 approved remediations>99% completion<1% rollback rate>95% escalation correctness; dual sign-off

The shape matters more than the exact thresholds: real sample counts, a success metric, a safety metric, and a human-trust metric. An agent that’s accurate but that operators keep overriding has not earned promotion. Accuracy is necessary; trust is the gate.

The part everyone forgets: demotion#

Every trust framework I’ve seen without rollback rules has failed the same way. It promotes, something drifts, and there is no defined path back, so the team either freezes the agent entirely or argues about it in a Slack thread while it keeps acting.

Demotion criteria deserve as much design as promotion gates. Concretely: diagnostic accuracy below 92% over a 30-day window drops the agent one phase, a rollback rate above 2% drops it one phase, and acting outside its permitted scope is an immediate demotion with an investigation before any re-promotion.

A trust model that can only move in one direction is a launch plan with extra steps.

Why this is an infrastructure decision#

The reason this matters to platform engineers specifically is that phases map cleanly onto controls you already operate.

  • Kubernetes RBAC: the role bound to the agent’s service account is parameterized per phase. Phase 1 gets get and list. Phase 3 gets a narrow set of create and update verbs on named resources. Phase 4 widens within a still-bounded scope.
  • Secrets, in Vault or Secrets Manager or Key Vault: credential scope and TTL tighten or loosen by phase, never by environment. A shadow agent gets read-only, short-lived tokens regardless of which cluster it’s in.
  • Network policy: egress is allowed per phase, so a low-trust agent physically cannot reach systems it hasn’t earned.
  • GitOps: every one of those changes is a version-controlled, peer-reviewed PR. For an agent, a permission change is a blast-radius change, and it should never happen in a console.

The agent’s codebase doesn’t fork per phase. Your policy does. Stop treating “what can this thing do” as a deploy-time environment concern and start treating it as a runtime trust concern, expressed in the controls you already version and review.

The takeaway#

If you’re about to put an autonomous agent into production, don’t ask “is it in staging or prod?” Ask “what has it earned the right to do?”

Bind permissions to evidence. Make the same binary graduate from shadow to autonomous as the numbers come in, and design the way back down before you ever need it. The environment was never the safety mechanism; the phases are.

I’m a platform/SRE engineer writing about making agentic AI reliable in production. If you’re rolling agents into a regulated or high-stakes environment and want a second pair of eyes on the trust model, get in touch.