Build an AI Morning Briefing Bot That Texts You at 7 AM

AgentRoost · May 31, 2026 · 7 min read · View as Markdown
AgentRoost — AI Agents

Most mornings go like this: open phone, skim calendar, check Slack, maybe glance at the news, forget half of it by the time coffee is ready. A morning briefing bot collapses that into a single Telegram message that arrives before you even pick up the device. You decide what's in it, and it runs every day without you triggering it.

This guide builds that bot from first principles. You'll end up with a self-scheduling agent that wakes at 7 AM, fetches your data, generates a focused summary using an LLM, and pushes it to your phone. No server to maintain, no cron job to configure separately, no API key to paste in.


What the Bot Actually Does

The briefing agent runs on a cron-style schedule. Each morning it:

  1. Checks a predefined list of sources (a weather API, a news RSS feed, your Google Calendar, and optionally a task manager like Todoist or Linear)
  2. Feeds the raw data into an LLM prompt
  3. Gets back a concise, human-readable summary — five to eight lines
  4. Sends it to you via a private Telegram message

That's it. You never open a dashboard. The message just arrives.


Building It Step by Step

Step 1 — Define What Goes Into Your Briefing

Before writing a single line of config, decide on your sources. A practical default set:

  • Today's weather — use the free Open-Meteo API (no key required). A GET request returns temperature, precipitation, wind.
  • Top headlinesNewsAPI has a free developer plan; pick one or two topics (e.g., technology, business). The endpoint is https://newsapi.org/v2/top-headlines?category=technology&pageSize=5.
  • Calendar events — Google Calendar's API returns today's events as JSON after a one-time OAuth setup.
  • Open tasks — Todoist REST API: GET https://api.todoist.com/rest/v2/tasks?filter=today returns today's due items.

You don't need all four. Starting with just weather + news gives you a working bot in 20 minutes. Add the rest incrementally.

Step 2 — Write the Prompt Template

The LLM step is the core. Here's a prompt template that produces consistently tight output:

You are a personal morning briefing assistant.
Today is {{date}}. The user's timezone is {{timezone}}.

Weather: {{weather_summary}}
Top headlines: {{headlines}}
Calendar today: {{calendar_events}}
Tasks due today: {{tasks}}

Write a briefing under 120 words. Lead with the weather in one sentence.
List up to 3 headline titles. Mention calendar events in order. List tasks
as a short bullet list. Friendly but direct tone, no filler phrases.

Keep the output cap explicit — "under 120 words" — otherwise the LLM will pad. Telegram messages don't need to be essays.

Step 3 — The Schedule Trigger

The schedule is what turns this from a one-shot script into an always-on agent. In Hermes, you define a scheduled task with a cron expression:

{
  "schedule": "0 7 * * *",
  "timezone": "Europe/Amsterdam",
  "task": "morning_briefing"
}

0 7 * * * fires at exactly 07:00 every day. Change the timezone to match yours — America/New_York, Asia/Istanbul, whatever. The scheduler runs server-side; the agent doesn't need your laptop open.

The key constraint: the runtime has to be always on. A serverless function that cold-starts at 7 AM will sometimes miss the window, rate-limit on the LLM call, or drop the Telegram message. A persistent agent process sidesteps all of that.

Step 4 — Telegram Delivery

Hermes provisions a Telegram bot for you automatically. When your agent's output is ready, it calls the bot's sendMessage API internally — you don't configure BotFather, you don't manage a bot token, you just receive the message.

The output from Step 2 maps directly to a message. Here's what a finished briefing looks like in practice:

Good morning. Today in Amsterdam: 14°C, partly cloudy, no rain.

Headlines:
• EU proposes new AI liability framework
• OpenAI releases GPT-4o mini update
• Markets open flat after Fed minutes

Calendar: 10:00 Team standup · 14:30 Client call (Acme)

Tasks due: Write proposal draft · Review PR #88 · Renew domain

Have a focused day.

Clean, no fluff, under 120 words. Arrives at 7 AM without you touching anything.

Step 5 — Wire the Data Fetches

In Hermes, the data fetching is configured as a list of tool calls that run before the LLM step. A minimal config:

{
  "tools": [
    {
      "name": "fetch_weather",
      "type": "http_get",
      "url": "https://api.open-meteo.com/v1/forecast?latitude=52.37&longitude=4.89&current=temperature_2m,precipitation,wind_speed_10m"
    },
    {
      "name": "fetch_headlines",
      "type": "http_get",
      "url": "https://newsapi.org/v2/top-headlines?category=technology&pageSize=3",
      "headers": { "X-Api-Key": "{{NEWSAPI_KEY}}" }
    }
  ]
}

The {{NEWSAPI_KEY}} placeholder maps to a secret you store in your workspace — one-time setup, never exposed in your config files. The outputs of both calls are injected into the prompt template as {{weather_summary}} and {{headlines}}.


Tips and Pitfalls

Timezone math is the most common failure. If your briefing arrives at 10 AM instead of 7 AM, you've set the cron in UTC but the wrong local offset. Always specify timezone explicitly in the schedule config rather than relying on UTC arithmetic.

Keep the tool calls fast. If one of your data fetches times out, the whole briefing is delayed. Open-Meteo is reliably fast. NewsAPI's free developer plan can occasionally be slow — set a 4-second timeout and fall back gracefully ("on_error": "skip").

LLM output length drift. Even with an explicit word cap in the prompt, some models will run long on certain days. Add a post-processing step that truncates at 150 words before sending to Telegram. Better a truncated message than a wall of text.

Don't include sensitive data in the prompt template by default. If your calendar has meeting names you'd rather not send to an external LLM, redact the event title and keep only the time and duration.


How to Do This on AgentRoost

The fastest path to a running briefing bot:

  1. Sign up at agentroost.app — email/password or Google/Microsoft/Discord in 30 seconds.
  2. Pick the Hermes framework from the agent picker.
  3. Name your agent (e.g., morning-briefing). It provisions instantly.
  4. Open the AgentRoost manager bot on Telegram and /start your agent. That links your Telegram account. No BotFather, no token copy-pasting.
  5. Add your schedule and tool config through the workspace interface.
  6. Set any API secrets (NewsAPI key, Todoist token) in the workspace secrets panel — they're encrypted at rest.
  7. Drop the prompt template in, save, and wait for 7 AM tomorrow.

The AI credits that power the LLM call are already included in your plan — you don't paste an OpenAI key, you don't pay per-call on top of your subscription. Pick from 350+ models and swap anytime if you want a different one.

Starts at $19.99/mo all-in, cancel anytime, 14-day money-back guarantee.

Get started with Hermes → · Compare plans


What to Add Next

Once the baseline works, the obvious extensions:

  • Stock portfolio snapshot — a single Alpha Vantage call for your tickers.
  • Email subject digest — Gmail API, filter to unread important senders.
  • Commute ETA — Google Maps Distance Matrix API, only on weekdays (0 7 * * 1-5).
  • Different tone on weekends — add a day-of-week condition in the prompt: if today is Saturday or Sunday, use a relaxed tone and skip the task list.

None of these require a new service. They're additional tool calls in the same agent, running on the same schedule.

Frequently asked questions

Do I need to provide my own OpenAI or Anthropic API key?

No. AI/LLM credits are included in every AgentRoost plan. The LLM calls your briefing bot makes are already covered — you don't paste any key anywhere. You can choose from 350+ models and switch anytime without touching a key.

What if I want the briefing at a different time or on weekdays only?

Change the cron expression in your schedule config. 0 8 * * * fires at 8 AM every day. 0 7 * * 1-5 fires Monday through Friday only. Always specify your timezone explicitly (e.g., Europe/Istanbul) so the agent converts correctly — don't rely on UTC.

Will the bot keep running if I close my laptop or turn off my computer?

Yes. The agent runs on AgentRoost's always-on infrastructure. The schedule fires server-side regardless of whether your device is online. That's the core point of a hosted persistent agent versus a local cron job.

Can I cancel if it doesn't work for me?

Yes. Plans are month-to-month with no lock-in, and there's a 14-day money-back guarantee. Cancel anytime from your account dashboard — no hoops.

What data sources can I connect?

Anything that has an HTTP API. Open-Meteo (weather, free, no key), NewsAPI (headlines), Google Calendar (OAuth), Todoist, Linear, Gmail, GitHub — all work via the HTTP tool type in Hermes. Secrets like API keys are stored encrypted in your workspace and referenced by name in the config.