How to Automate Email Triage with OpenClaw in Paradime
Feb 26, 2026
How to Build an AI Email Triage Pipeline with Paradime, OpenClaw, and Slack
Every morning, analytics engineers face the same silent productivity killer: an inbox overflowing with alerts, stakeholder requests, vendor notifications, and genuine emergencies—all undifferentiated. The result? Critical data pipeline failures get buried under marketing emails, and urgent Slack messages from stakeholders go unanswered for hours.
What if an AI agent could scan your inbox every hour, classify each message by urgency, and post only the truly critical items to a Slack channel—all orchestrated by the same platform you already use for dbt™ scheduling?
In this guide, you'll build exactly that. We'll connect Paradime's Bolt scheduler with OpenClaw's AI email triage skill and a Slack webhook to create a fully automated, repeatable email triage pipeline. You'll follow a concrete workflow: measure inbox volume → identify urgent items with AI classification → fix notification gaps by routing to Slack → validate time savings with monitoring.
What Is Paradime?
Paradime is an all-in-one AI platform that replaces dbt Cloud™. It provides a dbt™-native workspace where analytics teams can code, ship, fix, and scale data pipelines for analytics and AI—from a single platform.
Paradime consists of three core pillars:
Pillar | What It Does |
|---|---|
Code IDE | An AI-native IDE for dbt™ and Python development, cutting coding time by up to 83%. Includes DinoAI for context-aware AI-assisted coding. |
Bolt | Production-grade orchestration for dbt™ jobs with cron scheduling, CI/CD, event-driven triggers, and built-in notifications to Slack, email, and Microsoft Teams. |
Radar | FinOps tooling that reduces Snowflake and BigQuery warehouse costs, using AI agents for automated cost optimization. |
For this tutorial, we'll leverage Bolt's cron scheduler and environment variables to orchestrate our email triage automation on a recurring hourly schedule.
Docs: Paradime Help Docs · Bolt Scheduling
What Is OpenClaw?
OpenClaw is an open-source personal AI assistant that runs on your own machine (Mac, Windows, or Linux). It connects to LLMs like Anthropic's Claude or OpenAI's GPT models and operates across channels you already use—Slack, WhatsApp, Telegram, Discord, and more.
Key capabilities relevant to this build:
Email triage skill — Scans unread emails via IMAP, classifies them by urgency using AI (with a heuristic fallback), and surfaces only what matters.
Cron jobs — Built-in scheduler that persists jobs and wakes the agent at the right time.
Slack integration — Native support for posting messages, summaries, and alerts to Slack channels.
Persistent memory — Remembers context across sessions so classification improves over time.
OpenClaw's email triage skill classifies messages into four categories:
Architecture Overview
Before we dive into setup, let's visualize the end-to-end flow:
Figure 1: End-to-end email triage pipeline — Bolt triggers OpenClaw every hour, which fetches, classifies, and routes urgent emails to Slack.
Setup: OpenClaw + Gmail OAuth + Slack Webhook
Prerequisites
Node.js 22+ (Node 24 recommended)
Python 3.10+ (for the email triage skill)
A Google Cloud project with Gmail API enabled
A Slack workspace where you can create incoming webhooks
A Paradime account with Bolt access
Step 1: Install OpenClaw
Step 2: Configure Gmail OAuth 2.0
You need OAuth credentials to let OpenClaw read your inbox securely.
Figure 2: Gmail OAuth 2.0 setup flow — from Google Cloud project creation to token persistence.
Detailed steps:
Create a Google Cloud project — Go to Google Cloud Console, click "New Project," and name it (e.g.,
OpenClaw Email Triage).Enable the Gmail API — Navigate to APIs & Services → Enable APIs and Services, search for "Gmail API," and click Enable.
Configure the OAuth consent screen — Select "External," fill in the app name, support email, and developer contact. Add these scopes:
Create OAuth credentials — Go to Credentials → Create Credentials → OAuth client ID. Select "Desktop app." Copy the Client ID and Client Secret.
Store credentials securely:
Authorize on first run — When the triage skill runs for the first time, a browser window opens for you to grant permissions. The resulting token is saved to
~/.openclaw/tokens/gmail.json. Add this path to.gitignore.
⚠️ Security tip: Grant only the minimum required scopes (
gmail.readonlyandgmail.modify). Never grantgmail.sendunless your workflow explicitly requires sending email. Rotate credentials periodically.
Step 3: Create a Slack Incoming Webhook
Go to Slack API: Apps and click Create New App → From scratch.
Name it (e.g.,
Email Triage Bot) and select your workspace.Navigate to Incoming Webhooks → toggle Activate Incoming Webhooks to On.
Click Add New Webhook to Workspace and select the target channel (e.g.,
#urgent-emails).Copy the webhook URL:
Script: Scan Unread Emails, Classify by Urgency, Post Urgent Items to Slack
OpenClaw's community email-triage skill provides a battle-tested Python script that handles the heavy lifting. Here's the core workflow and how to extend it with Slack notifications.
Install the Email Triage Skill
Core Triage Commands
How Classification Works
Figure 3: Classification pipeline — LLM-powered with heuristic fallback, deduplication, and selective routing.
The skill:
Connects to IMAP over SSL and fetches unread messages (up to 20 per scan).
Deduplicates by
Message-ID(or hash ofsubject + senderas fallback).Classifies each email using an LLM (Ollama by default) or falls back to keyword heuristics.
Stores state in a local JSON file — tracks category, reason, and surfaced status.
Auto-prunes state to the most recent 200 entries.
Adding the Slack Webhook Notification
Create a wrapper script that calls the triage skill and posts urgent items to Slack:
Make it executable:
Environment Variables
The pipeline requires three categories of environment variables. Here's the complete reference:
Variable | Required | Description |
|---|---|---|
| ✅ | Path to your Google OAuth credentials JSON file (or the JSON content itself) |
| ✅ | Your Anthropic or OpenAI API key used by OpenClaw for LLM classification |
| ✅ | Slack incoming webhook URL for posting urgent email notifications |
| ✅ | IMAP server hostname (e.g., |
| Optional | IMAP port, defaults to |
| ✅ | Your Gmail address |
| ✅ | Gmail app password (requires 2-Step Verification enabled) |
| Optional | Ollama endpoint for local LLM classification (default: |
| Optional | Model name for Ollama (default: |
Configuring in Paradime Bolt
In Paradime, environment variables for Bolt schedules are configured at the workspace level:
Click Settings from any page in Paradime.
Navigate to Workspaces → Environment Variables.
In the Bolt Schedules section, click Add New.
Enter each key-value pair and click the Save icon (💾).
You can also bulk upload via CSV with Key and Value columns.
For schedule-specific overrides (e.g., using a different SLACK_WEBHOOK_URL for a staging schedule), configure overrides directly in the Bolt schedule's Environment Variables Override section.
Configuring in OpenClaw
For the OpenClaw Gateway, set environment variables in your shell profile or .env file:
Bolt Schedule: Cron Every Hour
Now let's wire everything together with a Paradime Bolt schedule that triggers the triage pipeline every hour.
Option A: Schedules as Code (YAML)
Create a paradime_schedules.yml file in the root of your dbt™ project:
The file sits alongside your dbt_project.yml:
Paradime checks for changes to paradime_schedules.yml on your default branch every 10 minutes, or you can manually trigger a refresh via the Bolt interface by clicking Parse Schedules.
Tip: Validate your cron expression at crontab.guru. The expression
0 * * * *runs at minute 0 of every hour.
Option B: Bolt UI Configuration
Navigate to Bolt in Paradime.
Click Create Schedule.
Set the Schedule Type to Standard.
Under Trigger Type, select Scheduled Run and enter the cron expression:
0 * * * *.Under Command Settings, add:
bash scripts/email/triage-and-notify.sh.Under Notification Settings, add a Slack destination for failure alerts so you know if the triage script itself breaks.
Click Deploy.
Option C: OpenClaw Native Cron (Alternative)
If you prefer running the schedule entirely within OpenClaw's built-in cron (without Paradime Bolt), you can use:
Or via the tool-call JSON format:
Docs: OpenClaw Cron Jobs · Bolt Trigger Types
Monitoring and Debugging
A pipeline is only as good as your ability to know when it breaks. Here's how to monitor both layers.
Monitoring the Bolt Schedule
Figure 4: Bolt monitoring flow — failure notifications trigger a diagnostic workflow through three log levels.
Set up failure notifications:
In the Bolt UI, select your
email-triage-hourlyschedule.Click Edit → Notification Settings → Add destination.
Add a Slack destination for the
#data-opschannel.Enable notifications for: Failure and SLA (set SLA threshold to, e.g., 5 minutes).
Click Deploy.
Reviewing failed runs:
Navigate to Bolt and find your schedule.
Look for runs with "Error" status in the Run History section.
Click into the failed run and review:
Docs: Debugging Failed Runs
Monitoring OpenClaw
Run these commands to inspect the health of your OpenClaw instance:
Validating Savings
The whole point of this pipeline is to save time. Track your results:
This shows you:
Total emails scanned
Breakdown by category (urgent, needs-response, informational, spam)
Number of emails surfaced to Slack vs. archived
Measure → Identify → Fix → Validate loop:
Figure 5: The repeatable optimization loop — measure inbox metrics, identify classification gaps, fix rules, validate improvements.
Troubleshooting Common Issues
Gmail / IMAP Connection Failures
Symptom | Cause | Fix |
|---|---|---|
| App Password not configured | Enable 2-Step Verification in Google Account, then generate an App Password under Security → App passwords. |
| IMAP not enabled | Go to Gmail Settings → See all settings → Forwarding and POP/IMAP → Enable IMAP. |
| Token refresh failed | Delete |
| Missing API scope | Ensure |
OpenClaw Gateway Issues
Symptom | Cause | Fix |
|---|---|---|
| npm global bin not in PATH | Run |
| Port conflict | Check with |
Cron job doesn't fire | Gateway not running | OpenClaw cron runs inside the Gateway process. Ensure it's running 24/7 via |
| Cron disabled in config | Check that |
Slack Webhook Failures
Symptom | Cause | Fix |
|---|---|---|
| Invalid webhook URL | Verify the |
HTTP 403 from Slack | Webhook revoked or app uninstalled | Re-create the webhook in your Slack app settings. |
HTTP 400 from Slack | Malformed JSON payload | Validate your JSON payload at jsonlint.com. Ensure no trailing commas or unescaped characters in email subjects. |
Paradime Bolt Issues
Symptom | Cause | Fix |
|---|---|---|
Schedule not appearing | YAML not on default branch | Ensure |
Env vars not available | Not configured for Bolt | Environment variables must be added under Settings → Workspaces → Environment Variables → Bolt Schedules section. Code IDE vars are separate. |
Run fails with | Script not executable | Run |
Running Diagnostics
Wrapping Up
You've now built a complete, production-ready AI email triage pipeline that:
Measures — Scans your inbox every hour using OpenClaw's email triage skill.
Identifies — Classifies each email into urgent, needs-response, informational, or spam using LLM-powered classification (with heuristic fallback).
Fixes — Routes only urgent and needs-response items to a dedicated Slack channel, eliminating notification noise.
Validates — Tracks classification statistics and surfaces metrics to confirm the pipeline is saving time.
Figure 6: Before vs. after — from 45 minutes of daily manual triage to fully automated, zero-touch email routing.
Next Steps
Tune classification accuracy — Maintain a VIP sender list in your OpenClaw config. Adjust keyword heuristics for your domain (e.g., add "pipeline failed," "SLA breach," "data freshness" as urgent keywords).
Add more channels — Route needs-response emails to a separate
#action-requiredSlack channel for asynchronous follow-up.Integrate with Paradime Radar — Use Radar's cost monitoring to alert on warehouse cost spikes alongside your email triage alerts.
Scale with Bolt triggers — Chain your email triage schedule with downstream dbt™ jobs using Bolt's On Run Completion trigger so that urgent data quality alerts from email automatically kick off remediation runs.
The repeatable workflow—measure → identify → fix → validate—applies far beyond email. Use the same pattern for Slack alert fatigue, PagerDuty noise reduction, or any scenario where signal-to-noise ratio determines how fast your team can respond.
Resources:

