Email Check-in
Overview
Sync mail into IntentMail's local store and return one scoped, priority-ranked briefing. This workflow never changes provider message state; sync does update the local cache and may refresh locally stored OAuth tokens.
Prerequisites
- Run IntentMail on Node.js 20 or newer.
- Connect at least one Gmail or Outlook account through IntentMail OAuth.
- Configure an AI provider for generated triage and summaries.
Authentication and privacy
- Require an account previously connected through
mail_auth_start; this skill does not run OAuth or request secrets in chat. - OAuth tokens and indexed mail remain in the self-hosted IntentMail process.
- Anthropic, OpenAI, Groq, Cerebras, or Vertex receives the message/thread content needed for requested AI triage or summaries. Ollama keeps inference local. State that boundary if the user asks about privacy.
- See authentication and data boundaries.
Workflow
- Resolve the account. If the user supplied no ID, call
mcp__intentmail__mail_list_accounts; ask which account when several are active. Never guess an account from message content. - Confirm the requested window and cap. Default to the digest tool's 50-item
limit; use
unreadOnlyorsinceHourswhen the request supplies that scope. - Call
mcp__intentmail__mail_syncfor the selected account. Do not setforceInitial: trueor raisemaxMessageswithout explaining the broader fetch and receiving approval. - Call
mcp__intentmail__mail_daily_digestwith the account and scope. Prefer its structured payload over rebuilding the digest manually. - If the digest tool is unavailable, use
mcp__intentmail__mail_searchfor the bounded window,mcp__intentmail__mail_triagefor classification, andmcp__intentmail__mail_summarizeonly for threads that need compression. - Render high-priority and needs-response items first, then the remaining category groups. Preserve uncertainty and citations from tool output.
Validation
- Confirm the returned account ID matches the selected account.
- Report sync type, added/deleted/label-change counts, and sync timestamp.
- Distinguish provider-deleted items reported by sync from actions taken by this skill; the skill itself does not delete or archive mail.
- Do not claim an empty digest means an empty provider inbox when sync failed.
Output
Return the account and time window, sync receipt, digest counts, P1-P4 groups, response needs, detected deadlines, concise summaries, uncertainty, and any failed or omitted stage. Do not expose message bodies beyond what the user asked to review.
Error Handling
- No account or expired OAuth: stop and direct the user to the explicit IntentMail authentication flow; never solicit a token.
- AI provider unavailable: return a bounded
mail_searchresult and label it untriaged rather than inventing priorities. - Partial sync or provider rate limit: report the tool error and the last successful sync time; do not present cached results as current.
- Action requested: stop and hand off to
email-triage-actions; no provider write tools are allowed here. - Uncertain priority or deadline: show the uncertainty and source text.
Examples
Check my Outlook inbox for unread mail from the last 24 hours. Sync normally,
then show P1/P2 and needs-response items first. Do not change message state.
Summarize the active Gmail account with the default 50-item cap. If AI triage
is unavailable, return an explicitly untriaged unread list.
Resources
- Authentication and data boundaries
- Digest contract:
src/ai/daily-digest.ts - Companion provider-write workflow:
email-triage-actions