How to Build a Slack Standup Bot with OpenClaw in Paradime

Feb 26, 2026

Table of Contents

How to Build an Automated Slack Standup Bot with Paradime, OpenClaw, and Slack SDK

Manual standups eat 15–30 minutes of your team's morning—every single weekday. Multiply that across a 10-person engineering team and you're burning 25–50 hours per week on a meeting that could be a message. What if an AI agent scanned your team's Slack channels at 9:25 AM, extracted yesterday's updates and blockers, and posted a crisp standup summary by 9:30 AM—without anyone typing a word?

That's exactly what you'll build in this guide. Using Paradime, OpenClaw, and the Slack SDK, you'll wire together an automated standup pipeline that follows a repeatable workflow: scan → extract → compile → post. No vague "optimize your standups" advice—just a concrete, production-ready automation you can deploy today.

Figure 1: End-to-end automated standup pipeline—from cron trigger to posted summary.

What Is Paradime?

Paradime is an all-in-one AI-native platform that replaces dbt Cloud™. It's built for fast-moving data teams who need to code, ship, fix, and scale data pipelines for analytics and AI—all from a single workspace.

Paradime's core surface areas include:

Component

What It Does

Code IDE

AI-native IDE for dbt™ and Python development. Includes DinoAI for context-aware code generation. Cuts dbt™ development time by 83%+.

Bolt

Pipeline orchestration for dbt™ and Python. Schedules, CI/CD, triggers, and monitoring—all defined as code.

Radar

FinOps module to cut Snowflake and BigQuery warehouse costs. Identifies wasteful queries and credits consumption.

For this tutorial, Bolt is the key component. It provides the cron scheduler that triggers your standup automation on a repeatable weekday cadence, with full schedule-as-code support via paradime_schedules.yml.

Why Paradime for Scheduling?

Paradime Bolt supports four trigger types:

  1. Scheduled Run — Cron-based execution (e.g., 30 9 * * 1-5 for 9:30 AM weekdays)

  2. On Run Completion — Chain schedules after upstream jobs finish

  3. On Merge — CI/CD-style triggers when code merges to your default branch

  4. Bolt API — Programmatic triggers via REST endpoints

You define schedules in a paradime_schedules.yml file alongside your dbt_project.yml:

Cron Best Practice: Use standard cron day-of-week values (0–6, Sunday–Saturday). Validate expressions at crontab.guru.

What Is OpenClaw?

OpenClaw is an open-source framework for building autonomous AI agents that can use tools, browse the web, write and execute code, and interact with external services like Slack. It goes beyond simple chat—agents perceive a goal, plan steps, select tools, execute them, evaluate results, and iterate.

Figure 2: OpenClaw's perceive → plan → act → observe → repeat loop applied to standup automation.

OpenClaw Architecture at a Glance

Layer

Purpose

Core Runtime

Agent loop, memory, state management

LLM Backbone

Model-agnostic: OpenAI, Anthropic, Google, local models via Ollama

Tool Registry

Plugin system with schema for inputs, outputs, and permissions

Memory System

Short-term conversation context + long-term vector store

The OpenClaw Slack Skill

OpenClaw ships with a built-in Slack skill that exposes these actions:

Action

What It Does

readMessages

Read recent messages from a channel (channelId, limit)

sendMessage

Send a message (to: "channel:C123", content)

react

React to a message with an emoji

pinMessage

Pin a message in a channel

memberInfo

Get member info by user ID

editMessage

Edit a previously sent message

For our standup bot, we'll primarily use readMessages to scan channels and sendMessage to post the compiled summary.

Setup: openclaw-sdk + Slack SDK

Prerequisites

Before you start, make sure you have:

  • Node.js ≥ 22 (OpenClaw runtime requirement)

  • Python 3.10+ (for the standup script and Slack SDK)

  • A Slack workspace where you have admin permissions

  • An LLM API key (OpenAI, Anthropic, or another supported provider)

Step 1: Install OpenClaw

Enable the cron scheduler in your OpenClaw config:

Step 2: Create a Slack App and Bot

  1. Go to api.slack.com/appsCreate New AppFrom scratch

  2. Name it (e.g., StandupClaw) and select your workspace

  3. Navigate to OAuth & Permissions and add these Bot Token Scopes:

Scope

Why

chat:write

Post standup summaries

channels:read

List available channels

channels:history

Read message history from public channels

groups:history

Read message history from private channels

im:history

Read DM history (optional)

users:read

Resolve user IDs to display names

app_mentions:read

Respond to @mentions

reactions:read

Read emoji reactions

  1. Install to Workspace and copy the Bot User OAuth Token (xoxb-...)

  2. Enable Socket Mode → create an App-Level Token (xapp-...) with connections:write scope

Step 3: Wire Slack into OpenClaw

Configure OpenClaw to use your Slack bot:

Step 4: Install the Python Slack SDK

Step 5: Invite the Bot to Target Channels

In each team channel you want scanned, run:

Environment Variables

Create a .env file in your project root:

Variable

Source

Purpose

SLACK_BOT_TOKEN

Slack App → OAuth & Permissions → Bot Token

Authenticate API calls to read/write messages

SLACK_APP_TOKEN

Slack App → Basic Information → App-Level Token

Socket Mode connection for OpenClaw

ANTHROPIC_API_KEY

console.anthropic.com

LLM backbone for OpenClaw agent reasoning

Security Note: Never commit .env files to Git. Add .env to your .gitignore. For production deployments, use a secrets manager or environment variable injection from your CI/CD platform.

OpenClaw resolves environment variables from multiple sources with this priority order:

  1. Process environment (export VAR=value)

  2. .env file in the working directory

  3. Config file references (${VAR_NAME} syntax in openclaw.json)

Script: Scan Team Channels, Extract Updates, Compile Standup Summary

Here's the core Python script that ties everything together:

Figure 3: Sequence diagram showing the scan → extract → compile → post workflow.

Bolt Schedule: Cron 9:30 AM Weekdays

Now let's schedule this script to run every weekday morning. You have two options: Paradime Bolt (for teams already using Paradime for dbt™ pipelines) or OpenClaw's built-in cron (for standalone deployments).

Option A: Paradime Bolt Schedule (Recommended for dbt™ Teams)

If your standup bot is part of a larger dbt™ pipeline, define the schedule in your paradime_schedules.yml:

Paradime Bolt reads this file from your default Git branch (main or master) and checks for changes every 10 minutes. You can also manually trigger a parse from the Bolt UI.

Tip: Use 25 9 * * 1-5 instead of 30 9 * * 1-5 to give the script ~5 minutes to scan, process, and post before the 9:30 AM standup window.

Validate your cron expression:

Option B: OpenClaw Native Cron

For standalone deployments without Paradime, use OpenClaw's built-in cron scheduler:

Or define it as a JSON tool call:

Figure 4: Two scheduling paths—Paradime Bolt for dbt™ teams, OpenClaw cron for standalone deployments.

Creating a Custom OpenClaw Standup Skill

For a more reusable approach, create a dedicated OpenClaw skill for standup automation:

Create the SKILL.md:

🤖 Daily Standup Summary — {date} ────────────────────────────

@person_name

Yesterday: • bullet 1 • bullet 2

Today: • bullet 1

Blockers: • None / bullet


@person_name ...

Refresh OpenClaw to discover the new skill:

Monitoring and Debugging

Verifying the Schedule Is Active

Paradime Bolt:

  • Navigate to the Bolt UI in your Paradime workspace

  • Check the schedule status for daily-standup-bot

  • Review run history for success/failure indicators

OpenClaw Cron:

Monitoring Script Output

Add structured logging to your standup script:

Debugging OpenClaw Agent Issues

Enable debug logging for OpenClaw:

Check the cron job execution logs:

Figure 5: Decision tree for debugging standup bot failures.

Troubleshooting Common Issues

1. "not_in_channel" Error When Fetching Messages

Symptom: SlackApiError: The request returned error: not_in_channel

Fix: The bot must be invited to each channel it scans:

2. Empty Message History

Symptom: conversations.history returns zero messages even though the channel has activity.

Causes & Fixes:

Cause

Fix

Missing channels:history scope

Add scope in Slack App → OAuth & Permissions → reinstall app

Wrong timestamp range

Verify oldest and latest are Unix timestamps (not ISO)

Bot not in channel

Run /invite @StandupClaw in each target channel

Slack free plan message limit

Free plans restrict history to 90 days; upgrade if needed

3. OpenClaw Agent Times Out

Symptom: subprocess.TimeoutError or no response from openclaw agent.

Fix: Increase the timeout and ensure the LLM provider is responsive:

Also verify your API key:

4. Cron Job Not Firing

Symptom: The scheduled job never runs.

Checklist:

  • OpenClaw cron is enabled: "cron": { "enabled": true } in openclaw.json

  • Timezone is correct: "tz": "America/New_York" matches your team's location

  • Cron expression is valid: test at crontab.guru

  • Gateway is running: openclaw gateway must be active

  • For Paradime Bolt: schedule file is merged to default branch

5. Duplicate Standup Posts

Symptom: Two identical standup summaries posted within minutes.

Fix: Add a deduplication check:

6. User Names Show as IDs (e.g., U04ABCDEF)

Symptom: The standup summary shows user IDs instead of names.

Fix: Ensure the bot has the users:read scope, and add caching to avoid rate limits:

Wrapping Up

You've built a complete automated standup pipeline that follows a repeatable, outcome-driven workflow:

Figure 6: The five-step repeatable workflow: scan → extract → compile → post → validate.

What You've Accomplished

Component

Tool

Role

Scheduling

Paradime Bolt or OpenClaw Cron

Triggers the standup script at 9:25 AM weekdays

Channel Scanning

Slack SDK (conversations.history)

Fetches yesterday's messages from team channels

Intelligence

OpenClaw Agent

Extracts updates, plans, and blockers using LLM reasoning

Delivery

Slack SDK (chat.postMessage)

Posts the compiled summary to #daily-standup

Monitoring

Structured logging + debug tools

Validates the pipeline is healthy

Key Takeaways

  1. Use Paradime Bolt if you're already running dbt™ pipelines—it gives you schedule-as-code, CI/CD triggers, and a unified orchestration layer.

  2. Use OpenClaw cron for standalone deployments where you want the AI agent to handle the full loop natively.

  3. Always set explicit timezones in your cron expressions to avoid UTC surprises on VPS or cloud deployments.

  4. Cache user lookups to stay within Slack API rate limits (Tier 2: ~20 requests per minute for users.info).

  5. Add deduplication guards to prevent double-posting if the script is triggered multiple times.

Next Steps

  • Add more data sources: Wire in GitHub commits, Jira ticket transitions, or Linear issues to enrich the standup with work artifacts—not just chat messages.

  • Build a feedback loop: Add a 👍/👎 reaction listener so team members can rate standup quality, feeding the signal back to improve the OpenClaw prompt.

  • Expand to retros: Extend the same scan → extract → compile pattern to generate weekly retrospective summaries every Friday at 4 PM.

The pattern is the same everywhere: scan → extract → compile → post → validate. Once you've built it for standups, you can apply it to any recurring team communication workflow.

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.