skills / Productivity / Weekly
daily-roundup
Morning briefing combining email, yesterday's meetings, and Slack into one section appended to the weekly report
Daily Roundup
Generate a combined morning briefing from email, yesterday's meetings, and Slack. Append as a single section to the current week's weekly report.
Arguments
- None required. Always processes the last 24 hours.
Steps
0. Setup
- Determine today's date, day of week, and yesterday's date.
- Find the current week's weekly report: look in the current year folder for the most recent
w##-mm-ddfolder, read theweekly-report-*.mdfile. - Check if a
## Daily Roundup: [Today's Day Month Date]section already exists. If so, you will replace it (idempotent).
1. Email (Gmail, last 24h)
- Use
mcp__gworkspace-mcp__read_mailwith a query to fetch recent messages.- Query:
newer_than:1dto get last 24 hours - Set
max_results: 50,include_body: true
- Query:
- Filter out noise:
- Skip messages from
noreply@,no-reply@,notifications@,calendar-notification@google.com - Skip Google Calendar invites (subject starts with "Invitation:" or "Updated invitation:")
- Skip automated newsletters, marketing (look for
unsubscribein body as a signal) - Skip Jira/GitHub notification emails (automated system notifications)
- Skip messages from
- Categorize remaining emails:
- Needs Response: Direct questions to you, requests, asks, emails where you're in To (not CC)
- Worth Knowing: Team updates, project threads, decisions being made
- FYI: Announcements, broadcasts, CC'd threads
- For each email, note: sender, subject, one-line summary, suggested action if applicable.
2. Yesterday's Meetings (skip on Mondays)
If today is Monday, skip this section entirely. Add a note: "Meetings skipped (Monday). See /monday briefing for weekly context."
Otherwise:
- Use
mcp__gworkspace-mcp__calendar_eventsto fetch yesterday's events.- Set
time_minto yesterday 00:00 andtime_maxto yesterday 23:59. - Use the primary calendar.
- Set
- For each meeting event:
- Note: time, title, attendees (first names or short list)
- Check if a meeting note already exists in the current week folder. Use
Globto search formeeting-[yesterday's date]-*.mdin the week folder.
- Check for Gemini transcripts in Google Drive:
- Use
mcp__gworkspace-mcp__search_drivewith query:name contains '[meeting title]' and mimeType contains 'document' and modifiedTime > '[yesterday ISO date]' - Also try:
fullText contains 'transcript' and name contains '[partial meeting title]' and modifiedTime > '[yesterday ISO date]' - If a transcript document is found and no meeting note file exists yet:
a. Read the transcript with
mcp__gworkspace-mcp__read_fileb. Create a meeting note file:meeting-[YYYY-MM-DD]-[slugified-title].mdc. Use this frontmatter:
d. Add a Summary section with key points from the transcript (3-5 bullets) e. Add a Next Steps section with action items f. Do NOT import the full transcript (leave that for manual review) g. Note in the roundup that a meeting note was auto-created--- type: meeting date: [YYYY-MM-DD] people: [] projects: [] tags: [] ---
- Use
- For each meeting, produce a brief summary line for the roundup.
3. Slack (last 24h)
- Use
mcp__playground-slack-mcp__get_messageswith action:my_messages- Set time range to last 24 hours
- Request count: 100
- Categorize:
- Needs Response: Direct @mentions, questions, requests, DMs needing reply
- Worth Knowing: Thread updates, project decisions, shared context
- FYI: Announcements, links shared, general channel activity
- Include message snippets, channel names, and suggested actions.
4. Consolidate Quick Actions
Across all three sources, collect the top action items into a single checklist. Prioritize:
- Direct asks/questions waiting for response (from any source)
- Decisions needing input
- Items to acknowledge or review
Limit to 5-7 items max. Be specific ("Reply to Jane about project timeline" not "Check email").
5. Append to Weekly Report
Construct the full roundup section and append it to the weekly report. If a roundup for today already exists, replace that section.
Output Format
## Daily Roundup: [Day] [Month] [Date]
**Generated:** [YYYY-MM-DD HH:MM]
### Email
**[X] messages scanned, [Y] relevant**
**Needs Response:**
- **[Sender]**: [Subject] - [one-line summary]
- Action: [specific action]
**Worth Knowing:**
- **[Sender]**: [Subject] - [one-line summary]
**FYI:**
- [Subject] from [Sender] - [brief note]
*[If no relevant emails: "Inbox clear. No action needed."]*
### Yesterday's Meetings
*[If Monday: "Skipped (Monday). See Monday briefing for weekly context."]*
- **[HH:MM] [Meeting Title]** ([Attendee1], [Attendee2])
- [2-3 line summary or "No transcript available"]
- [If note created: "Meeting note created: [[meeting-YYYY-MM-DD-slug]]"]
*[If no meetings: "No meetings yesterday."]*
### Slack
**[X] messages scanned**
**Needs Response:**
- **[Person]** in #[channel]: "[snippet]"
- Action: [specific action]
**Worth Knowing:**
- **[Topic]** in #[channel]: [summary]
**FYI:**
- [summary items]
*[If quiet: "Slack quiet. No action needed."]*
---
**Quick Actions:**
- [ ] [Top consolidated action items from all sources]
Error Handling
- If Gmail MCP is unavailable: skip Email section, add note "Email: skipped (Gmail MCP unavailable)"
- If Calendar MCP is unavailable: skip Meetings section, add note "Meetings: skipped (Calendar MCP unavailable)"
- If Slack MCP is unavailable: skip Slack section, add note "Slack: skipped (Slack MCP unavailable)"
- If Drive search fails when looking for transcripts: note it and continue without transcript
- If weekly report file is not found: create a warning in the log and exit (don't create files in wrong locations)
- Always produce output even if all three sources fail (the section will just note the skips)
Notes
- On Mondays, skip the meetings section. The
/mondayskill runs earlier and covers Monday context. - Meeting note auto-creation is lightweight: summary + next steps only. Full transcript import is left to manual review.
- Focus on signal over noise. The goal is a 2-minute scan, not a comprehensive log.
- Email filtering should be aggressive. When in doubt, skip it.
- The idempotent section replacement means you can safely re-run this skill if a data source was temporarily unavailable.