How to Auto-Decline Low-Priority Meetings with OpenClaw in Paradime
Feb 26, 2026
Auto-Decline Irrelevant Meetings with Paradime, OpenClaw & Google Calendar API
Stop wasting hours in meetings that don't need you. This guide walks you through building an automated meeting-decline agent that scans your Google Calendar every 2 hours, evaluates each pending invite for relevance, and auto-declines the ones that don't make the cut — all orchestrated through Paradime Bolt scheduling and powered by OpenClaw's AI agent runtime.
By the end, you'll have a repeatable workflow: measure how many meetings land on your calendar → identify which ones are irrelevant → fix your schedule by auto-declining with a polite message → validate the time savings.
What Is Paradime?
Paradime is an AI-native platform for agentic data engineering that replaces dbt Cloud™. Teams use Paradime to code, ship, fix, and scale data pipelines for analytics and AI — built for fast-moving teams. It provides four core capabilities:
Code IDE — An AI-native IDE (powered by DinoAI) that cuts dbt™ and Python development time by 83%+.
Bolt — Production-grade pipeline orchestration with configure-and-forget scheduling, cron triggers, CI/CD, and a 70% reduction in mean-time-to-repair (MTTR).
Radar — FinOps tooling to reduce Snowflake and BigQuery warehouse costs.
Docs — AI-driven documentation that auto-generates and syncs with your dbt™ YAML.
For this project, we lean heavily on Bolt — Paradime's scheduler — to run our meeting-decline script on a cron cadence and monitor its execution through rich run logs and DinoAI-powered debugging.
What Is OpenClaw?
OpenClaw is a self-hosted AI assistant gateway. It connects chat apps — WhatsApp, Telegram, Discord, Slack, iMessage, and 20+ more — to AI coding agents. You run a single Gateway process on your own machine (or server), and it becomes the bridge between your messaging apps and an always-available AI assistant.
Key capabilities relevant to this project:
Capability | Why It Matters Here |
|---|---|
Cron tool | Built-in scheduler that persists jobs, wakes the agent on time, and can deliver output to a chat channel |
Multi-channel messaging | Send polite decline reasons back to you via Slack, WhatsApp, or any connected channel |
Custom tools | Inject Python scripts as tools the agent can call on each cron tick |
Secrets management | Store Google credentials and API keys securely with |
OpenClaw is open-source (MIT licensed), runs locally, and gives you full control over your data.
Architecture Overview
Before diving into code, here's how the pieces fit together:
Figure 1: End-to-end flow — Bolt triggers OpenClaw on a 2-hour cron, the Python script scans and declines irrelevant invites, and a summary is delivered to your chat channel.
Setup: OpenClaw SDK + Google Calendar API
Prerequisites
Requirement | Version |
|---|---|
Python | 3.10+ |
Node.js | 22 LTS or 24+ |
OpenClaw | Latest ( |
Google Cloud project | With Calendar API enabled |
Step 1: Install OpenClaw
This installs the Gateway daemon as a system service (launchd on macOS, systemd on Linux). Verify it's running:
Step 2: Install Python Dependencies
Step 3: Set Up Google Calendar API Credentials
Go to the Google Cloud Console and create a new project (or select an existing one).
Enable the Google Calendar API: navigate to APIs & Services → Library, search for "Google Calendar API", and click Enable.
Configure the OAuth consent screen: go to Google Auth platform → Branding, set your app name, and select Internal audience.
Create OAuth credentials: go to Google Auth platform → Clients, click Create Client, select Desktop app, and download the JSON file.
Run the Google Calendar skill's auth helper to obtain a refresh token:
This opens a browser window for OAuth consent. After approval, it prints your refresh_token.
Step 4: Store Secrets in OpenClaw
These are stored securely using OpenClaw's SecretRef system and resolved at activation time — never persisted in plaintext config files.
The Script: Scan, Evaluate, and Auto-Decline
Create a file called decline_meetings.py. This script does three things:
Scans pending invites (events with
responseStatus: needsAction)Evaluates relevance based on attendees, subject line, and description
Auto-declines irrelevant meetings with a polite message
Figure 2: Decision flow for each pending meeting invite — events that fail relevance checks are automatically declined with a polite reason.
Full Script
How the Relevance Engine Works
The script uses a multi-signal scoring system. A meeting must trigger 2 or more decline reasons before it's auto-declined. This prevents false positives:
Signal | What It Checks | Example |
|---|---|---|
Keyword match | Subject line contains terms like "all-hands", "optional", "fyi" | "Optional: Q3 All-Hands" |
Missing agenda | Event has no description body | Empty description field |
Mass meeting | 15+ attendees | Company-wide sync with 40 people |
External organizer | Organizer is outside your domain and your email isn't in the subject | Vendor demo you weren't directly invited to |
Tip: Customize
IRRELEVANT_KEYWORDS,MASS_MEETING_THRESHOLD, andMY_DOMAINto match your organization's meeting culture. Start conservative and loosen the rules as you gain confidence.
Environment Variables
Both Paradime Bolt and OpenClaw need access to credentials. Here's the full set:
Variable | Where It's Used | Description |
|---|---|---|
| Python script | OAuth client ID from Google Cloud Console |
| Python script | OAuth client secret |
| Python script | Long-lived refresh token from OAuth consent flow |
| Python script | Calendar to scan (default: |
| Python script | Your company's email domain for organizer checks |
| Python script | Your email address |
| OpenClaw Gateway | API key for the LLM provider powering the agent |
Setting Env Vars in OpenClaw
OpenClaw resolves environment variables from multiple sources with clear precedence:
Process environment (parent shell / daemon) — highest priority
.envfile in current working directoryGlobal
.envat~/.openclaw/.envConfig
envblock in~/.openclaw/openclaw.json
For secrets, use OpenClaw's SecretRef system:
Or use a .env file (add to .gitignore):
Setting Env Vars in Paradime Bolt
Navigate to Settings → Workspaces → Environment Variables → Bolt Schedules section, click Add New, and add each key-value pair. These are available to all Bolt schedule runs. See Paradime Bolt Environment Variables docs for details.
Bolt Schedule: Cron Every 2 Hours
Paradime Bolt supports Schedules as Code — you define your schedules in a paradime_schedules.yml file at the root of your dbt™ project.
Bolt Schedule YAML
Cron expression breakdown:
Field | Value | Meaning |
|---|---|---|
Minute |
| At minute 0 |
Hour |
| Every 2nd hour |
Day of month |
| Every day |
Month |
| Every month |
Day of week |
| Every day of week |
Validate your expression at crontab.guru.
Alternative: OpenClaw Cron (Standalone)
If you're running this outside of Paradime, use OpenClaw's built-in cron tool:
Or via the Gateway API tool-call JSON:
OpenClaw cron jobs persist under ~/.openclaw/cron/ so Gateway restarts won't lose your schedules.
Monitoring and Debugging
Once your schedule is live, you need visibility into what's happening. Here's how to monitor with both Paradime and OpenClaw.
Paradime Bolt Monitoring
Paradime Bolt provides three layers of run logs for every execution (docs):
Log Level | What It Shows | When to Use |
|---|---|---|
Summary Logs | DinoAI-generated overview with warnings and potential fixes | Quick health check — "did it work?" |
Console Logs | Detailed chronological output from your script | Standard troubleshooting — "what happened?" |
Debug Logs | Extensive system-level details | Deep investigation — "why did the API call fail?" |
To view run history:
Navigate to Bolt → Schedules Overview
Click on
auto-decline-meetingsReview the Run History tab — each row shows Status, Trigger type, Branch, Duration, and Run ID
Click any run to access Logs and Artifacts
The Bolt Schedules Overview also shows your next scheduled run time and a countdown, so you always know when the next scan will execute.
Figure 3: Navigate Bolt's monitoring UI — from schedule overview to detailed run logs with DinoAI-powered summaries.
OpenClaw Cron Monitoring
Check the status of your cron jobs:
OpenClaw applies exponential backoff on failures (30s → 1m → 5m → 15m → 60m), and the backoff resets after the next successful run.
Setting Up Notifications
Paradime Bolt supports email and Slack notifications on passed, failed, and sla events (already configured in the YAML above).
OpenClaw can deliver summaries to any connected channel. The --announce flag in the cron setup sends the script's output to your chosen Slack channel after each run.
Troubleshooting Common Issues
1. GOOGLE_REFRESH_TOKEN Expired or Invalid
Symptom: Script fails with google.auth.exceptions.RefreshError.
Fix: Refresh tokens can expire if your Google Cloud app is in "Testing" mode (tokens expire after 7 days). Move your app to "Production" in the OAuth consent screen, or re-run the auth flow:
2. No Pending Invites Found
Symptom: Script logs "Found 0 pending invite(s)" but you know there are invites.
Possible causes:
Wrong calendar ID: Ensure
GOOGLE_CALENDAR_IDis set toprimaryor the correct calendar ID.Time window too narrow: The script scans 7 days ahead. Invites further out won't appear.
Auto-accept is on: Check Google Calendar Settings → Event settings → "Automatically add invitations" — if set to "Yes", events get
acceptedstatus immediately.
3. Events Not Actually Being Declined
Symptom: Script logs "DECLINED" but the event still shows as pending in your calendar.
Fix: Ensure the OAuth scope includes write permissions. The script needs https://www.googleapis.com/auth/calendar.events (not just calendar.readonly). Update your SCOPES and re-authenticate:
4. OpenClaw Cron Job Not Firing
Symptom: openclaw cron list shows the job but it never runs.
Possible causes:
Gateway not running: Verify with
openclaw gateway --port 18789 --verbose. The daemon must be active for cron to tick.Cron disabled: Check
~/.openclaw/openclaw.jsonfor"cron": { "enabled": false }. Set totrue.Stagger applied: OpenClaw applies up to 5 minutes of deterministic stagger for top-of-hour expressions. Use
--exactto force precise timing:
5. Bolt Schedule Fails with Exit Code 1
Symptom: Paradime Bolt shows a red "Failed" status.
Fix:
Click into the failed run in Bolt
Check Summary Logs — DinoAI often identifies the root cause and suggests a fix
Check Console Logs for the Python traceback
Common cause: missing environment variable. Verify all env vars are set in Settings → Workspaces → Environment Variables → Bolt Schedules
6. Rate Limiting from Google Calendar API
Symptom: HttpError 429: Rate Limit Exceeded.
Fix: The Google Calendar API has a default quota of 1,000,000 queries per day. Running every 2 hours (12 runs/day × ~50 events) is well within limits. If you're hitting this:
Reduce
maxResultsin theevents().list()callAdd exponential backoff with
time.sleep()between API callsCheck your Google Cloud Console quotas
Validating Your Time Savings
The whole point is to measure the impact. Here's a simple before-and-after framework:
Figure 4: Before-and-after measurement framework — track your meeting waste ratio before automation and net time savings after.
Suggested metrics to track:
Metric | How to Measure | Target |
|---|---|---|
Meetings declined per week | Script output summary | 5–15 per week |
False positive rate | Re-invites you manually accept after decline | < 10% |
Hours reclaimed per week | Declined count × avg meeting duration (30 min) | 2.5–7.5 hours |
Decline reason distribution | Parse script logs | Tune rules for highest-frequency reasons |
Add a weekly log line to your script to track these over time:
Wrapping Up
You now have a fully automated meeting-decline pipeline that follows a repeatable workflow:
Measure — The script logs every pending invite and every decline decision with reasons.
Identify — Multi-signal relevance scoring (keywords, missing agenda, mass meetings, external organizers) catches the meetings that don't need you.
Fix — Auto-decline with a polite, customizable message that invites re-invitation if the decline was wrong.
Validate — Weekly metrics tracking confirms your time savings and lets you tune the rules.
The combination of Paradime Bolt for production-grade scheduling and monitoring, OpenClaw for AI-agent orchestration and multi-channel delivery, and the Google Calendar API for direct calendar manipulation gives you an enterprise-ready solution you can deploy in under an hour.
Next steps:
Customize the
IRRELEVANT_KEYWORDSlist for your organizationAdjust
MASS_MEETING_THRESHOLDbased on your team sizeAdd an LLM-powered relevance scorer via OpenClaw's agent runtime for smarter evaluation of meeting descriptions
Connect the summary output to your preferred chat channel (Slack, Teams, WhatsApp) for real-time visibility
Stop letting your calendar control you. Let your calendar work for you. 🦞

