How to Send Meeting Prep Briefs with OpenClaw in Paradime
Feb 26, 2026
How to Automate Meeting Prep with Paradime, OpenClaw, and a Daily Briefing Pipeline
Stop walking into meetings cold. If you've ever scrambled to remember who an attendee is, what you last discussed over email, or what the agenda even covers—this guide is for you. We're going to wire up Paradime, OpenClaw, the Google Calendar API, and the Gmail API into a single automated pipeline that delivers a per-meeting prep brief to your Slack every morning at 7:30 AM. No manual work. No context-switching. Just show up prepared.
This isn't a theoretical walkthrough. By the end, you'll have a working system: a cron-scheduled OpenClaw skill that fetches today's calendar events, pulls attendee context and past email threads, generates a concise briefing document, and posts it to Slack before your first coffee.
What Is Paradime?
Paradime is an AI-native data engineering platform—often described as "Cursor for Data"—that replaces dbt Cloud™ for teams that want to move faster without sacrificing reliability. It bundles three core products into one cohesive workspace:
Code IDE — An AI-native IDE for dbt™ and Python development. Includes DinoAI for inline AI-assisted code generation, data lineage visualization, and live data previews. Teams report cutting dbt™ development time by up to 83%.
Bolt — A production-grade scheduler for dbt™ pipelines with built-in CI/CD, cron scheduling, and AI-powered debugging. This is the piece we'll lean on for orchestration.
Radar — FinOps tooling to monitor and cut Snowflake and BigQuery costs.
Paradime is SOC 2 Type II certified, GDPR and CCPA compliant, and backs everything with a 99.9% uptime SLA. For this project, we care most about Bolt: its UI-driven schedule creation, YAML-as-code configuration, environment variable management, and notification integrations make it the cleanest way to orchestrate our meeting-prep pipeline.
Why Paradime for this? You could wire up a cron job on a VPS, sure. But Paradime Bolt gives you a UI to monitor runs, AI-powered debugging when things break, Slack notifications on failure, and environment variable scoping—all without managing infrastructure. That's the kind of operational leverage worth having.
What Is OpenClaw?
OpenClaw is an open-source, locally-running AI agent gateway. Think of it as a middleware layer that connects your messaging platforms (Slack, Telegram, Discord) to AI models (Claude, GPT, Gemini) and extends their capabilities through skills—modular plugins that let agents interact with external services.
Key characteristics:
Local-first architecture — Runs on your machine or server. Your data, credentials, and conversation history stay under your control.
Skill ecosystem — Community-built skills for Google Calendar, Gmail, GitHub, CRMs, and more. Install them with a single command.
Cron scheduling — Built-in job scheduler for recurring agent tasks.
Multi-model support — Swap between Claude, GPT, local LLMs (via Ollama), or any OpenAI-compatible API.
For our pipeline, we'll use the OpenClaw Python SDK to orchestrate the meeting-prep logic, and leverage the meeting-prep and gogcli skills for calendar and email integration.
Setup: openclaw-sdk + Google Calendar API + Gmail API
Before writing the prep script, we need three integrations wired up: the OpenClaw SDK, Google Calendar API access, and Gmail API access. Here's the exact sequence:
Figure 1: Setup flow from SDK installation through integration testing.
Step 1: Install the OpenClaw SDK
The OpenClaw Python SDK requires Python 3.9+:
Verify the installation:
Step 2: Set Up Google Cloud OAuth Credentials
Go to the Google Cloud Console and create a new project (e.g.,
openclaw-meeting-prep).Navigate to APIs & Services → Library and enable both:
Go to APIs & Services → OAuth consent screen. Select External, fill in the app name (e.g.,
OpenClaw Meeting Prep), and add your email as support and developer contact.Add the required OAuth scopes:
Go to APIs & Services → Credentials → Create Credentials → OAuth client ID. Choose Desktop app. Download the JSON credentials file.
Step 3: Authorize and Store Tokens
Move your credentials file to the OpenClaw config directory:
If you're using the gogcli skill, authorize directly:
This opens a browser for OAuth consent. Tokens are stored locally at ~/.config/gog/token.json—never sent to OpenClaw or any AI model.
Verify access:
Step 4: Install the Meeting-Prep Skill
This installs the skill to ~/.openclaw/skills/meeting-prep/ and creates the config scaffold at ~/.config/meeting-prep/config.json.
Script: Fetch Today's Meetings, Pull Attendee Info and Past Email Threads, Generate Prep Brief
Here's the core automation. The script runs daily, fetches your calendar, enriches each meeting with attendee and email context, and posts a formatted brief to Slack.
Figure 2: The daily meeting-prep pipeline from cron trigger to Slack delivery.
The Prep Script
Create scripts/daily-meeting-prep.py in your project:
What the Script Does
Step | Action | API Used |
|---|---|---|
1 | Fetch all of today's calendar events | Google Calendar API |
2 | Extract attendee emails from each event | — |
3 | Search Gmail for recent threads with each attendee | Gmail API |
4 | Pass meeting + email context to Claude | OpenClaw SDK |
5 | Format and post the brief to Slack | Slack Incoming Webhook |
Environment Variables: GOOGLE_CREDENTIALS_JSON, OPENCLAW_API_KEY, SLACK_WEBHOOK_URL
This pipeline requires three environment variables. Never hardcode these in your script or commit them to Git. Here's what each one is and where to get it:
Variable | What It Is | Where to Get It |
|---|---|---|
| JSON string containing your Google OAuth tokens (access token, refresh token, client ID, client secret) | Generated during OAuth flow; stored at |
| API key for authenticating with the OpenClaw SDK | From your OpenClaw dashboard or config at |
| Incoming Webhook URL for your Slack channel |
Local Setup
For local development, use a .env file:
OpenClaw supports environment variable resolution from multiple sources with clear precedence:
Process environment (parent shell/daemon) — highest priority
.envin working directory — does not override existing varsGlobal
.envat~/.openclaw/.env— does not overrideConfig
envblock in~/.openclaw/openclaw.json— applied only if missing
You can also reference env vars inside openclaw.json using ${VAR_NAME} syntax:
Paradime Bolt Setup
In Paradime, environment variables are managed through the Environment Variables settings page. Admin access is required:
Navigate to Settings → Environment Variables in Paradime.
Add
GOOGLE_CREDENTIALS_JSON,OPENCLAW_API_KEY, andSLACK_WEBHOOK_URLas workspace-level variables.For schedule-specific overrides (e.g., different Slack channels per schedule), use the Environment Variables Override section in the Bolt schedule editor.
Security note: Paradime validates that variables exist globally before allowing overrides. Schedule-level overrides take precedence over workspace-level values, keeping your multi-tenant deployments clean.
Bolt Schedule: Cron Daily at 7:30 AM
Now let's schedule the pipeline to run automatically every morning. Paradime Bolt supports four trigger types: Scheduled Run (cron), On Run Completion, On Merge, and Bolt API. We want a daily cron trigger.
Option A: UI-Based Setup
Navigate to Bolt from the Paradime home screen.
Click + New Schedule → + Create New Schedule.
Fill in the fields:
Field | Value |
|---|---|
Name |
|
Type | Standard |
Commands |
|
Git Branch |
|
Owner Email |
|
Trigger Type | Scheduled Run |
Cron Schedule |
|
Timezone | Your local timezone (e.g., |
Click Save to deploy.
Option B: YAML-as-Code
Create paradime_schedules.yml in the root of your dbt™ project (alongside dbt_project.yml):
Why 7:30 AM? Early enough to land in your Slack before standup or your first meeting. Late enough that your calendar is likely finalized for the day. Adjust the timezone in Bolt's UI if you need local-time execution instead of UTC.
Figure 3: Bolt schedule execution flow for the daily meeting-prep pipeline.
Setting Up Notifications
Don't let failures go unnoticed. In Paradime Bolt:
Navigate to Bolt → Your Schedule → Notifications.
Enable Slack notifications for the
#data-alertschannel.Enable Email notifications to the schedule owner.
Configure triggers for: On Failure, On Success (optional), or both.
Paradime's notification setup guide covers this in detail.
Monitoring and Debugging
Once the pipeline is running, you need visibility. Paradime and OpenClaw each provide their own monitoring layer.
Paradime Bolt Monitoring
Bolt provides three levels of logging for every run:
Log Type | What It Shows | When to Use |
|---|---|---|
Summary Logs | DinoAI-generated overview of what passed/failed | Quick triage—30-second health check |
Console Logs | Full execution output (errors, warnings, compiled SQL) | Primary debugging—most useful for root cause |
Debug Logs | System-level operations and internal state | Deep technical issues (auth failures, env var problems) |
To access logs:
Go to Bolt → Select Schedule → Run History.
Click a specific run.
Navigate to Logs and Artifacts → Click the failed command.
Use the "jump to" feature to skip directly to errors in Console Logs.
Pro tip: Bolt's DinoAI integration generates a Summary Log with AI-suggested fixes for common failures. If your script fails because of an expired Google OAuth token, DinoAI will typically surface this in plain English before you even open the console logs.
OpenClaw Monitoring
On the OpenClaw side, monitor your agent's execution:
OpenClaw stores prep run history at ~/.config/meeting-prep/prep-log.json and deduplication state at ~/.config/meeting-prep/brief-history.json. These are plain JSON files you can inspect directly:
Figure 4: Monitoring surfaces across Paradime Bolt and OpenClaw.
Troubleshooting Common Issues
After helping teams set up this pipeline, these are the issues that come up most frequently:
1. Google OAuth Token Expired (401 Error)
Symptom: Script fails with 401 Unauthorized when calling Calendar or Gmail API.
Fix: OAuth access tokens expire after ~1 hour. Your script needs to use the refresh token to obtain a new access token:
Better yet, store the refresh token in GOOGLE_CREDENTIALS_JSON and add token-refresh logic to your script's initialization. The gogcli tool handles this automatically if you're using it.
2. OpenClaw Cron Job Not Firing
Symptom: The pipeline never runs at 7:30 AM.
Causes and fixes:
Cause | Fix |
|---|---|
Gateway not running |
|
Model not in allowlist |
|
Stale PID lock file |
|
Heartbeat misconfigured | Use |
3. Slack Webhook Returns 403 or 404
Symptom: Briefs generate successfully but never appear in Slack.
Fix: Verify your webhook URL is active:
If you get a 403, your Slack app's webhook was revoked. Regenerate it in Slack App Settings → Incoming Webhooks.
4. Gmail API Rate Limiting (429 Error)
Symptom: Script works for the first few meetings but fails with 429 Too Many Requests.
Fix: Gmail API has strict quotas—especially for free accounts (500 emails/day). Reduce maxResults in your search queries, add exponential backoff, and batch attendee lookups:
5. Missing Environment Variables in Bolt
Symptom: Script fails with KeyError: 'GOOGLE_CREDENTIALS_JSON'.
Fix: Environment variables must be created at the workspace level in Paradime before they can be used or overridden in Bolt schedules. Go to Settings → Environment Variables and add them. Only admins can modify these values.
6. OpenClaw Gateway Port Conflict
Symptom: Gateway won't start—port 9090 already in use.
Fix:
7. Duplicate Briefs Being Posted
Symptom: Same meeting brief posted multiple times to Slack.
Fix: The meeting-prep skill tracks processed meetings in ~/.config/meeting-prep/brief-history.json. If this file gets corrupted or deleted, deduplication breaks. Back it up and ensure the cron job has write access to the config directory.
Wrapping Up
Here's what you've built:
Figure 5: The complete meeting-prep pipeline architecture.
What you've eliminated:
❌ Morning scramble to figure out who's in your meetings
❌ Digging through email to remember past conversations
❌ Walking into calls without context on attendees
❌ Manual context-gathering that eats 30+ minutes daily
What you've gained:
✅ A per-meeting prep brief in Slack before your first meeting
✅ Attendee context (role, background, recent communication) auto-surfaced
✅ Past email thread summaries for every external participant
✅ AI-generated talking points and icebreakers
✅ Full monitoring and alerting through Paradime Bolt
The pipeline is intentionally opinionated about removing local config pain. Your credentials stay in environment variables—never in code, never in Git. The Google OAuth tokens live on your filesystem and are never sent to AI models. Bolt handles scheduling with a UI, not a fragile crontab on a dev machine.
Extend it further:
Add LinkedIn profile lookups for first-time attendees using the
meeting-prepskill's--depth deepresearch mode.Pipe briefs to a Notion database instead of (or in addition to) Slack.
Add an
#nopreptag to calendar events you want to skip.Set up a second Bolt schedule at 6:00 PM to generate next-day prep for early-morning meetings.
The best meetings are the ones you walk into already knowing what matters. Now your AI handles the prep—you just handle the conversation.
Resources:

