Automated daily morning briefing generator. Fetches weather, calendar, news, AI/tech updates, OpenClaw insights, and actionable tips. Delivers via iMessage a...
---
name: daily-briefing
description: Automated daily morning briefing generator. Fetches weather, calendar, news, AI/tech updates, OpenClaw insights, and actionable tips. Delivers via iMessage at 7am daily.
homepage: https://github.com/nudge/openclaw-skills/tree/main/daily-briefing
metadata:
{
"openclaw":
{
"emoji": "π°",
"requires": { "bins": ["curl", "python3"] },
"schedule": "0 7 * * *",
"delivery": "paulkingham@mac.com",
},
}
---
# Daily Morning Briefing
An automated daily briefing that compiles weather, calendar, news, AI/tech updates, and OpenClaw insights into a concise morning message delivered via iMessage.
## What It Does
Every morning at 7am, the briefing delivers:
1. **Weather** β Current conditions and forecast for Leyton, London
2. **Calendar** β Today's events and context
3. **Top 5 News** β Headlines from trusted sources
4. **AI/Tech Pulse** β 3-4 interesting developments in AI and technology
5. **OpenClaw Deep Dive** β News, new skills, community highlights, suggestions
6. **Two Things to Try** β Actionable improvements for your workflow
## Quick Start
### Run manually
```bash
cd /Users/nudge/openclaw/skills/daily-briefing
./scripts/generate-briefing.sh
```
### Send via iMessage
```bash
cd /Users/nudge/openclaw/skills/daily-briefing
./scripts/send-briefing.sh paulkingham@mac.com
```
## Configuration
Edit `/Users/nudge/openclaw/skills/daily-briefing/config/config.yaml`:
```yaml
location:
city: "Leyton"
region: "London"
country: "UK"
latitude: 51.5667
longitude: -0.0167
delivery:
recipient: "paulkingham@mac.com"
channel: "imessage"
time: "07:00"
timezone: "Europe/London"
content:
news_sources:
- "bbc"
- "guardian"
- "techcrunch"
ai_sources:
- "openai"
- "anthropic"
- "hacker-news"
max_news_items: 5
max_ai_items: 4
preferences:
temperature_unit: "celsius"
include_weather_icon: true
include_calendar_details: true
```
## Cron Setup
The briefing runs automatically via OpenClaw's cron system:
```bash
# Check current cron jobs
openclaw cron list
# The briefing is pre-configured. To update schedule:
openclaw cron update daily-briefing --schedule="0 7 * * *"
```
### Manual cron entry (if needed)
Add to your system crontab (runs in OpenClaw context):
```cron
0 7 * * * cd /Users/nudge/openclaw/skills/daily-briefing && ./scripts/generate-and-send.sh
```
## Scripts
| Script | Purpose |
|--------|---------|
| `generate-briefing.sh` | Generates briefing text to stdout |
| `send-briefing.sh <recipient>` | Generates and sends via iMessage |
| `generate-and-send.sh` | Full pipeline (used by cron) |
| `lib/weather.py` | Weather fetching module |
| `lib/news.py` | News aggregation module |
| `lib/calendar.py` | Calendar context module |
| `lib/ai_pulse.py` | AI/tech news module |
| `lib/openclaw_dive.py` | OpenClaw insights module |
## Customization
### Change location
Edit `config/config.yaml` and update the `location` section.
### Add news sources
Modify `lib/news.py` to add RSS feeds or APIs. Default sources:
- BBC News
- The Guardian
- TechCrunch
- Hacker News
### Change delivery time
Update the cron schedule:
```bash
openclaw cron update daily-briefing --schedule="0 8 * * *" # 8am instead
```
### Customize content sections
Edit `scripts/generate-briefing.sh` and comment out sections you don't want:
```bash
# Sections (comment out to disable)
SECTIONS=(
weather
calendar
news
ai_pulse
openclaw_dive
suggestions
)
```
## Output Format
The briefing produces a well-formatted message like:
```
π° Good morning! Here's your briefing for Monday, February 16
π€οΈ Weather in Leyton
Partly cloudy, 8Β°C / 46Β°F
High: 12Β°C Β· Low: 5Β°C
π§ 10% rain Β· π¨ 12km/h wind
π
Today
09:00 - Team standup
14:00 - Client call (Zoom)
π° Top Stories
β’ Headline one...
β’ Headline two...
β’ Headline three...
β’ Headline four...
β’ Headline five...
π€ AI/Tech Pulse
β’ OpenAI releases new feature...
β’ Anthropic updates Claude...
β’ Hacker News trending: ...
π¦Ύ OpenClaw Deep Dive
New this week: skill-name (description)
Community highlight: ...
Try this: ...
π‘ Two Things to Try
1. First suggestion...
2. Second suggestion...
```
## Troubleshooting
### Weather not loading
- Check internet connection
- Verify wttr.in is accessible: `curl wttr.in/London?format=3`
- Try fallback to Open-Meteo API
### Calendar empty
- Ensure calendar access permissions for terminal
- Check that Calendar.app has events today
- Verify `icalBuddy` is installed (optional, for richer calendar data)
### iMessage not sending
- Confirm Messages.app is signed in
- Check recipient address is correct
- Verify Automation permission in System Settings
- Test manually: `imsg send --to "recipient" --text "test"`
### News not appearing
- News sources may require API keys for production use
- Default implementation uses web search for headlines
- For production, add API keys to `config/secrets.yaml`
## Dependencies
**Required:**
- `curl` β for web requests
- `python3` β for data processing
**Optional (enhanced features):**
- `imsg` β for iMessage delivery (via Homebrew: `brew install steipete/tap/imsg`)
- `icalBuddy` β for rich calendar data
- `jq` β for JSON processing
## Architecture
```
βββββββββββββββββββ
β Cron (7am) β
ββββββββββ¬βββββββββ
β
ββββββββββΌβββββββββ
β generate-and- β
β send.sh β
ββββββββββ¬βββββββββ
β
ββββββ΄βββββ¬βββββββββ¬βββββββββ¬βββββββββββ¬βββββββββββ
βΌ βΌ βΌ βΌ βΌ βΌ
βββββββββ ββββββββ ββββββββ ββββββββββ ββββββββββββ βββββββββββ
βweatherβ βcalendarβ βnews β βai_pulseβ βopenclaw β βsuggestionsβ
β .py β β .py β β .py β β .py β β_dive.py β β .py β
ββββββ¬βββ βββββ¬βββββ ββββ¬ββββ ββββββ¬ββββ ββββββ¬ββββββ ββββββ¬βββββ
βββββββββββ΄ββββββββββ΄βββββββββββ΄βββββββββββ΄βββββββββββββ
β
ββββββββββΌβββββββββ
β format-output β
ββββββββββ¬βββββββββ
β
ββββββββββΌβββββββββ
β imsg send β
βββββββββββββββββββ
```
## Updates & Maintenance
The skill self-documents its last run. Check status:
```bash
cat /Users/nudge/openclaw/skills/daily-briefing/.last-run
cat /Users/nudge/openclaw/skills/daily-briefing/.last-status
```
To update the skill itself:
```bash
cd /Users/nudge/openclaw/skills/daily-briefing
git pull # If tracked in git
```
## Ideas to Extend
- **Weekend edition** β Different content for Saturdays/Sundays
- **Pre-meeting briefings** β 15-min before calendar events
- **Travel mode** β Weather for destination city
- **Stock/crypto prices** β Add financial tickers
- **Podcast recommendations** β Based on listening history
- **Fitness summary** β Previous day's activity stats
- **Smart home status** β Brief overview of connected devices
don't have the plugin yet? install it then click "run inline in claude" again.