Daily on-call handoff brief from Better Stack to Slack
At every shift change, an agent turns overnight incidents, uptime numbers, and recent merges into one short brief for the incoming on-call engineer.
Every morning at 9am, right when my on-call rotation changes hands, build a handoff brief for whoever is picking up the pager and deliver it in Slack. Use a scheduled trigger rather than an incident webhook, because this is tied to the shift boundary and not to any one alert firing. Make the schedule easy to retime so it can match our actual rotation boundary, and run it all seven days since we have weekend rotations.
Start in Better Stack. Use List On-call Schedules to find our rotation, then Get On-call Schedule to work out who is on call right now and who just came off. Name both people in the brief, the outgoing engineer and the incoming one.
Then use List Incidents filtered to the last 24 hours. Separate the incidents that are still unresolved from the ones that were closed out. For anything that was acknowledged late or reopened, call List Incident Timeline so the brief can say what actually happened: when it fired, how long it sat unacknowledged, who it escalated to, and when it resolved.
For the monitors involved in those incidents, call Get Monitor Availability (SLA) so the brief carries real uptime numbers instead of vague statements like mostly stable. Use List Monitors if you need to resolve monitor names or ids first. Do not list every healthy monitor, only the ones that were part of the story.
Next pull change context from GitHub. Use List Pull Requests filtered to closed pull requests against the main branch and sorted by most recently updated, or Search Issues and Pull Requests with a merged qualifier for the relevant date, to gather everything merged into main since the previous shift began. Line those merges up against incident start times and flag likely culprits. When a merge landed shortly before an incident opened on a related service, name it with the pull request title, its author, and the merge time. Be honest about confidence and say when a correlation is a guess rather than a certainty.
Finally deliver it. Use Slack Bot Look Up User by Email to match the incoming on-call engineer's Better Stack email to their Slack account, then use Send a Message to DM them the brief. Post the same brief to our team reliability channel so the context is not trapped with one person.
Order the brief by what still needs attention: unresolved incidents first, then flapping or repeat-offender monitors that fired more than once in the window, then merged changes worth watching. Keep it short and skimmable, the kind of thing someone reads on a phone before their first coffee. If there is genuinely nothing to escalate, say plainly that it was a quiet shift with nothing outstanding rather than padding the brief to look thorough.
One operational note: Better Stack API tokens are scoped to a single team, so if we run several rotations, set up one run of this workflow per schedule, each pointing at its own channel.
What does this prompt do?
- Works out who is picking up the pager and who just handed it over, straight from your on-call schedule, and names both people in the brief.
- Pulls the last 24 hours of incidents, flags anything still open, acknowledged late, or reopened, and attaches real uptime percentages for the services that were involved.
- Lines up everything merged into your main branch since the previous shift began against incident start times, so likely culprits get called out by name instead of guessed at later.
- Sends the brief as a direct message to the incoming engineer and posts the same thing to your team reliability channel, so context is never trapped with one person.
What do I need to use this?
- A Better Stack account with monitors and at least one on-call schedule set up
- A GitHub account with access to the repositories your team ships from
- A Slack workspace and a channel where your team reads reliability updates
- On-call engineers' email addresses matching between Better Stack and Slack, so the right person gets the direct message
How can I customize it?
- Retime it to land exactly on your rotation boundary, and run it all seven days if you have weekend shifts
- Point it at a different repository or branch if your team ships from somewhere other than main
- Widen or narrow the lookback window when your shifts are longer or shorter than 24 hours
- Change what counts as worth escalating, for example only incidents over a certain length or monitors that fired more than twice
FAQs
What happens when nothing went wrong overnight?
How does it know which person in Slack to message?
We run more than one on-call rotation. Does that work?
Can it run at a time other than 9am?
How reliable is the link it draws between a merge and an incident?
Related templates
See how your brand's news coverage and sentiment stack up against four competitors, then let an assistant write the weekly report for you.
One screen showing every social post waiting on approval, sorted by deadline, so reviewers can approve or reject without leaving the page.
Every Monday, find the past champions and closed-won contacts who changed jobs, update Attio, and get the moves worth chasing in Slack.
Staff submit what happened, your social manager edits the copy, picks the accounts and puts it on the calendar without a single spreadsheet.
Open one board each morning, see which voice calls went badly, replay the exact moment the caller got frustrated, and file the fix.
A personal queue of every overdue Guru card, sorted by how late it is, with one-click verify, reassign, comment, and an agent that drafts the refresh for you.
Stop starting your on-call shift blind.
Set this up once and every handoff arrives with the open incidents, real uptime numbers, and recent changes that actually matter.