# Approval auto-triage

Learn auto-allow rules from how your reviewers already decide, accept them one by one, and work the approval queue in order of blast radius times uncertainty.

Approval fatigue sets in when reviewers see the same safe request a hundred times. Auto-triage reads the receipted decisions on the [trust ledger](/docs/govern/trust-ledger) and does two things with them. A receipt that no longer verifies is not counted.

## Auto-allow suggestions

Decided requests are grouped by agent, MCP server, tool and **argument shape**. The shape is the argument names, plus whether the call acts on a list of 10 or more items. The values are not part of it.

A group is suggested as an auto-allow rule when, over the last 180 days, reviewers decided it at least 20 times, approved it unedited at least 95% of the time, and rejected none of its last 10 requests.

`GET /api/governance/approval-rules` lists the suggestions, with the evidence for each, and the rules already accepted.

**Nothing changes until a person accepts a suggestion.** `POST /api/governance/approval-rules/{key}/accept` needs `mcp.servers.update` and Cedar `configure` on the agent. Only a suggestion the history supports at that moment can be accepted (409 otherwise). An accepted rule then lets a call of exactly that shape through a `require_approval` posture without a person, for 90 days. After that it must be earned again.

A rule never releases:

- a `deny` posture,
- a call a posture rule escalated,
- a call held by the agent's [autonomy ladder](/docs/govern/autonomy-ladder),
- a call whose risk score is at or above the high-risk mark (60).

Dismiss a suggestion with `POST .../{key}/dismiss` so it is not offered again. Revoke a rule with `DELETE /api/governance/approval-rules/{key}`.

## Rank the queue by blast radius times uncertainty

`GET /api/approvals?status=pending&sort=triage` orders the queue by a score that multiplies two things:

- **Blast radius**: the request's risk score (0 to 1), raised by the size of the largest list it acts on.
- **Uncertainty**: how close the history of its group is to a coin flip, `1 - |2p - 1|`, where `p` is the smoothed approve rate. A request nobody has decided before is fully uncertain.

Each row carries its `triage` breakdown, so a reviewer can see why it sits where it does. The novel and the dangerous rise to the top; the routine sinks.

## Audit events

`agent.approval.rule.accepted`, `agent.approval.rule.refused`, `agent.approval.rule.dismissed`, `agent.approval.rule.revoked`, and `agent.approval.auto_allowed` for every call a rule let through, naming the rule and who accepted it.
