← Back to Directory
🍳

Morning Briefing Cron

Every day at 7am: weather + calendar + email summary + tasks due today. Your personal morning dashboard delivered before you wake up.

🤖 00 ↓  |  👤 00
beginner5 min setup🔄 8 swappable alternatives

🧂 Ingredients

🔌 APIs

get_local_weather_forecast

🔄 Alternatives:

Weatherapi Better free tier, more dataVisual Crossing Historical data includedTomorrow Io Minute-by-minute forecasts

pull_today_s_events

🔄 Alternatives:

Outlook Calendar Microsoft ecosystemCal Com Open-source scheduling

summarize_unread_emails

🔄 Alternatives:

Outlook Microsoft ecosystem integrationSendgrid Transactional email at scaleMailgun Developer-friendly email API

📋 Step-by-Step Build Guide

STEP 1

Fetch current weather and today's forecast via OpenWeatherMap

Fetch current weather and today's forecast via OpenWeatherMap

Use the OpenWeatherMap API to fetch weather data for the user's location.

GET https://api.openweathermap.org/data/2.5/forecast?q={city}&appid={api_key}&units=imperial

Extract: current temperature, conditions, humidity, wind speed, and rain probability.
Format concisely: "72°F, Partly Cloudy, 45% humidity, 8mph wind, 10% rain"

If the API returns an error, retry once with a 2-second delay. If it fails again, use "Weather data unavailable" as a placeholder and continue with the remaining steps.
STEP 2

Pull today's calendar events from Google Calendar

Pull today's calendar events from Google Calendar

Fetch today's calendar events using the Google Calendar API.

GET https://www.googleapis.com/calendar/v3/calendars/{calendarId}/events?timeMin={todayStart}&timeMax={todayEnd}&orderBy=startTime&singleEvents=true

For each event, extract: summary (title), start/end time, location, attendees (names + emails), description.
Sort chronologically. Flag any conflicts (overlapping events).
Format each event as: "9:00-10:00 AM | Team Standup | Conference Room B | 5 attendees"

If no events today, return "No events scheduled today."
STEP 3

Scan unread emails from Gmail, summarize top 5 by urgency

Scan unread emails from Gmail, summarize top 5 by urgency

Fetch unread emails from Gmail using the Gmail API.

GET https://gmail.googleapis.com/gmail/v1/users/me/messages?q=is:unread&maxResults=20

For each message, GET the full message to extract: sender, subject, date, snippet.
Classify each email:
- 🔴 Urgent: needs reply today (from known contacts, contains "urgent", "ASAP", time-sensitive)
- 🟡 Action Required: needs a response but not time-critical
- 🔵 FYI: newsletters, notifications, CC'd threads
- ⚪ Low Priority: automated receipts, marketing

Return: total unread count, then the top 5 by urgency with sender, subject, and classification.
STEP 4

Check task manager for items due today

Check task manager for items due today

Check task manager for items due today

Steps:
1. Validate all required inputs are available
2. Execute the operation described above
3. Verify the result meets expected output format
4. Handle errors gracefully — retry transient failures, log and alert on persistent ones
5. Return structured output with status and any relevant data

If any required data is missing, request it from the user before proceeding.
STEP 5

Compile into a single briefing message

Compile into a single briefing message

Compile the gathered data into a structured report.

Format as clean Markdown with:
- Title/date header
- Executive summary (2-3 sentences)
- Key metrics section with actual numbers
- Detailed sections with bullet points
- Action items or recommendations at the end

Keep it scannable — busy people read reports in 30 seconds.
Use emoji sparingly for visual anchors (📊 metrics, ✅ wins, ⚠️ concerns, 📋 action items).
Include data comparisons: "X this period vs Y last period (↑Z%)"

If any data source was unavailable, note it clearly: "⚠️ [Source] data unavailable — excluded from this report."
STEP 6

Deliver via preferred channel (Slack, iMessage, Discord, etc.)

Deliver via preferred channel (Slack, iMessage, Discord, etc.)

Deliver via preferred channel (Slack, iMessage, Discord, etc.)

Steps:
1. Validate all required inputs are available
2. Execute the operation described above
3. Verify the result meets expected output format
4. Handle errors gracefully — retry transient failures, log and alert on persistent ones
5. Return structured output with status and any relevant data

If any required data is missing, request it from the user before proceeding.

🤖 Example Agent Prompt

Use the OpenWeatherMap API to fetch weather data for the user's location.

GET https://api.openweathermap.org/data/2.5/forecast?q={city}&appid={api_key}&units=imperial

Extract: current temperature, conditions, humidity, wind speed, and rain probability.
Format concisely: "72°F, Partly Cloudy, 45% humidity, 8mph wind, 10% rain"

If the API returns an error, retry once with a 2-second delay. If it fails again, use "Weather data unavailable" as a placeholder and continue with the remaining steps.

Copy this prompt into your agent to get started.

⏰ Automation Ideas

  • 0 7 * * *
🍳 Morning Briefing Cron — PincerAPI Cookbook