How to Auto-Generate Thank You Notes with OpenClaw in Paradime
Feb 26, 2026
Automate Personalized Thank-You Emails After Meetings with Paradime, OpenClaw, and Bolt
Stop letting follow-ups slip through the cracks. This guide walks you through building a fully automated pipeline that scans today's completed external meetings via Google Calendar, drafts personalized thank-you emails in Gmail, and runs it all on a daily cron schedule — no local config headaches, no manual wiring.
What Is Paradime?
Paradime is an all-in-one, AI-native platform that replaces dbt Cloud™ for analytics and data pipeline teams. It gives you a single pane of glass for dbt™ development, CI/CD, production orchestration, cost management, and collaboration — all with SOC 2 Type II compliance and a 99.9% uptime SLA baked in.
The three pillars that matter for this guide:
Pillar | What It Does |
|---|---|
Code IDE | AI-assisted dbt™ + Python development, cutting rote work by 83%+ |
Bolt | UI-driven production scheduler with cron, on-merge, and on-run-completion triggers |
Radar | FinOps for Snowflake/BigQuery — find budget room for your AI use cases |
Bolt is the hero here. It lets you schedule dbt™ commands (and Python scripts) with a cron expression, configure environment variables through the UI, set up Slack/email notifications on failure, and debug production runs with AI-powered log analysis — all without touching a YAML file if you don't want to.
💡 Why this matters: dbt Cloud™ forces you into its own scheduling and debugging paradigm. Paradime Bolt gives you the same power with a cleaner UI, global timezone support, and environment variable overrides at the schedule level. Think of it as the scheduling layer you wish dbt Cloud™ had shipped.
What Is OpenClaw?
OpenClaw is an open-source AI agent framework (MIT license) that runs on your own hardware. Formerly known as Clawdbot/Moltbot, it surpassed 100k+ GitHub stars in early 2026 for good reason: it's the first self-hosted agent framework that feels production-ready.
OpenClaw follows a classic agent loop:
Figure 1: OpenClaw's perceive → plan → act → observe → repeat agent loop.
The architecture breaks into four layers:
Core Runtime — manages the agent loop, memory, and state
LLM Backbone — connects to OpenAI, Anthropic, Google, or local models via Ollama
Tool Registry — plugin system where each tool exposes a schema (inputs, outputs, permissions)
Memory System — short-term (conversation context) and long-term (vector store, file-based) memory
For this guide, the Tool Registry and Plugin SDK matter most. OpenClaw plugins are TypeScript modules that register tools via the openclaw/plugin-sdk/* subpaths. A plugin exports either a function or an object:
📖 Full reference: OpenClaw Plugin Docs
Setup: openclaw-sdk + Google Calendar API + Gmail API
This is where most tutorials lose you. They tell you to "just grab your credentials" as if Google Cloud Console were intuitive. Let's be explicit.
Prerequisites
Node.js 18+ and pnpm installed
A Google Workspace or personal Gmail account
OpenClaw installed (installation guide)
Access to a Paradime workspace with Bolt enabled
Python 3.8+ with pip (for the calendar/email script)
Step 1: Enable Google APIs
Figure 2: Google Cloud Console setup flow for enabling Calendar and Gmail APIs.
Go to Google Cloud Console
Create a new project (e.g.,
OpenClaw-ThankYou)Navigate to APIs & Services → Enabled APIs & Services → + ENABLE APIS AND SERVICES
Search and enable:
Configure the OAuth consent screen:
Create OAuth credentials:
Step 2: Install OpenClaw and the GOG Skill
If you haven't installed OpenClaw yet:
Install the Google integration skill (gogcli):
Configure the credentials:
Step 3: Authenticate Google Services
This opens a browser for OAuth consent. Grant permissions for both Gmail and Calendar access. The token is stored locally — your credentials never leave your machine.
Step 4: Set OpenClaw Environment Variables
Add:
Set permissions:
The Script: Scan Meetings, Draft Thank-You Emails
Here's the core automation. This Python script:
Scans today's completed external meetings from Google Calendar
Identifies attendees with external email domains
Uses OpenClaw's LLM backbone to draft a personalized thank-you email per meeting
Saves each as a Gmail draft for your review
Figure 3: End-to-end flow of the daily thank-you email automation.
scripts/thank_you_drafter.py
Install Python Dependencies
Test Locally
First run will open a browser for OAuth. After that, the token.json handles refresh automatically.
Environment Variables: GOOGLE_CREDENTIALS_JSON and OPENCLAW_API_KEY
Two secrets need to be configured — and the beauty of Paradime Bolt is that you do this through the UI, not by SSH-ing into a server and hand-editing .env files.
Variable | Purpose | Where to Get It |
|---|---|---|
| Path to (or contents of) your OAuth credentials file | Google Cloud Console → Credentials → Download JSON |
| API key for OpenClaw's LLM backbone (if using a hosted model provider) | Your LLM provider dashboard (OpenAI, Anthropic, etc.) |
| Your company's email domain (to filter external attendees) | Your company domain, e.g. |
Configuring in Paradime Bolt
Figure 4: Adding environment variables for Bolt schedules in the Paradime UI.
Steps:
From any Paradime page, click Settings
Navigate to Workspaces → Environment Variables
In the Bolt Schedules section, click Add New
Add each variable (Key + Value) and click Save (💾)
🔒 Security note: These variables are only accessible to Bolt schedules (production jobs). They're never exposed in the Code IDE or to other users. Combined with Paradime's SOC 2 Type II compliance, your Google credentials are handled with the same rigor as your warehouse secrets.
You can also override variables per schedule if you need different credentials for different pipelines:
Open your schedule in Bolt UI → click Edit
Scroll to Environment Variables Override
Enter override values → click Deploy
Schedule-level overrides take precedence over global values. If no override is set, the global value is used.
📖 Reference: Bolt Environment Variables Docs
Bolt Schedule: Cron Daily at 6 PM
Now wire the script into Paradime Bolt with a daily 6 PM cron trigger.
Creating the Bolt Schedule
Navigate to Bolt from the Paradime home screen
Click + New Schedule → + Create New Schedule
Fill out the configuration:
Field | Value |
|---|---|
Type | Standard |
Name |
|
Commands |
|
Git Branch |
|
Owner Email |
|
Trigger Type | Scheduled Run (Cron) |
Cron Schedule |
|
Timezone | Your local timezone (e.g., |
Slack Notify On |
|
Slack Channels |
|
Email Notify On |
|
Click Save
The cron expression 0 18 * * * means "at minute 0 of hour 18 (6 PM), every day." Paradime lets you pick your timezone directly in the UI — no more mental UTC math.
💡 Tip: Use the cron preset dropdown in Bolt or visit crontab.guru if you want to customize the frequency. For example,
0 18 * * 1-5runs only on weekdays.
Alternative: OpenClaw Native Cron
If you prefer to keep everything inside OpenClaw's runtime (without Bolt), you can use OpenClaw's built-in cron scheduler:
Or as a JSON tool call:
📖 Reference: OpenClaw Cron Jobs Docs
Our recommendation: Use Paradime Bolt for the scheduling layer. You get UI-driven config, environment variable management, run history with searchable logs, DAG visualization, and AI-powered debugging — none of which OpenClaw's built-in cron provides. OpenClaw's cron is fine for quick personal tasks, but for team-visible production pipelines, Bolt is the right tool.
Monitoring and Debugging
Once your schedule is live, you need visibility. Paradime Bolt gives you four layers of observability without any additional tooling.
Run History Dashboard
Navigate to Bolt → Select your schedule → Run History. You'll see every execution with:
Status (success/failure)
Duration — how long each run took
Trigger — cron, manual, or on-merge
Timestamp — when it started and completed
Analyzing Individual Runs
Click any Run ID to drill into details:
Figure 5: Layers of run analysis available in Paradime Bolt.
Tab | What You See | When to Use It |
|---|---|---|
Summary | Completion status, duration, warnings, suggested fixes | First stop after a failure |
Console Logs | Line-by-line command execution output | Identifying which step failed |
Debug Logs | System interactions, resource allocation, thread usage | Advanced diagnostics |
Integration Logs | Payload sent to connected integrations | Checking Slack/email notification delivery |
Artifacts
Every run produces artifacts you can inspect:
run_results.json— execution outcomes for each model/commandmanifest.json— project structure at execution timeCompiled SQL / Run SQL — actual queries executed (useful for dbt™ models in the same pipeline)
Notifications
Configure Slack and email alerts for failures directly in the schedule config. When a run fails:
Bolt sends a Slack message to your configured channel
An email notification goes to the owner
The DinoAI debugger analyzes the error logs and suggests fixes
📖 Reference: Analyzing Run Details | Viewing Run Log History
Troubleshooting Common Issues
Here's what will actually break, and how to fix it.
Google API Errors
Error | Cause | Fix |
|---|---|---|
| API not enabled or recently enabled | Enable Gmail API in Cloud Console, wait 5 minutes |
| Token was created with different scopes | Delete |
| Same as above | Same fix — delete token and re-auth |
| Token expired and refresh failed | Delete |
| Self-explanatory | Enable Google Calendar API in Cloud Console |
Paradime Bolt Errors
Error Code | Description | Fix |
|---|---|---|
PARA-1000 | Missing production warehouse connection | Add a production warehouse connection in Account Settings → Connections |
PARA-1003 | Could not read from remote repository on GitHub | Check githubstatus.com for incidents; re-trigger manually |
PARA-1008 | Couldn't connect to git repository | Verify repo exists, SSH key is valid; reset git connection in Settings |
PARA-1013 | Couldn't generate Lineage Diff report | Requires at least one active Bolt schedule — create one first |
PARA-1015 | Cache issues | Clear Paradime local storage: click 🔒 → Cookies → Delete data for |
📖 Full error reference: Paradime Error List
OpenClaw Issues
Symptom | Cause | Fix |
|---|---|---|
| Env var not set or service not restarted | Add to |
OAuth flow hangs on headless server | No browser available for OAuth redirect | Use SSH tunnel: |
Cron job doesn't fire | Timezone mismatch or stagger offset | Verify |
Plugin tool not available to agent | Registration order or naming conflict | Ensure |
Draft body is empty |
| Validate the LLM response before passing to |
Quick Diagnostic Checklist
Figure 6: Decision tree for debugging failed runs.
Wrapping Up
Here's what you've built:
Figure 7: Complete architecture of the Paradime + OpenClaw thank-you email pipeline.
What you get:
Zero manual follow-ups — every external meeting gets a personalized draft waiting in Gmail
Full audit trail — Bolt's run history shows exactly what happened and when
Security-first — credentials in Paradime's encrypted env vars, Google OAuth tokens stored locally, SOC 2 Type II compliant infrastructure
One-click debugging — when something breaks (and it will), Bolt's four-tab log viewer and DinoAI suggestions get you back to green fast
No local cron wrangling — Bolt's UI replaces
crontab -eand all the timezone headaches that come with it
The combination of Paradime for orchestration and OpenClaw for AI-powered email generation gives you a setup that's genuinely production-grade. Paradime handles the scheduling, secrets, monitoring, and team visibility. OpenClaw handles the intelligence — understanding meeting context and generating emails that don't sound like they were written by a robot.
Next steps to extend this:
Swap the template-based email body for an LLM-generated one using OpenClaw's agent turn (pass meeting notes/description as context)
Add a Slack summary of all drafts created each day
Filter by meeting response status (
acceptedonly) to skip meetings you didn't actually attendIntegrate with your CRM to log the follow-up automatically
📖 Start building: Paradime Docs | OpenClaw Docs | OpenClaw Cron Jobs | Bolt Scheduling Guide

