On-Call Practices skill for Codex
Rotations people can sustain and pages that land. Codex designs on-call from the team's real size, time zones and paging history: rotation shape, escalation policy with acknowledgement timeouts, a handoff template and load metrics with thresholds that trigger action. It can express schedules in PagerDuty Terraform, but treats rotation, compensation and wellbeing rules as proposals for humans to approve.
curl -fsSL codexskills.dev/install.sh \ | sh -s -- on-call-practices Installs to ~/.agents/skills/on-call-practices/ for every project on this machine.
curl -fsSL codexskills.dev/cli.mjs -o codex-skills.mjsnode codex-skills.mjs install on-call-practices The CLI also searches, updates and removes skills. Run it with no arguments to pick from a list. Needs Node 20.12+.
curl -fsSL codexskills.dev/install.sh \ | sh -s -- --project on-call-practices Installs to .agents/skills/on-call-practices/ in the current repository. Commit it and everyone who runs Codex there gets it.
curl -fsSLO codexskills.dev/downloads/on-call-practices.zipunzip -o on-call-practices.zip -d ~/.agents/skills/ The archive holds the skill folder with its generated agents/openai.yaml. Unzip into .agents/skills/ to scope it to a repo.
& ([scriptblock]::Create((irm codexskills.dev/install.ps1))) on-call-practices PowerShell 5.1 or 7. Installs to %USERPROFILE%\.agents\skills\. Add -Project for the current repo.
104-line POSIX script. No sudo, no telemetry. Read install.sh
Use it in Codex
Start a prompt with $on-call-practices, or pick it from /skills.
You can also just describe the task: Codex reads the description below and loads the playbook when your request matches.
What Codex reads before loading it
Designs sustainable on-call - rotation shapes (weekly, follow-the-sun, primary and secondary), escalation policies with acknowledgement timeouts, handoff notes, paging hygiene, load metrics, onboarding and shadowing, and compensation and wellbeing guardrails - and implements them in PagerDuty, incident.io, Grafana IRM or similar tools as code where possible. Use when setting up a first on-call rotation, when on-call is burning people out, when writing an escalation policy or handoff template, or when reviewing paging load.
Use it when
- A team is starting its first on-call rotation
- On-call load or after-hours pages are causing burnout
- Escalation policies or handoffs are missing or informal
- New engineers need an onboarding path into on-call
Use something else when
- You need to cut noisy alerts themselves: use alerting-rules
- You are running a live incident right now: use incident-command
How to check the result
A test page through each schedule reaches the right person by phone within the ack timeout and escalates when ignored, and the coverage view shows no gaps for the next eight weeks.
The mistake it prevents
Running a one-in-three rotation with push-only notifications and no load tracking, then wondering why pages go unacknowledged.
Done well means: a page always reaches a prepared human who can act within minutes, nobody carries an unsustainable load, every shift ends with a handoff that transfers context, and on-call pain feeds back into engineering priorities.
Inspect first
- Read
AGENTS.md, existing runbooks and the paging tool configuration (Terraform forpagerduty_schedule/pagerduty_escalation_policy, incident.io or Grafana IRM config, Alertmanager receivers). - Collect facts: team size and time zones, services covered, pages per week for the last quarter, after-hours share, mean time to acknowledge, and who actually got paged.
- Ask about constraints: labour rules and compensation policy for the region, existing support contracts (customer-facing response times), and whether a NOC or support tier triages before engineering.
Rotation and compensation changes affect people’s lives and contracts; Codex proposes, humans decide. Never apply schedule changes to the paging tool without explicit confirmation of the exact change.
Rotation shape
| Team situation | Rotation | Notes |
|---|---|---|
| 4-5 engineers, one time zone | Weekly primary, previous week’s primary as secondary | Minimum viable; watch load closely |
| 6-8 engineers, one time zone | Weekly primary plus separate secondary | Each person on primary about once every 6-8 weeks |
| Two regions 6+ hours apart | Follow-the-sun, 12 h shifts each | Removes most night pages; needs strong handoffs |
| Fewer than 4 people | Business hours only plus best-effort, or share a rotation with another team | A 1-in-3 rotation burns people out |
| Many small services | Team-of-teams rotation with clear service ownership routing | Avoid a single “platform” person paged for everything |
Defaults: hand off mid-week (Tuesday or Wednesday morning) rather than Monday, so the weekend is never the first or last day of a shift, and so handoff happens with everyone at work. Nobody should be on call for more than one week in four for sustained periods.
Escalation policy
Level 1: primary on-call notify immediately (push + SMS + phone)
Level 2: secondary on-call if not acknowledged in 5 minutes
Level 3: engineering manager if not acknowledged in 15 minutes
Repeat policy: 2 times, then notify incident commander channel
- Acknowledgement timeout 5 minutes for paging severity; shorter times create false escalations while someone is unlocking a laptop.
- Low-urgency alerts (tickets) never escalate after hours; they wait for business hours.
- Test the whole chain quarterly with a scheduled test page.
PagerDuty Terraform sketch:
resource "pagerduty_escalation_policy" "checkout" {
name = "Checkout"
num_loops = 2
rule {
escalation_delay_in_minutes = 5
target {
type = "schedule_reference"
id = pagerduty_schedule.checkout_primary.id
}
}
rule {
escalation_delay_in_minutes = 10
target {
type = "schedule_reference"
id = pagerduty_schedule.checkout_secondary.id
}
}
}
Check vendor status before investing in a tool: Atlassian is retiring Opsgenie in favour of Jira Service Management and Compass, and Grafana OnCall OSS moved to Grafana IRM.
Before a shift
- Paging app installed, notification rules tested (phone call, not just push)
- Laptop, VPN, production access and break-glass credentials work
- Read the last handoff note and open incidents
- Know the runbook index and how to declare an incident
- Know who is secondary and who is the escalation manager
- Personal plans compatible with 5-minute acknowledgement (or arrange a swap)
Handoff template
## On-call handoff: <team> <date> -> <date>
**Outgoing:** <name> **Incoming:** <name>
### Open issues
- <alert/incident>: status, next step, ticket link
### Pages this shift
| When | Alert | Real? | Action | Follow-up ticket |
|---|---|---|---|---|
### Changes to watch
- Deploys, migrations, feature flags rolled out, upstream maintenance windows
### Noise to fix
- <alert name>: fired N times, no action needed; ticket <link>
### Notes for incoming
- <anything unusual: customer escalations, risky deploys scheduled>
Hold a 15-minute live handoff when there are open issues; the written note is the record, not a replacement for the conversation.
Measuring load
Track monthly and review in the team’s operations meeting:
| Metric | Healthy | Act when |
|---|---|---|
| Pages per shift (week) | < 2 incidents per 12 h on duty on average | Higher for two consecutive months |
| After-hours pages | Trending down | Any person woken more than twice a week |
| Actionable ratio | > 80% of pages needed a human | Below 50%: alert cleanup sprint ($alerting-rules) |
| Time to acknowledge | p90 under 5 min | Repeated escalations to secondary |
| Interrupt work hours | Visible in planning | On-call cannot do any planned work |
Rule: the primary on-call does no sprint feature work; their job is pages, tickets from alerts, toil reduction and runbook fixes. Plan capacity accordingly.
Onboarding new people
- Read runbooks and recent postmortems for the services covered.
- Shadow one full shift (receives pages, does not own them).
- Reverse shadow one shift (owns pages, experienced engineer as backup).
- Join the rotation. Pair new members with an experienced secondary for the first shift.
Wellbeing and fairness
- Compensate on-call (time off in lieu or pay) per company policy and local law; flag to the user that HR or legal must confirm the policy, Codex does not decide it.
- After a night incident, the person paged starts late or takes time off the next day; the secondary covers.
- Swaps are easy and recorded in the tool, not agreed only in chat.
- Managers are in the escalation chain and on call for coordination, not as heroes.
Verification
- A test page sent through each schedule reaches the right person by phone within the timeout, and escalation reaches the secondary when not acknowledged.
- Schedules have no gaps: check the paging tool’s coverage view for the next 8 weeks.
- After one month, load metrics are recorded and reviewed in a meeting with actions.
Output
A proposal document: rotation shape and calendar, escalation policy, handoff template, load metrics and thresholds, onboarding steps, open questions for HR/management, and the Terraform or tool configuration diff for review.
Gotchas
- Push notifications alone fail silently at night (do not disturb); require phone or SMS for high urgency and let people test it.
- A secondary who is never paged is not practising; occasionally route lower-urgency work to them.
- Holidays and leave break schedules; set overrides weeks ahead.
- Rotations that include people without production access produce escalations, not fixes.
What the zip contains
SKILL.md plus the interface file below. Nothing runs on install.
agents/openai.yaml
Gives the Codex app a display name, a one-line description and a starter prompt for this skill.
interface:
display_name: "On-Call Practices"
short_description: "Rotations people can sustain and pages that land"
default_prompt: "$on-call-practices Design an on-call rotation for a 6-person team split between Berlin and New York" About this skill
Written and maintained by the Codex Skills editors to the same editorial standard as every skill here: a selective description, a real workflow, known pitfalls and a way to verify the work. First published , last updated . MIT licensed. Something wrong or out of date? Tell us.