Mezmo Governance for AURA agents
The safe calls run.The risky ones ask.
Before an agent's tool call runs, Mezmo Governance checks it against policy. Routine calls go through on their own. Risky ones land in Slack, where the right person approves or denies them in one click. Forbidden ones never run.
Works with AURA, Mezmo's open-source harness for production agents.
get_podsnamespace=payments-prodAllowedfetch_logsservice=payments-apiAllowedkubectl_applyconfigmap/payments-api Needs approvalApprovedDeniedRule “Production writes” is holding it for an approverApproved by Dana Okafor in Slack after 2m 11sDenied by Dana Okafor in Slack. The call never runs.
-
Agent paused until someone decides.
get_podsnamespace=payments-prodAllowed Agent stopped. The denial is returned to it as the reason.
Posted to #agent-approvals
@oncall-approvers
Approval neededRequest approvedRequest denied
Tools: kubectl_apply
Reason: Writes to cluster:prod require an on-call approver.
ApprovedDenied by @Dana Okafor Today at 2:05 PM
Approve this request?
The agent will be allowed to make the calls it asked to make.
Try it: approve or deny the request.
- AllowRoutine calls don't waitCalls that match an allow rule run right away. Nobody gets paged.
- ApprovalRisky calls reach the right personHeld calls post to the policy's Slack channels for its approvers to decide.
- DenyForbidden calls never runA deny rule refuses the call before it executes, and the agent is told why.
- RecordEvery decision is keptWhat decided it, under which rule and policy revision, who approved, and why.
Governance Overview
See where your agents wait on people.
The Overview shows how agents use tools, where policy steps in, and how long agents wait on a decision. Use it to find the approvals worth turning into allow rules, and the agents still running without a policy.
Governance
Overview Workflows Policies Test Cases AgentsGovernance Overview
How agents are using tools, where policy steps in, and where people are the bottleneck.
Evaluated requests
18,412
tool requests in the past 24 hours
Pending approvalsReview →
3
Oldest waiting 7m · workflows need a decision
Mean time to decide
2m 41s
from escalation to a human decision
Automation rate
96%by policy rules
Enforcement outcomes
Tool requests by policy decision · past 24 hours · click a series to isolate it
Tool activity
Top 5 MCP tools · past 24 hours
get_pods6,204fetch_logs4,880log_search3,112list_pods2,019kubectl.get1,236
delete_pod212kubectl.delete141drop_table61iam.attach_policy40cms_publish22
Agent coverage
Active agents with a policy assigned
- Governed7
- Deactivated2
- Ungoverned2
Active with no policy
data-sync-botAssigncost-optimizerAssign
Human approvals
Escalated requests by reviewer decision
Waiting longest
kubectl_applysre-copilot7mkubectl.rollout_restartdeploy-verify4mcms_publishcontent-bot1m
All 3 pending →
Automation rate
The share of tool calls policy decided with no one involved. Raise it by writing allow rules for the approvals your team always grants.
Mean time to decide
How long an agent waits between escalation and a human decision. If it climbs, requests are going to the wrong channel or the wrong people.
Agent coverage
An active agent with no policy is refused every governed call. The Overview names those agents so you can assign one.
Approval requests
Decide with the agent's reasoning in front of you.
Each held call opens on one page with what the agent wants to do, why, and the rule that stopped it.
Governance
Overview Workflows Policies Test Cases Agentswf_93d0b4·Oct 15, 2026 14:03
Restore the payments-api connection pool to 50 to fix the p99 spike.
1 call
The reason you enter is recorded on the decision and returned to the agent.
Restore the payments-api connection pool to 50 to fix the p99 spike.
PROD_WRITE_GATEDWrites to cluster:prod require an on-call approver.
Request debug info
- Agent
- sre-copilot
- Agent Instance
- aura-instance-ab12cd34
- Policy
- Production Change Control
- Scope
- cluster:prod-us-east
- Origin
- mcp-gateway
- Request Id
- req_8fd12a
- Decision Id
- 4c1e9a70-2b6d-4f3e-9d52-07a8e1c3b6f4
Timeline
- Workflow recorded1 call · 14:03:02
- Policy evaluatedEscalated to the approval queue.
- Awaiting approverPlatform Approvers
- ApprovedReason returned to the agent.
- DeniedReason returned to the agent.
Agent & Policy
This screen works. Edit the reason, then approve or deny the request.
Intent with every call
The agent says what each call is for, so you aren't guessing from arguments.
The rule that held it
See the rule's code and the exact message the agent was given.
Your reason goes back
The agent gets your reason word for word, so it can adjust instead of retrying blind.
Slack approvals
Approve from Slack. The same checks still apply.
Each policy can post approval requests to up to 10 Slack channels and mention @here, @channel, a person, or a user group. Approve and Deny work right inside the message.
- The approver role still decides
- A click only counts when the Slack account is linked to a Mezmo user who holds the policy's approver role. Anyone else gets a private note, and nothing is decided.
- Every button asks first
- Once an agent acts there's no undo, so Approve and Deny each ask for confirmation.
- One message, kept current
- When someone decides, the message updates for the whole channel with who decided and when.
- No secrets in the channel
- Messages name the agent, the policy, and the tools. Tool arguments stay in Mezmo.
Request approved
Tools: kubectl.rollout_restart
Reason: Restarting a rollout needs a human approver before it can run.
Approved by @Jack Burton Today at 11:42 AM
Only visible to you
Link your Slack account to your Mezmo user to approve and deny requests from Slack. Nothing was approved or denied.
Safety defaults
When something's wrong, the answer is no.
Governance sits in front of production, so every edge case resolves toward refusing the call and telling the agent why.
Unknown agents get no decision
An unregistered or deactivated agent, or one with no policy, is refused before any rule runs.
No default fallthrough
Calls no rule covers go wherever the policy says. Someone chose that when the policy was created.
Errors deny
If a rule can't be evaluated, the call is denied.
Only people approve
Agents and service accounts can't approve or deny a request, including their own.
Role checked at decision time
The approver must hold the policy's approver role directly. If that check can't complete, nothing is decided.
One decision per request
An approval covers one request under one policy revision. It can't be reused or decided twice.
Decision record
Months later, you can still explain the decision.
Every decision keeps a frozen copy of what decided it: the agent, the policy revision, each rule and how it evaluated, who approved, and the reason they gave. Edit or delete the policy later and the record still reads the same.
- The rule that decided is kept apart from the rules that merely matched.
- Refused approval attempts are recorded too.
- Agent
- deploy-verify · aura-instance-7e21f0c9
- Policy
- prod, revision 9
- Call
- kubectl.rollout_restart · deployment=payments-api
- Rules evaluated
- 6 rules, every result kept
- Decided by rule
- Restart needs approval · ROLLOUT_GATED
- Outcome
- Approved
- Approver
- Jack Burton · Platform Approvers
- Reason
- “Canary is healthy, roll the rest.”
- Escalated → decided
- 11:40:07 → 11:42:31 (2m 24s)
Architecture
Agents run in your environment. Mezmo makes the call.
AURA runs the agent, its tools, and its models where you deploy it. Before a governed call runs, AURA asks Mezmo for a decision and enforces the answer locally. Mezmo keeps the policy, the approval queue, and the record.
Your environment
Mezmo
Your team
Policies
Turn repeat approvals into rules.
When the Overview shows your team granting the same call every time, write the allow rule and stop paging people for it.
Production Change Control
Guards production writes for the platform agents.
Compiled Rules
- AllowRead-only cluster callsExpand Rule
When the tool is one of get_pods, fetch_logs, kubectl.get → allow the call.
- ApprovalProduction writesExpand Rule
When the tool namespace is k8s_mcp and the tool is one of kubectl_apply, kubectl.rollout_restart → send it to an approver.
- ApprovalLarge scale-upsExpand Rule
When the tool is kubectl.scale and argument "replicas" is greater than 10 → send it to an approver.
- DenyBlock pod deletesExpand Rule
When the tool is delete_pod → refuse the call.
NO_MATCHING_RULE: “No rule in this policy covers this request.”What happens to a call no rule permits?
There is no default here on purpose. Denying a call, routing it to a person, or waving it through is too consequential to inherit silently.
Test Suite
12 casesDraft changes this: “Restart in staging” now needs an approver.
Revision History
- Revision 14Edited · Oct 14Tests passed
- Revision 13Forked · Oct 2Tests passed
- Revision 12Reverted · Sep 28Untested
Rules read as sentences
Each rule compiles to Cedar and is checked before the policy can be saved.
Tested before it ships
Test cases run against the draft and the live rules. Save any real request as a test case.
Easy to undo
Drafts never touch the live policy. Every accepted change is a revision you can fork or revert.
Closed beta
Give agents production access. Keep the final say.
Mezmo Governance is in closed beta for teams running AURA. Join with your work email and bring a change your team approves by hand today. We'll show you the policy that handles most of it and the Slack message for the rest.
Prefer to talk it through first? Talk to an engineer
