# Daily Roundup

> Morning briefing combining email, yesterday's meetings, and Slack into one section appended to the weekly report

- Skill: `majiayu000/daily-roundup` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds add majiayu000/daily-roundup`
- Raw SKILL.md: https://api.skillmd.com/api/skills/majiayu000/daily-roundup/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Docs & Writing
- Author: majiayu000 (https://skillmd.com/u/majiayu000)
- Updated: 2026-09-09
- Page: https://skillmd.com/skills/majiayu000/daily-roundup

---


# 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

1. Determine today's date, day of week, and yesterday's date.
2. Find the current week's weekly report: look in the current year folder for the most recent `w##-mm-dd` folder, read the `weekly-report-*.md` file.
3. 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)

1. Use `mcp__gworkspace-mcp__read_mail` with a query to fetch recent messages.
   - Query: `newer_than:1d` to get last 24 hours
   - Set `max_results: 50`, `include_body: true`
2. **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 `unsubscribe` in body as a signal)
   - Skip Jira/GitHub notification emails (automated system notifications)
   <!-- TODO: customize - Add any other automated senders your org uses -->
3. **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
4. 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:

1. Use `mcp__gworkspace-mcp__calendar_events` to fetch yesterday's events.
   - Set `time_min` to yesterday 00:00 and `time_max` to yesterday 23:59.
   - Use the primary calendar.
2. 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 `Glob` to search for `meeting-[yesterday's date]-*.md` in the week folder.
3. **Check for Gemini transcripts in Google Drive:**
   - Use `mcp__gworkspace-mcp__search_drive` with 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_file`
     b. Create a meeting note file: `meeting-[YYYY-MM-DD]-[slugified-title].md`
     c. Use this frontmatter:
        ```yaml
        ---
        type: meeting
        date: [YYYY-MM-DD]
        people: []
        projects: []
        tags: []
        ---
        ```
     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
4. For each meeting, produce a brief summary line for the roundup.

### 3. Slack (last 24h)

1. Use `mcp__playground-slack-mcp__get_messages` with action: `my_messages`
   - Set time range to last 24 hours
   - Request count: 100
2. **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
3. 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:
1. Direct asks/questions waiting for response (from any source)
2. Decisions needing input
3. 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

```markdown
## 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 `/monday` skill 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.

