← Plugin catalog
Education & Research
Agent Consent Patterns
Charles Wu v0.1.1
Ssecurity and UX guidance for trustworthy agents, covering least privilege, accessible controls, and meaningful human oversight
Language: English · Automatically detected from descriptions.
Package details
Publisher declarations from the archived package. These are separate from our research and the live service's terms.
- Package license
- MIT
- Package author
- Charles Wu
- Keywords
- ai-agents, consent, permissions, human-in-the-loop, ux
Declared capabilities
- Consent UX guidance
- Permission design
- Accessibility review
Some manifest fields differ or could not be read. The structured report retains the source references.
Package observed Sep 30, 2026.
Files & skills
File archives
Plugin package10 files · 12.2 KBBrowse files →
Skill instructions
agent-consent-patterns8.34 KB
---
name: agent-consent-patterns
description: Best practices for designing AI agent consent, permission, and human-in-the-loop UX. Use when building or reviewing ANY surface where an agent asks for access, previews an action, holds standing authority, or reports what it did, such as OAuth/connection screens, tool-approval dialogs, permission settings, autonomy levels, spend caps, activity logs, credential flows. Triggers on "agent permissions", "consent screen", "approval dialog", "human in the loop", "tool approval", "connect integration", "always allow", "autonomy settings".
---
# Agent Consent Patterns
Distilled best practices for consent UX in agentic products, from
[agent-consent-patterns](https://github.com/mrchaarlie/agent-consent-patterns). A taxonomy of
12 named patterns with production React implementations (`@agentconsent/react`). Use this skill
to (a) pick the right pattern for a consent surface, (b) get its non-negotiable rules right, and
(c) avoid the anti-patterns that make consent theater.
## Core principles (apply to every consent surface)
1. **Consent requires legibility.** A user can only consent to what they can understand. Show
concrete facts (recipient, amount, scope, resource), never categories ("wants to access your
account"). If you can't explain a permission in plain language, don't ask for it.
2. **Friction proportional to consequence.** Reversible → one click. Undoable → one click plus a
visible recovery path. Irreversible → enumerated consequences and a deliberate gesture
(type-to-confirm). Uniform friction trains click-through exactly where it must not.
3. **Declining is always safe.** "No" must never feel destructive or final. Initial focus lands on
the least-destructive action; Escape routes to the same "no" callback, never an ambiguous
dismissal that leaves an action half-pending.
4. **Authority is granted over time, not in a moment.** "Always allow" is a standing delegation
made under task focus. Make duration a first-class, legible choice; default to "just this
once"; never pre-select or visually favor the standing option.
5. **An agent can never exceed its principal.** Delegation narrows authority, never amplifies it.
Never offer the agent a capability the user themself doesn't hold (the confused-deputy bound).
6. **Provenance is part of the request.** When an instruction arrived from untrusted content (a
web page, an email, tool output), say so before asking for approval.
7. **Consent continues after approval.** Every consequential action leaves a receipt; standing
grants stay visible, with last-used recency, after the consent screen is gone.
8. **Revocation must be real and immediate.** A grant that can't be effectively withdrawn was
never consent. Pause and revoke live one affordance away from every standing grant.
9. **Authority should expire by default.** Standing is not forever. Prefer session- and
task-scoped grants; re-surface long-lived ones for reconfirmation.
10. **Minimize what the agent can see.** Least privilege applies to data, not just actions.
Scope to the narrowest resource (one label, one folder), not the whole account.
## The 12 patterns: pick by situation
**Granting access** (connecting an agent to a service):
- **Scoped Grant**. The connect screen. Per-capability checkboxes tagged read/write/delete (as
text, never color alone), grouped by resource with the narrowing stated ("'Board 2026' label
only"). Read is the default; write/delete start unchecked. Required scopes shown locked and
labeled, never silently bundled. The grant button shows the count it will grant.
- **Progressive Scope**. Escalation mid-task. Ask for exactly one new scope, at the moment the
agent is blocked, with the reason tied to the blocked action and what it already has. "Just
this once" is the easy answer; "always" is deliberate. A denial sticks, no nagging.
- **Connection Card**. The settings tile a standing grant lives in afterward. Shows current
scopes with access levels, status as text ("Active", "Needs re-auth"), last-used recency, and
pause/revoke. A grant with no card is a write-only grant. The anti-pattern.
**Approving actions** (a specific act, before it executes):
- **Action Preview**. Render the action as structured facts (To / Subject / Amount, verbatim),
with approve/reject labels that name the act ("Send email", not "OK"). The preview is a
contract: what's shown is exactly what executes; any post-approval change requires a new
preview. Never summarize the parameter most worth checking ("Dana and 2 others").
- **Irreversibility Gate**. Grade the confirm by severity: reversible (click), undoable (click +
advertised undo), irreversible (enumerated consequences + type-to-confirm). Prefer
type-to-confirm over hold-to-confirm (hold is an accessibility dead end). Never inflate
consequences; crying wolf blunts the real warnings.
- **Batch Approval**. For bursty queues. Routine items are selectable and sweepable with a live
count; high-stakes items are flagged "review individually" and structurally excluded from
select-all, safe by construction, not by the user remembering to deselect.
**Standing authority** (what the agent may keep doing):
- **Consent Memory**. The once/session/scoped-always/always ladder. Each option states its
consequence next to the choice; the confirm button relabels itself ("Allow once" vs "Allow
always"). Only offer memory where remembering is genuinely useful, never for moving money or
irreversible deletion.
- **Authority Boundary**. Per-category autonomy levels (e.g. Never / Ask first / Automatic) set
deliberately in settings, not captured as a by-product of prompts. The current boundary is
always inspectable.
- **Spend & Rate Limits**. Numeric ceilings (budget caps, action counts, time windows) enforced
outside the agent, with used-of-cap meters and threshold warnings. Limits fail closed: at the
cap the agent stops and asks; it never "borrows".
**Trust & transparency** (after and around the act):
- **Injection Flag**. When instructions arrive from untrusted content, quote the suspicious
instruction, name its source, and require an explicit decision before acting on it. A flag
complements server-side defenses; it never replaces them.
- **Action Receipt**. The post-hoc record: what was done, when, under what authority, with undo
where it's honest. Never show an undo affordance you can't honor.
- **Credential Handoff**. The agent never holds the secret. Delegate sign-in/payment to a
password manager, passkey, takeover-by-human, or scoped token; the agent receives a session or
a one-time token, not the credential.
## Review checklist
When reviewing (or generating) a consent surface, check:
- [ ] Access levels (read/write/delete) carried as **text**, never color alone.
- [ ] The safe/least-authority option is the **default and initial focus**; Escape = "no".
- [ ] Scope narrowed to a **resource**, not an account; write/delete opt-in, not pre-checked.
- [ ] Consequential parameters shown **verbatim**, no paraphrase, no "…and 2 more".
- [ ] Friction graded to consequence; type-to-confirm only at the irreversible tier.
- [ ] "Always allow" is deliberate: consequence stated, never pre-selected, paired with a
visible revocation surface.
- [ ] Batch approve cannot reach flagged high-stakes items.
- [ ] Every consequential action produces a receipt; standing grants show last-used.
- [ ] Nothing offers the agent more authority than the user has (intersection bound).
- [ ] Secrets never transit the agent.
## Accessibility non-negotiables
- Modal decision flows are alert dialogs (focus trapped, named by title, initial focus on the
least-destructive action). Inline prompts are labeled `role="group"` and never steal focus.
- Choices are native inputs (checkboxes, radios in `fieldset`/`legend`) with consequences wired
via `aria-describedby`. Counts and state changes announce via polite live regions.
- No information by color alone; no hold-to-confirm as the only path; scrollable regions
keyboard-focusable.
## Going deeper
- Full write-ups (problem, anatomy, when/when-not, anti-patterns, code): the docs site in
https://github.com/mrchaarlie/agent-consent-patterns, one page per pattern under
`apps/site/content/patterns/`, e.g. `scoped-grant.mdx`.
- React implementation: `@agentconsent/react`, headless Radix-based primitives + a themeable
default theme (`theme.css`, tokens as `--acp-*` CSS variables).
Referenced files: 1
Technical details
- First seen
- Sep 30, 2026 · 22:02 UTC
- Last seen
- Oct 1, 2026 · 12:00 UTC
- Collection status
- Collected
plugins_6a57e2f62e2c8191aeac164304baa879
Download listing JSON