Solutions · AI agent governance
Decide what AI agents may call, before they call it.
AIControls checks each tool call, MCP request and model call an agent makes against your policy: who it's acting for, what it may touch and how much budget is left. Then it allows the call, blocks it or asks a person.
Govern every agent, from pipeline to runtime.
- 01Pipeline
- 02Admission
- 03Sandbox
- 04Gateway
- 05Runtime
Switching high-cost model sessions to a lighter model could save ~$1,850/wk
apiVersion: policies.kyverno.io/v1
kind: ValidatingPolicy
metadata:
name: block-destructive-ops-production
namespace: nirmata
annotations:
proxy.nirmata.io/enforcement-mode: deny
proxy.nirmata.io/category: Destructive Ops
proxy.nirmata.io/description: "Blocks irreversible destructive operations (delete, drop, destroy) in production namespaces."
proxy.nirmata.io/frameworks: "owasp:LLM08,mitre:AML.T0048,nist:MP-2.3,eu-ai-act:Art.9"
spec:
evaluation:
mode: JSON
matchConditions:
- name: is-destructive-tool
expression: >
object.tool.name in [
"kubectl_delete", "kubectl delete",
"helm_uninstall", "helm uninstall",
"terraform_destroy", "terraform destroy",
"delete_resource", "drop_table", "truncate_table"
]
validations:
- expression: >
object.agent.namespace != "production" &&
object.agent.namespace != "prod" &&
!object.agent.namespace.startsWith("prod-")
# The action wording follows object.policy.enforcementMode, so the
# message never claims an action the gateway does not take in this mode.
messageExpression: >
object.policy.enforcementMode == "deny"
? "Destructive operations are blocked in production namespaces."
: (object.policy.enforcementMode in ["warn-approve", "warn-ask"]
? "Destructive operations targeting production namespaces require human approval."
: "Destructive operation in a production namespace.")
- expression: >
!object.tool.arguments.exists(k, k == "namespace") ||
(!string(object.tool.arguments.namespace).startsWith("prod") &&
string(object.tool.arguments.namespace) != "production")
messageExpression: >
object.policy.enforcementMode in ["warn-approve", "warn-ask"]
? "Destructive operations targeting production namespaces require human approval."
: (object.policy.enforcementMode == "deny"
? "Destructive operations targeting production namespaces are blocked."
: "Destructive operation targeting a production namespace.")Agents act on your behalf. Most governance finds out afterwards.
- A coding agent picks up a new MCP server from a README. Nobody approved it.
- A support agent retries a failing call in a loop. The invoice arrives at month end.
- An ops agent holds a token that can write to production. It was meant for staging.
Control actions
Write policy for which tools, MCP servers and clusters each agent can reach, and on whose behalf. Each call is allowed, denied or held for a person to approve.
Control spend
Allow-list models and set token budgets per team or per agent. A call that would go over budget is denied before it reaches the model, and every call is attributed to a team.
Keep the record
Each decision is logged with the policy that made it, next to your Kubernetes policy results. When someone asks why an agent was blocked, the answer is already written down.
Same policy engine. Additional control points.
AIControls extends Enterprise Kyverno's Admission control with three additional control points for AI workloads and agents — Pipeline, Gateway, and Runtime — so an agent is governed before it ships, on every model and tool call it makes, and while it runs.
1. Pipeline
Registry · CI/CD · Admission
Verify what ships
- AI inventory
- Trusted components
- Signed & attested
3. Runtime
eBPF · Clusters · Egress
Contain what runs
- Shadow AI discovery
- Secure config
- Runtime sandboxing
Powered by Kyverno — the CNCF policy engine your platform team already runs, now governing AI.
See what your agents are calling before you write a single policy.
A short working session on your own clusters. No agent changes, no code changes, and nothing enforced until you decide it should be.