My AI Agent Sends Me a Daily Brief Before I Wake Up
How I automated a morning brief with OpenClaw: heartbeat, SearXNG, Obsidian — and the two bugs that almost broke everything.
Every morning from 7am, before I open a single tab, my AI agent has already been working.
It checked the Paris Stock Exchange. It scanned overnight AI model releases. It fetched the weather. And it summarized everything in a timestamped Markdown file in my Obsidian vault, ready to read in 90 seconds.
“I can indeed search for current data on the Paris Stock Exchange via SearXNG. Want me to generate the full brief now?” — My agent, after I activated web search
Why an Automated Morning Brief?
I’m the kind of person who opens Twitter/X when waking up. Then LinkedIn. Then a few subreddits. Forty-five minutes later, I’ve “consumed information” without having learned anything useful.
The automated morning brief changed that pattern. Instead of passive scrolling, I have an active document — structured, contextual, tied to my real priorities.
What the brief contains every morning:
- 📈 Paris Stock Exchange — top movers, volume, general trend
- 🤖 AI news — new model releases, major announcements (filtered “hype vs signal”)
- ☁️ Paris weather — with recommendation (go out? stay in?)
- 📚 Daily learning item — a concept, tool, or idea to explore
- 🎯 Priority reminder — what was flagged as “to do” in Obsidian
All of that in 90 seconds of reading. All generated while I sleep.
Step 1 — Self-hosted Web Search with SearXNG
Without web search, the agent invents stock data. With self-hosted SearXNG, it searches real sources and synthesizes them.
mkdir -p ~/searxng/searxng
cat > ~/searxng/docker-compose.yml << 'EOF'
services:
searxng:
image: searxng/searxng:latest
container_name: searxng
ports:
- "8080:8080"
volumes:
- ./searxng:/etc/searxng:rw
environment:
- SEARXNG_BASE_URL=http://localhost:8080/
restart: unless-stopped
EOF
cd ~/searxng && docker compose up -d
⚠️ Important: Use http://host.docker.internal:8080 from inside the OpenClaw container — not localhost, which points to the container itself.
Step 2 — The Prompt
cat > ~/.openclaw/workspace/prompts/morning-brief.md << 'EOF'
# Morning Brief - Moun
You are my personal assistant. Each morning, generate a structured brief
and save it in my Obsidian vault.
## Instructions
1. Search online:
- Paris Stock Exchange: CAC 40, SBF 120, top 3 gainers/losers
- AI news: major announcements from the last 24h
- Paris weather: current conditions and forecast
2. Check obsidian/Memory/priorities.md for active reminders
3. Generate a learning item related to AI, Docker or Python
## Guardrails
- Never invent financial data — real source required
- If SearXNG is unavailable → report it, don't estimate
- Max length: 400 words (brief = 90 seconds reading)
## Output file
obsidian/Journal/YYYY-MM-DD-morning-brief.md
EOF
The “never invent financial data” guardrail is essential. Without it, the model generates plausible but false numbers.
Step 3 — The Heartbeat
Instead of a cron job, I use OpenClaw’s heartbeat system: the brief generates on my first interaction after 7am — not at an arbitrary time.
cat > ~/.openclaw/workspace/HEARTBEAT.md << 'EOF'
## Scheduled tasks
### Daily morning brief
- **Goal**: Generate a brief from 7am UTC
- **Save**: obsidian/Journal/YYYY-MM-DD-morning-brief-auto.md
- **Frequency**: once per day, on first interaction after 7am UTC
EOF
💡 Why UTC? OpenClaw operates in UTC. 7am UTC = 8am Paris.

What It Actually Looks Like
Here’s a real output from March 8, 2026:
🌅 Morning Brief — March 8, 2026
📈 Paris Stock Exchange CAC 40: 8,142.35 pts (+0.52%) · SBF 120: 6,287.14 pts (+0.48%) 🟢 Top gainer: LVMH +1.6% · Airbus +1.3% 🔴 Top loser: Stellantis -1.1%
🤖 Today’s AI news • Mistral releases Devstral — code-specialized, 24B parameters • OpenAI announces o3-mini-high on API • Anthropic publishes benchmark on autonomous agent reliability
☁️ Paris weather — 17°C, partly cloudy. Good afternoon for working outdoors.
📚 Learning of the day — Docker Compose profiles: launching service subsets per environment.
Auto-generated at 08:00 — OpenClaw 🦞
90 seconds of reading. 0 minutes of scrolling.
The Two Bugs That Almost Broke Everything
Bug 1 — The socat bridge
The service connecting Docker to the Obsidian API must start before OpenClaw. Check it:
systemctl status obsidian-bridge
Bug 2 — localhost ≠ VM from inside Docker
I was using localhost:8080 for SearXNG in the prompt. From inside a container, localhost points to the container.
Fix: http://host.docker.internal:8080
These two bugs combined = silent brief, no file created. To diagnose:
docker exec -it openclaw-openclaw-gateway-1 sh
openclaw logs --tail 50 | grep -i "brief\|error"
Next in the series: I ditched the cloud model for a local one →
Partager cet article