How a policy is evaluated
A policy carries a single rule that allows or denies capabilities. Rules are made up of 4 parts:A deny always wins
Policies narrow access
Policies follow the member
Policies stay in their project
Capabilities
A capability is the kind of access a rule governs: running a tool, reading or writing a field, or receiving PII in responses. Denying one removes that access for the users or groups the rule covers.Create a policy
Open Policies
Pick the mode and status
- Status: Active policies are consulted from the project’s next call. Inactive policies are stored and never consulted.
- Enforcement: Monitor only records decisions without refusing anything. Enforce refuses the calls the policy denies.
Choose who it applies to
Choose what it does
Set the capability and its targets
- Use a tool
- Read a field
- Write a field
- Redact PII
- Everything covers every tool in the project.
- A connector category covers every tool on every connector in the category, including connectors added later.
- A connector covers every tool on the connectors you pick.
- An account covers the tools of specific Linked Accounts. Search accounts by name or owner.
- Specific tools lets you pick a connector, then the tools on it by name.
Pattern syntax - wildcards
Pattern syntax - wildcards
*is the only wildcard, and it matches any run of characters.- A pattern has to cover the whole name:
salarymatches only something named exactly that, so use*salary*to match it anywhere. - Matching is case-sensitive.
?,[a-z], and{a,b}are ordinary characters here, not wildcards. A pattern using one saves cleanly and then never matches anything.
Add exemptions
Review and create
-
Plain Text: the panel footer restates the rule in plain words, for example:
Everyone in this project may not use a tool matching
*delete*on Workday, except Finance (Group). - Cedar: the exact statement the engine will evaluate, in Cedar syntax. The view is read-only; change the form and the statement follows.
- JSON: the same statement in Cedar’s JSON encoding.

A deny rule on the Create policy panel, with Monitor only and Active selected and Fields / Cedar / JSON above the form.
Build a policy using chat
Policy chat is available on policy create and edit. Describe the rule you want in your own words and the form will be updated automatically, showing you the suggested changes:- Suggestions are highlighted in the form, with the previous value shown underneath.
- Each suggestion can be applied or reverted individually.
- All changes can be applied using the buttons at the top of the form or simply by clicking Accept changes and create/Accept changes and save.

Policy chat beside the form. The assistant looked up the Contractors group, proposed a deny rule, and left three changes marked for review.
What policy chat can access
Policy chat can look things up in the project as it drafts, and the transcript shows each lookup as it runs:Stop contractors deleting records
- The assistant searches existing groups, sets Who it applies to to
Groupsand populates withContractors. - Writes a deny on Use a tool with a
*delete*pattern, with applies to set toEverything.
delete does not catch a connector that uses tool names using remove or archive. So you can confirm and ask it to also apply these patterns.
Starting from logs
Policy creation can be initiated from a specific log instead of the policies page.This call should not have been allowed to return salary
This person should not have been allowed to make itSee Build a policy using chat.
Testing a policy before enforcing it
Two checks come before enforcing:- Test against personas: in the create and edit panel, Test this policy against personas shows what the rule would decide for the members you choose, without making a call.
- Monitor only: set the policy’s Enforcement to Monitor only and applicable tool calls are flagged as calls the policy would have applied to, while continuing unaffected.
Duplicating policies
Instead of starting with a blank new policy, an existing policy can be used as a template.- Name: original name is appended with
(copy). - Enforcement: set to Monitor only.
- Status: set to Inactive.
What a denied call returns
When an enforced policy refuses a tool call, the request fails with HTTP403 before anything reaches the underlying provider. The refusal returns to the agent as the tool result.
Troubleshooting
Why is a pattern matching the wrong tools, or none at all?
Why is a pattern matching the wrong tools, or none at all?
- It matches nothing. The pattern has to cover the whole name:
salaryonly matches a tool named exactly that, so use*salary*.?,[a-z], and{a,b}do not perform any special matching. - It misses tools you expected. Matching is case-sensitive:
*Delete*missesworkday_delete_worker. A pattern matches exactly rather than describing a behaviour:*delete*does not catch a tool namedworkday_remove_worker. - It matches more than you expected.
*matches any run of characters, underscores included, so*create*could coverlist_created_employees.
Why is a policy not taking effect?
Why is a policy not taking effect?
- The policy is Active.
- Its mode is Enforce.
- The acting member is in its audience (and not exempt).
- The call is made in the project the policy was created in.
- The tool name or pattern matches exactly, including case.
- The caller is a member connected through an AI platform, so the call carries their identity. A call made with a project API key alone names no member, so no policy governs it.
Can I see policy decisions in request logs?
Can I see policy decisions in request logs?