How to Run Calendar Cleanup with OpenClaw in Paradime

Feb 26, 2026

Table of Contents

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

  1. Go to Google Cloud Console

  2. Create a new project (or use an existing one)

  3. Navigate to APIs & Services → Library and enable the Google Calendar API

  4. Go to APIs & Services → Credentials and create OAuth 2.0 credentials (Desktop app type)

  5. 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:

  1. Authenticates with the Google Calendar API using credentials stored in environment variables

  2. Fetches all events for the next 7 days using events.list() with singleEvents=True to expand recurring events

  3. Analyzes the events for three issues:

  4. 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

GOOGLE_CREDENTIALS_JSON

JSON string containing client_id, client_secret, and refresh_token

Google Cloud Console OAuth flow (see Setup above)

OPENCLAW_API_KEY

API key for OpenClaw agent authentication

OpenClaw Dashboard → Settings → API Keys

SLACK_WEBHOOK_URL

Incoming webhook URL for your Slack channel

Slack API → Create App → Incoming Webhooks

Configuring in Paradime Bolt

  1. From any page in Paradime, click Settings

  2. Navigate to Workspaces → Environment Variables

  3. In the Bolt Schedules section, click Add New

  4. Add each variable:

  5. 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

0

At minute 0

Hour

9

At 9 AM

Day of month

*

Every day

Month

*

Every month

Day of week

1

Monday

Tip: Use crontab.guru to validate and visualize cron expressions.

Option 2: Bolt UI Configuration

  1. Navigate to Bolt in Paradime

  2. Click Create Schedule

  3. 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 maxResults

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 sla_minutes or optimize script

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:

  1. Go to Google Cloud Console → APIs & Services → OAuth consent screen

  2. Move your app from "Testing" to "Production" (or re-add your email as a test user)

  3. Re-run the OAuth flow to generate a fresh refresh token:

  4. Update GOOGLE_CREDENTIALS_JSON in 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:

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 calendarId in the script from "primary" to the specific calendar ID

4. poetry install fails in Bolt

Cause: Missing or misconfigured pyproject.toml.

Fix:

  • Ensure pyproject.toml is committed to your main branch

  • The poetry install command must be the first command in your Bolt schedule's command list

  • Check that Python version constraints in pyproject.toml match 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_KEYopenclaw_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

  1. Extend the script to automatically create focus-time events (not just suggest them)

  2. Add team-wide scanning by iterating over multiple calendar IDs

  3. Integrate with Paradime Docs to track documentation coverage alongside calendar hygiene

  4. 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:

Interested to Learn More?
Try Out the Free 14-Days Trial

Stop Managing Pipelines. Start Shipping Them.

Join the teams that replaced manual dbt™ workflows with agentic AI. Free to start, no credit card required.

Stop Managing Pipelines. Start Shipping Them.

Join the teams that replaced manual dbt™ workflows with agentic AI. Free to start, no credit card required.

Stop Managing Pipelines. Start Shipping Them.

Join the teams that replaced manual dbt™ workflows with agentic AI. Free to start, no credit card required.

Copyright © 2026 Paradime Labs, Inc. Made with ❤️ in San Francisco ・ London

*dbt® and dbt Core® are federally registered trademarks of dbt Labs, Inc. in the United States and various jurisdictions around the world. Paradime is not a partner of dbt Labs. All rights therein are reserved to dbt Labs. Paradime is not a product or service of or endorsed by dbt Labs, Inc.

Copyright © 2026 Paradime Labs, Inc. Made with ❤️ in San Francisco ・ London

*dbt® and dbt Core® are federally registered trademarks of dbt Labs, Inc. in the United States and various jurisdictions around the world. Paradime is not a partner of dbt Labs. All rights therein are reserved to dbt Labs. Paradime is not a product or service of or endorsed by dbt Labs, Inc.

Copyright © 2026 Paradime Labs, Inc. Made with ❤️ in San Francisco ・ London

*dbt® and dbt Core® are federally registered trademarks of dbt Labs, Inc. in the United States and various jurisdictions around the world. Paradime is not a partner of dbt Labs. All rights therein are reserved to dbt Labs. Paradime is not a product or service of or endorsed by dbt Labs, Inc.