--- title: Slack notifier description: Slack incoming webhook. Minimal config, no bot token required. ---
Slot: notifier · Name: slack
## Setup 1. In Slack, **Apps → Incoming Webhooks → Add to Slack** on the target workspace. 2. Pick the channel, copy the webhook URL. 3. Add it to AO: ```yaml title="agent-orchestrator.yaml" notifier: - type: slack webhookUrl: ${SLACK_WEBHOOK_URL} channel: "#agents" # optional — override default channel username: "AO" # optional ``` ## Config | Key | Required | Default | What it does | |---|---|---|---| | `webhookUrl` | ✓ | — | Slack incoming webhook URL | | `channel` | optional | webhook default | Channel name (must be accessible to the webhook) | | `username` | optional | `Agent Orchestrator` | Bot display name | ## Notes - No bot token / OAuth to manage. Incoming webhooks are the simplest integration Slack offers. - This notifier does **not** handle `Retry-After` headers — if you're sending at high volume, use the [webhook notifier](/docs/plugins/notifiers/webhook) with retries configured. - Messages use Slack Block Kit (header + section + context blocks). Action URLs render as inline links in the context block. ```json { "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:* " } ] }, { "type": "section", "text": { "type": "mrkdwn", "text": ":github: " } } ] } ```