How to Build a Slack Standup Bot with OpenClaw in Paradime
Feb 26, 2026
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:
Scheduled Run — Cron-based execution (e.g.,
30 9 * * 1-5for 9:30 AM weekdays)On Run Completion — Chain schedules after upstream jobs finish
On Merge — CI/CD-style triggers when code merges to your default branch
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 |
|---|---|
| Read recent messages from a channel ( |
| Send a message ( |
| React to a message with an emoji |
| Pin a message in a channel |
| Get member info by user ID |
| 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
Go to api.slack.com/apps → Create New App → From scratch
Name it (e.g.,
StandupClaw) and select your workspaceNavigate to OAuth & Permissions and add these Bot Token Scopes:
Scope | Why |
|---|---|
| Post standup summaries |
| List available channels |
| Read message history from public channels |
| Read message history from private channels |
| Read DM history (optional) |
| Resolve user IDs to display names |
| Respond to @mentions |
| Read emoji reactions |
Install to Workspace and copy the Bot User OAuth Token (
xoxb-...)Enable Socket Mode → create an App-Level Token (
xapp-...) withconnections:writescope
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 App → OAuth & Permissions → Bot Token | Authenticate API calls to read/write messages |
| Slack App → Basic Information → App-Level Token | Socket Mode connection for OpenClaw |
| LLM backbone for OpenClaw agent reasoning |
Security Note: Never commit
.envfiles to Git. Add.envto 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:
Process environment (
export VAR=value).envfile in the working directoryConfig file references (
${VAR_NAME}syntax inopenclaw.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-5instead of30 9 * * 1-5to 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-botReview 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 | Add scope in Slack App → OAuth & Permissions → reinstall app |
Wrong timestamp range | Verify |
Bot not in channel | Run |
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 }inopenclaw.jsonTimezone is correct:
"tz": "America/New_York"matches your team's locationCron expression is valid: test at crontab.guru
Gateway is running:
openclaw gatewaymust be activeFor 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 ( | Fetches yesterday's messages from team channels |
Intelligence | OpenClaw Agent | Extracts updates, plans, and blockers using LLM reasoning |
Delivery | Slack SDK ( | Posts the compiled summary to #daily-standup |
Monitoring | Structured logging + debug tools | Validates the pipeline is healthy |
Key Takeaways
Use Paradime Bolt if you're already running dbt™ pipelines—it gives you schedule-as-code, CI/CD triggers, and a unified orchestration layer.
Use OpenClaw cron for standalone deployments where you want the AI agent to handle the full loop natively.
Always set explicit timezones in your cron expressions to avoid UTC surprises on VPS or cloud deployments.
Cache user lookups to stay within Slack API rate limits (Tier 2: ~20 requests per minute for
users.info).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.

