Checkout incident mitigated, monitoring
From 13:52, about 8% of card payments failed in the EU. A rollback at 14:31 brought failures back to normal; the team watches for an hour before resolving.
Every 30 minutes during an incident: the incident channel boiled down to status, customer impact, a timeline and the follow-ups for the postmortem.
What lands on your board
From 13:52, about 8% of card payments failed in the EU. A rollback at 14:31 brought failures back to normal; the team watches for an hour before resolving.
"What is the status?" gets asked a dozen times in every incident channel, and the person who knows is the one fixing it. Writing stakeholder updates during an incident is a job of its own, and it usually falls to whoever is least able to stop.
The agent reads the incident channel from its first message, builds a timeline of what was noticed, tried and changed, states the impact and status in two lines, and keeps a list of the follow-ups people mentioned. The same card updates every half hour until the channel says resolved, and the last version is the first draft of the postmortem timeline.
conversations.list with types=public_channel,private_channel and exclude_archived=true, keeping channels whose name starts with your incident prefix (such as inc-) and whose created is within 7 days. Read each one's topic from conversations.info and its pins from pins.list.
conversations.history from the first message, plus conversations.replies for every thread. Reading it in full each run keeps the timeline consistent from one update to the next.
Pull out the first report, the declaration and severity, each mitigation tried, deploys or rollbacks, customer messages and the all-clear. Convert each ts to local time and keep each event to one sentence naming who did it.
Impact: who is affected, how, and since when. Status: investigating, identified, mitigated, monitoring or resolved, from the latest messages and the channel topic. Follow-ups: messages that say "follow-up", "action item" or "after this", with an owner where one was named.
Use the channel name as the item_key, work_state: in_progress until resolved and done after. Stop updating an hour after the channel declares it resolved.
With BRIEFKIN_TOKEN set, the agent sends the result as one card that updates in place every run. Without it, you get the report in the chat.
Pick your agent, where the data comes from and how to schedule it; the commands below follow.
One command. It puts the SKILL.md in ~/.claude/skills and in ~/.agents/skills, which Codex, Cursor, Gemini CLI, Copilot CLI and OpenCode read too.
shellcurl -fsSL https://briefkin.dev/skills/slack-incident-summary/install | shAsk Claude Code:
promptRun the slack-incident-summary skillOr paste the prompt instead of installing:
promptRead the Slack incident channel #inc-2026-10-16-checkout from its first message, including every thread (conversations.history and conversations.replies), plus its topic and pinned messages. Write a running incident summary: the status in one word (investigating, identified, mitigated, monitoring or resolved) and when it last changed; the customer impact (who, how, since when); a timeline of detection, declaration, each mitigation and the resolution, with times and names; and the follow-ups people mentioned for the postmortem, with owners where named. Use names, not user IDs, and keep the timeline to one line per event.Every 30 minutes, from cron on any machine where Claude Code is signed in:
crontab*/30 * * * * claude -p "Run the slack-incident-summary skill"Add it with crontab -e. A laptop asleep at that time runs it when it wakes if you use launchd or Task Scheduler instead; GitHub Actions works for the API route.
Connect Briefkin once with curl -fsSL https://briefkin.dev/install | sh and every run lands on your board as a report card. How setup works
SKILL.md---
name: slack-incident-summary
description: "Every 30 minutes during an incident: the incident channel boiled down to status, customer impact, a timeline and the follow-ups for the postmortem. Use when the user asks for this, or when it runs on a schedule."
---
# Slack incident summary
Every 30 minutes during an incident: the incident channel boiled down to status, customer impact, a timeline and the follow-ups for the postmortem.
"What is the status?" gets asked a dozen times in every incident channel, and the person who knows is the one fixing it. Writing stakeholder updates during an incident is a job of its own, and it usually falls to whoever is least able to stop.
The agent reads the incident channel from its first message, builds a timeline of what was noticed, tried and changed, states the impact and status in two lines, and keeps a list of the follow-ups people mentioned. The same card updates every half hour until the channel says resolved, and the last version is the first draft of the postmortem timeline.
## Two ways to get the data
Use the API or MCP route when you have an MCP server, a CLI or an API token for the app. Otherwise, if you can drive a browser the user is signed in to (Claude in Chrome, a Playwright or Chrome DevTools MCP server), use the browser route. Say which one you used.
## Route A: API or MCP server
### What you need
- A Slack app with `channels:read`, `channels:history`, `groups:read`, `groups:history`, `pins:read` and `users:read`, invited to incident channels, or a Slack MCP server or connector acting as you.
- Your incident channel naming convention, for example `inc-` followed by a date and a short name.
If something is missing, say what and stop; do not invent numbers.
### Steps
1. **Find open incident channels** (Slack): `conversations.list` with `types=public_channel,private_channel` and `exclude_archived=true`, keeping channels whose name starts with your incident prefix (such as `inc-`) and whose `created` is within 7 days. Read each one's topic from `conversations.info` and its pins from `pins.list`.
2. **Read the whole channel** (Slack): `conversations.history` from the first message, plus `conversations.replies` for every thread. Reading it in full each run keeps the timeline consistent from one update to the next.
3. **Build the timeline**: Pull out the first report, the declaration and severity, each mitigation tried, deploys or rollbacks, customer messages and the all-clear. Convert each `ts` to local time and keep each event to one sentence naming who did it.
4. **State impact, status and follow-ups**: Impact: who is affected, how, and since when. Status: investigating, identified, mitigated, monitoring or resolved, from the latest messages and the channel topic. Follow-ups: messages that say "follow-up", "action item" or "after this", with an owner where one was named.
5. **Post one card per incident**: Use the channel name as the `item_key`, `work_state: in_progress` until resolved and `done` after. Stop updating an hour after the channel declares it resolved.
## Route B: the browser
### What you need
- Signed in to the Slack workspace as a member of the incident channels; a private incident channel needs an invite before anything shows.
If something is missing, say what and stop; do not invent numbers.
### Steps
Start at https://app.slack.com/client. The user is signed in already; never type passwords or codes, and ask if a sign-in page appears.
1. **Find the open incident channels**: In the workspace, open the channel browser (**More > Channels**, or click **Channels** in the sidebar) and type `inc-` in the search box. Open each channel created in the last 7 days whose topic does not say resolved.
2. **Read the topic and pins**: Click the channel name at the top to read its topic and description, then open **Pins** from the channel header; the declaration, the severity and the incident commander are usually there.
3. **Read the channel from the start**: Scroll to the top until **This is the very beginning of the channel** shows, then read down to the latest message, opening every **N replies** thread in the side panel. Reading all of it each time keeps the timeline consistent between updates.
4. **Build the timeline and the status**: Note the first report, the declaration and severity, each mitigation tried, deploys or rollbacks, customer messages and the all-clear, one sentence each with the time shown on hover and the person. Status is investigating, identified, mitigated, monitoring or resolved, from the latest messages and the topic.
5. **Collect the follow-ups and write**: Messages that say "follow-up", "action item" or "after this" go on the follow-up list with an owner where one was named. Write impact in two lines, the status with when it last changed, the timeline and the follow-ups.
Note: A long incident channel with many threads takes minutes to read in a browser, so this route fits an update on demand rather than every 30 minutes. Message times show in your Slack time zone; say which one the timeline uses.
## The report
- **Status** in one word, with the time it last changed.
- **Impact**: who is affected, how, and since when.
- **Timeline**: detection, declaration, each mitigation and the resolution, with times and names.
- **Follow-ups** for the postmortem, with owners where named.
- **Who is on it**: the incident commander and the people active in the channel.
## Post it to Briefkin
When `BRIEFKIN_TOKEN` is set, or `~/.config/briefkin/env` exists (the installer from https://briefkin.dev/docs writes it), also send the result to the user's Briefkin board as one card. Keep the `item_key` the same on every run so the card updates in place, use a new `event_id` per run, and put today's real numbers in place of the example ones. If the request fails, say so once and carry on.
```bash
[ -n "${BRIEFKIN_TOKEN:-}" ] || . ~/.config/briefkin/env
curl -sS -X POST "${BRIEFKIN_URL:-https://briefkin.dev}/v1/events" \
-H "authorization: Bearer $BRIEFKIN_TOKEN" \
-H "content-type: application/json" \
-d @- <<'JSON'
{
"v": 1,
"event_id": "slack-incident-summary/<date of this run, e.g. 2026-10-16>",
"item_key": "slack-incident-summary",
"project": "Acme",
"source": "Slack incident summary skill",
"kind": "update",
"title": "Checkout incident mitigated, monitoring",
"summary": "From 13:52, about **8% of card payments** failed in the EU. A rollback at 14:31 brought failures back to normal; the team watches for an hour before resolving.",
"work_state": "in_progress",
"widget": [
{
"type": "Steps",
"props": {
"items": [
{
"label": "13:52 Alert on payment failures in eu-west",
"state": "done",
"note": "Picked up by Ana, on call"
},
{
"label": "14:03 Declared SEV-2, Kofi is incident commander",
"state": "done"
},
{
"label": "14:12 Cause narrowed to the 13:40 payments-api deploy",
"state": "done"
},
{
"label": "14:31 Rolled back payments-api to v3.18.4",
"state": "done",
"note": "Failure rate under 0.5% by 14:40"
},
{
"label": "Monitoring until 15:40, then resolve",
"state": "active"
},
{
"label": "Email to affected merchants",
"state": "pending",
"note": "Lena is drafting it with Support"
}
]
}
},
{
"type": "Table",
"props": {
"columns": [
"Follow-up",
"Owner"
],
"rows": [
[
"Add a canary stage to payments-api deploys",
"Rui"
],
[
"Alert on the EU card failure rate, not only the global one",
"Ana"
],
[
"Postmortem document by Tuesday",
"Kofi"
]
]
}
}
]
}
JSON
```
Widgets come from the Briefkin catalog (https://briefkin.dev/v1/catalog). Without a token, just give the user the report.
## Run it on a schedule
Suggested: Every 30 minutes (`*/30 * * * *`). From cron, with the agent signed in on that machine:
```bash
*/30 * * * * claude -p "Run the slack-incident-summary skill"
# Codex: codex exec, Gemini CLI: gemini -p, Copilot CLI: copilot -p, OpenCode: opencode run
```
Or use the agent's own scheduler (Claude Code routines, Codex automations, Claude or ChatGPT scheduled tasks): https://briefkin.dev/skills/slack-incident-summary#schedule
Source: https://briefkin.dev/skills/slack-incident-summary
A Slack app with channels:read, channels:history, groups:read, groups:history, pins:read and users:read, invited to incident channels, or a Slack MCP server or connector acting as you.
Your incident channel naming convention, for example inc- followed by a date and a short name.
https://mcp.slack.com/mcp. It only works through Slack apps that Slack has registered, so use the Slack connector in Claude or another approved client, and your workspace admin may need to approve it (docs). It searches messages and files, reads channels and threads, and can send messages.SLACK_BOT_TOKEN (xoxb-) or SLACK_USER_TOKEN (xoxp-). Read scopes: channels:history, channels:read, groups:history for private channels, users:read, and search:read (user tokens only) for search. A bot reads only the channels it was invited to.Leave out chat:write unless the skill should post back into Slack; with history and read scopes alone, the app can't post anything.
No, it only reads. Posting the summary back is a small change (chat.postMessage with chat:write), but an extra bot message every 30 minutes adds to the noise the summary is meant to cut, so it stays off by default.
The timeline and follow-ups are the raw material. Once the incident is resolved, ask the agent to turn the last summary into your postmortem template; the root cause and what to change still need a person who was there.
No. The skill runs with your own agent and gives you the report in the chat. With a Briefkin token set, each run also posts it to your board as a report card, so you can glance at it instead of asking again.
Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot CLI, OpenCode, Windsurf and Amp all read SKILL.md files. The install command puts it in ~/.claude/skills and ~/.agents/skills, where they look. ChatGPT, the Claude app and Grok take the prompt instead. Pick your agent under "Install and run it" and the commands change to match.
Yes. Switch the data source to "Your browser" and the steps change to the Slack pages themselves: the agent opens app.slack.com/client in a browser you are signed in to and reads the numbers off the page. Claude Code, Codex, Cursor, Claude app and ChatGPT can drive a browser out of the box; Gemini CLI, Copilot CLI and OpenCode need a Playwright or Chrome DevTools MCP server first. It is slower than the API and needs you signed in, so it suits a report you run by hand or from a scheduler on your own computer.
Skills are free to use with any agent. Briefkin is where their results land: one board for every report, number and question your agents send, with a ping when something needs you.
Free during the open beta. No card.