Slack integration

Build Slack AI agents that post, answer and trigger workflows

Slack's Web API is a plain HTTPS API, which makes it a natural HTTP API tool in AgentRow: the agent posts messages, reads a channel's recent history or opens a thread, and every call is logged.

Tool type
HTTP API
Auth type
bearer_token (bot token)
Safety level
write_safe

What you can build

A support agent on your site that posts an escalation summary to a Slack channel when it cannot resolve a request.

An internal operations assistant that answers questions from a knowledge base and drops the answer into the channel that asked.

A workflow agent that announces results of a long-running task to a channel once the run completes.

How to connect Slack

  1. 01Create a Slack app with a bot token scoped to what the agent needs, for example chat:write and channels:history. Keep the token out of prompts; it lives on the tool's auth settings.
  2. 02In AgentRow, create a tool of type HTTP API named slack_post_message with a POST to https://slack.com/api/chat.postMessage and an input schema for channel and text.
  3. 03Set the auth type to bearer token and paste the bot token. Restrict allowed domains to slack.com.
  4. 04Choose the safety level write_safe and, if humans should confirm posts, mark the tool as requiring approval.
  5. 05Test the tool from the toolbox with a channel id, then attach it to the agent in the Tools tab and try it in the test chat.

Example tool definition

The shape a tool takes in the AgentRow builder API. Credentials are stored on the tool's auth settings, not in its configuration, so they never reach a prompt. Placeholders in double braces are filled by the model from the input schema.

{
  "name": "slack_post_message",
  "type": "http_api",
  "description": "Post a message to a Slack channel. Use after the user confirms the text and the channel.",
  "auth_type": "bearer_token",
  "safety_level": "write_safe",
  "requires_approval": false,
  "config": {
    "method": "POST",
    "url": "https://slack.com/api/chat.postMessage",
    "headers": { "Content-Type": "application/json" },
    "body_template": { "channel": "{{channel}}", "text": "{{text}}" },
    "allowed_domains": ["slack.com"]
  },
  "input_schema": {
    "type": "object",
    "properties": {
      "channel": { "type": "string", "description": "Channel id, for example C0123456789" },
      "text": { "type": "string", "description": "Message text in Slack mrkdwn" }
    },
    "required": ["channel", "text"]
  }
}

What the run trace shows

Every call appears in the run trace with the rendered request, the response status and body, timing, retries and errors, plus what the model was shown of the result. If the model never called the tool, the toolbox step shows whether it was bound for that model call and why.

Frequently asked questions

Can the agent read Slack messages too?

Yes. Add a second HTTP API tool for conversations.history with the safe_read safety level and a limit on the number of messages, and give it a description that tells the model when to look at recent messages.

Can end users see when the agent posts to Slack?

That is up to the tool's widget events setting: hidden, a status line such as 'Posting to Slack…', or full detail.

Does AgentRow run inside Slack as a bot?

Not today. AgentRow agents run behind the chat widget or the end-user API and call Slack as a tool. A Slack-native surface would be an app integration rather than a tool.

Connect Slack to your first agent

Join the waitlist for early access. Tell us which systems you need to connect and we will point you at the right tool definitions.