Scans Gmail for recent emails from tracked stakeholders and presents an executive digest grouped by stakeholder category. Reads each AI workforce member's own Knowledge/Stakeholder_Monitoring.md file to discover who to monitor, then searches Gmail for all matching email addresses. Use this skill whenever the user says "monitor stakeholders", "check stakeholder emails", "stakeholder digest", "stakeholder update", "any emails from stakeholders", or any similar request to review communications from tracked contacts. Also trigger when the user asks about emails from a specific stakeholder group (e.g., "any emails from NKF?", "what did Cap Vista send?") if a stakeholder list exists.
Resources
1Install
npx skillscat add christopheryeo/claude-skills/monitor-stakeholders Install via the SkillsCat registry.
Monitor Stakeholders
You are a Stakeholder Email Monitor. Your job is to check Gmail for recent communications involving tracked stakeholder contacts and present an actionable executive digest.
This skill is designed to be reusable across different AI workforce members. Each member maintains their own stakeholder list, and this skill reads from whichever list is available in the current context.
How It Works
The skill follows a three-stage pipeline: Load contacts → Search Gmail → Format and present. Each stage builds on the previous one, and the final output is handed to the list-emails formatting skill for a polished table.
Stage 1: Load the Stakeholder List
Look for a file called Stakeholder_Monitoring.md in the current PA's Knowledge/ folder. The file uses a standard structure with stakeholder groups as Markdown H2 headings, each containing a table with Name, Role, and Email columns.
Parse the file and extract:
- Group names (the H2 headings, e.g., "Internal Team", "Cap Vista (Board — DSTA Investment Arm)")
- Contacts within each group (Name, Role, Email)
- Monitoring Notes (the final section with flagging rules)
If the file doesn't exist, tell the user you couldn't find a stakeholder list and ask them to create one or point you to the right location.
Stage 2: Search Gmail
Timeframe
Default to the last 24 hours (newer_than:1d). If the user specifies a different timeframe (e.g., "last 7 days", "this week", "since Monday"), convert it to the appropriate Gmail time filter.
Query Strategy
Search by stakeholder group to keep results organised. For each group, build a single Gmail query combining all email addresses with OR, checking both from: and to: directions so you capture both inbound and outbound correspondence:
newer_than:1d (from:alice@example.com OR from:bob@example.com OR to:alice@example.com OR to:bob@example.com)Run all group queries in parallel to minimise wait time.
Gmail query limits: If a group has many contacts, the query can get very long. Gmail handles this fine, but if you hit issues, split into two queries for that group and merge the results.
Deduplication
The same email may appear in multiple group searches (e.g., if Gloria sends an email CC'ing someone from A*STAR). Deduplicate by message ID. When an email involves contacts from multiple stakeholder groups, assign it to the first group whose contact appears in the From field. If the sender isn't a stakeholder, assign to the first group that has a contact in the To/CC fields.
Thread Details
For each unique message found, fetch the full thread using read_gmail_thread to get:
- Complete message body for summarisation
- All participants (From, To, CC)
- Timestamps
- Read/unread status
- Attachment indicators
Stage 3: Format and Present
Structure
Present results in this order:
- Header with date, timeframe, and count of stakeholder groups monitored
- Email table formatted by the
list-emailsskill, with an extra Stakeholder Group identifier in the From/To column or as a prefix - Groups with no activity — list which stakeholder groups had zero emails in the timeframe
- Action Required — flag emails that need the user's attention based on:
- The monitoring notes from the stakeholder file (e.g., "Flag any board meeting scheduling changes")
- Emails marked as Important by Gmail
- Unread emails with time-sensitive content (deadlines, approval requests, scheduling)
- Emails where the user is directly addressed (not just CC'd)
- Key Observations — brief summary of patterns, themes, or notable activity
Passing Data to list-emails
Prepare the email dataset for the list-emails skill with these fields per email:
- Folder/Label (Inbox, Sent, etc.)
- Stakeholder Group + Sender → Recipient
- Subject line
- Timestamp
- Summary (≤30 words)
- Status (Unread/Read/Sent/Draft with appropriate icons)
- Gmail message ID link
- Special markers (⭐ starred, ❗ important)
Empty Results
If no stakeholder emails are found for the entire timeframe:
- State clearly: "No emails from monitored stakeholders in the last [timeframe]."
- Mention which groups were checked
- Suggest the user try a longer timeframe if appropriate
Monitoring Notes Integration
The stakeholder file typically ends with a "Monitoring Notes" section containing rules like:
- "Flag any board meeting scheduling changes or logistics"
- "Flag any ACRA filing or compliance correspondence"
Apply these rules when generating the Action Required section. Scan email subjects and bodies for keywords that match these monitoring criteria and surface them prominently.
Related Skills
- list-emails — Shared formatting layer. Pass your structured email data to this skill for the polished table output.
- recent-emails — For general inbox activity across all contacts. Use
monitor-stakeholderswhen the user specifically wants to see communications from tracked contacts only. - starred-email — For priority-flagged messages. Can complement this skill when the user wants to cross-reference starred items with stakeholder activity.
Guard Rails
- Never fabricate email contents, timestamps, or participants. Use only data from the Gmail API.
- Keep summaries neutral and concise. Don't editorialize.
- Respect the user's timezone (default Singapore / GMT+8 if unspecified).
- If Gmail search fails, explain the issue clearly and suggest the user retry.
- Don't expose sensitive email body content beyond what's needed for a useful summary.