On-Call Handoff
Overview
A shift handoff is a state-transfer problem, not a status update. The outgoing
responder holds context that only exists in their head — which alert fired
three times and turned out to be noise, which open incident is waiting on a
vendor callback, which service has been flaky all week even though nothing
paged. A good handoff makes that context explicit and durable so the incoming
responder starts the shift at full context instead of rebuilding it from
scratch, or worse, missing it entirely.
This skill produces that handoff from whatever incident-management tool is
actually connected, plus whatever corroborating alert/monitor state is
available, rather than from the outgoing responder's memory alone.
Anti-triggers
- Reading or editing a schedule, rotation, or escalation policy — who is
on call and when is the vendor's own surface; use
rootly-oncall,
pagerduty-oncall, or betterstack-oncall. This skill assembles the
state transfer between two shifts, not the roster behind it.
- An MSP service-desk shift handover — ticket-board state belongs to
board-hygiene in ops-pack; this skill covers the engineering pager.
Discovering available tools first
This pack is cross-vendor. Never assume which incident-management tool is
connected, or what its tools are literally named, before checking:
- Call
conduit__search_tools with a query like "on-call handoff",
"list incidents", or "current on-call" to discover which
incident-management connector(s) are actually live for this org, and the
exact tool names exposed (they follow <vendor-slug>__<tool_name>, e.g.
rootly__get_oncall_handoff_summary, rootly__list_incidents,
pagerduty__list_incidents, betterstack__list_incidents).
- If an observability tool (Sentry, Datadog, Grafana) is also connected, a
second discovery pass can surface corroborating signal — e.g., an error
rate spike that hasn't yet paged but is worth flagging to the incoming
responder as "watch this."
- Only after discovery, call the concrete tools that came back. If discovery
returns no incident-management connector at all, say so plainly — there is
no pager state to hand off without one.
Never fall back to guessing a tool name speculatively — an unrecognized tool
call is a worse failure mode than asking the user which incident-management
tool they use.
Key Concepts
What belongs in a handoff
A complete handoff covers four categories, in priority order:
- Currently paging / unresolved — anything open right now: active
incidents, unacknowledged alerts, anything mid-investigation. This is the
incoming responder's immediate to-do list, not background reading.
- Last-shift history and status — incidents that fired and resolved
during the outgoing shift, with a one-line outcome each. This isn't for
action, it's for context — "we've had three DB connection-pool alerts
today" changes how the incoming responder reads the fourth one.
- Known-flaky alerts to watch — alerts that fired and were dismissed as
noise, or that fire repeatedly without a real underlying issue. These
don't belong in "currently paging," but silently dropping them from the
handoff means the incoming responder re-diagnoses a known non-issue from
scratch, or worse, dismisses a real one because "that alert's always
noisy."
- Escalated but not yet actioned — anything that crossed an escalation
tier (secondary/manager paged) but doesn't yet have an owner or a next
step. This is the highest-risk category to drop silently, because it
means someone is already waiting on a response that hasn't happened.
Distinguishing "resolved" from "quiet"
An incident tool showing zero open incidents is not the same as "nothing to
hand off." A service that alerted five times and self-recovered each time is
quieter on paper than a single ongoing incident, but it's a stronger signal
that something needs attention before it becomes a real outage. Don't let an
empty open-incidents list stand in for the whole handoff — always check
last-shift history even when nothing is currently open.
Known-flaky vs. genuinely resolved
Before labeling an alert "known-flaky," confirm it actually has a pattern —
multiple firings with no corroborating incident, ideally across more than one
shift. A single alert that fired once and cleared is not yet "known-flaky,"
it's just resolved; mislabeling it downgrades attention on something that
might recur meaningfully. When in doubt, report it under last-shift history
rather than the known-flaky category.
Common Workflows
Build a shift handoff
- Discover the connected incident-management tool via
conduit__search_tools
(see above).
- Pull current open/unresolved incidents and their status, severity, and
assigned responder (if any).
- Pull incident history for the outgoing shift window (default: since the
last handoff, or the last 12–24 hours if no prior handoff timestamp is
available — state which window was used).
- Identify known-flaky alerts: incidents/alerts in the shift history that
were dismissed, auto-resolved, or repeated with no distinct root cause.
- Identify anything escalated (secondary/manager tier reached) without a
currently assigned owner or documented next step.
- If an observability tool is connected, pull any anomaly that hasn't yet
triggered a formal incident but is trending toward one (e.g., a rising
error rate or latency SLI) and flag it as a watch item, clearly separated
from actual incidents.
- Assemble the handoff in priority order: currently paging → escalated
without owner → last-shift history → known-flaky watch list.
Confirm a handoff before taking the pager
- Run the build workflow above.
- Read back the "currently paging" and "escalated without owner" sections
explicitly to the incoming responder before considering the handoff
complete — these are the two categories where a miss has immediate
consequences.
Error Handling
No incident-management connector discovered
Say so explicitly: "No incident-management connector is available through
the gateway, so there's no pager state to hand off." Do not fabricate
incidents or invent an empty-shift summary.
Incident tool connected but no explicit handoff-summary tool
Some vendors expose a purpose-built handoff tool (e.g.
rootly__get_oncall_handoff_summary); others don't. If none is available,
assemble the handoff manually from list-incidents plus current-on-call tools
rather than skipping the handoff.
Observability tool not connected
Proceed with the incident-management-only handoff and note explicitly that
no corroborating observability signal was available for the watch-list
section, rather than omitting the section or fabricating a "no anomalies"
result.
Multiple incident-management tools connected
Ask which schedule/service scope to hand off rather than silently merging or
picking one.
Best Practices
- Treat missing data (no observability connector, no formal handoff tool) as
a stated gap, not a reason to skip the section silently.
Related Skills
- Incident Postmortem — deeper
reconstruction once an incident from the handoff needs a full retrospective
- Error Budget Tracking — the
service-health trend context that complements a handoff's incident-specific
view
1---2name: on-call-handoff3description: Assembling an on-call shift handoff from whatever incident-management tool (Rootly, PagerDuty, BetterStack) is connected, plus corroborating observability signal where available: the four handoff categories in priority order (currently paging, escalated without an owner, last-shift history, known-flaky watch list), why an empty open-incidents list is not an empty handoff, and the bar for calling an alert known-flaky rather than simply resolved.4---56# On-Call Handoff78## Overview910A shift handoff is a state-transfer problem, not a status update. The outgoing11responder holds context that only exists in their head — which alert fired12three times and turned out to be noise, which open incident is waiting on a13vendor callback, which service has been flaky all week even though nothing14paged. A good handoff makes that context explicit and durable so the incoming15responder starts the shift at full context instead of rebuilding it from16scratch, or worse, missing it entirely.1718This skill produces that handoff from whatever incident-management tool is19actually connected, plus whatever corroborating alert/monitor state is20available, rather than from the outgoing responder's memory alone.2122## Anti-triggers2324- **Reading or editing a schedule, rotation, or escalation policy** — who is25 on call and when is the vendor's own surface; use `rootly-oncall`,26 `pagerduty-oncall`, or `betterstack-oncall`. This skill assembles the27 state transfer between two shifts, not the roster behind it.28- **An MSP service-desk shift handover** — ticket-board state belongs to29 `board-hygiene` in ops-pack; this skill covers the engineering pager.3031## Discovering available tools first3233This pack is cross-vendor. Never assume which incident-management tool is34connected, or what its tools are literally named, before checking:35361. Call `conduit__search_tools` with a query like `"on-call handoff"`,37 `"list incidents"`, or `"current on-call"` to discover which38 incident-management connector(s) are actually live for this org, and the39 exact tool names exposed (they follow `<vendor-slug>__<tool_name>`, e.g.40 `rootly__get_oncall_handoff_summary`, `rootly__list_incidents`,41 `pagerduty__list_incidents`, `betterstack__list_incidents`).422. If an observability tool (Sentry, Datadog, Grafana) is also connected, a43 second discovery pass can surface corroborating signal — e.g., an error44 rate spike that hasn't yet paged but is worth flagging to the incoming45 responder as "watch this."463. Only after discovery, call the concrete tools that came back. If discovery47 returns no incident-management connector at all, say so plainly — there is48 no pager state to hand off without one.4950Never fall back to guessing a tool name speculatively — an unrecognized tool51call is a worse failure mode than asking the user which incident-management52tool they use.5354## Key Concepts5556### What belongs in a handoff5758A complete handoff covers four categories, in priority order:59601. **Currently paging / unresolved** — anything open right now: active61 incidents, unacknowledged alerts, anything mid-investigation. This is the62 incoming responder's immediate to-do list, not background reading.632. **Last-shift history and status** — incidents that fired and resolved64 during the outgoing shift, with a one-line outcome each. This isn't for65 action, it's for context — "we've had three DB connection-pool alerts66 today" changes how the incoming responder reads the fourth one.673. **Known-flaky alerts to watch** — alerts that fired and were dismissed as68 noise, or that fire repeatedly without a real underlying issue. These69 don't belong in "currently paging," but silently dropping them from the70 handoff means the incoming responder re-diagnoses a known non-issue from71 scratch, or worse, dismisses a real one because "that alert's always72 noisy."734. **Escalated but not yet actioned** — anything that crossed an escalation74 tier (secondary/manager paged) but doesn't yet have an owner or a next75 step. This is the highest-risk category to drop silently, because it76 means someone is already waiting on a response that hasn't happened.7778### Distinguishing "resolved" from "quiet"7980An incident tool showing zero open incidents is not the same as "nothing to81hand off." A service that alerted five times and self-recovered each time is82quieter on paper than a single ongoing incident, but it's a stronger signal83that something needs attention before it becomes a real outage. Don't let an84empty open-incidents list stand in for the whole handoff — always check85last-shift history even when nothing is currently open.8687### Known-flaky vs. genuinely resolved8889Before labeling an alert "known-flaky," confirm it actually has a pattern —90multiple firings with no corroborating incident, ideally across more than one91shift. A single alert that fired once and cleared is not yet "known-flaky,"92it's just resolved; mislabeling it downgrades attention on something that93might recur meaningfully. When in doubt, report it under last-shift history94rather than the known-flaky category.9596## Common Workflows9798### Build a shift handoff991001. Discover the connected incident-management tool via `conduit__search_tools`101 (see above).1022. Pull current open/unresolved incidents and their status, severity, and103 assigned responder (if any).1043. Pull incident history for the outgoing shift window (default: since the105 last handoff, or the last 12–24 hours if no prior handoff timestamp is106 available — state which window was used).1074. Identify known-flaky alerts: incidents/alerts in the shift history that108 were dismissed, auto-resolved, or repeated with no distinct root cause.1095. Identify anything escalated (secondary/manager tier reached) without a110 currently assigned owner or documented next step.1116. If an observability tool is connected, pull any anomaly that hasn't yet112 triggered a formal incident but is trending toward one (e.g., a rising113 error rate or latency SLI) and flag it as a watch item, clearly separated114 from actual incidents.1157. Assemble the handoff in priority order: currently paging → escalated116 without owner → last-shift history → known-flaky watch list.117118### Confirm a handoff before taking the pager1191201. Run the build workflow above.1212. Read back the "currently paging" and "escalated without owner" sections122 explicitly to the incoming responder before considering the handoff123 complete — these are the two categories where a miss has immediate124 consequences.125126## Error Handling127128### No incident-management connector discovered129130Say so explicitly: "No incident-management connector is available through131the gateway, so there's no pager state to hand off." Do not fabricate132incidents or invent an empty-shift summary.133134### Incident tool connected but no explicit handoff-summary tool135136Some vendors expose a purpose-built handoff tool (e.g.137`rootly__get_oncall_handoff_summary`); others don't. If none is available,138assemble the handoff manually from list-incidents plus current-on-call tools139rather than skipping the handoff.140141### Observability tool not connected142143Proceed with the incident-management-only handoff and note explicitly that144no corroborating observability signal was available for the watch-list145section, rather than omitting the section or fabricating a "no anomalies"146result.147148### Multiple incident-management tools connected149150Ask which schedule/service scope to hand off rather than silently merging or151picking one.152153## Best Practices154155- Treat missing data (no observability connector, no formal handoff tool) as156 a stated gap, not a reason to skip the section silently.157158## Related Skills159160- [Incident Postmortem](../incident-postmortem/SKILL.md) — deeper161 reconstruction once an incident from the handoff needs a full retrospective162- [Error Budget Tracking](../error-budget-tracking/SKILL.md) — the163 service-health trend context that complements a handoff's incident-specific164 view