Readyset Docs

Slack

Deploy a Slack bot that answers database questions in natural language via Socket Mode.

RDST can run as a Slack bot that answers natural-language database questions. The bot uses Socket Mode, so you do not need a public URL — the bot connects outbound to Slack from wherever RDST is running.

Common usage

# One-time Slack app setup (interactive wizard)
rdst slack setup

# Start the bot for a specific agent
rdst slack start --agent sales-bot

# List configured agents
rdst slack list

# Check bot status
rdst slack status --agent sales-bot

How it works

The bot:

  1. Reads messages directed at it (mentions, DMs) in channels it has access to
  2. Routes each message through the underlying data agent
  3. Generates SQL with rdst ask, runs the agent's guard
  4. Returns the result as a threaded reply with the SQL and data

No part of the flow requires a public URL or reverse proxy.

Setup

Create a Slack app. Run rdst slack setup — it walks you through creating a Slack app with the right scopes and enabling Socket Mode.

rdst slack setup

The wizard prints the OAuth scopes and event subscriptions you need, then asks for the App-Level Token and Bot User OAuth Token your Slack app issues.

Create a data agent if you haven't already. This is what the bot will serve.

rdst guard create --name pii-safe \
    --mask "*.email:email" \
    --require-where \
    --no-select-star

rdst agent create --name sales-bot \
    --target prod-orders \
    --guard pii-safe \
    --description "Read-only sales data"

See Data Agents for guard and agent patterns.

Start the bot. This is a foreground process — keep it running in a terminal, a tmux pane, or a systemd service.

rdst slack start --agent sales-bot
✓ Connected to Slack as @sales-bot
✓ Socket Mode active
✓ Guard: pii-safe (7 rules)
✓ Target: prod-orders (PostgreSQL 15.4)

Listening for messages ...

Invite the bot to the channels where it should respond, then @mention or DM it with a question:

@sales-bot How many orders did we process last week?

For a production deployment, run rdst slack start under a process supervisor (systemd, pm2, Docker, Kubernetes) so it restarts on failure. The bot is stateless — you can restart it without losing any Slack state.

What the bot replies look like

ellen: @sales-bot top 5 customers by revenue this month

sales-bot:
  Generated SQL (ran via guard pii-safe ✓):
  ```sql
  SELECT c.id, c.name, SUM(o.total_cents) AS revenue_cents
  FROM   customers c
  JOIN   orders    o ON o.customer_id = c.id
  WHERE  o.created_at >= DATE_TRUNC('month', NOW())
    AND  o.status = 'paid'
    AND  o.tenant_id = $1
  GROUP BY c.id, c.name
  ORDER BY revenue_cents DESC
  LIMIT 5;
idnamerevenue_cents
42Acme Manufacturing4,820,135
118Blue Orchid Foods3,914,200
745Hendricks Retail3,120,980
...

5 rows, 84 ms


Every reply shows the SQL, the guard that was applied, and the results. Users
never see raw upstream errors.

## Managing multiple agents

You can run **one Slack bot per agent**. Typical pattern:

```bash
# Customer-support team
rdst slack start --agent support-bot &

# Sales team
rdst slack start --agent sales-bot &

# Engineering dashboard
rdst slack start --agent eng-dashboard &

Each bot has its own app token and operates independently. List what's configured:

rdst slack list
rdst slack status --agent sales-bot

Security considerations

  • Every question runs through the agent's guard before SQL is generated and again before execution. Output masking applies automatically.
  • Slack Socket Mode never exposes an inbound port. All traffic is outbound from the host running RDST.
  • The Slack app tokens are managed by you. If a token leaks, revoke it in the Slack admin panel; the bot stops working immediately.
  • Every question and its SQL are logged locally (for audit), but result rows are not logged — only the row count.

Flags reference

CommandFlagPurpose
rdst slack setupInteractive setup wizard
rdst slack start-a, --agent <name>Agent to serve
rdst slack listList configured agents
rdst slack status-a, --agent <name>Show connection status for one agent

See also

  • Data Agents — what the Slack bot is serving
  • Guards — the safety policies that protect what users in Slack can see
  • rdst ask — the underlying NL-to-SQL engine the bot uses