Documentation

Slack notifier

Slack incoming webhook. Minimal config, no bot token required.

Slot: notifier ยท Name: slack

macOSSupported
LinuxSupported
WindowsSupported

Setup

Run the setup command:

ao setup slack

If Slack is already configured, the command asks whether to keep the existing webhook URL, change it, create a new one, or cancel. If you already have a Slack incoming webhook URL, paste it when prompted. If not, the command shows the Slack apps URL and waits while you create one. From the setup steps screen you can paste the URL, show the steps again, go back to the previous options, or cancel. The change-webhook path also lets you paste a new URL, view creation steps, go back, or cancel.

  1. Open https://api.slack.com/apps.
  2. Create a new app, or select an existing app.
  3. Open Incoming Webhooks and turn on Activate Incoming Webhooks.
  4. Select Add New Webhook to Workspace.
  5. Pick the channel AO should post to, authorize, and copy the webhook URL.

The command sends a test message before writing AO config. Before saving, AO also asks which notification priorities Slack should receive: urgent-only, urgent-action, or all. For scriptable setup, pass --routing-preset <preset>.

Useful setup checks:

ao setup slack --status
ao setup slack --refresh
notifiers:
  slack:
    plugin: slack
    webhookUrl: https://hooks.slack.com/services/...
    username: "Agent Orchestrator"
    channel: "#agents" # optional; should match the webhook's channel

Config

KeyRequiredDefaultWhat it does
webhookUrlโœ“โ€”Slack incoming webhook URL
channeloptionalwebhook defaultInformational/compatibility channel name; should match the channel chosen when creating the webhook
usernameoptionalAgent OrchestratorRequested display name

Notes

  • No bot token / OAuth to manage. Incoming webhooks are the simplest integration Slack offers.
  • Slack incoming webhook URLs are tied to the channel selected during setup. Do not rely on channel to reroute messages to a different channel.
  • For private channels, the installing Slack user must already be in the channel before creating the webhook.
  • Treat the webhook URL as a secret; do not commit it publicly.
  • This notifier does not handle Retry-After headers โ€” if you're sending at high volume, use the webhook notifier with retries configured.
  • Messages use Slack Block Kit (header + section + context blocks). Action URLs render as inline links in the context block.
Outgoing payload shape
{
  "blocks": [
    {
      "type": "header",
      "text": { "type": "plain_text", "text": "๐Ÿ”” pr.created โ€” sess_01HXY...", "emoji": true }
    },
    {
      "type": "section",
      "text": { "type": "mrkdwn", "text": "PR opened: fix(auth): handle token expiry" }
    },
    {
      "type": "context",
      "elements": [
        {
          "type": "mrkdwn",
          "text": "*Project:* myproject | *Priority:* info | *Time:* <!date^1713387600^{date_short_pretty} {time}|2026-04-17T...>"
        }
      ]
    },
    {
      "type": "section",
      "text": { "type": "mrkdwn", "text": ":github: <https://github.com/owner/repo/pull/123|View Pull Request>" }
    }
  ]
}