incident-triage
Skill0 starsChanged 2 months agoApache-2.0View on GitHub
Run the first fifteen minutes of a production incident - establish impact, decide severity, mitigate before investigating, identify the most likely recent change, and coordinate without making things worse. Use at the start of any outage or degradation, when a page fires, or when someone reports that production is broken and nobody has taken control yet.
22 other projects use a version of this.
Adopted by
Most recently taken up by
- superset-sh/supersettheir own version, first seen Nov 2, 2026
- briiirussell/cybersecurity-skillstheir own version, first seen Nov 1, 2026
- Happy-Technologies-LLC/happy-platform-skillstheir own version, first seen Nov 1, 2026
- rpraharaj/ai-sdlctheir own version, first seen Nov 1, 2026
- rpraharaj/ai-engineertheir own version, first seen Nov 1, 2026
- ParadevAI/Paradevtheir own version, first seen Nov 1, 2026
Used with
Projects with it also use write-runbook, threat-hunting and 6 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
MaheshAwasareSkillwrite-runbook
Generate an operational runbook for a service from its code, config, and dependencies — what to do when it breaks, where to look, how to roll back, who to escalate to. Use proactively before a service goes to production, after a major incident, or when handing off operational ownership.
Also in 3 projects that use this
allanninalSkillthreat-hunting
Hunt threats using Sigma detection rules and security analysis techniques. Use when investigating security incidents, creating detection rules, or analyzing suspicious activity.
Also in 3 projects that use this
srclightSkillexplore-codebase
This skill should be used when the user asks to "explore this codebase", "understand this project", "give me an overview", "how does this work", "onboard me", "walk me through the architecture", "map the codebase", or any request to understand a codebase's structure, architecture, or design.
Also in 3 projects that use this
thlaureSkillreview-change
Use this skill when the user asks for a code review, a correctness pass, a check before PR, or asks whether a Signalist change follows project conventions.
Also in 4 projects that use this
SentrySkillwrite-tests
Write tests following project conventions. Use when adding new tests or modifying existing ones.
Also in 3 projects that use this
MicrosoftSkillapi-design
Guide for designing and documenting RESTful APIs. Use when asked to design an API, create endpoints, or document an API.
Also in 3 projects that use this
Other versions22 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 22
- ParadevAI/Paradev★ 16ksame name
- superset-sh/superset★ 16ksame name
- briiirussell/cybersecurity-skills★ 489same name
- Happy-Technologies-LLC/happy-platform-skills★ 41same name
- Indium-AI-Labs/indium-agentkit★ 18same name
- Ionate-Technologies/indium-agentkit★ 17same name
- Mozurok/fhorja.dev★ 10same name
- aws-samples/sample-aws-ops-skills-for-agents★ 8same name
- ByronScottJones/Agents★ 7same name
- aprameyak/coding-skills★ 1same name
12 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository26 other files it gives its agents.
- AGENTS.mdAGENTS.md
- aws-production-debuggingSkill
- github-actions-debuggingSkill
- postgresql-troubleshootingSkill
- container-image-reviewSkill
- docker-debuggingSkill
- postmortem-analysisSkill
- production-debuggingSkill
- kubernetes-networkingSkill
- kubernetes-production-readinessSkill
- kubernetes-resource-debuggingSkill
- kubernetes-troubleshootingSkill
- linux-network-debuggingSkill
- linux-performanceSkill
- linux-troubleshootingSkill
- dns-troubleshootingSkill
- http-debuggingSkill
- tls-debuggingSkill
- observability-debuggingSkill
- prometheus-troubleshootingSkill
- slo-designSkill
- secrets-management-reviewSkill
- technology-jobSkill
- terraform-reviewSkill
- terraform-safe-changesSkill
- terraform-troubleshootingSkill
The file
We split this skill into the rules it gives an agent
10 rules. 0 are common, 10 are distinctive, and 0 are very specific to this project.
0
Common
Most of the 18 edited versions we read keep these.
10
Distinctive
This author's own choices. Worth a look.
0
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 42
If you lack any of these, saying so early is itself a useful triage output.
- Distinctive: line 93
If you cannot state impact, that is the first task — not a reason to skip to debugging.
- Distinctive: line 119
Check, in order of how often each is the cause:
- Distinctive: line 164
Update on a stated cadence even when there is nothing new — "still investigating, next update in 15 minutes" prevents the stream of …
- Distinctive: line 166
Always state the next update time, and always state what is *not* affected.
- Distinctive: line 252
If a destructive action seems necessary, pause and get a second person to agree.
- Distinctive: line 257
Verify the mitigation from the user's side.
- Distinctive: line 273
Only after all three, downgrade the severity and say so explicitly.
- Distinctive: line 291
Bad: Wait until we know more before updating stakeholders.
- Distinctive: line 299
Bad: Keep debugging alone for 45 minutes because escalating feels like failure.
“Common” is measured: kept by at least 6 in 10 of the 18 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Incident Triage
Stabilise first. Understand second. The order is the whole skill.
Purpose
Use this when:
- A page fires, or someone reports production is broken.
- An outage or significant degradation is in progress.
- Multiple people are looking at a problem and nobody is coordinating.
Do not use this when:
- The system is stable and you are investigating a past event — use
production-debuggingorpostmortem-analysis. - The problem is contained in a non-production environment. Apply proportionate effort.
What this skill assumes: access to dashboards, deploy history, and the ability to roll back. If you lack any of these, saying so early is itself a useful triage output.
Operating Procedure
Mitigation comes before diagnosis. A user-visible outage is stopped first and understood afterwards. The instinct to find the root cause before acting is correct engineering and wrong incident response — it extends every outage by the length of the investigation.
The first 15 minutes
- Declare. Say out loud, in the incident channel, that this is an incident and that you are coordinating. Ambiguity about who is driving is the most common cause of a slow response.
- Establish impact (2 min). Who is affected, how many, doing what, since when. Impact drives severity; severity drives who gets woken up.
- Check for a recent change (2 min). Deploys, config changes, feature flags, infrastructure changes, certificate expiries, scheduled jobs. Most incidents follow a change.
- Mitigate (5 min). Roll back, fail over, disable the flag, shed load, scale up. Pick the action with the best ratio of expected relief to blast radius.
- Verify the mitigation worked (2 min). Against the user-visible symptom, not against a dashboard you like.
- Then investigate — hand off to
production-debuggingwhile someone keeps communicating.
Roles, when more than one person is involved
| Role | Does | Does not |
| Incident commander | Decides, delegates, keeps the timeline | Debug |
| Operations | Runs commands, makes changes | Decide unilaterally |
| Communications | Updates stakeholders and the status page | Debug |
| Scribe | Records actions with timestamps | — |
One person can hold several roles in a small incident. The commander should not be the person with their head in a terminal — that is how the coordination stops.
Everything you state must be labelled: Observed, Assumed, or Recommended. Under pressure, assumptions get repeated until they become facts, and the investigation follows them off a cliff.
Investigation
Step 1 - impact, in one line
Since 14:05 UTC, approximately 30% of checkout requests return 503.
Affects: all customers attempting checkout. Payments are unaffected.Specifically: what is failing, how much, since when, for whom, and what is confirmed not affected. The last part is the one people skip and the one stakeholders ask about first.
If you cannot state impact, that is the first task — not a reason to skip to debugging.
Step 2 - severity
| Sev | Criterion | Response |
| 1 | Complete outage, or data loss or corruption, or a security breach | Page everyone relevant now; status page; exec comms |
| 2 | Major feature unavailable, or severe degradation for many users | Page the owning team; status page |
| 3 | Partial degradation, workaround exists | Business hours, ticket |
| 4 | Minor, no user impact | Backlog |
Err upward. Downgrading a Sev 1 that turned out to be a Sev 3 costs a little goodwill; discovering at hour three that a Sev 3 was always a Sev 1 costs considerably more.
Two escalation triggers that are not about severity: data loss or corruption is always Sev 1 regardless of how few users are affected, and any suspicion of a security breach goes to the security team immediately, before any remediation that might destroy evidence.
Step 3 - what changed
kubectl rollout history deployment/<name> -n <namespace>
kubectl get events -A --sort-by=.lastTimestamp | tail -30
git log --since='4 hours ago' --oneline --allCheck, in order of how often each is the cause:
- Application deploys in the last few hours.
- Config or feature-flag changes — these often bypass the deploy pipeline and the change log.
- Infrastructure changes (Terraform applies, cluster upgrades, node pool changes).
- Scheduled jobs — a batch job at the top of the hour is a classic.
- Certificate or credential expiry — check if the start time is suspiciously round.
- Upstream provider incidents — check their status page.
- Traffic changes — a marketing campaign, a bot, a retry storm.
Nothing changed on our side is possible but is the least likely explanation, and treating it as the starting hypothesis costs a lot of time. Traffic, time-based expiry and dependency changes are changes too.
Step 4 - choose the mitigation
| Situation | Mitigation | Blast radius | Reversibility |
| Started at a deploy | Roll back to the previous version | The service | High — roll forward again |
| Started at a flag change | Turn the flag off | The feature | High |
| One zone or node is bad | Drain it / shift traffic away | That zone's capacity | High |
| Dependency is down | Degrade gracefully, serve cached or partial results | The feature | High |
| Overload | Shed load, enable rate limits, scale out | Some users rejected deliberately | High |
| Runaway job | Stop the job | That job's work | Medium |
| Corrupt or bad data being written | Stop the writer first, before anything else | The writer | Depends |
Rules for choosing:
- Prefer the reversible action. A rollback you can undo beats a clever fix you cannot.
- Change one thing at a time. Three simultaneous changes make the next 30 minutes unreadable — you will not know which helped, and one of them may be making it worse.
- Rolling back is not defeat. It is the fastest mitigation available for the most common cause.
- If data is being corrupted, stop the write path immediately. Availability can be restored; corrupted data often cannot. This is the one case where you accept downtime to mitigate.
Step 5 - communicate
14:12 UTC - Investigating elevated checkout errors. ~30% of checkout attempts failing.
Payments and browsing unaffected. Next update 14:30.
14:26 UTC - Rolled back checkout-service to v2.4.1. Error rate falling. Monitoring.
Next update 14:45.
14:41 UTC - Error rate normal since 14:31. Incident mitigated; root cause investigation ongoing.Update on a stated cadence even when there is nothing new — "still investigating, next update in 15 minutes" prevents the stream of individual questions that otherwise consumes the responder. Always state the next update time, and always state what is not affected.
Decision Tree
Page fires / outage reported
├── Is it real? (check the SLI, not just the alert)
│ ├── No → monitoring problem → prometheus-troubleshooting; still write it up
│ └── Yes → continue
├── Data loss or corruption in progress?
│ └── YES → Sev 1. Stop the write path first. Availability is secondary.
├── Security incident suspected?
│ └── YES → escalate to security before remediating; preserve evidence
├── Did something change in the last few hours?
│ ├── Deploy → roll back
│ ├── Config/flag → revert it
│ ├── Infra → assess reverting; may not be reversible
│ └── Nothing obvious → check traffic, dependencies, expiry, scheduled jobs
├── Is it isolated?
│ ├── One zone/node → shift traffic away
│ ├── One tenant → isolate or rate limit them
│ └── Everywhere → shared dependency
└── Mitigated?
├── Yes → verify, communicate, then investigate → production-debugging
└── No → escalate; widen the group; consider a more aggressive mitigationCommon Causes
| Cause | Tell | Mitigation |
| Bad deploy | Started within minutes of a rollout | Roll back |
| Config change | No deploy, sharp start | Revert |
| Certificate expiry | Sharp start at a round time; TLS errors | Renew; short term, extend or bypass carefully |
| Dependency outage | Errors concentrated on calls to one peer | Degrade gracefully |
| Retry storm | Load rising after an initial blip | Disable retries; add backoff and jitter |
| Capacity | Gradual rise tracking traffic | Scale out; shed load |
| Database saturation | Connection errors, queue depth up | Kill long queries, reduce concurrency |
| Scheduled job | Starts on the hour | Stop the job |
Safety
Read-only
Reading dashboards, logs, events, deploy history and status pages. Do all of it, freely, while deciding.
Note a real cost: during an incident, an expensive query can degrade the monitoring stack you are depending on. Keep incident queries bounded.
Potentially disruptive
These are mitigations. Each is a deliberate change with a blast radius, and every one must be announced in the channel before it is run so that others can interpret what happens next.
- Rollback — usually the safest and most effective. Confirm the previous version is actually good and that no irreversible migration shipped with the new one. A rollback across a schema migration can be worse than the outage.
- Restart / rollout restart — drops in-flight requests. Sometimes the right call for a leak or a stuck process; frequently a way to destroy evidence for no benefit.
- Scaling — safe upward, subject to quota and to whether the bottleneck is downstream. Scaling a service whose bottleneck is the database adds load to the database.
- Failover — verify the target is healthy first. A failover to a stale replica converts an outage into a data problem.
- Load shedding / rate limiting — deliberately rejects some users to save the rest. Legitimate and underused. Say explicitly who is being rejected.
- Disabling a feature flag — usually reversible and low risk; check for state written while the feature was on.
Destructive
During an incident, under time pressure, is the worst moment to take a destructive action. Each of these requires an explicit decision by the incident commander, stated in the channel, with the blast radius named:
- Failing over a database — may lose unreplicated writes and is frequently one-way. Required first: confirm replication lag, confirm the target's health, name who decided.
- Deleting a persistent volume, a namespace, or a stateful resource — destroys data. During an incident this is almost never the right action; the pressure to "just recreate it" is exactly the pressure to resist.
- Truncating a queue or dropping messages — discards work permanently. Sometimes correct for a poison-message storm. Required first: capture a sample of the messages for the investigation.
terraform destroyor equivalent — seeterraform-safe-changes. Not an incident action.- Clearing data or caches whose loss shifts load elsewhere — a cold cache after a flush can take the database down as a second, worse incident.
If a destructive action seems necessary, pause and get a second person to agree. Losing thirty seconds to that conversation is cheap.
Verification
Verify the mitigation from the user's side.
Before: 30% of checkout requests 503; p99 12s; 14 customer reports
After: 0.1% error rate sustained 10 min; p99 240ms; no new reportsCheck three things:
- The user-visible symptom is gone, measured where the user is — a synthetic check or edge-level metrics, not an internal dashboard.
- It stays gone for at least 10 minutes. Many mitigations produce a brief improvement as connections re-establish, then regress.
- Nothing new broke. Scaling one service can starve another; a rollback can reintroduce a bug that was fixed in the version you just removed.
Only after all three, downgrade the severity and say so explicitly. "Mitigated" and "resolved" are different states — mitigated means the users are fine and the cause is still out there.
Anti-Patterns
Bad: Find the root cause before acting. Better: Mitigate first. Root cause analysis is not more important than the users who are currently unable to use the product, and mitigation almost never destroys the ability to investigate afterwards.
Bad: Everyone jumps into the same terminal and starts making changes. Better: One person makes changes and announces each one. Concurrent changes make the timeline unreadable and can interact badly.
Bad: Restart everything. Better: Sometimes a restart is the right mitigation. Doing it reflexively destroys evidence and often changes nothing — and on a crash-looping service it is what the system is already doing.
Bad: Wait until we know more before updating stakeholders. Better: Regular updates saying "no news yet, next update at X" cost nothing and stop a queue of people asking the responders for status individually.
Bad: Skip the incident record because it was short. Better: Short incidents are the cheapest possible way to learn. The ones that repeat are the ones nobody wrote down.
Bad: Keep debugging alone for 45 minutes because escalating feels like failure. Better: Set a time box at the start. Not escalating is the failure; the cost of one extra person looking is near zero compared with an extra half-hour of outage.
Composition
production-debugging— after mitigation, to find the actual cause.observability-debugging— to scope impact using metrics, logs and traces.postmortem-analysis— afterwards, once the system is stable.kubernetes-troubleshooting,dns-troubleshooting,postgresql-troubleshootingand the rest — whichever layer the triage points at.
References
- Google SRE Book: Managing Incidents — the role structure used here.
- Google SRE Book: Emergency Response
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

