← 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.
🤖 0 ↑ 0 ↓ | 👤 0 ↑ 0 ↓
beginner⏱ 5 min setup🔄 8 swappable alternatives
🧂 Ingredients
🔌 APIs
Get local weather forecastrequired
get_local_weather_forecast
🔄 Alternatives:
Weatherapi — Better free tier, more dataVisual Crossing — Historical data includedTomorrow Io — Minute-by-minute forecasts
Pull today's eventsrequired
pull_today_s_events
🔄 Alternatives:
Outlook Calendar — Microsoft ecosystemCal Com — Open-source scheduling
Summarize unread emailsrequired
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 * * *