I Set Up an AI Brief That’s Waiting for Me Every Morning. Here’s What’s in It.

A field report on automation 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.
This isn’t magic. It’s an intelligent automation system and a web search. But the result genuinely changes how I start my day.

“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 of the day, 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 of it generated while I sleep.
Web Search First
If you’re following this guide after reading the first article, you already have OpenClaw + Obsidian running.
Without web search, the agent invents stock data. With self-hosted SearXNG, it searches real sources and synthesizes them. Brave Search dropped its free tier in February 2026 — SearXNG is the community solution: free, self-hosted, aggregates Google + DuckDuckGo + Bing + Wikipedia.
bash
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: SearXNG must be accessible from the OpenClaw container. Use http://host.docker.internal:8080 — not localhost, which points to the container itself.
The Prompt — The Central Piece
The prompt defines exactly what the agent does on each trigger. It lives in the OpenClaw workspace, modifiable without restarting.
cat > ~/.openclaw/workspace/prompts/morning-brief.md << 'EOF'
# Morning Brief - Moun
You are my personal assistant. Each morning, you generate a structured brief
and save it in my Obsidian vault.
## Instructions
1. Search for the following data online:
- Paris Stock Exchange: day's indices (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.
The Heartbeat — Smarter Than a Fixed Cron
Instead of a traditional cron that runs at a fixed time, I use OpenClaw’s heartbeat system. It’s more adapted to real usage: the brief generates on my first interaction of the day after 7am, not at an arbitrary time when I might be asleep.
cat > ~/.openclaw/workspace/HEARTBEAT.md << 'EOF'
# HEARTBEAT.md
## Scheduled tasks
### Daily morning brief
- **Goal**: Generate a brief from 7am UTC
- **Content**:
1. Paris Stock Exchange
2. AI news & model releases
3. One interesting thing to learn
- **Save**: obsidian/Journal/YYYY-MM-DD-morning-brief-auto.md
- **Frequency**: once per day, on first interaction after 7am UTC
EOF
💡 Why UTC and not local time? OpenClaw operates in UTC internally. 7am UTC = 8am Paris — which corresponds to my wake-up time.
The practical advantage: if I connect at 7:30am, the brief is ready. If I connect at 10am, it’s generated at that moment. No wasted resources, no missed brief.

What It Actually Looks Like
Here’s a brief generated on 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 model, 24B parameters
- OpenAI announces o3-mini-high available on API
- Anthropic publishes a benchmark on autonomous agent reliability
☁️ Paris weather 17°C, partly cloudy. Wind 15 km/h NW. → Good afternoon for working outdoors
📚 Learning of the day Docker Compose profiles — launching service subsets per environment (dev/prod). Useful for my multi-container setup.
🎯 Active reminders
- Configure SearXNG for Docker access ✅
- Publish Medium article #2
Auto-generated at 08:00 — OpenClaw 🦞
90 seconds of reading. 0 minutes of scrolling.
Customizing the Brief
The base brief is a starting point. Each line of the prompt is a capability you can enable or disable without restarting.
If you track specific stocks:
Watch these tickers: MC, AI, SAN — price + daily change
If you manage projects:
Check obsidian/Knowledge/active-projects.md → list the 3 next actions
If you want business intelligence:
Scan Product Hunt and Hacker News for today's B2B SaaS opportunities
What Almost Didn’t Work
Honest disclosure: the first version triggered but wrote nothing to Obsidian. No visible error. Two simultaneous bugs.
Bug 1 — The socat bridge
The service that connects Docker to the Obsidian API must be started before OpenClaw. The order in docker-compose.yml isn’t enough because socat runs outside Docker.
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 — not the VM.
Fix: http://host.docker.internal:8080
These two bugs together = silent brief, no file created. To diagnose:
docker exec -it openclaw-openclaw-gateway-1 sh
openclaw logs --tail 50 | grep -i "brief|error"
The Real Benefit
It’s not the automation itself that changes things. It’s signal vs noise.
Before: I was reading dozens of sources, filtering manually, losing context. Now: the agent filters according to my criteria, in the format I defined, in the tool I already use.
The difference between an AI tool and an AI assistant is exactly that — continuity and context.
If you attempt the setup, let me know in the comments where you get stuck. I reply to everyone.
I Set Up an AI Brief That’s Waiting for Me Every Morning. Here’s What’s in It. was originally published in Towards AI on Medium, where people are continuing the conversation by highlighting and responding to this story.