WHAT YOU GET BACK
A verdict you can act on, and a record you can query.
Every governed call returns a decision with the reason and the rule that produced it, and leaves an audit row behind. The same record is reachable from more than one direction, because the person debugging an agent and the person answering an audit request are rarely the same person and never want the same interface.
THE VERDICT Decision, reason, rule
The response carries decision — allow, deny or pause — with reason and rule_id populated on a deny, and approval_url on a pause. The adapters additionally surface shaped_args and args_constrained where the seam can carry a rewritten payload.
LINEAGE Session, agent, namespace
Every audit row carries the session_id. Pass a stable one per conversation and the full tool sequence for a run can be replayed in order — what was attempted, what was decided, and what the agent did next.
GRAPHQL Query the decision record
A GraphQL endpoint with a published schema and a playground. Queries include agents, policies, events (filterable by agent, decision and time range), approvals, alerts and automationLogs.
WEBHOOKS Pushed, signed, replayable
Events include policy.decision, approval.requested, approval.resolved, killswitch.activated and agent.registered. Deliveries carry X-Governor-Event, X-Governor-Delivery, an idempotency key and an HMAC-SHA256 X-Governor-Signature-256, with dead-letter handling and replay.
OPENAPI A spec, and SDKs from it
The REST surface is published as OpenAPI with a Swagger UI, and client SDKs are generated from it for Python, TypeScript, Go, Java, C# and Ruby.
CLI The same operations, scriptable
governor-cli covers agents, policies, guardrails, kill switches, approvals and governance lifecycle — including compliance audit-verify, which verifies the integrity of the audit log rather than asking you to trust it.
Honesty note — outcomes are seam-dependent Allow, deny and approve hold everywhere an adapter or the SDK is in the path. Everything richer depends on what the seam can express. Redaction requires a transport that permits body mutation, which is why ext_proc and the MCP proxy can rewrite a payload and forward-auth cannot. End-to-end shaped arguments returned to an inbound self-execute caller are materialized for the AWS Bedrock seam today; generalizing that gate is tracked work, and until it lands the other adapters enforce allow, deny and pause end-to-end while redaction bodies follow. Read a claim about enforcement as a claim about a specific seam, and check which one.