Skills morning-email-rollup
Daily morning rollup of important emails and calendar events at 8am with AI-generated summaries
git clone https://github.com/openclaw/skills
T=$(mktemp -d) && git clone --depth=1 https://github.com/openclaw/skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/am-will/morning-email-rollup" ~/.claude/skills/openclaw-skills-morning-email-rollup && rm -rf "$T"
T=$(mktemp -d) && git clone --depth=1 https://github.com/openclaw/skills "$T" && mkdir -p ~/.openclaw/skills && cp -r "$T/skills/am-will/morning-email-rollup" ~/.openclaw/skills/openclaw-skills-morning-email-rollup && rm -rf "$T"
skills/am-will/morning-email-rollup/SKILL.mdMorning 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:
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
# 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
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
is not installed → Calendar section is silently skipped (no errors)gog - If no events today → Calendar section is silently skipped
- If events exist → Shows formatted list with 12-hour times and titles
Requirements:
must be installed and authenticatedgog- Uses the same Google account configured for Gmail (set via
environment variable)GOG_ACCOUNT
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
with a prompt to summarize in 1 sentencegemini --model gemini-2.0-flash - 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:
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):
MAX_EMAILS=20 bash skills/morning-email-rollup/rollup.sh
Permanent: Edit
skills/morning-email-rollup/rollup.sh:
MAX_EMAILS="${MAX_EMAILS:-20}" # Change 10 to your preferred number
Change Search Criteria
Edit
skills/morning-email-rollup/rollup.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: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:
# 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:
# 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():
# 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
# 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
CLI is installed:geminiwhich gemini - Test manually:
echo "test" | gemini "Summarize this:" - Verify Gemini is authenticated (it should prompt on first run)
Wrong timezone
- Cron uses
(MST/MDT)America/Denver - 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:
- [2026-01-15 08:00:00] 🔄 Starting morning email rollup - [2026-01-15 08:00:02] ✅ Rollup complete: 15 emails