rooster is a maintenance slack app that performs various duties in the fern slack environment.
if a support thread in #customer-alerts has not been marked with ✅ by the end of the day, it will be included in a round-up of messages, all sent to the #customer-alerts channel, tagging the deployed engineer on-call.
rooster requires the following environment variables (see .env.example):
| variable | required | description |
|---|---|---|
SLACK_BOT_TOKEN |
yes | slack bot token (xoxb-...) |
SLACK_SIGNING_SECRET |
yes | slack signing secret |
SLACK_APP_TOKEN |
yes | slack app-level token (xapp-...) |
PYLON_API_TOKEN |
yes | pylon api token |
DEVIN_SLACK_USER_ID |
yes | devin's slack user id |
DEVIN_TRIAGE_CHANNEL |
yes | channel id for #devin-triage-runs |
PYLON_WEBHOOK_SECRET |
yes | pylon webhook HMAC secret |
WEBHOOK_PORT |
no | webhook server port (default: 3000) |
SLASH_COMMAND |
no | slash command name (default: /rooster) |
- add it to
.env.examplewith a placeholder value - add it to
src/config.ts(userequireEnvif required) - add it as a repository secret in GitHub:
Settings > Secrets and variables > Actions > New repository secret - add it to the
.envfile on the EC2 instance:ssh -i /path/to/your-key.pem <EC2_USER>@<EC2_HOST> cd ~/rooster nano .env # add the new variable, save, then restart: docker restart rooster
pnpm install
pnpm run build
pnpm startfor development:
pnpm run dev-
/rooster status- check if rooster is running -
/rooster check [days]- check for issues (default: 1 day)- by default, shows both new (unassigned) and waiting-on-you issues in separate sections
- e.g.
/rooster check 3checks the last 3 days - add
--newto show only new (unassigned) issues - add
--opento show only waiting-on-you issues - add
--channelto post results to #customer-alerts - add
--remindto tag on-call engineers (implies --channel)
-
automatic triage via Pylon webhooks
- when a new issue is created in Pylon, a webhook fires to rooster's
/pylon/webhookendpoint - rooster posts the issue context to #devin-triage-runs, @mentioning Devin with triage instructions and on-call handles
- Devin triages and tags the appropriate on-call team
- if Slack thread info is available in the payload, rooster also replies in the original thread with a link to the triage run
- requires
PYLON_WEBHOOK_SECRETenv var for HMAC signature verification
- when a new issue is created in Pylon, a webhook fires to rooster's
- triage can decide a thread is incident-worthy (integrate with incident.io, open an incident)
- triage can check account subscription status (connect to supabase)
- alert for stale PRs
- alert for tagged, open issues
- alert immediately for high-risk messages (e.g. "broken", "down", "inaccessible")