Authorization contract

afmail separates authorization by effect domain. An agent may use a narrower operation when it is necessary to answer the user’s request, but a broad or remote operation is never an automatic prelude.

DomainExamplesRequired user intent
Local readstatus, message show, bounded listImplicit when needed to answer the current mailbox request. Prefer a supplied ref over broad discovery.
Remote readpull, remote folders, remote testThe user asks to check, receive, sync, test, or otherwise use current remote mailbox state. Missing or stale local evidence also permits a pull after the agent explains why.
Local mutationcreate a case, edit/queue a draft, mark local spam/trash, archive locallyThe requested task entails organizing or preparing mail. Report that remote effects are only queued. Writing persistent notes requires an explicit request.
Remote mutationpush --confirm PLAN_IDThe user reviews the complete preview and authorizes that exact plan. A changed or expired plan requires a new review.
Permanent local deletionpurge --confirm PLAN_IDThe user reviews the purge preview and authorizes that exact plan. A private Git repository is a supported evidence/backup boundary, but is not deletion authorization.

Invocation is automatic: supported agents may discover and load the installed agent-first-mail skill when the user’s request concerns mail. Automatic skill selection does not authorize pull, push, purge, or any other operation beyond the matrix above.