agentsclimarketplace

Incident management

Skill Canhada-Labs/ceo-orchestration/.claude/skills/core/incident-management

Live-incident operational doctrine for the {{PROJECT_NAME}} — severity classification, role assignment under load, escalation discipline, blame-free post-incident review, communication cadence, and rollback-first bias. Use when an alert fires, when a user-reported outage is being triaged, when designing on-call rotations, when authoring or reviewing an incident runbook, when facilitating a post-incident review, or when reviewing any change that affects detection, paging, or recovery surface area. The authority on declaring severity, assigning the commander role, and ending an incident is a VETO-floor responsibility paired with the framework's release-gate and security disciplines.From its SKILL.md

Install
npx -y skills add Canhada-Labs/ceo-orchestration --skill incident-management

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 2 stars2 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

SKILL.md

20.9 KB, as published. Nobody here has run it

Incident Management

Fail-Fast Rule

When an alert is real, declare and assign before you investigate. Never defer severity classification while you "look around for two minutes" — the two minutes become twenty, and nobody is in charge while it happens. Never silence a page without a written reason in the incident channel. Never end an incident on the basis of "metrics look better" alone; recovery is confirmed by user-facing verification AND a sustained observation window AND no fresh alerts in that window. If any of those three are missing, the incident is still open.

What This Skill Is (and isn't)

This is operational doctrine for handling production incidents — declaring, running, ending, and learning from them. It pairs with core/observability-and-ops (which tells you how to see the system) and core/chaos-and-resilience (which tells you how to design for failure). When an alert fires, this skill answers: who is in charge, what gets said, what gets done first, and how the post-incident loop closes.

This skill is NOT a runbook. Per-service runbooks live next to the service they cover — this skill governs the meta-process that all runbooks share. When in doubt about whether a given page is operational doctrine or a service-specific procedure, consult docs/MECHANISM-SELECTION.md §Quick flowchart: if the content is reusable across services, it is doctrine (this skill); if it is kubectl / psql / cloud-CLI invocations specific to one service, it is a per-service runbook stored next to that service.

Severity Schema

The framework uses a four-band schema. Bands are mutually exclusive — a single incident has exactly one severity at any moment, and changes to severity are logged events with a timestamp and reason.

BandTrigger conditionsInitial responseUpdate cadenceAuto-escalation
SEV1Total outage of a tier-1 service; suspected data loss; suspected breach; pay-flow haltedPage primary; declare within 5 minEvery 15 min, even with no changeDoubling impact → already SEV1
SEV2Partial outage affecting >25% of a tier-1 surface; degraded SLO; one paying tenant down hardPage primary; declare within 15 minEvery 30 minCross 50% impact → upgrade SEV1
SEV3Single feature broken with workaround; non-paying tenant impact; fast-recoverable degradationAcknowledge in 1 hourEvery 2 hours during waking hoursWorkaround fails → upgrade SEV2
SEV4Cosmetic / docs / known-issue with no user-visible impact; signal worth tracking but not pagingNext business dayAt triage onlyn/a — escalation means re-classify

Three rules govern severity:

  1. Severity is set by impact, not by guesswork about cause. "We don't know yet" maps to "use the worst plausible band consistent with what you do see." A 5xx spike that might be a deploy regression is at least SEV2 until proven otherwise.
  2. Customer-paying-account impact is a hard floor of SEV2. Non-paying accounts can sit at SEV3 by default.
  3. Severity downgrades happen only after mitigation is confirmed and a verification window has elapsed. Never downgrade because "we think we know what's going on now."

Roles During an Active Incident

These four roles are non-overlapping. One person holds each at a time. Role transitions are announced in the incident channel and timestamped.

Incident Commander (IC)

Owns the incident. Decides what gets tried, what gets stopped, when to escalate, when to call it resolved. Does NOT type commands into a terminal during an active SEV1/SEV2 — that is the Technical Lead's job. The IC is the single decision-maker; everything else is advisory.

Communications Lead

Owns external + internal updates. Drafts the status-page entry. Posts cadence updates. Briefs leadership when the severity warrants. Knows the audience for each channel: customers want impact + ETA, leadership wants business consequence, engineers want technical state.

Technical Lead

Owns the keyboard. Runs diagnostic queries, executes mitigation steps, proposes hypotheses to the IC. Does NOT broadcast updates directly to users; routes them through the Communications Lead so cadence and tone stay consistent.

Scribe

Owns the timeline. Logs every command, every observation, every decision, with timestamps. The post-incident review depends on this. Without a scribe, the timeline is reconstructed from memory three days later, which is when the systemic causes get rationalized away.

For SEV3+ a single engineer may hold IC + Tech Lead + Scribe simultaneously provided the timeline is logged in real time. SEV1/SEV2 require role separation.

CORRECT vs WRONG — declaring an incident

# CORRECT
[14:02] alert: api-error-rate > 5% for 90s
[14:03] declare: SEV2, IC=alex, comms=jordan, tech=mei, scribe=sam
[14:03] impact: ~25% of /checkout requests failing in EU-west-1
[14:03] hypothesis: TBD; investigation starting; first update at 14:18
[14:04] @comms: post initial status-page entry now

# WRONG
[14:02] alert fires
[14:04] "let me see what's going on real quick"
[14:11] "wait, also the dashboard is loading slow"
[14:18] "should we maybe declare this?"

The wrong pattern wastes the first 16 minutes before the response structure exists. The correct pattern spends the first 90 seconds installing the structure, then investigates inside it.

Communication Cadence

Cadence is contractual, not aspirational. Stakeholders learn to trust the update interval and stop interrupting the response when they can predict the next message.

Internal (incident channel)

  • SEV1: every 15 min, no exceptions, "no change" is a valid update
  • SEV2: every 30 min
  • SEV3: every 2 hours

A skipped update is itself an incident-process defect logged in the post-incident review.

External (status page + customer comms)

  • SEV1: initial post within 10 min of declaration; cadence matches internal
  • SEV2: initial post within 30 min
  • SEV3: post only if customer-visible AND duration >1 hour

Leadership

  • SEV1: brief at declaration + at every cadence beat
  • SEV2: brief at declaration + at resolution
  • SEV3/SEV4: include in weekly digest

Update template

# [SEV<N> UPDATE — <service>] <one-line status>
- State: <investigating | identified | mitigating | recovering | resolved>
- Impact: <what users see, scope, geography>
- Working theory: <best current hypothesis or "still narrowing">
- Action in flight: <what we're doing right now>
- Next update: <timestamp>

The five fields are mandatory. Filling "working theory" with "investigating" twice in a row is a signal that the hypothesis loop is stuck and the IC should consider widening the response team.

Mitigation Bias: Stop the Bleeding First

The IC's first question is not "what is the cause?" but "what is the fastest action that ends user impact?" That action is usually one of:

MitigationWhen it's rightRisk
RollbackOnset within minutes of a deploy / config-pushNone if last-known-good is verified clean
Feature-flag offA specific feature is implicated and the flag existsBlast radius depends on flag granularity
Failover / shedA specific dependency is implicated and a fallback existsFallback path must be tested in advance
Scale upSaturation symptoms (CPU, queue depth, connection pool) without underlying logic regressionMasks a real bug; pair with an action item
RestartState corruption suspected; service is otherwise healthy in codeRestart cycles can cascade; cap retries

Investigation of root cause is a parallel track to mitigation, not a prerequisite. A SEV1 mitigated by rollback at minute 8 with root cause identified at minute 45 is a successful response. A SEV1 still in investigation at minute 30 with no mitigation attempted is a process failure regardless of how interesting the root cause turns out to be.

Hypothesis time-boxing

A diagnostic hypothesis gets a budget. Default is 15 minutes. When the budget elapses without confirmation, the hypothesis is set aside (logged, not erased) and the next one starts. The IC enforces this — engineers naturally over-invest in their first guess.

Ending an Incident

Recovery is a state, not a vibe. Three conditions, all required:

  1. Symptoms gone in observed metrics. Error rates, latency p99, queue depth, whatever the page paged on, back inside SLO with a margin.
  2. User-facing verification. Someone (Tech Lead, on-call, or the Communications Lead via a customer ping) confirms the broken surface actually works again. Not "the dashboard says 200 OK" — actually exercise the endpoint or the flow.
  3. Sustained observation window. SEV1 = 30 min watching; SEV2 = 15 min; SEV3 = 5 min. No fresh alerts in that window. If anything pops, the window restarts.

When all three pass, the IC declares "resolved" in the channel with the final timeline and the link to the (yet-to-be-written) post-incident review.

Post-Incident Review (blame-free)

The review happens within 48 hours of resolution while context is still recoverable. Attendance is the response team plus anyone whose system was implicated. Format is a structured document, not a freeform retro.

Required sections

# Post-Incident Review: <service> — <YYYY-MM-DD>

- **Severity:** SEV<N>
- **Duration:** <start UTC> → <end UTC> (<minutes>)
- **Detection latency:** alert-to-declaration
- **Mitigation latency:** declaration-to-symptoms-clear
- **Customer impact:** <quantified — accounts affected, requests failed, $ if known>
- **SLO budget consumed:** <% of monthly>

## Timeline (UTC)
<table from scribe — every state change, decision, and observation>

## What broke (system, not people)
<the failure chain in technical terms; no individual names except in
"who was in IC role" sense>

## Why the safeguards we had didn't catch it earlier
<this is the point of the review>

## Action items
| ID | Action | Type    | Owner | Priority | Due date | State |
|----|--------|---------|-------|----------|----------|-------|
| 1  | …      | detect  | …     | P1       | …        | open  |
| 2  | …      | prevent | …     | P1       | …        | open  |
| 3  | …      | recover | …     | P2       | …        | open  |

## What we got right
<the response patterns to keep>

Action-item discipline

Action items are tagged by type — detect (we'd see it sooner), prevent (it can't happen again), recover (we'd recover faster) — and tracked to completion outside the review document. A repeat incident whose action item from the previous review is still open is itself a finding in the new review. This is how the review loop becomes load-bearing rather than ceremonial.

Blame-free framing

Blame-free means findings are framed in terms of system gaps. "Engineer X typo'd a config" is the wrong framing. "There is no integration test for config validation; the manual review process is the only safeguard, and manual review missed a one-character typo" is the right framing. The people involved are not absent from the document — they wrote the timeline and they own action items — but their decisions are not characterized as the cause. The system that allowed their decision to reach production is the cause.

Anti-Patterns to Reject

Anti-PatternWhy it's wrongCorrect approach
Declaring severity after the response is overLoses the trigger for cadence + escalation; updates never get writtenDeclare in the first 5 min; downgrade later if warranted
Single person doing IC + tech + comms during SEV1Decision-maker is also typing; nobody is reading the metricsForce role split at SEV1 even if it slows the first 5 min
"Let's not page leadership at 3am, it's not that bad"Severity is set by impact, not by hour; under-paging trains leadership to ignore the channelIf the band says page, page; calibrate the band, not the page
Closing an incident on "metrics look better"The mitigation may be cosmetic; users may still be brokenThree-condition close (metrics + user-facing + sustained window)
Skipping the post-incident review for "small" SEV3Patterns are learned across small incidents; only writing reviews for SEV1 misses the systemic signalEvery SEV1/SEV2 + every repeat SEV3 gets a review
Action items without owners or due datesThe list grows, nothing closesOwner + due date are mandatory fields; missing fields fail review
Same finding in three consecutive reviewsAction item discipline has broken; the system is teaching you nothingHalt feature work for the affected component until the action item lands
Status-page silence during a confirmed customer-visible SEV1Users learn from each other on social media first; trust collapsesInitial post within 10 min even if the only content is "investigating"
Treating an alert as the trigger to investigate the alert qualityReal alert is happening; tune the alert AFTER, in a follow-upAction item: "tune <alert-name> threshold" — handled in the review, not during
Letting the tech lead push code mid-incident without reviewMid-incident hot-fixes are how the recovery becomes its own incidentRollback first; new code goes through normal review even if expedited

On-Call Hygiene

On-call rotations are the input to this whole process — a degraded rotation produces degraded incidents. The framework's stance:

  • Minimum rotation size of four engineers. Three rotates engineers through primary every third week, which corrodes sleep and judgment.
  • Two-week cap on consecutive primary weeks. Hand off, rest, return.
  • Shadow before primary. A new engineer rides along for at least one full rotation cycle before holding the pager alone.
  • Pages-per-shift health metric. Above five pages per engineer per week is a signal that alerts are noisy or the system is degraded; either way it's a remediation target, not a steady state.
  • Handoff during business hours. Rotation transitions at 10:00 local, not midnight. Engineers should hand context across to a refreshed successor, not wake one up to receive it.
  • Pager compensation is non-optional. This is a stance, not a HR policy — when carrying the pager is unpaid, recruitment and retention for the senior end of the rotation deteriorate within two quarters.

These items are not enforced by a hook in this framework. They are review checklist items the Incident Commander archetype consults when reviewing on-call program proposals.

Cross-Validation with Other Disciplines

Release-gate intersection

A live SEV1 freezes new releases of the affected surface until the post-incident action items are at least scoped (not necessarily landed). This ties directly to the framework's release discipline (ADR-103 calendar-gate-final-purge — release.yml RC-hold mechanics). Mitigation deploys are exempt; feature deploys are not.

Security-and-auth intersection

A suspected breach at any band auto-elevates to SEV1. The Incident Commander coordinates with whichever archetype holds the security VETO floor for the framework (ADR-052 multi-model dispatch by role). The IC does not unilaterally decide a breach is over; the security archetype signs that off.

Chaos-and-resilience intersection

core/chaos-and-resilience lists known failure scenarios and their recovery posture. During investigation, the Tech Lead consults that catalog as the first hypothesis source — many incidents are re-runs of already-mapped scenarios. After resolution, the post-incident review updates the catalog with anything new.

Brainstorm-gate intersection

The post-incident review is a Pass-2 adversarial-framing exercise per ADR-058 (brainstorm-gate-and-two-pass-review). The reviewer's job is to disagree with the timeline's framing — to look for the systemic cause the responders rationalized around. A review that produces zero pushback on the responders' explanation is a review that hasn't done its job.

Operating-Mode Selector

SituationMechanism the framework expects
Active SEV1/SEV2 happening nowThis skill loaded into the responding archetype's context
Authoring a per-service runbookThis skill loaded into a Senior Engineer archetype as the meta-doctrine reference; the runbook lives next to the service
On-call program reviewThis skill + core/observability-and-ops loaded into the operations archetype
Post-incident review facilitationThis skill + code-review-checklist loaded into the facilitator; ADR-058 Pass-2 framing applied
Incident-readiness audit / game dayThis skill + core/chaos-and-resilience loaded into the auditor; outputs feed the chaos-scenario catalog

The matrix above is the basis for the Operating-Mode rationale recorded in mechanism-selection-rationale.md alongside this skill — the work is persistent doctrine plus role-bearing pattern reference, which the mechanism-selection guide maps to a SKILL with a thin task-chain companion, not a slash-command and not a runbook.

Success Signals

A working incident-management practice produces:

  • Detection-to-declaration latency under 5 min for tier-1 services
  • Sustained reduction in median time-to-mitigate quarter over quarter
  • Zero repeat incidents whose previous review's action items shipped
  • Pages-per-engineer-per-week trending down or stable, not up
  • Post-incident review action-item completion >85% within stated due date
  • A culture where engineers escalate freely and re-classify upward without asking permission

The metrics are lagging indicators. The leading indicator is whether the roles, cadence, and three-condition close are actually used during real incidents — that is what the SKILL.md exists to govern.

References

  • core/observability-and-ops — health-check + metrics design, the input to detection
  • core/chaos-and-resilience — failure-scenario catalog, the input to hypothesis generation
  • core/security-and-auth — auth + breach handling intersection
  • core/code-review-checklist — adversarial-framing methodology applied to the post-incident review
  • ADR-052 — multi-model dispatch by role (VETO-floor invariants this doctrine plugs into)
  • ADR-058 — brainstorm gate + two-pass review (Pass-2 framing for post-incident review)
  • ADR-103 — calendar-gate-final-purge (release.yml RC-hold mechanics intersected by SEV1 freezes)
  • docs/MECHANISM-SELECTION.md — the flowchart this skill resolves to a skill (not a runbook, not a slash-command)

Keep looking

Skills are one crate of 627,801. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.