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
- Go to api.slack.com/apps → Create New App
- Choose From scratch, name it “Pilot”, and select your workspace
- Under OAuth & Permissions, add these bot token scopes:
chat:write— post messageschat:write.public— post to channels without joining
2. Install and Get Tokens
- Click Install to Workspace and authorize
- Copy the Bot User OAuth Token (
xoxb-...) - 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 @PilotConfiguration Reference
| Field | Type | Default | Description |
|---|---|---|---|
enabled | bool | false | Enable Slack notifications |
bot_token | string | required | Slack bot OAuth token (xoxb-...) |
channel | string | "#dev-notifications" | Default notification channel |
signing_secret | string | — | Slack signing secret for webhook verification |
approval.enabled | bool | false | Enable interactive approval workflows |
approval.channel | string | "#pilot-approvals" | Channel for approval requests |
approval.signing_secret | string | — | Signing secret for approval webhooks |
Channel Formats
Pilot accepts several channel identifier formats:
| Format | Example |
|---|---|
Channel with # | #dev-notifications |
Channel without # | general |
| Channel ID | C1234567890 |
| DM channel ID | D1234567890 |
Notification Types
Pilot sends Block Kit-formatted messages to your Slack channel at each phase of execution:
| Event | Emoji | Color | Description |
|---|---|---|---|
| Task started | 🚀 | — | Pilot began working on an issue |
| Progress update | ⏳ | — | Status update with progress bar (0–100%) |
| Task completed | ✅ | good (green) | Issue resolved, optional PR link |
| Task failed | ❌ | danger (red) | Error details in code block |
| PR ready | 🔔 | indigo | PR 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
- In your Slack app, go to Interactivity & Shortcuts
- Enable interactivity
- Set the request URL to
https://your-pilot.example.com/slack/interactions
Approval Stages
| Stage | Buttons | When |
|---|---|---|
| Pre-Execution | ✅ Execute / ❌ Cancel | Before Pilot starts implementing |
| Pre-Merge | ✅ Merge / ❌ Reject | Before merging a PR |
| Post-Failure | 🔄 Retry / ⏹ Abort | After 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:
| Scenario | Message | Description |
|---|---|---|
| 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 tasksDaily 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: 10Brief Content
Briefs summarize Pilot activity for the configured period:
- Issues processed and their outcomes
- PRs created and merged
- Errors and failures
- Execution metrics