How to Build a Morning Briefing Agent with OpenClaw in Paradime
Feb 26, 2026
How to Build a Paradime OpenClaw Morning Briefing: Automate Your Day Before It Starts
Every incident starts the same way: someone finds out too late. A missed calendar conflict, a buried urgent email, a weather disruption nobody planned for. The "time to first clue" — the gap between something going wrong and someone noticing — is where most operational damage happens.
What if you could collapse that gap to zero every morning?
This guide walks you through building an automated morning briefing using OpenClaw (the open-source AI agent framework) orchestrated through Paradime's Bolt scheduler. By the time you pour your coffee, a structured daily digest of calendar events, urgent emails, weather forecasts, and pipeline status lands in your Slack channel — every single day, at 7 AM, without fail.
The approach is incident-friendly by design: structured steps, reproducible configuration, and minimal moving parts.
What Is Paradime?
Paradime is an AI-native data platform — often described as "Cursor for Data" — that replaces dbt Cloud™. Teams use Paradime to code, ship, fix, and scale data pipelines for analytics and AI.
The platform has three core pillars:
Code — An AI-native IDE for dbt™ and Python development, featuring DinoAI for context-aware code generation and debugging. It cuts dbt™ development time by 83%+.
Bolt — A production scheduler for dbt™ orchestration with cron-based and event-driven triggers, CI/CD, and built-in monitoring. Bolt reduces MTTR by up to 70%.
Radar — FinOps tooling that reduces Snowflake and BigQuery warehouse costs.
For this morning briefing project, Bolt is the workhorse. It handles the scheduling — defining when your briefing pipeline runs, what commands execute, and where alerts go when something breaks.
A typical Bolt schedule lives in a paradime_schedules.yml file at the root of your dbt™ project:
Why Bolt matters here: Your morning briefing is only as reliable as the scheduler behind it. Bolt gives you cron precision with built-in SLA monitoring and Slack/email failure notifications — so you know immediately if the briefing didn't fire.
What Is OpenClaw?
OpenClaw is an open-source, self-hosted AI agent framework (MIT license, formerly known as Moltbot) designed to run locally or on your own hardware. It connects to real communication channels — Slack, Telegram, WhatsApp, Discord — and orchestrates autonomous AI workflows.
The architecture follows a perceive → plan → act → observe → repeat agent loop across four layers:
Core runtime — Manages the agent loop, memory, and state
LLM backbone — Connects to model providers (OpenAI, Anthropic, Google, or local models via Ollama)
Tool registry — A plugin system where each tool exposes a schema with inputs, outputs, and permissions
Memory system — Short-term conversation context plus long-term vector-store or file-based memory
OpenClaw extends its capabilities through Skills — modular plugins defined with a skill.md specification that follows a YAML frontmatter + Markdown body format:
Architecture Overview
Before diving into the setup, here's how the pieces connect end-to-end:
Figure 1: End-to-end morning briefing architecture — Bolt triggers the pipeline, OpenClaw assembles the briefing from three APIs, and delivers to Slack.
Setup: openclaw-sdk + Google Calendar API + Gmail API + Weather API + Slack Webhook
Prerequisites
Component | Version | Purpose |
|---|---|---|
Node.js | ≥ 22 LTS | OpenClaw runtime |
OpenClaw | ≥ 2.1.0 | Agent framework |
Python | ≥ 3.9 | Custom skill scripts |
Google Cloud project | — | Calendar + Gmail OAuth |
Weather API account | — | Forecast data |
Slack workspace | — | Delivery channel |
Paradime account | — | Bolt scheduling |
Step 1: Install OpenClaw
Step 2: Set Up Google Calendar API + Gmail API
Both APIs share a single Google Cloud project and OAuth consent screen:
Go to Google Cloud Console
Create a new project (e.g.,
openclaw-briefing)Navigate to APIs & Services → Library
Enable Google Calendar API and Gmail API
Go to APIs & Services → Credentials
Configure the OAuth consent screen (External or Internal depending on your org)
Create an OAuth 2.0 Client ID (Desktop app type for CLI flows)
Download the credentials JSON file
Required OAuth scopes:
API | Scope | Access Level |
|---|---|---|
Calendar |
| Read-only calendar data |
Calendar |
| Events read-only |
Gmail |
| Read-only email access |
Figure 2: Google Cloud setup sequence for Calendar and Gmail API OAuth credentials.
Step 3: Set Up Weather API
Sign up for a weather data provider (e.g., OpenWeatherMap or WeatherAPI). Copy your API key.
Step 4: Set Up Slack Webhook
Go to Slack API: Applications
Create a new app or use an existing one
Navigate to Incoming Webhooks → activate
Add a new webhook to the target channel (e.g.,
#morning-brief)Copy the webhook URL
For full two-way Slack integration with OpenClaw, configure the Slack channel in your OpenClaw config:
Required bot scopes: chat:write, channels:history, channels:read, im:history, im:read, im:write, app_mentions:read, reactions:read, files:read, files:write.
Env Vars: GOOGLE_CREDENTIALS_JSON, WEATHER_API_KEY, SLACK_WEBHOOK_URL
Store all secrets in a dedicated environment file. Never commit these to Git.
For OpenClaw, if you're running as a systemd service, put secrets in a systemd EnvironmentFile:
Figure 3: Environment variable mapping — each secret authenticates with its corresponding API or delivery channel.
Security best practice: Treat OAuth tokens like passwords. Use restrictive file permissions (
chmod 600), a dedicated Linux user for OpenClaw, and keep tokens out of backups and screenshots.
Script: Compile Calendar Events, Urgent Emails, Weather Forecast, Format as Briefing
Here is the core OpenClaw skill implementation. The index.js file handles the logic for each data source and assembles the final briefing.
Skill Directory Structure
Main Skill Entry Point (index.js)
Calendar Fetcher (lib/calendar.js)
Briefing Formatter (lib/formatter.js)
Installing the Skill Locally
Bolt Schedule: Cron 7 AM Daily
With the OpenClaw skill built and installed, you need a reliable trigger. This is where Paradime Bolt comes in.
Option A: YAML-Based Schedule (Configuration-as-Code)
Add this to your paradime_schedules.yml in your dbt™ project root:
This file must be committed and merged to your default branch (usually main). Paradime checks for changes every 10 minutes, or you can click "Parse Schedules" in the Bolt UI for immediate updates.
Option B: OpenClaw Native Cron Job
For the agent-side scheduling, configure the cron job directly in OpenClaw:
Or as JSON configuration:
Figure 4: Dual scheduling — Bolt handles the data pipeline trigger while OpenClaw handles the agent-level briefing assembly and delivery.
Why Both Schedulers?
Concern | Paradime Bolt | OpenClaw Cron |
|---|---|---|
What it triggers | dbt™ model runs and tests | AI agent skill execution |
Retry logic | Built-in with SLA alerts | Configurable backoff (3 attempts) |
Monitoring | Bolt UI + email/Slack notifications |
|
Config format |
| JSON config or CLI flags |
Failure visibility | Slack channel + email |
|
Monitoring and Debugging
Paradime Bolt Monitoring
Bolt provides built-in monitoring for every schedule run. From the Bolt UI, you can:
View run history, status (passed/failed), and duration
Inspect compiled SQL for each dbt™ model
Use DinoAI to debug failed runs with AI-assisted error analysis
Set SLA thresholds that trigger alerts when exceeded
To check a dbt™ model's compiled SQL for debugging:
If a dbt™ model fails, Paradime's DinoAI can analyze the error and suggest fixes directly in the IDE — cutting MTTR significantly.
OpenClaw Monitoring
Run the diagnostic command ladder in order:
Key Health Signals
Command | Healthy Signal | Problem Signal |
|---|---|---|
|
|
|
|
|
|
| Status: | Status: |
| No blocking issues | Config/service mismatches |
| Channel: |
|
Decision Tree: "Why Didn't My Briefing Arrive?"
Figure 5: Decision tree for debugging a missing morning briefing — follow the path from symptom to root cause.
Troubleshooting Common Issues
Issue 1: Cron Job Doesn't Fire
Symptoms: openclaw cron list shows the job, but openclaw cron runs shows no recent executions.
Root causes and fixes:
Root Cause | Diagnostic | Fix |
|---|---|---|
Gateway not running 24/7 |
| Install as daemon: |
Cron scheduler disabled | Log shows | Set |
Timezone mismatch | Job set for 7 AM UTC but you expected 7 AM local | Use |
Laptop sleep / VPS downtime | Gateway logs show gaps | Use a dedicated VPS or always-on server |
Issue 2: Job Runs but No Slack Message
Symptoms: openclaw cron runs --id morning-brief shows status: ok, but nothing appears in Slack.
Common fixes:
If using OpenClaw's Slack channel (not raw webhooks): Ensure the job has sessionTarget: "isolated" and delivery.mode: "announce". Without isolated sessions, cron output stays in the main session and never routes to the channel.
Issue 3: Google OAuth Token Expired
Symptoms: Calendar or Gmail fetch returns 401 Unauthorized.
Fix:
Pro tip: Use a Google Cloud service account with domain-wide delegation instead of user OAuth tokens. Service account credentials don't expire and are more suitable for automated cron jobs.
Issue 4: Weather API Rate Limit
Symptoms: Weather section shows empty or error in briefing.
Fix: Most free-tier weather APIs allow 1,000 calls/day. A single morning briefing uses 1 call. If you're hitting limits:
Check for duplicate cron jobs:
openclaw cron listVerify no retry storms: check
cron.retry.maxAttemptsin configAdd graceful fallback in the skill: return "Weather data unavailable" instead of crashing
Issue 5: Bolt Schedule Not Picked Up
Symptoms: Schedule exists in paradime_schedules.yml but doesn't appear in the Bolt UI.
Fixes:
Ensure
paradime_schedules.ymlis in the root directory of your dbt™ project (next todbt_project.yml)Ensure changes are merged to the default branch (usually
main)Wait 10 minutes for auto-refresh, or click "Parse Schedules" in the Bolt UI
Validate YAML syntax — a single indentation error will silently fail
Issue 6: Post-Upgrade Config Breakage
After upgrading OpenClaw, if your cron jobs stop working:
Connecting to Your dbt™ Data Pipeline
The morning briefing becomes even more powerful when it pulls from your dbt™ models. For example, you might have models that track data freshness, pipeline health, or KPI snapshots.
Here's how a dbt™ model might feed into the briefing:
If you're using Paradime's dbt™-llm-evals package, you can even evaluate the quality of AI-generated briefing content directly in your warehouse:
Wrapping Up
Building a Paradime OpenClaw morning briefing isn't just about convenience — it's about collapsing your time to first clue. Every morning, before you've opened your laptop, you have a structured, reproducible snapshot of:
What's on your calendar (conflicts, prep needed)
What's urgent in your inbox (drafts ready, nothing missed)
What the weather looks like (plan accordingly)
Whether your data pipelines are healthy (Bolt SLA alerts)
The entire system runs on two schedulers with complementary strengths: Paradime Bolt handles the data pipeline reliability (cron precision, SLA monitoring, AI-assisted debugging), while OpenClaw handles the intelligent assembly and delivery (agent skills, multi-API orchestration, Slack integration).
Key principles applied:
Reproducibility — Everything is configuration-as-code (
paradime_schedules.yml, OpenClaw JSON config,skill.md)Minimal fixes — The decision tree and troubleshooting section let you diagnose issues in under 2 minutes
Incident-friendly structure — Structured steps, clear env var mapping, and explicit error signatures
Next Steps
Start small: Get the OpenClaw cron job working with just weather → Slack first
Add data sources incrementally: Calendar, then Gmail, then dbt™ pipeline health
Set up Bolt monitoring: Configure SLA alerts so you know immediately if the briefing pipeline breaks
Iterate on the briefing format: Adjust the formatter based on what your team actually reads

