One of the highest-value things you can build with Hermes Agent is a personalized morning briefing — a daily digest that lands in your Telegram every morning before you start work, covering exactly the information you need. No scrolling through news feeds, no checking multiple dashboards, no wasted time. Just your agent's curated intelligence, ready before your first coffee.
This guide shows you how to build it from scratch.
What Your Morning Briefing Can Contain
The power of building this yourself rather than using a news app is complete customization. Your briefing can include exactly what matters to your work and nothing that doesn't. Common elements:
For content creators and bloggers:
- Top trending topics in your niche (what people are searching and discussing)
- New articles published by competitor/reference sites in your niche
- Your website's top-performing articles from yesterday
- Social media performance summary
For AI practitioners and developers:
- Major AI model releases and updates
- New open-source tools and GitHub repositories
- Hacker News top AI stories
- OpenRouter pricing or model availability changes
For freelancers and agency owners:
- New relevant job postings or project opportunities
- Client industry news (what's happening in their sectors)
- Lead generation activity summary
- Revenue/analytics dashboard snapshot
For traders and investors:
- Market overnight summary
- Crypto price movements
- Economic calendar events for the day
- Sentiment from relevant communities
Universal elements almost everyone benefits from:
- Weather forecast for your location
- Your Google Calendar events for the day
- Priority emails received overnight
- Tasks you've deferred from yesterday
Architecture Overview
The morning briefing system has three components:
- Data collection: Hermes fetches information from multiple sources
- Synthesis: Hermes processes and summarizes the raw data into readable insights
- Delivery: The formatted briefing is sent to your Telegram at a set time
For a simple implementation, Hermes handles all three steps directly. For a more robust system, n8n handles the scheduling and data collection while Hermes handles the synthesis.
Implementation: Simple Version (Hermes Only)
Step 1: Create the Briefing Skill
On your VPS, create a new skill file:
nano ~/hermes-agent/skills/morning_briefing.py
"""
Skill: morning_briefing
Description: Generates a personalized morning briefing from multiple sources
Parameters:
- topics (list): List of topics to monitor
- calendar_check (bool): Whether to fetch calendar events
Returns:
dict with formatted briefing text
Tags: briefing, daily, automation, productivity
Version: 1.0
"""
import requests
import json
from datetime import datetime, date
def execute(topics: list = None, calendar_check: bool = False) -> dict:
if topics is None:
topics = ["AI agents", "automation", "make money online"]
sections = []
# Header
today = date.today().strftime("%A, %B %d, %Y")
sections.append(f"🌅 *Morning Briefing — {today}*\n")
# News section
news = fetch_news(topics)
if news:
sections.append("📰 *Today's Headlines*")
for item in news[:5]:
sections.append(f"• {item['title']}")
if item.get('summary'):
sections.append(f" _{item['summary'][:100]}..._")
sections.append("")
# AI-specific updates
ai_news = fetch_ai_updates()
if ai_news:
sections.append("🤖 *AI Updates*")
for item in ai_news[:3]:
sections.append(f"• {item}")
sections.append("")
# Daily quote
sections.append("💡 *Today's Focus*")
sections.append("Start with your most important task first.")
briefing_text = "\n".join(sections)
return {
"status": "success",
"result": briefing_text,
"metadata": {
"topics": topics,
"date": today,
"sections": len(sections)
}
}
def fetch_news(topics: list) -> list:
"""Fetch news for given topics via NewsAPI"""
api_key = "your_newsapi_key" # Add to .env
query = " OR ".join(topics)
try:
response = requests.get(
"https://newsapi.org/v2/everything",
params={
"q": query,
"sortBy": "publishedAt",
"pageSize": 10,
"apiKey": api_key,
"language": "en"
},
timeout=10
)
data = response.json()
articles = []
for article in data.get("articles", [])[:5]:
articles.append({
"title": article.get("title", ""),
"summary": article.get("description", ""),
"url": article.get("url", "")
})
return articles
except Exception:
return []
def fetch_ai_updates() -> list:
"""Fetch top AI stories from Hacker News"""
try:
# Get top stories
stories = requests.get(
"https://hacker-news.firebaseio.com/v0/topstories.json",
timeout=10
).json()[:30]
ai_stories = []
for story_id in stories[:30]:
story = requests.get(
f"https://hacker-news.firebaseio.com/v0/item/{story_id}.json",
timeout=5
).json()
title = story.get("title", "").lower()
if any(term in title for term in ["ai", "llm", "gpt", "claude", "agent", "ml", "neural"]):
ai_stories.append(story.get("title", ""))
if len(ai_stories) >= 3:
break
return ai_stories
except Exception:
return []
Step 2: Register the Skill
In your Telegram chat with Hermes:
Register the skill from file: skills/morning_briefing.py
Step 3: Create the Scheduled Task
Create a cron job on your VPS:
crontab -e
Add:
0 7 * * * cd /root/hermes-agent && source venv/bin/activate && python -c "
from skill_runner import run_skill
from telegram_sender import send_telegram
result = run_skill('morning_briefing', topics=['AI agents', 'automation'])
if result['status'] == 'success':
send_telegram(result['result'])
"
This runs every morning at 7:00 AM.
Implementation: Advanced Version (n8n + Hermes)
For more data sources and better reliability, use n8n to orchestrate the data collection and call Hermes for synthesis.
n8n Workflow Structure
Node 1: Schedule Trigger
- Time: 6:45 AM daily
- Purpose: Kick off the morning briefing pipeline
Node 2: HTTP Request — Weather
{
"url": "https://api.openweathermap.org/data/2.5/weather",
"params": {
"q": "Your City",
"appid": "YOUR_OPENWEATHER_KEY",
"units": "metric"
}
}
Node 3: HTTP Request — News API
{
"url": "https://newsapi.org/v2/everything",
"params": {
"q": "artificial intelligence OR AI agents",
"sortBy": "publishedAt",
"pageSize": 10,
"apiKey": "YOUR_NEWSAPI_KEY"
}
}
Node 4: Google Calendar
- Fetch today's events
- Requires Google Calendar OAuth credential in n8n
Node 5: Gmail
- Fetch unread emails from last 12 hours
- Filter: important/starred only
Node 6: HTTP Request — Hermes Synthesis
{
"url": "http://your-hermes-server:8080/api/synthesize",
"method": "POST",
"body": {
"weather": "{{ $node['Weather'].json }}",
"news": "{{ $node['News'].json.articles }}",
"calendar": "{{ $node['Calendar'].json }}",
"emails": "{{ $node['Gmail'].json }}",
"instruction": "Create a concise, actionable morning briefing from this data. Use Telegram markdown formatting. Be specific and useful, not generic."
}
}
Node 7: Telegram
- Send the synthesized briefing to your Telegram
- Format: Markdown enabled
Customizing Your Briefing
Adding Your Website Analytics
If you're running a content site, add a Google Analytics node to n8n that fetches yesterday's sessions, top pages, and traffic sources. Include this in the synthesis prompt: "My website had X visitors yesterday. Top page was Y."
Adding Crypto/Stock Prices
Use the CoinGecko API (free, no key needed) for crypto:
https://api.coingecko.com/api/v3/simple/price?ids=bitcoin,ethereum&vs_currencies=usd&include_24hr_change=true
Adding Your Tasks (Notion or Todoist)
Pull your top 3 priority tasks for the day from Notion or Todoist. Include in synthesis: "Today's priorities: [list]."
Personalizing the AI Summary Prompt
The quality of Hermes's synthesis depends heavily on your prompt. A strong synthesis prompt:
You are my personal executive assistant. Generate my morning briefing using the following data.
Format for Telegram (use bold, italics, emojis appropriately):
1. One-sentence weather summary with what to wear
2. Top 3 AI/tech news items with a one-line why-it-matters for each
3. My calendar: list today's events with times
4. Email summary: any emails requiring action today
5. Today's focus: one specific goal based on my context
My context: I run an AI content website and automation agency. I care about: AI agent news, automation tools, content marketing, passive income strategies.
Be concise. Prioritize actionable information over interesting-but-irrelevant information.
Expanding to Evening Briefings
Once your morning briefing is running reliably, consider adding:
Noon check-in (12:00 PM): Progress update on morning tasks, any urgent items that arose.
Evening briefing (6:00 PM):
- What you accomplished today
- Analytics summary (website traffic, social engagement)
- Tomorrow's calendar preview
- Three things to do tomorrow
The evening briefing requires Hermes to have context on your day's activities. You can feed this by having Hermes log your major activities throughout the day, or by sending it a brief "today I did X, Y, Z" message at end of day.
Troubleshooting
Briefing not arriving:
- Check cron job is running:
crontab -l - Check Hermes is running:
systemctl status hermes - Check logs:
tail -50 /root/hermes-agent/hermes.log
News sections empty:
- Verify your NewsAPI key is valid (free key has 100 requests/day)
- Check your internet connection from the VPS:
curl https://newsapi.org
Telegram message not delivered:
- Verify your bot token is correct
- Verify you've started a conversation with your bot
- Check your user ID in TELEGRAM_AUTHORIZED_USERS
Once running reliably, your morning briefing becomes one of those things you can't imagine not having. Starting the day with targeted intelligence rather than a random scroll through social media is one of the clearest productivity gains AI delivers.
Published on ai.quantummerlin.com — Your source for practical AI agent intelligence