Show work emails only, filtered to Exchange/EWS accounts and corporate email domains. Digest with priorities. Use when user asks about work email, work inbox, or wants to separate work from personal mail. Arguments: optional date range or "today", "yesterday", "this week".
Install
npx skillscat add aashari/ai-agent-skills/mail-work Install via the SkillsCat registry.
Mail Work — Work Email Digest
Period: $ARGUMENTS (default: today)
Step 1: Identify work accounts
Work accounts are EWS/Exchange (detected by ews:// prefix in mailbox URL), plus any IMAP account with a corporate domain (not gmail.com, icloud.com, yahoo.com, hotmail.com, outlook.com).
DB="$HOME/Library/Mail/V10/MailData/Envelope Index"
# EWS/Exchange accounts (most reliable work indicator)
EWS_UUIDS=$(sqlite3 "$DB" "
SELECT DISTINCT substr(url, instr(url,'://')+3, instr(substr(url,instr(url,'://')+3),'/')-1)
FROM mailboxes WHERE url LIKE 'ews://%';" 2>/dev/null)
# All mailbox URLs for work accounts
sqlite3 "$DB" "SELECT DISTINCT url FROM mailboxes WHERE url LIKE 'ews://%';" 2>/dev/nullStep 2: Date filter
# Parse $ARGUMENTS
# today: date('now')
# yesterday: date('now','-1 day') to date('now')
# this week: date('now', 'weekday 1', '-7 days') or similar
# default: today
DATE_FILTER="datetime(m.date_received,'unixepoch','localtime') >= '$(date +%Y-%m-%d) 00:00:00'"Step 3: Query work mail
sqlite3 "$DB" "
SELECT datetime(m.date_received,'unixepoch','localtime') as dt,
s.subject, a.address as sender, a.comment as name,
mb.url as mailbox, m.ROWID, m.read, m.flagged, m.is_urgent
FROM messages m
JOIN subjects s ON m.subject = s.ROWID
JOIN addresses a ON m.sender = a.ROWID
JOIN mailboxes mb ON m.mailbox = mb.ROWID
WHERE ${DATE_FILTER}
AND m.deleted = 0
AND mb.url LIKE 'ews://%'
AND mb.url NOT LIKE '%Spam%'
AND mb.url NOT LIKE '%Trash%'
AND mb.url NOT LIKE '%Junk%'
AND mb.url NOT LIKE '%Draft%'
ORDER BY m.is_urgent DESC, m.read ASC, m.date_received DESC;" 2>/dev/nullStep 4: Read bodies of important emails
For emails that look substantive, prioritize by automated_conversation:
automated_conversation = 0= likely real person → read firstautomated_conversation = 1= transactional (Jira, Slack) → skimautomated_conversation = 2= bulk automated → count only unless urgent
python3 ~/.claude/skills/_mail-shared/parser.py <ROWID1> <ROWID2>Categorization for Work Mail
- Escalations/Alerts: incidents, P1/P2/P3 alerts, on-call, outages (automated_conversation=2 OK)
- Action Required: review, approve, sign off, merge request, deploy
- Meetings: invites, updates, cancellations, meeting notes/summaries
- Reports: daily/weekly reports, incident reports, uptime summaries
- External: emails from outside the company domain
- Internal Chatter: announcements, FYIs, newsletters (automated_conversation=2)
Output Format
Group by category. Highlight unread. Surface anything urgent or needing a response.
Include a "still needs reply" flag for emails older than 24h that are unread.