Configuration
These environment variables control notifications:
Set these on your orchestrator’s Fly app (or in your
.env file when running locally):
What triggers a notification
Runs
- Dispatch — the orchestrator picks up an issue and dispatches a run. Includes the issue identifier, title, and target repository, and says whether this is planning or implementation.
- Dispatch failed — the workflow could not be started at all. Names the workflow file, and says when the cause looks like a target repo that has not re-synced its workflows.
- Completion — a run finishes. Includes the outcome (
completed,review_failed,failed, ortimed_out), a link to the pull request if one was opened, a link to the GitHub Actions run, and the duration.
Issues the orchestrator gives up on
- Parked — dispatches for one issue and phase kept failing. Includes the phase, the failure count, the last conclusion, and where to unpark it.
- Stuck, needs human — the orchestrator stops retrying an issue. Includes the attempt count, the last run status, and a link to the last run.
Feature-branch grouping
- Child merged — a child pull request was merged into its grouping branch.
- Conflict left for a human — a child pull request conflicts with its grouping branch and the automatic resolution attempts are spent.
The orchestrator itself
- Restarting — the orchestrator is shutting down, so dispatches are paused until it returns.
- Back up — it is serving again, saying whether this is a new version or the same one.
- Deployment available — a newer commit is ready to release.
- Reaper burst — a single sweep destroyed more machines than the alert threshold.
- Runner mode changed — someone switched execution mode from the admin interface.
Deploy notifications
When the orchestrator restarts, it announces the fact itself, so a pause in dispatches doesn’t look like a fault. You get a matched pair, sent wherever the orchestrator can identify its own image — in practice Fly.io, so running locally is silent. The outgoing process posts Orchestrator restarting as it shuts down — the only one of these that sends an@channel, since the message that follows answers it. The incoming process replies once it’s serving again:
- Orchestrator redeployed — a new version is live.
- Orchestrator back up — the same version came back, so this was a restart rather than a deploy.
Setting up Slack
1
Create a Slack app with an incoming webhook
Go to api.slack.com/apps and create a new app. Choose From scratch, give it a name, and select your workspace.
2
Activate incoming webhooks
In the app settings, open Incoming Webhooks and toggle Activate Incoming Webhooks on.
3
Add a webhook to your workspace
Click Add New Webhook to Workspace, choose the channel where you want notifications to appear, and click Allow.
4
Copy the webhook URL
Copy the webhook URL that appears on the Incoming Webhooks page. It looks like
https://hooks.slack.com/services/T.../B.../....5
Set the environment variables
Setting up Microsoft Teams
1
Open the target Teams channel
In Microsoft Teams, navigate to the channel where you want notifications to appear.
2
Add an incoming webhook connector
Click the … (More options) next to the channel name, select Connectors, find Incoming Webhook, and click Configure.
3
Name the webhook and save
Give the webhook a name (e.g.
AI-Implement), optionally upload an icon, and click Create.4
Copy the webhook URL
Copy the webhook URL shown on the confirmation screen.
5
Set the environment variables