Decide what every agent may do on every call.
Rules permit or forbid, guards inspect content, quotas cap use and spend, and escalations bring in a reviewer, all before the call runs.
Rules
Policy evaluated at the call boundary. A rule permits or forbids a call before it runs, on the agent, the caller, the tool and its arguments. Written at org, tenant, workspace or agent scope. Forbid wins, and the default is closed. Simulate before you ship.
support.cedar
support-triageread_ticketAllow
1
permit (2 principal == Agent::"support-triage",3 action == Action::"call",4 resource == Tool::"zendesk/read_ticket"5);6// anything else: deniedPermit a specific action
Allow the registered agent to call the named tool.
billing-botfaq-agentops-agentzendesk/delete_ticketevery agentForbid
Set a firm boundary
Forbid a sensitive action or constrain its arguments.
Simulate rules v15
Requests1,204Changed3
update_ticket · urgentAllowDeny
issue_refund · $900AllowEscalate
export_customersAllowDeny
Test before deployment
Compare representative decisions against a proposed rule set.
dome — bash
permit ( principal == Dome::Agent::"support-triage", action == Dome::Action::"mcp:call", resource == Dome::MCPTool::"zendesk/update_ticket") when { principal has act_as && resource.arguments.requester == principal.act_as.email};Guards
Inspection and filtering of content in flight. Classify, redact or constrain a request or response before it passes, so a permitted call can't return data the caller shouldn't have. Versioned with rollback, assigned per connection and direction.
Ticket 4411
My parcel arrived damaged, so please refund order 4411 to my card. Reach me at maya.patel@acme.ioemail or on (415) 555-0132phone after 5pm.
Redact a value
Replace a matched value before content continues.
get_customer · response
1
{2 "id": "cus_4411",3 "name": "Maya Patel",4 "plan": "business",5 "ssn": "123-45-6789",Omit6 "seats": 40,7 "region": "us-east"8}Remove a field
Omit a field the agent should not receive.
status"solved"status"urgnet"status-enumzendesk
Request blockedstatus must be open, pending or solved
Reject invalid content
Stop a tool request or response that fails an assigned Validator.
dome — bash
dome guards filters create pii-redact \ --config-from pii.jsondome tool guards filters set zendesk \ --direction response --filters pii-redactQuotas
Spend and usage ceilings bound to an identity. Bound to an agent, workspace or tenant, not to an API key, so attribution comes free. A denial at the limit is recorded like any other decision.
New quotaSaved
Subjectsupport-triageLimit$25.00DayWeekMonth
Today$18.40 of $25.00
When it runs outrefuse new calls
Give an agent a budget
Attach a limit to the agent responsible for consumption.
$1,240of $2,000 · Customer supportsupport-triagebilling-botfaq-agent
Constrain shared usage
Set a quota on a workspace or another supported shared subject.
support-triage · calls
$25.00 / $25.00
model call · claude-sonnetRefused
Quotadaily cost · $25Resetsin 6h 12mAgent got429 · quota exhausted
model call · claude-sonnet$0.96Allowed
tool call · zendesk/read_ticketAllowed
model call · claude-sonnet$0.52Allowed
Make exhaustion visible
Inspect the refusal when an applicable quota is exhausted.
dome — bash
dome model quota set \ --subject agent \ --agent support-triage \ --limit 2000000 \ --window 24hEscalations
Rule decisions routed to a person or an AI judge. When a rule calls for review, route the decision to a human approver or an AI judge. Make escalation an explicit outcome alongside permit and deny.
support-agent
netsuite/issue_refund$250.00 · order 4411
Allowed · approved
JOj.ortiz
support-agent wants to refund $250.00 on order 4411.
Approved by j.ortiz · 0:42
Ask a person
Route a decision to a human when the action needs approval.
Escalation · netsuite/issue_refundApprove
Request
Agentsupport-agent
Amount$250.00 · order 4411
CallAllowed
Judge · refund policy
Within the refund policy
Damage photo on the ticket
Under $500 for this agent
Ask an AI judge
Route a decision for AI review when the configured rule calls for it.