Skip to Content

Slack Integration

Pilot sends real-time notifications to Slack channels as it works on issues. It supports progress updates, PR-ready alerts, failure reports, and interactive approval workflows. With the conversational bot enabled, Slack also becomes a two-way interface — chat, ask code questions, and file issues by talking to Pilot.

Setup

1. Create a Slack App

  1. Go to api.slack.com/apps Create New App
  2. Choose From scratch, name it “Pilot”, and select your workspace
  3. Under OAuth & Permissions, add these bot token scopes:
    • chat:write — post messages
    • chat:write.public — post to channels without joining

2. Install and Get Tokens

  1. Click Install to Workspace and authorize
  2. Copy the Bot User OAuth Token (xoxb-...)
  3. Under Basic Information, copy the Signing Secret

3. Configure Pilot

# ~/.pilot/config.yaml slack: enabled: true bot_token: ${SLACK_BOT_TOKEN} channel: "#dev-notifications" signing_secret: ${SLACK_SIGNING_SECRET}

4. Invite the Bot

Invite the Pilot bot to your notification channel:

/invite @Pilot

Configuration Reference

FieldTypeDefaultDescription
enabledboolfalseEnable Slack notifications
bot_tokenstringrequiredSlack bot OAuth token (xoxb-...)
channelstring"#dev-notifications"Default notification channel
signing_secretstringSlack signing secret for webhook verification
approval.enabledboolfalseEnable interactive approval workflows
approval.channelstring"#pilot-approvals"Channel for approval requests
approval.signing_secretstringSigning secret for approval webhooks

Channel Formats

Pilot accepts several channel identifier formats:

FormatExample
Channel with ##dev-notifications
Channel without #general
Channel IDC1234567890
DM channel IDD1234567890

Conversational Bot

Beyond notifications, Slack can be a two-way interface. When the conversational bot and the Slack llm_classifier are both enabled, natural-language messages are classified by intent and answered on the fast path (~1–2s) instead of always spinning up the executor:

  • Chat & greetings — direct replies from a fast model
  • Code questions — grounded answers from bounded file retrieval
  • Issue intake — “create an issue to add a /ping endpoint” → a drafted, pilot-labeled GitHub issue the daemon then picks up
# ~/.pilot/config.yaml slack: enabled: true bot_token: ${SLACK_BOT_TOKEN} llm_classifier: enabled: true # classify NL messages by intent (vs regex) api_key: ${ANTHROPIC_API_KEY} # falls back to ANTHROPIC_API_KEY env var history_size: 10 history_ttl: 30m bot: enabled: true # the conversational fast path (shared across adapters) api_key: ${ANTHROPIC_API_KEY} retrieval: enabled: true
FieldTypeDefaultDescription
llm_classifier.enabledboolfalseEnable LLM-based intent classification for Slack
llm_classifier.api_keystringAnthropic API key (falls back to ANTHROPIC_API_KEY)
llm_classifier.history_sizeint10Messages to keep per channel for context
llm_classifier.history_ttlduration30mTTL for conversation history

The Slack llm_classifier is separate from the bot: block. The classifier decides which path a message takes; the bot is the conversational fast path itself. Both must be enabled for the two-way experience. Without the classifier, messages fall back to regex routing and most reach the executor. See the Conversational Bot feature page for the full reference and limitations.

Notification Types

Pilot sends Block Kit-formatted messages to your Slack channel at each phase of execution:

EventEmojiColorDescription
Task started🚀Pilot began working on an issue
Progress updateStatus update with progress bar (0–100%)
Task completedgood (green)Issue resolved, optional PR link
Task faileddanger (red)Error details in code block
PR ready🔔indigoPR ready for review with file count

Progress Bar

Progress updates include a visual progress bar:

⏳ Implementing changes... [████████░░] 80%

The bar uses 10 segments with (filled) and (empty) characters.

Approval Workflows

Pilot can request human approval before executing, merging, or retrying via interactive Slack buttons.

Enable Approvals

slack: enabled: true bot_token: ${SLACK_BOT_TOKEN} channel: "#dev-notifications" signing_secret: ${SLACK_SIGNING_SECRET} approval: enabled: true channel: "#pilot-approvals"

Set Up Interactive Endpoint

  1. In your Slack app, go to Interactivity & Shortcuts
  2. Enable interactivity
  3. Set the request URL to https://your-pilot.example.com/slack/interactions

Approval Stages

StageButtonsWhen
Pre-Execution✅ Execute / ❌ CancelBefore Pilot starts implementing
Pre-Merge✅ Merge / ❌ RejectBefore merging a PR
Post-Failure🔄 Retry / ⏹ AbortAfter an execution failure

Each approval message includes context (PR URL, error details, timeout countdown) and updates in-place when a decision is made, showing who approved or rejected.

Webhook Security

Approval webhooks use HMAC-SHA256 signature verification with a 5-minute timestamp window to prevent replay attacks.

Planning Error Messages

When using the /plan command, Pilot shows specific error messages based on the failure type:

ScenarioMessageDescription
Timeout⏱ Planning timed out. Try a simpler request.Planning exceeded the planning_timeout duration
API/executor error❌ Planning failed: <error>The executor returned an error during planning
Empty result (error)❌ Planning error: <error>Planning completed but produced an error
Empty result (timeout)⏱ Planning timed out. Try a simpler request.Planning finished without output due to timeout
Empty result (success)🤷 The task may be too simple for planning.No plan generated — try executing directly

The planning timeout is controlled by the planning_timeout field in the executor config (default: 2m).

executor: planning_timeout: 3m # increase for complex tasks

Daily Briefs

Pilot can send daily or weekly summary digests to Slack channels.

Configure Briefs

daily_brief: enabled: true schedule: "0 9 * * 1-5" # 9 AM weekdays timezone: "America/New_York" channels: - type: slack channel: "#team-updates" content: include_metrics: true include_errors: true max_items_per_section: 10

Brief Content

Briefs summarize Pilot activity for the configured period:

  • Issues processed and their outcomes
  • PRs created and merged
  • Errors and failures
  • Execution metrics