| Capability | What it does | Quick setup |
|---|---|---|
| Memory | Conversations persist across messages | db=SqliteDb(...) |
| Files | Read attachments, send files back | SlackTools(enable_upload_file=True) |
| Streaming | Show progress on long tasks | On by default |
| Search | Find messages and context across workspace | SlackTools(enable_search_workspace=True) |
| Identity | Recognize users across platforms | resolve_user_identity=True |
| Response control | Control when bot responds | reply_to_mentions_only=True |
| Approvals | Pause for human approval | @tool(requires_confirmation=True) |
| Context provider | Query and update Slack from any agent | SlackContextProvider() |
Memory
Slack conversations span hours or days. With a database configured, the agent remembers previous messages in the thread and can reference earlier context without the user restating it.Session format:
{entity_id}:{thread_ts}. For example, an agent named “Support Bot” produces session IDs like Support Bot:1719000000.000100.Files
The agent can read files that users attach and generate files in response. The interface extracts attachments from incoming messages and makes them available to the agent. Generated files upload back to the thread.Streaming
Responses stream live, so users see text appear as the agent generates it, with task cards showing progress on long-running work.Streaming requires Agents & AI Apps mode. Enable it under App Home in your Slack App settings. Without it, users see a spinner until the full response is ready.
Search
The agent can search across your Slack workspace: messages, channels, and threads.search_workspace tool uses Slack’s semantic search to find relevant messages and context. Useful for catching up on discussions, finding prior decisions, or summarizing activity.
Search requires additional OAuth scopes (
search:read.public, search:read.files). Add them under OAuth & Permissions in your Slack App settings. See the Reference for the full list.Identity
The same user messages from Slack today, WhatsApp tomorrow. With identity resolution, the agent recognizes them as the same person.user_id as the user’s email instead of their Slack ID. Memory and context carry across platforms.
Response control
By default, the bot only responds when @mentioned in channels. In DMs, it responds to every message.| Setting | Behavior |
|---|---|
reply_to_mentions_only=True (default) | Responds to @mentions in channels, all DMs |
reply_to_mentions_only=False | Responds to every message in joined channels |
Troubleshooting
Bot doesn't respond
Bot doesn't respond
Check: Server running? ngrok active? Request URL matches
{your-url}/slack/events?Fix: Verify you’ve subscribed to app_mention and message.im events in your Slack App.403 errors on events
403 errors on events
Cause: Wrong signing secret, or request timestamp too old.Fix:
SLACK_SIGNING_SECRET must match Basic Information > App Credentials in your Slack App settings. If using ngrok, restart it to clear stale connections. Slack rejects requests older than 5 minutes.No streaming or task cards
No streaming or task cards
Cause: “Agents & AI Apps” not enabled.Fix: In Slack App settings → App Home → enable Agents & AI Apps.
Bot responds to unrelated messages
Bot responds to unrelated messages
search_workspace returns error
search_workspace returns error
Cause: The
search_workspace tool requires an action_token that only exists when running through the Slack interface. It doesn’t work in standalone scripts or terminal testing.Fix: Test search through the actual Slack bot, not in a standalone script. For terminal testing, use search_messages instead (requires a user token with search:read scope).SSL certificate errors (macOS)
SSL certificate errors (macOS)
Cause: System Python missing root certificates.Fix:
Next steps
Human-in-the-Loop
Pause for approval before sensitive actions
Reference
All parameters and endpoints