Daily Briefing Agent
Get a comprehensive morning briefing with weather, calendar, emails, news, and tasks
🧂 Ingredients
🔌 APIs
weather_forecast_temperature_conditions_rain_probability
🔄 Alternatives:
today_s_schedule_and_upcoming_events
🔄 Alternatives:
unread_email_count_and_important_message_summaries
🔄 Alternatives:
top_news_headlines_in_your_industry
🔄 Alternatives:
priority_tasks_due_today
🔄 Alternatives:
📋 Step-by-Step Build Guide
Set up a 7
1. Set up a 7:30am daily cron job
Configure the scheduled job to run at the specified time. Define the cron schedule: minute hour day-of-month month day-of-week Common patterns: - Daily at 7:30am: "30 7 * * *" - Weekdays at 9am: "0 9 * * 1-5" - Every 5 minutes: "*/5 * * * *" - First of month at 8am: "0 8 1 * *" The job should: 1. Log start time 2. Execute the pipeline steps in sequence 3. Handle failures gracefully — retry transient errors, skip and alert on persistent ones 4. Log completion time and status 5. Send output through the configured delivery channel
🧑 Human Required
- • ## Configure the Schedule Your agent needs to know when to run this task. You'll be asked: - **When**: Time of day and timezone (e.g., "7:30 AM Eastern") - **How often**: Daily, weekdays only, weekly, etc. - **Delivery**: Where to send results (Slack, email, SMS, etc.) The agent handles the scheduling — you just set your preferences.
Pull weather forecast for your location via OpenWeatherMap
2. Pull weather forecast for your location via OpenWeatherMap — temp, conditions, rain probability
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.Pull today's Google Calendar events
3. Pull today's Google Calendar events — start times, titles, locations, attendees
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."Check Gmail for unread emails
4. Check Gmail for unread emails — count, and summarize any marked important
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.
Search Brave for top 3 news headlines in your industry or interests
5. Search Brave for top 3 news headlines in your industry or interests
Search the web using the Brave Search API.
GET https://api.search.brave.com/res/v1/web/search?q={query}&count=10&freshness=pd
Headers: X-Subscription-Token: {BRAVE_API_KEY}
Parse the results: extract title, URL, description for each result.
Deduplicate results from the same domain.
Score relevance based on: keyword match in title (high), recency (high), source authority (medium).
Return the top results with: title, 2-sentence summary, source URL, and publish date.
If the search returns no results, try broadening the query by removing the least important keyword.Pull tasks due today from Todoist with priority levels
6. Pull tasks due today from Todoist with priority levels
Pull tasks due today from Todoist with priority levels 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.
Compile everything into a formatted morning briefing message
7. Compile everything into a formatted morning 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."
Deliver via your preferred channel
8. Deliver via your preferred channel — SMS, push notification, Slack, or email
Send the compiled content via email using the configured email API.
Compose the email:
- To: {recipient_email}
- Subject: {subject_line}
- Body: Format as clean HTML with proper headings, bullet points, and styling.
Use inline CSS for compatibility. Keep it mobile-friendly (max-width: 600px).
Send via the configured email provider (SendGrid, Resend, or SES).
Verify the response indicates successful delivery (202 for SendGrid, 200 for Resend).
Log: timestamp, recipient, subject, and delivery status.
If send fails, retry once after 3 seconds. If it fails again, save the email content locally and alert the user.🤖 Example Agent Prompt
Configure the scheduled job to run at the specified time. Define the cron schedule: minute hour day-of-month month day-of-week Common patterns: - Daily at 7:30am: "30 7 * * *" - Weekdays at 9am: "0 9 * * 1-5" - Every 5 minutes: "*/5 * * * *" - First of month at 8am: "0 8 1 * *" The job should: 1. Log start time 2. Execute the pipeline steps in sequence 3. Handle failures gracefully — retry transient errors, skip and alert on persistent ones 4. Log completion time and status 5. Send output through the configured delivery channel
Copy this prompt into your agent to get started.