Integrations
Scope Policies
Allow, review, or block each OAuth scope on a connected account. Defaults can be set per risk label instead of per scope.
How scopes work
Every provider defines OAuth scopes that govern its API operations. Gmail has gmail.readonly (view emails), gmail.send (send emails), and gmail.full (read, compose, send, and permanently delete emails).
When an agent calls an API through the proxy, Gamut matches the request's method and path against the provider's scope map, more than 4,000 endpoint-to-scope mappings across the provider directory. GET /gmail/v1/users/*/messages maps to gmail.readonly and gmail.modify. The policy resolver then decides what happens.
Risk labels
Every scope carries a risk label:
- read: retrieves data without changing anything.
- write: creates or modifies data.
- destructive: deletes data or performs hard-to-reverse operations.
Set one default tier per label, such as allow all reads, review writes, and block destructive operations, instead of configuring rules scope by scope. The policy editor groups scopes by label, and review prompts offer label-wide shortcuts.
Policy decisions
- Allow: The request proceeds immediately. Suits operations the agent can perform autonomously, like
gmail.readonlychecks for new mail. - Review: The request pauses until you approve or deny it. The agent waits up to 5 minutes; with no response, the request times out and the agent receives an error. Suits
gmail.send, so outgoing email can be checked first. - Block: The request is rejected outright and the agent receives a policy error. Suits scopes like
gmail.fullthat permit permanent deletion.
Resolution order
For each matched scope, the first rule that exists wins:
- Explicit scope policy: a rule for that specific scope, such as
gmail.sendset to review. - Risk-label default: the account's default for the scope's label (
*read,*write, or*destructive). - Account default: the account-wide default (the
*entry). - Global default: the fallback from user settings. The factory default is review.
When a request matches multiple scopes with different outcomes, the most permissive decision wins: a request matching both gmail.readonly (allow) and gmail.modify (review) is allowed.
Configuring scope policies
In the policy editor
- Open Settings > Connections and select the account to open its detail page.
- Open the policy editor. It shows the account default, one default tier per risk label, and every scope grouped by label, each with a description of what it grants.
- Set entries to Allow, Review, Block, or Default (inherit from the next level up), then save.
From a review prompt
When a request triggers a review, the prompt in the session offers more than approve and deny:
- Always allow: sets an explicit allow policy for the matched scopes. Other pending reviews for the same agent and scopes resolve as allowed.
- Allow all read (or write, or destructive): sets the account's default for that risk label to allow, ending future reviews for every scope with the label.
Approving requests this way builds policies up during normal use, with no upfront configuration.
Scope descriptions
Each scope in the editor shows a description from official provider documentation. GitHub's repo scope reads "Grants full access to public and private repositories: code, commit statuses, invitations, collaborators, deployments, and webhooks." Review prompts use a more specific endpoint-level description when one exists, such as "Gets the specified message".
Audit trail
Every decision lands in the proxy audit log as allow, approved_by_user, denied_by_user, block, or review_timeout. See Audit Logging.
Related
- Connected Accounts: How accounts are set up and how the proxy works.
- MCP Tool Policies: The per-tool equivalent for MCP servers.