CI Incident Response
SkillMonitoring & opsLets your agent walk through a CI incident response: pull its status, find the right runbook, and brief you.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the CI Incident Response skill
About this capability
Drive CI incident response in camunda/camunda. Use when asked to resolve, respond to, or drive a CI incident by ID. Full incidents only, not alerts.
What this skill tells your AI
The instructions your AI receives, as published by camunda/camunda in .claude/skills/ci-incident/SKILL.md and read by ahel’s review.
Guides a responder through a CI incident in camunda/camunda. Pulls live state from incident.io,
context from the incident's Slack channel, the matching runbook from
docs/monorepo-docs/ci-runbooks.md, and the process
from docs/monorepo-docs/processes.md.
Prerequisites
- incident.io MCP — required. Verify the
mcp__incident-io__incident_showtool is available. If not, tell the user to configure the incident.io MCP server and stop. - Slack MCP — preferred but optional. If
mcp__*__slack_read_channelis not available, warn the user that Slack context will be skipped and continue.
Throughout this skill, MCP tools are referenced by their short verb (incident_show,
slack_read_channel); the actual identifier depends on which MCP server is configured.
Scope
Full incidents only. If the user passes an alert ID (or anything that isn't an incident), stop and ask for the incident ID.
Procedure
Step 1 — Parse the incident ID
Read the incident ID from the user's request. If it is missing, ask the user for it before proceeding. Do not guess from recent context.
Step 2 — Pull incident state
Call incident_show with the ID and include: ["investigation", "postmortem", "roles", "custom_fields"].
Extract and remember:
- Title, severity, status, opened-at
- Role assignments (lead, comms, etc.)
- Active alert name(s)
- Incident's Slack channel reference (channel ID or name)
- Any existing investigation / postmortem content
Step 3 — Pull Slack context
If the Slack MCP is available, read recent messages from the incident's Slack channel
(slack_read_channel, ~50 most recent). Summarize for yourself:
- What has already been tried
- Who is actively engaged
- Timestamp of the last status update
- Any blockers or open questions raised
If the Slack MCP is not available, note this in the brief and continue.
Step 4 — Search for similar incidents
Check for a recurring pattern before matching a runbook:
incident_listwithquery: "<title or active alert name>", scoped to resolved/closed incidents, excluding the current one.gh issue list --repo camunda/camunda --search "<alert or job/workflow name>"for existing tracking (flake tickets, deferred fixes, runbook follow-ups).
If found, pull its postmortem (incident_show with include: ["postmortem", "investigation"])
and note the prior root cause, fix, and whether its follow-up was completed. If the same root
cause recurs despite that fix, flag it explicitly — the fix didn't hold.
Step 5 — Match a runbook
Read docs/monorepo-docs/ci-runbooks.md.
Match the incident title and active alert name(s) against the ### headings under both
Alert Runbooks and Incident Runbooks sections. Fuzzy match is fine (e.g. alert
"Merge Queue High Failure Rate" → runbook heading of the same name).
- One match: load its Troubleshooting and Solutions subsections.
- Multiple matches: list them and ask the user which applies.
- No match: list the available runbook headings and ask which applies, or confirm this is a novel incident with no runbook.
Step 6 — Locate the current process step
Read the CI Incident Management section of docs/monorepo-docs/processes.md.
Based on incident status + Slack history, determine which step the incident is in:
- Identification
- Response
- Follow-Up
This tells you what action is expected next (e.g. assign roles, post update, create follow-ups).
Step 7 — Brief the responder
In a single concise message, give the responder:
- State: title, severity, status, lead, opened-at
- Slack TL;DR: what's been tried, who's active, last update time
- Similar incidents: past occurrences found (with what fixed it last time), or none found
- Runbook: matched heading + the Troubleshooting steps
- Process step: which of the three steps the incident is in, and what's expected
- Next action: one concrete recommendation
Then wait for the responder to direct the next move.
Step 8 — Drive the response
Work through the runbook with the responder. Prioritize mitigation (stopping the bleeding) over root causing and resolution. Use relevant CI skills from this repository, e.g. for troubleshooting. Specific rules:
- Status updates: always use
incident_updatefrom the incident.io MCP. Do not post directly to the incident's Slack channel — incident.io syndicates updates to Slack. - Slack MCP usage: read-only by default. Only post via Slack MCP if the responder explicitly
asks to message a channel other than the incident channel (e.g.
#top-monorepo-ci). - Confirm wording: never send an
incident_updatewithout showing the draft to the responder and getting explicit confirmation. - Don't change state silently: never change severity, status, or role assignments without the responder explicitly instructing it.
- Don't stop at mitigation — finish root causing: alerts can self-resolve mid-investigation because of how failure-event alerting is implemented; a quiet alert doesn't mean the incident is understood. Keep investigating until the root cause is known.
- Keep incident open until all attached alerts are resolved: check for attached alerts that are still firing, and reject resolving or closing the incident if any are.
Step 9 — Wrap-up
When the incident moves to resolved or closed:
- Re-read the Follow-Up subsection of
processes.md. - Prompt the responder to create follow-ups via
follow_up_createfor each action item raised during response (postmortem tasks, runbook updates, fixes deferred during the incident). - Offer to draft each follow-up's title and description from the Slack history and runbook gaps.
Guardrails
- Do not invent runbook content. If no runbook matches, say so.
- Do not assume the responder has tried something just because it's in the runbook — ask.
- If the runbook references commands or links that no longer exist in the repo, flag it as a follow-up rather than improvising.
Signals
- GitHub stars
- 4k
- Forks
- 818
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
ci-incident- Source
- github.com/camunda/camunda