morning-email-rollup

Daily morning rollup of important emails and calendar events at 8am with AI-generated summaries

533 stars

Best use case

morning-email-rollup is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

Daily morning rollup of important emails and calendar events at 8am with AI-generated summaries

Teams using morning-email-rollup should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/morning-email-rollup/SKILL.md --create-dirs "https://raw.githubusercontent.com/sundial-org/awesome-openclaw-skills/main/skills/morning-email-rollup/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/morning-email-rollup/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How morning-email-rollup Compares

Feature / Agentmorning-email-rollupStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

Daily morning rollup of important emails and calendar events at 8am with AI-generated summaries

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

Related Guides

SKILL.md Source

# Morning Email Rollup

Automatically generates a daily summary of important emails and delivers it to Telegram at 8am Denver time.

## Setup

**Required:** Set your Gmail account email:
```bash
export GOG_ACCOUNT="your-email@gmail.com"
```

Or edit the script directly to set the default.

## What It Does

- Runs every day at 8:00 AM (configurable timezone)
- **Shows today's calendar events** from Google Calendar
- Searches for emails marked as **important** or **starred** from the last 24 hours
- Uses AI (Gemini CLI) to generate natural language summaries of each email
- Shows up to 20 most important emails with:
  - 🔴 Unread indicator (red)
  - 🟢 Read indicator (green)
  - Sender name/email
  - Subject line
  - **AI-generated 1-sentence summary** (natural language, not scraped content)
- Delivers formatted summary to Telegram

## Usage

### Manual Run
```bash
# Default (10 emails)
bash skills/morning-email-rollup/rollup.sh

# Custom number of emails
MAX_EMAILS=20 bash skills/morning-email-rollup/rollup.sh
MAX_EMAILS=5 bash skills/morning-email-rollup/rollup.sh
```

### View Log
```bash
cat $HOME/clawd/morning-email-rollup-log.md
```

## How It Works

1. **Checks calendar** - Lists today's events from Google Calendar via `gog`
2. **Searches Gmail** - Query: `is:important OR is:starred newer_than:1d`
3. **Fetches details** - Gets sender, subject, date, and body for each email
4. **AI Summarization** - Uses Gemini CLI to generate natural language summaries
5. **Formats output** - Creates readable summary with read/unread markers
6. **Sends to Telegram** - Delivers via Clawdbot's messaging system

## Calendar Integration

The script automatically includes today's calendar events from your Google Calendar using the same `gog` CLI that queries Gmail.

**Graceful Fallback:**
- If `gog` is not installed → Calendar section is silently skipped (no errors)
- If no events today → Calendar section is silently skipped
- If events exist → Shows formatted list with 12-hour times and titles

**Requirements:**
- `gog` must be installed and authenticated
- Uses the same Google account configured for Gmail (set via `GOG_ACCOUNT` environment variable)

## Email Criteria

Emails are included if they match **any** of:
- Marked as **Important** by Gmail (lightning bolt icon)
- Manually **Starred** by you
- Received in the **last 24 hours**

## AI Summarization

Each email is summarized using the Gemini CLI (`gemini`):
- Extracts the email body (cleans HTML/CSS)
- Sends to `gemini --model gemini-2.0-flash` with a prompt to summarize in 1 sentence
- The summary is medium-to-long length natural language (not scraped content)
- Falls back to cleaned body text if Gemini is unavailable

**Important:** The email body is passed as part of the prompt (not via stdin) because the gemini CLI doesn't handle piped input with prompts correctly.

**Example output:**
```
🔴 **William Ryan: Invitation to team meeting**
   The email invites you to a team meeting tomorrow at 2pm to discuss the Q1 roadmap and assign tasks for the upcoming sprint.
```

## Read/Unread Indicators

- 🔴 Red dot = Unread email
- 🟢 Green dot = Read email

All emails show one of these markers for visual consistency.

## Formatting Notes

**Subject and Summary Cleanup:**
- Extra quotes are automatically stripped from subject lines (e.g., `""Agent Skills""` → `Agent Skills`)
- Summaries from Gemini are also cleaned of leading/trailing quotes
- This ensures clean, readable output in Telegram/other channels

## Cron Schedule

Set up a daily cron job at your preferred time:
```bash
cron add --name "Morning Email Rollup" \
  --schedule "0 8 * * *" \
  --tz "America/Denver" \
  --session isolated \
  --message "GOG_ACCOUNT=your-email@gmail.com bash /path/to/skills/morning-email-rollup/rollup.sh"
```

Adjust the time (8:00 AM) and timezone to your preference.

## Customization

### Change Number of Emails

By default, the rollup shows **10 emails**. To change this:

**Temporary (one-time):**
```bash
MAX_EMAILS=20 bash skills/morning-email-rollup/rollup.sh
```

**Permanent:**
Edit `skills/morning-email-rollup/rollup.sh`:
```bash
MAX_EMAILS="${MAX_EMAILS:-20}"  # Change 10 to your preferred number
```

### Change Search Criteria

Edit `skills/morning-email-rollup/rollup.sh`:

```bash
# Current: important or starred from last 24h
IMPORTANT_EMAILS=$(gog gmail search 'is:important OR is:starred newer_than:1d' --max 20 ...)

# Examples of other searches:
# Unread important emails only
IMPORTANT_EMAILS=$(gog gmail search 'is:important is:unread newer_than:1d' --max 20 ...)

# Specific senders
IMPORTANT_EMAILS=$(gog gmail search 'from:boss@company.com OR from:client@example.com newer_than:1d' --max 20 ...)

# By label/category
IMPORTANT_EMAILS=$(gog gmail search 'label:work is:important newer_than:1d' --max 20 ...)
```

### Change Time

Update the cron schedule:
```bash
# List cron jobs to get the ID
cron list

# Update schedule (example: 7am instead of 8am)
cron update <job-id> --schedule "0 7 * * *" --tz "America/Denver"
```

### Change Summary Style

Edit the prompt in the `summarize_email()` function in `rollup.sh`:

```bash
# Current: medium-to-long 1 sentence
"Summarize this email in exactly 1 sentence of natural language. Make it medium to long length. Don't use quotes:"

# Shorter summaries
"Summarize in 1 short sentence:"

# More detail
"Summarize in 2-3 sentences with key details:"
```

### Change AI Model

Edit the gemini command in `summarize_email()`:
```bash
# Current: gemini-2.0-flash (fast)
gemini --model gemini-2.0-flash "Summarize..."

# Use a different model
gemini --model gemini-pro "Summarize..."
```

## Troubleshooting

### Not receiving rollups
```bash
# Check if cron job is enabled
cron list

# Check last run status
cron runs <job-id>

# Test manually
bash skills/morning-email-rollup/rollup.sh
```

### Missing emails
- Gmail's importance markers may filter out expected emails
- Check if emails are actually marked important/starred in Gmail
- Try running manual search: `gog gmail search 'is:important newer_than:1d'`

### Summaries not appearing
- Check if `gemini` CLI is installed: `which gemini`
- Test manually: `echo "test" | gemini "Summarize this:"`
- Verify Gemini is authenticated (it should prompt on first run)

### Wrong timezone
- Cron uses `America/Denver` (MST/MDT)
- Update with: `cron update <job-id> --tz "Your/Timezone"`

## Log History

All rollup runs are logged to:
```
$HOME/clawd/morning-email-rollup-log.md
```

Format:
```markdown
- [2026-01-15 08:00:00] 🔄 Starting morning email rollup
- [2026-01-15 08:00:02] ✅ Rollup complete: 15 emails
```

Related Skills

morning-routine

533
from sundial-org/awesome-openclaw-skills

Build a powerful morning routine with habit checklists, timing, and streak tracking

morning-manifesto

533
from sundial-org/awesome-openclaw-skills

Daily morning reflection workflow with task sync to Obsidian, Apple Reminders, and Linear

morning-briefing

533
from sundial-org/awesome-openclaw-skills

Generate personalized morning report with today's reminders, Notion tasks (undone), and vault storage. Use when user asks for morning briefing, daily summary, or &quot;today's plan&quot;. Pulls from Apple Reminders (as calendar proxy) and Notion tasks DB (set NOTION_TASKS_DB or specify DB ID).

email-sequence

533
from sundial-org/awesome-openclaw-skills

When the user wants to create or optimize an email sequence, drip campaign, automated email flow, or lifecycle email program. Also use when the user mentions "email sequence," "drip campaign," "nurture sequence," "onboarding emails," "welcome sequence," "re-engagement emails," "email automation," or "lifecycle emails." For in-app onboarding, see onboarding-cro.

imap-smtp-email

533
from sundial-org/awesome-openclaw-skills

Read and send email via IMAP/SMTP. Check for new/unread messages, fetch content, search mailboxes, mark as read/unread, and send emails with attachments. Works with any IMAP/SMTP server including Gmail, Outlook, 163.com, vip.163.com, 126.com, vip.126.com, 188.com, and vip.188.com.

imap-email

533
from sundial-org/awesome-openclaw-skills

Read and manage email via IMAP (ProtonMail Bridge, Gmail, etc.). Check for new/unread messages, fetch content, search mailboxes, and mark as read/unread. Works with any IMAP server including ProtonMail Bridge.

email

533
from sundial-org/awesome-openclaw-skills

Email management and automation. Send, read, search, and organize emails across multiple providers.

email-management-expert

533
from sundial-org/awesome-openclaw-skills

Expert email management assistant for Apple Mail. Use this when the user mentions inbox management, email organization, email triage, inbox zero, organizing emails, managing mail folders, email productivity, checking emails, or email workflow optimization. Provides intelligent workflows and best practices for efficient email handling.

email-best-practices

533
from sundial-org/awesome-openclaw-skills

Use when building email features, emails going to spam, high bounce rates, setting up SPF/DKIM/DMARC authentication, implementing email capture, ensuring compliance (CAN-SPAM, GDPR, CASL), handling webhooks, retry logic, or deciding transactional vs marketing.

portfolio-watcher

533
from sundial-org/awesome-openclaw-skills

Monitor stock/crypto holdings, get price alerts, track portfolio performance

portainer

533
from sundial-org/awesome-openclaw-skills

Control Docker containers and stacks via Portainer API. List containers, start/stop/restart, view logs, and redeploy stacks from git.

portable-tools

533
from sundial-org/awesome-openclaw-skills

Build cross-device tools without hardcoding paths or account names