Incident Response skill for Claude Code
Stop the bleeding first, explain it later. Claude acts as scribe, analyst and comms drafter during an outage. It sets severity, correlates the error inflection point with recent deploys and config changes, proposes one reversible mitigation at a time with expected effect and rollback, and waits for approval. It keeps a UTC timeline and drafts internal and status page updates on a fixed cadence.
- name
incident-response - size169 lines · ≈1,950 tokens
- files2
- licenseMIT
- updated
What Claude sees before loading it
This description is the only part of the skill that sits in context all the time. Claude reads it to decide when to load the full playbook below.
description: Runs live production incidents with a mitigate-first playbook — severity assignment, incident commander and scribe roles, change-correlation triage, reversible mitigations such as rollback, flag-off, scale-out, and failover, a timestamped timeline, and status updates on a fixed cadence for internal channels and status pages. Use when production is down or degraded, when alerts are firing and users are affected, when someone says "the site is down" or "we have an incident", or when drafting incident comms mid-outage. Try asking
- Checkout is throwing 500s for a lot of users right now. Help me run this incident
- Draft a status page update for the API outage that started 20 minutes ago
- Errors spiked at 13:58; figure out what changed and what we can roll back
Use it when
- Production is down or degraded and users are affected
- Alerts are firing and you need a structured triage
- You need internal or customer-facing updates during an outage
- An incident needs a clean timeline for the postmortem
Skip it when
- The incident is over and you are writing the review — use postmortems instead
- It is a non-urgent bug with no live impact — use systematic-debugging instead
How to check the result
Key metrics return to baseline and stay there through the monitoring window, every action in the timeline has a timestamp, owner and approval, and each promised update went out on time.
The common mistake it prevents
Chasing the root cause while users are still failing, instead of rolling back the change that lines up with the error spike.
During an incident the goal is to restore service, not to understand it. Done well means: impact is stopped quickly with a reversible action, everyone knows who is in charge, stakeholders get updates on a predictable cadence, and a timeline exists for the postmortem without anyone reconstructing it from memory.
Ground rules
- Mitigate before you diagnose. A rollback you can explain later beats a fix you are still writing.
- Prefer reversible actions (rollback, flag off, scale out, drain a region) over irreversible ones (data deletion, schema changes, cache flushes of primary data).
- Every production-changing action is proposed with its expected effect and rollback, then executed only after explicit confirmation from the incident commander/user.
- One change at a time; watch the key metric for its effect before the next.
- Write everything down with UTC timestamps as it happens.
- Never speculate about cause in external comms. State impact, actions, next update time.
Severity
| Sev | Definition | Response | Update cadence |
|---|---|---|---|
| SEV1 | Core service down or data loss/corruption or security breach, many customers | All hands, IC paged, status page | Every 30 min (15 min for full outages) |
| SEV2 | Major feature degraded, workaround exists, or significant subset of users | IC + on-call team, status page if customer-visible | Every 60 min |
| SEV3 | Minor degradation, low customer impact | On-call handles in business hours | At milestones |
| SEV4 | No customer impact (internal tooling, near miss) | Ticket | None |
When unsure between two levels, pick the higher one; downgrade later.
Roles
| Role | Does | Does not |
|---|---|---|
| Incident Commander (IC) | Owns decisions, sets priorities, assigns work, declares resolved | Debug hands-on |
| Ops / Tech lead | Investigates and executes mitigations | Write external comms |
| Comms lead | Internal updates, status page, support/CS liaison | Change production |
| Scribe | Timeline, decisions, links, who did what | Filter or editorialize |
In small teams one person may hold two roles, but the IC should not be the one typing commands for a SEV1. Claude typically acts as scribe, analyst, and comms drafter.
Workflow
- [ ] 0-5 min: Declare, assign IC, open channel/doc, set severity
- [ ] 5-15 min: Assess impact and blast radius; correlate with recent changes
- [ ] 15-30 min: Apply the safest mitigation; first external update
- [ ] Ongoing: One change at a time, watch metrics, updates on cadence
- [ ] Resolve: Metrics back to baseline for a monitoring window; declare resolved
- [ ] After: Final update, hand off to postmortem with timeline and evidence
1. Declare
- Create the incident channel (
#inc-2026-10-19-checkout-errors) and an incident doc from the template in references/comms-templates.md. - Record: detected at, detected by (alert/customer), severity, IC, current impact.
2. Assess: impact and what changed
Answer these first, in order:
- Who is affected and how? (all users, a region, a tenant, a platform, one endpoint)
- Since when exactly? Find the inflection point on the error-rate or latency graph.
- What changed right before it?
# Deploys and config changes near the inflection point
git log --since="3 hours ago" --oneline --merges
gh run list --workflow deploy.yml --limit 10
kubectl rollout history deploy/<svc> -n <ns>
kubectl get events -A --sort-by=.lastTimestamp | tail -40
# Feature flag audit log, infra change log (Terraform runs), cloud provider status page,
# third-party status pages (payments, auth, CDN, DNS)
Change sources to check: application deploys, config/flag changes, infra (Terraform, k8s manifests), dependency or certificate expiry, traffic spikes (marketing, bots), upstream providers, scheduled jobs/cron, data migrations.
For log/metric digging during triage, the log-analysis skill has query patterns.
3. Mitigate
| Situation | First mitigation | Rollback of the mitigation |
|---|---|---|
| Started after a deploy | Roll back to previous version | Redeploy the new version |
| Started after a flag/config change | Revert the flag/config | Re-enable |
| One region/zone/node pool bad | Drain or fail over traffic | Restore routing |
| Overload / traffic spike | Scale out; rate-limit or shed non-critical traffic | Scale back; remove limits |
| Bad actor / bot flood | Block at WAF/CDN by IP/ASN/path | Remove rule |
| Dependency down | Circuit-break, serve degraded/cached, queue writes | Close breaker |
| Database saturated | Kill runaway queries, pause batch jobs, add read replicas | Resume jobs |
| Disk full | Expand volume, rotate/compress logs | (Expansion is not reversed) |
| Cert expired | Renew/redeploy cert | n/a |
State each proposed action like this before executing:
PROPOSED (14:22 UTC): Roll back checkout-api from 1.14.2 to 1.14.1
Expected effect: 5xx rate drops from 12% to baseline (<0.5%) within 5 min
Risk: 1.14.2 migration added a nullable column; 1.14.1 ignores it (safe)
Rollback: redeploy 1.14.2
Needs confirmation from IC.
4. Communicate on cadence
- Post the first external update within 30 minutes of declaring a customer-facing SEV1/2, even if it only says “investigating”.
- Every update states: current impact, what is being done, next update time.
- Internal updates can include hypotheses; external ones cannot.
- Use the templates in references/comms-templates.md.
5. Resolve
- Mitigated: impact stopped, root cause may still be present.
- Resolved: key metrics at baseline for a monitoring window (30–60 min for SEV1), backlogs drained (queues, retries), no data repair pending or repair tracked.
- Final update internally and externally. Then hand off to the postmortems skill with the timeline, graphs, and decisions.
Timeline discipline
Log entries as HH:MM UTC — who — what (evidence link):
14:02 UTC — PagerDuty — Alert: checkout 5xx > 5% for 5 min
14:05 UTC — @maria — Declared SEV1, IC @maria, scribe @claude
14:09 UTC — @dev1 — Error spike aligns with deploy of checkout-api 1.14.2 at 13:58
14:22 UTC — @dev1 — Rollback to 1.14.1 started (approved by IC)
14:27 UTC — @dev1 — 5xx back to 0.3%; monitoring
15:05 UTC — @maria — Resolved after 38 min at baseline
Gotchas
- Debugging in silence: if no one has posted in 15 minutes, the IC asks for status.
- Multiple people changing production at once makes it impossible to know what worked.
- Rolling back application code does not roll back migrations, data writes, or cache contents; check those explicitly.
- Restarting everything destroys evidence (heap state, logs on ephemeral disks). Grab a heap dump, thread dump, or logs from one instance before restarting, if it costs under a minute.
- Status page silence is worse than “still investigating”.
- Declaring resolved at the first good graph point; wait for the monitoring window.
- Fatigue: rotate the IC and responders on incidents longer than ~3 hours and do a written handover.
Output
The incident doc (template in references) with: summary, severity, roles, impact, timeline, actions taken with approvals, comms sent, open follow-ups, and links to graphs. At handover or resolution, post a five-line summary in the channel:
**Status:** Resolved 15:05 UTC (SEV1, 63 min, customer impact 25 min)
**Impact:** ~18% of checkout attempts failed with 500 between 13:58 and 14:27 UTC
**Mitigation:** Rolled back checkout-api 1.14.2 -> 1.14.1
**Suspected trigger:** 1.14.2 deploy (root cause TBD in postmortem)
**Follow-ups:** Postmortem Thu; failed orders being retried (ticket OPS-812) Bundled files
Loaded only when a step in the skill needs them. Review them here before installing.
references/comms-templates.md
# Incident comms and doc templates
Read this when opening an incident doc or drafting any update. Fill bracketed fields;
delete lines that do not apply. Times always in UTC.
## Incident doc
```markdown
# [SEV1] Checkout errors — 2026-10-19
| Field | Value |
|---|---|
| Status | Investigating / Identified / Mitigated / Monitoring / Resolved |
| Severity | SEV1 |
| Detected | 14:02 UTC by [alert name / customer report] |
| Incident Commander | @name |
| Ops lead | @name |
| Comms lead | @name |
| Scribe | @name |
| Channel | #inc-2026-10-19-checkout |
| Status page | [link] |
## Current impact
[Who is affected, what fails, since when, how many — one or two sentences, updated in place]
## Timeline (UTC)
- 14:02 — [who] — [what] ([link])
## Actions
| Time | Action | Owner | Approved by | Result |
|---|---|---|---|---|
## Hypotheses
| Hypothesis | Evidence for | Evidence against | Status |
|---|---|---|---|
## Comms log
| Time | Channel | Summary |
|---|---|---|
## Follow-ups
- [ ] [data repair / customer outreach / postmortem scheduled]
```
## Internal update (Slack/Teams)
```markdown
**[SEV1] Checkout errors — update #3 (14:35 UTC)**
**Status:** Mitigated, monitoring
**Impact:** Checkout failures dropped from ~18% to 0.3% at 14:27. Orders that failed
between 13:58 and 14:27 are not charged.
**What we did:** Rolled back checkout-api to 1.14.1.
**Working on:** Confirming failed orders can be retried; root cause of 1.14.2 failure.
**Next update:** 15:05 UTC or sooner on change.
**IC:** @maria
```
## External status page
Keep it factual, plain, and free of internal names, blame, and speculation.
Investigating:
```
Investigating — We are seeing elevated errors when completing checkout. Some customers
may be unable to place orders. Our team is investigating. Next update by 14:35 UTC.
```
Identified:
```
Identified — We have identified the cause of the checkout errors and are applying a fix.
Customers may still see failures when placing orders. Next update by 15:05 UTC.
```
Monitoring:
```
Monitoring — A fix has been applied and checkout is working normally. We are monitoring
to confirm. Orders that failed between 13:58 and 14:27 UTC were not charged and can be
placed again. Next update by 15:30 UTC.
```
Resolved:
```
Resolved — Checkout has been operating normally since 14:27 UTC. Between 13:58 and
14:27 UTC, some customers could not complete orders; no payments were taken for failed
orders. We will publish a summary of the cause and the steps we are taking to prevent a
recurrence.
```
## Executive / stakeholder summary
```markdown
**What happened:** For 29 minutes, about 18% of checkout attempts failed.
**Customer impact:** ~2,300 failed checkout attempts; no incorrect charges; no data loss.
**Current state:** Resolved since 14:27 UTC, monitored for 38 minutes.
**Cause (preliminary):** A release at 13:58 introduced the failure; rolled back.
**Next steps:** Postmortem on [date]; retry outreach to affected customers by [team].
```
## Customer support macro
```
Thanks for reaching out. Between 13:58 and 14:27 UTC today some checkouts failed due to
an issue on our side, which is now fixed. If your order did not go through, you were not
charged and you can place it again now. We are sorry for the trouble.
```
## Handover (shift change or IC rotation)
```markdown
**Handover 18:00 UTC — from @maria to @li**
- Status / severity: Mitigated, SEV2 (downgraded 16:40)
- Current impact: none visible; queue backlog 4k msgs draining at ~300/min
- In flight: data repair script for 112 orders (owner @dev1, ETA 19:00)
- Decisions pending: whether to re-enable 1.14.2 behind a flag (IC decision)
- Watch: checkout 5xx panel, orders-queue lag panel
- Next external update due: 18:30 UTC
```
## Wording rules
- Use "some customers" or a percentage, not internal service names.
- Never promise a fix time you do not control; promise the next update time.
- Do not name individuals, vendors, or blame in public comms unless legal/comms approves.
- Say what customers should do (retry, nothing, contact support).
About this skill
Written and maintained by the Claude Skills editors to the same editorial standard as every skill in the directory: a selective trigger, a real workflow, known pitfalls and a verification step. First published , last updated . MIT licensed.