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.

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

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