Skill skill

Morning Email Rollup

Automatically generates a daily summary of important emails and delivers it to Telegram at 8am Denver time. Setup export GOG_ACCOUNT="[email protected]" Or edit the script dire…

Updated Apr 6, 2026 By One Person Company Editorial Team Skill system

Overview

Automatically generates a daily summary of important emails and delivers it to Telegram at 8am Denver time. Setup 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

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 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
  • Extracts the email body (cleans HTML/CSS)
  • The summary is medium-to-long length natural language (not scraped content)
  • 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)
  • 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 \
  • 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 ...)

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:

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 Routing

Current: balanced (speed/quality tradeoff)

"prefer": "balanced"

Prefer quality (uses best available LLM)

"prefer": "quality"

Prefer price (uses most cost-efficient model)

"prefer": "price" 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 If key is missing, the script falls back to a plain text excerpt 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:
  • [2026-01-15 08:00:00] 🔄 Starting morning email rollup
  • [2026-01-15 08:00:02] ✅ Rollup complete: 15 emails

Direct Answer

Use this skill when you need one clear operating move, one measurable outcome, and one next step that can ship today.

Evidence To Collect

  • The baseline metric before the change
  • The specific page, workflow, or offer being improved
  • A before/after comparison you can reuse in a report or case study

What Good Looks Like

  • The deliverable is specific and easy to verify
  • The page includes proof, not just advice
  • The next action is obvious for a solo operator

SKILL.md file

Embedded doc viewer SKILL.md
Markdown source

Preview raw SKILL.md. Open the full source below. Scroll, inspect, then download the exact SKILL.md file if you want the original.

# morning-email-rollup

Morning Email Rollup

Automatically generates a daily summary of important emails and delivers it to Telegram at 8am Denver time.
Setup
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
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
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
Extracts the email body (cleans HTML/CSS)
The summary is medium-to-long length natural language (not scraped content)
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)
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 \
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:[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:
# 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 Routing
# Current: balanced (speed/quality tradeoff)
"prefer": "balanced"
# Prefer quality (uses best available LLM)
"prefer": "quality"
# Prefer price (uses most cost-efficient model)
"prefer": "price"
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
If key is missing, the script falls back to a plain text excerpt
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:
- [2026-01-15 08:00:00] 🔄 Starting morning email rollup
- [2026-01-15 08:00:02] ✅ Rollup complete: 15 emails

## Direct Answer
Use this skill when you need one clear operating move, one measurable outcome, and one next step that can ship today.

## Evidence To Collect
- The baseline metric before the change
- The specific page, workflow, or offer being improved
- A before/after comparison you can reuse in a report or case study

## Source Links To Cite
- The live page or workflow this skill applies to
- Any benchmark, policy, or vendor doc that supports the recommendation

## What Good Looks Like
- The deliverable is specific and easy to verify
- The page includes proof, not just advice
- The next action is obvious for a solo operator

Comments & Discussion

Add a comment