Overview
Turn a scoped review into explicit provider actions with per-message receipts.
The plan is a human-readable preview; mail_action itself has no dry-run flag,
so do not call it until the user confirms the exact operation and messages.
Prerequisites
- Run IntentMail on Node.js 20 or newer.
- Connect the target Gmail or Outlook account through IntentMail OAuth.
- Configure an AI provider before requesting draft generation.
Authentication and privacy
- Require an account connected through
mail_auth_start; never request OAuth credentials or AI keys in chat. - Provider actions use the user's Gmail or Microsoft Graph token. OAuth tokens and the cache remain local.
- Cloud AI providers receive content supplied for draft generation; Ollama can keep inference local. No send tool is permitted by this skill.
- See the action safety contract.
Workflow
- Call
mcp__intentmail__mail_daily_digestonly when candidates were not already supplied. Bound the account, time window, and item count. - Present a plan containing each local email ID, subject, requested operation, provider effect, local effect, and known reversal. Do not hide bulk scope behind phrases such as "clean everything".
- Obtain explicit confirmation for that exact plan. Any changed scope or operation requires a new confirmation.
- For mark-read/unread, archive, flag/unflag, or move, call
mcp__intentmail__mail_actionone message at a time and recordnewState. - For a reply, call
mcp__intentmail__mail_draft. It generates draft text; it does not create a Gmail/Outlook draft and cannot send. Return the text for user review without implying it was saved remotely. - For deletion requests, call
mcp__intentmail__mail_stage_deletewithbackupMime: true, review viamcp__intentmail__mail_list_staged, and stop. Staging is local only. Permanent provider deletion is not implemented or permitted in this skill. Usemcp__intentmail__mail_unstageto cancel. - Report individual successes and failures. Never retry a provider mutation blindly when the result is ambiguous.
Approval boundaries
- Read: a digest may be built within the user's stated scope.
- Confirm once per exact plan: mark state, archive, flag, or move actions.
- Confirm before local staging: show every message selected for staging.
- Not permitted: sending mail, committing local deletions, provider deletion, bulk scope expansion, or claiming an audit/rollback receipt that direct actions do not produce.
Validation
- Match every result's email ID and operation to the approved plan.
- Treat
successplus the returnednewStateas the receipt for direct actions; do not claim all direct actions are in the rule audit log. - Verify generated draft text contains no invented recipients, commitments, or attachments before returning it.
- Verify staged count and IDs with
mail_list_staged; never equate staging with provider deletion.
Output
Return the approved scope, operation per message, provider/local effect,
newState receipts, draft text awaiting review, staged IDs and retention,
failures, ambiguous outcomes, and any manual provider-side step still required.
Error Handling
- Not authenticated: stop and direct the user to the explicit OAuth flow.
- Ambiguous or partial provider result: stop that item and report it; do not assume the mutation failed or succeeded.
- Unsupported send/delete/unsubscribe request: explain the current boundary.
The consolidated tool's
unsubscribeoperation only archives today, so this skill does not represent it as an unsubscribe. - Bad draft: discard the output and ask for corrected facts or tone; never send or claim a provider draft exists.
- Wrong staged item: unstage it before doing anything else.
Examples
For account 1, show the five newsletters you propose to archive. Wait for my
confirmation, then archive them one at a time and report each newState.
Generate reply text for email 42 in a concise professional tone. Do not save or
send it. Return the draft and any uncertain facts for my review.
Resources
- Action safety contract
- Provider action implementation:
src/connectors/email-actions.ts - Deletion staging:
src/storage/services/deletion-staging.ts