How to Auto-Decline Low-Priority Meetings with OpenClaw in Paradime

Feb 26, 2026

Table of Contents

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 secret set

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 (npm install -g 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

  1. Go to the Google Cloud Console and create a new project (or select an existing one).

  2. Enable the Google Calendar API: navigate to APIs & Services → Library, search for "Google Calendar API", and click Enable.

  3. Configure the OAuth consent screen: go to Google Auth platform → Branding, set your app name, and select Internal audience.

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

  1. Scans pending invites (events with responseStatus: needsAction)

  2. Evaluates relevance based on attendees, subject line, and description

  3. 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, and MY_DOMAIN to 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

GOOGLE_CLIENT_ID

Python script

OAuth client ID from Google Cloud Console

GOOGLE_CLIENT_SECRET

Python script

OAuth client secret

GOOGLE_REFRESH_TOKEN

Python script

Long-lived refresh token from OAuth consent flow

GOOGLE_CALENDAR_ID

Python script

Calendar to scan (default: primary)

MY_EMAIL_DOMAIN

Python script

Your company's email domain for organizer checks

MY_EMAIL

Python script

Your email address

OPENCLAW_API_KEY

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:

  1. Process environment (parent shell / daemon) — highest priority

  2. .env file in current working directory

  3. Global .env at ~/.openclaw/.env

  4. Config env block 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

0

At minute 0

Hour

*/2

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:

  1. Navigate to Bolt → Schedules Overview

  2. Click on auto-decline-meetings

  3. Review the Run History tab — each row shows Status, Trigger type, Branch, Duration, and Run ID

  4. 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_ID is set to primary or 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 accepted status 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.json for "cron": { "enabled": false }. Set to true.

  • Stagger applied: OpenClaw applies up to 5 minutes of deterministic stagger for top-of-hour expressions. Use --exact to force precise timing:

5. Bolt Schedule Fails with Exit Code 1

Symptom: Paradime Bolt shows a red "Failed" status.

Fix:

  1. Click into the failed run in Bolt

  2. Check Summary Logs — DinoAI often identifies the root cause and suggests a fix

  3. Check Console Logs for the Python traceback

  4. 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 maxResults in the events().list() call

  • Add exponential backoff with time.sleep() between API calls

  • Check 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:

  1. Measure — The script logs every pending invite and every decline decision with reasons.

  2. Identify — Multi-signal relevance scoring (keywords, missing agenda, mass meetings, external organizers) catches the meetings that don't need you.

  3. Fix — Auto-decline with a polite, customizable message that invites re-invitation if the decline was wrong.

  4. 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_KEYWORDS list for your organization

  • Adjust MASS_MEETING_THRESHOLD based on your team size

  • Add 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. 🦞

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.