How to Run Calendar Cleanup with OpenClaw in Paradime
Feb 26, 2026
How to Automate Calendar Cleanup with Paradime, OpenClaw, and Google Calendar API
Your calendar is lying to you. Between the mystery meetings with no description, the triple-booked Thursday afternoons, and the "quick syncs" that devour your focus time — your week is a minefield of wasted hours. Now multiply that chaos across an entire data team where stale docs, missing context, and tribal knowledge already make every sprint feel like archaeology.
What if an AI agent could scan your week every Monday morning, flag the mess, and suggest fixes — all before your first coffee?
In this guide, we'll build exactly that: an automated calendar cleanup workflow using Paradime, OpenClaw, and the Google Calendar API. You'll walk away with a production-ready script that detects overlapping events, flags empty-description meetings, and suggests focus-time blocks — all scheduled via Paradime Bolt's cron and delivered to Slack.
The Pain: Stale Docs, Missing Context, and Tribal Knowledge
Before we dive into the solution, let's make the problem tangible.
The documentation desert
Every data team has experienced this: a critical dbt™ model breaks at 2 AM, and the only person who understands it is on vacation. The model's YAML file has a description that reads "TODO: add description" — and it's been that way for 14 months.
According to most analytics engineering teams, documentation coverage hovers around 30–40% at best. The rest? Tribal knowledge locked in Slack threads, someone's personal Notion page, or worse — someone's head.
The calendar chaos
Your calendar suffers from the same entropy. Meetings get created with no agenda (description), recurring syncs pile up into double and triple bookings, and there's zero protected focus time for actual deep work. The result?
Stale events: Meetings that should have been cancelled months ago still block your calendar
Missing context: No description means you walk into calls blind
Tribal knowledge scheduling: Only your manager knows why that recurring Friday 4 PM block exists
Figure 1: The typical Monday morning calendar chaos — overlapping meetings, missing context, and zero focus time leading to a low-productivity week.
The workflow we'll build
By the end of this article, you'll have a system that achieves near-100% calendar hygiene coverage — automatically. Here's the before-and-after:
Figure 2: Before-and-after comparison — from manual calendar chaos to automated weekly cleanup with Paradime Bolt and OpenClaw.
What Is Paradime?
Paradime is an AI-native analytics engineering platform — often described as "Cursor for Data." It replaces dbt Cloud™ with a unified workspace for coding, shipping, fixing, and scaling data pipelines for analytics and AI.
Key capabilities relevant to this guide:
Feature | What It Does |
|---|---|
Code IDE | AI-native IDE with DinoAI for dbt™ and Python development — up to 83% faster |
Bolt | Production orchestration with cron scheduling, CI/CD, and Python script execution |
Radar | FinOps to cut Snowflake/BigQuery costs |
Paradime Docs | AI-driven documentation with auto-generation and bi-directional YAML sync |
For this project, we'll primarily use Bolt — Paradime's orchestration engine — to schedule our calendar cleanup script on a cron and manage environment variables securely.
Paradime Bolt supports running Python scripts as first-class commands alongside dbt™ runs. You can manage dependencies with Poetry, store secrets as environment variables, and trigger schedules via cron, API calls, merge events, or after other jobs complete.
What Is OpenClaw?
OpenClaw is an open-source AI agent that runs locally on your hardware and orchestrates tasks across chat apps, files, the web, and your operating system. It isn't an LLM itself — instead, it connects to models like Claude or GPT via API and uses skills to act.
Think of OpenClaw as your personal AI assistant that can:
Manage your calendar — list, add, update, and delete events via the Google Calendar API
Run cron jobs — schedule recurring tasks with persistent storage
Send notifications — deliver results to Slack, WhatsApp, Telegram, or Discord
Execute Python scripts — full system access for custom automation
OpenClaw's google-calendar skill provides a thin wrapper around the Google Calendar REST API, letting you list upcoming events, detect conflicts, and create new events — all from the command line or via the Python SDK.
Setup: openclaw-sdk + Google Calendar API
Prerequisites
Before starting, ensure you have:
Python 3.9+ installed
A Google Cloud project with the Calendar API enabled
An OpenClaw account with an API key
A Slack workspace with an incoming webhook URL
A Paradime workspace with Bolt access
Step 1: Install the OpenClaw Python SDK
Verify the installation:
Step 2: Set Up Google Calendar API Credentials
Go to Google Cloud Console
Create a new project (or use an existing one)
Navigate to APIs & Services → Library and enable the Google Calendar API
Go to APIs & Services → Credentials and create OAuth 2.0 credentials (Desktop app type)
Download the credentials JSON file
Run the OAuth flow to obtain a refresh token:
This opens a browser for consent. After authorization, you'll receive a refresh token.
Step 3: Install the OpenClaw Google Calendar Skill
Store your credentials securely:
Step 4: Verify Calendar Access
You should see a JSON array of your upcoming events.
Figure 3: Step-by-step setup sequence for the OpenClaw SDK and Google Calendar API integration.
Script: Scan, Detect, Flag, and Suggest
Here's the core Python script that powers our calendar cleanup automation. Save this as calendar_cleanup.py in your dbt™ project root.
The Full Script
How It Works
Figure 4: End-to-end execution flow of the calendar cleanup script — from Bolt cron trigger to Slack delivery.
The script does four things:
Authenticates with the Google Calendar API using credentials stored in environment variables
Fetches all events for the next 7 days using
events.list()withsingleEvents=Trueto expand recurring eventsAnalyzes the events for three issues:
Reports the findings to Slack via an incoming webhook with formatted Block Kit messages
Environment Variables: GOOGLE_CREDENTIALS_JSON, OPENCLAW_API_KEY, SLACK_WEBHOOK_URL
The script relies on three environment variables that must be securely configured in Paradime Bolt.
Variable | Description | How to Obtain |
|---|---|---|
| JSON string containing | Google Cloud Console OAuth flow (see Setup above) |
| API key for OpenClaw agent authentication | OpenClaw Dashboard → Settings → API Keys |
| Incoming webhook URL for your Slack channel | Slack API → Create App → Incoming Webhooks |
Configuring in Paradime Bolt
From any page in Paradime, click Settings
Navigate to Workspaces → Environment Variables
In the Bolt Schedules section, click Add New
Add each variable:
Click the Save icon (💾)
Security note: Environment variables in Paradime Bolt are encrypted at rest and only accessible during schedule execution. Admin access is required to add, edit, or remove these variables. You can also set schedule-level overrides if different team members need different calendar credentials.
Access these variables in your Python script:
Bolt Schedule: Cron Monday 9 AM
Now let's wire everything together with a Paradime Bolt schedule that runs every Monday at 9 AM.
Option 1: Schedules as Code (YAML)
Create a paradime_schedules.yml file in the root of your dbt™ project:
Cron expression breakdown: 0 9 * * 1
Field | Value | Meaning |
|---|---|---|
Minute |
| At minute 0 |
Hour |
| At 9 AM |
Day of month |
| Every day |
Month |
| Every month |
Day of week |
| Monday |
Tip: Use crontab.guru to validate and visualize cron expressions.
Option 2: Bolt UI Configuration
Navigate to Bolt in Paradime
Click Create Schedule
Configure:
Project File Structure
Your dbt™ project should look like this:
And your pyproject.toml for dependency management:
Paradime reads the paradime_schedules.yml file from your default branch (usually main) and checks for changes every 10 minutes. You can also manually trigger a refresh via Bolt → Parse Schedules.
Monitoring and Debugging
Once your schedule is running, Paradime Bolt provides comprehensive monitoring tools to ensure everything stays healthy.
Viewing Run History
Navigate to Bolt → Schedules → weekly-calendar-cleanup to see:
Execution Time History: A 30-day graphical view showing success/error rates, execution duration trends, and total run count
Run History Table: Detailed list of all executions with Run ID, status (Success/Error/Skipped), trigger source, branch info, and duration
Run Logs: Click any Run ID to view detailed stdout/stderr output from your script
Figure 5: Debugging decision tree for monitoring Bolt schedule runs — from status check to root cause identification.
Key Metrics to Watch
Metric | Healthy Range | Action If Unhealthy |
|---|---|---|
Execution Duration | < 60 seconds | Check API rate limits; reduce |
Success Rate | 100% | Review error logs; check credentials |
Events Scanned | 10–50 per week | If 0, verify calendar access |
SLA Compliance | Within 10 minutes | Increase |
DinoAI-Powered Debugging
When a run fails, Paradime's DinoAI can help diagnose the issue. In the Bolt run details view, DinoAI analyzes error logs and provides actionable suggestions — similar to how it assists with dbt™ model debugging.
OpenClaw Cron Monitoring
If you're also running the cleanup directly via OpenClaw's built-in cron (as a complement to Bolt), you can monitor execution:
OpenClaw stores cron jobs persistently at ~/.openclaw/cron/jobs.json, so restarts won't lose your schedules. Failed jobs retry up to 3 times with exponential backoff (30s → 1m → 5m → 15m → 60m).
Troubleshooting Common Issues
1. google.auth.exceptions.RefreshError: Token has been expired or revoked
Cause: Your OAuth refresh token has expired (Google tokens can expire if unused for 6+ months or if your GCP project is in "testing" mode).
Fix:
Go to Google Cloud Console → APIs & Services → OAuth consent screen
Move your app from "Testing" to "Production" (or re-add your email as a test user)
Re-run the OAuth flow to generate a fresh refresh token:
Update
GOOGLE_CREDENTIALS_JSONin Paradime Bolt environment variables
2. requests.exceptions.ConnectionError: Slack webhook POST failed
Cause: The Slack webhook URL is invalid or the Slack app has been deactivated.
Fix:
Verify the webhook URL by testing it directly:
If it returns
invalid_payloadorchannel_not_found, regenerate the webhook in Slack API → Your Apps → Incoming Webhooks
3. Script returns 0 events but calendar has meetings
Cause: The Calendar API is returning events from a different calendar than expected, or the calendarId is wrong.
Fix:
List available calendars first:
Update
calendarIdin the script from"primary"to the specific calendar ID
4. poetry install fails in Bolt
Cause: Missing or misconfigured pyproject.toml.
Fix:
Ensure
pyproject.tomlis committed to yourmainbranchThe
poetry installcommand must be the first command in your Bolt schedule's command listCheck that Python version constraints in
pyproject.tomlmatch Paradime's runtime
5. OpenClaw OPENCLAW_API_KEY not recognized
Cause: The environment variable isn't set in the Bolt schedule context.
Fix:
Confirm the variable is added under Settings → Workspaces → Environment Variables → Bolt Schedules (not Code IDE)
Variable names are case-sensitive:
OPENCLAW_API_KEY≠openclaw_api_key
6. Overlaps detection returns false positives with all-day events
Cause: All-day events use the date field (not dateTime), and the overlap logic should skip them.
Fix: The script already handles this with:
If you're still seeing issues, verify that your calendar doesn't have events with malformed date fields by logging the raw event data.
Wrapping Up
Calendar chaos is a symptom of a larger problem: the same entropy that lets dbt™ model descriptions rot also lets meetings pile up without purpose. The workflow we've built here — Paradime Bolt scheduling a Python script that uses OpenClaw and the Google Calendar API — gives you a repeatable, automated system for calendar hygiene that runs every Monday before your team even opens Slack.
Here's what you've accomplished:
✅ Automated scanning of the next 7 days of calendar events
✅ Overlap detection that catches double and triple bookings
✅ Empty description flagging to eliminate meetings without context
✅ Focus time suggestions that find 2+ hour gaps in your schedule
✅ Slack delivery so the whole team sees the report
✅ Cron scheduling via Paradime Bolt for zero-maintenance execution
✅ Secure credential management with encrypted environment variables
The same philosophy applies to your data documentation. Just as this script enforces calendar coverage, Paradime's DinoAI auto-generates model and column descriptions in your dbt™ YAML files — turning description: "TODO" into rich, context-specific documentation with a single click.
Next Steps
Extend the script to automatically create focus-time events (not just suggest them)
Add team-wide scanning by iterating over multiple calendar IDs
Integrate with Paradime Docs to track documentation coverage alongside calendar hygiene
Set up OpenClaw cron as a backup scheduler in case Bolt schedules are paused:
Stop letting stale calendars and tribal knowledge scheduling steal your team's focus. Automate the cleanup, ship the report, and reclaim your Monday mornings.
Resources:

