✓ Verified 💻 Development ✓ Enhanced Data

Morning Email Rollup

Daily morning rollup of important emails.

Rating
4.8 (30 reviews)
Downloads
5,972 downloads
Version
1.0.0

Overview

Daily morning rollup of important emails.

Key Features

1

Runs every day at 8:00 AM (configurable timezone)

2

Shows today's calendar events from Google Calendar

3

Searches for emails marked as important or starred from the last 24 hours

4

Uses AI (Gemini CLI) to generate natural language summaries of each email

5

Shows up to 20 most important emails with:

6

🔴 Unread indicator (red)

7

🟢 Read indicator (green)

8

Sender name/email

9

Subject line

10

AI-generated 1-sentence summary (natural language, not scraped content)

11

Delivers formatted summary to Telegram

Complete Documentation

View 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="[email protected]"

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

  • Checks calendar - Lists today's events from Google Calendar via gog
  • Searches Gmail - Query: is:important OR is:starred newer_than:1d
  • Fetches details - Gets sender, subject, date, and body for each email
  • AI Summarization - Uses Gemini CLI to generate natural language summaries
  • Formats output - Creates readable summary with read/unread markers
  • 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:

text
🔴 **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 "[email protected] 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:[email protected] OR from:[email protected] 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 --tz "Your/Timezone"

Log History

All rollup runs are logged to:

text
$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

Installation

Terminal bash

openclaw install morning-email-rollup
    
Copied!

💻Code Examples

### Manual Run

-manual-run.sh
# 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

**Example output:**

example-output.txt
🔴 **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.

Set up a daily cron job at your preferred time:

set-up-a-daily-cron-job-at-your-preferred-time.sh
cron add --name "Morning Email Rollup" \
  --schedule "0 8 * * *" \
  --tz "America/Denver" \
  --session isolated \
  --message "[email protected] bash /path/to/skills/morning-email-rollup/rollup.sh"

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

importantemailsgog-gmail-search-labelwork-isimportant-newerthan1d---max-20-.txt
### Change Time

Update the cron schedule:

cron update <job-id> --schedule "0 7 * * *" --tz "America/Denver"

cron-update-job-id---schedule-0-7------tz-americadenver.txt
### Change Summary Style

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

"Summarize in 2-3 sentences with key details:"

summarize-in-2-3-sentences-with-key-details.txt
### Change AI Model

Edit the gemini command in `summarize_email()`:

gemini --model gemini-pro "Summarize..."

gemini---model-gemini-pro-summarize.txt
## Troubleshooting

### Not receiving rollups

bash skills/morning-email-rollup/rollup.sh

bash-skillsmorning-email-rolluprollupsh.txt
### 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:
example.sh
# 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:[email protected] OR from:[email protected] newer_than:1d' --max 20 ...)

# By label/category
IMPORTANT_EMAILS=$(gog gmail search 'label:work is:important newer_than:1d' --max 20 ...)
example.sh
# 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"

Tags

#calendar_and-scheduling

Quick Info

Category Development
Model Claude 3.5
Complexity One-Click
Author am-will
Last Updated 3/10/2026
🚀
Optimized for
Claude 3.5
🧠

Ready to Install?

Get started with this skill in seconds

openclaw install morning-email-rollup