← Back to Directory
☀️

Daily Briefing Agent

Get a comprehensive morning briefing with weather, calendar, emails, news, and tasks

🤖 00 ↓  |  👤 00
beginner25 minutes🔄 14 swappable alternatives

🧂 Ingredients

🔌 APIs

weather_forecast_temperature_conditions_rain_probability

🔄 Alternatives:

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

today_s_schedule_and_upcoming_events

🔄 Alternatives:

Outlook Calendar Microsoft ecosystemCal Com Open-source scheduling

unread_email_count_and_important_message_summaries

🔄 Alternatives:

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

top_news_headlines_in_your_industry

🔄 Alternatives:

Serpapi Google results via API, structured dataGoogle Search Direct Google search APIBing Search Microsoft search with good API

priority_tasks_due_today

🔄 Alternatives:

Notion All-in-one workspace with tasksLinear Better for dev team task managementThings Beautiful Apple-native task manager

📋 Step-by-Step Build Guide

STEP 1

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.
STEP 2

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.
STEP 3

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."
STEP 4

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.
STEP 5

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.
STEP 6

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.
STEP 7

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."
STEP 8

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.

☀️ Daily Briefing Agent — PincerAPI Cookbook