Help us improve
Share bugs, ideas, or general feedback.
From incident-postmortem
Generates an SRE-style incident postmortem markdown document from a cached timeline and source materials. Used in Phase 4 of the incident-postmortem workflow.
npx claudepluginhub incubyte/ai-pluginsHow this skill is triggered — by the user, by Claude, or both
Slash command
/incident-postmortem:postmortem-writerThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Take a cached timeline (already built by `incident-timeline-builder`) and the original source materials, and produce the full postmortem document as a single block of markdown. The output uses the Google-SRE-style blameless template by default; future plugin releases may add other templates, but v1.0.0 ships only this one.
Guides SREs through postmortem creation: builds timeline, action items, and drafts a Google Doc from incident context.
Generates a blameless incident postmortem with timeline, root cause, impact summary, and action items from rough notes.
Guides writing blameless postmortems for SEV1/SEV2 incidents using templates, timelines, root cause analysis, and action items to foster learning.
Share bugs, ideas, or general feedback.
Take a cached timeline (already built by incident-timeline-builder) and the original source materials, and produce the full postmortem document as a single block of markdown. The output uses the Google-SRE-style blameless template by default; future plugin releases may add other templates, but v1.0.0 ships only this one.
This skill writes prose. It does not gather evidence (the agent does that in Phase 1), reconstruct the timeline (incident-timeline-builder does that in Phase 2), or render the output to the user (the agent does that in Phase 5). Its job is the document.
The skill runs without user interaction. It produces a single markdown document as its only output.
references/postmortem-template.md). Sections with no source data collapse into a one-line placeholder rather than disappearing — the structure is intentional even when data is sparse.[VERIFIED], [OBSERVED], [INFERRED], [UNKNOWN]. The skill applies these inline where claims are made (especially in Root Cause and Contributing Factors).issuekit:prose-style on it before Phase 5 renders it.Read references/postmortem-template.md before generating. It is the canonical section catalog: header structure, what belongs in each section, when to emit a placeholder vs. omit a section, and the section-by-section writing rules.
Do not start writing until the reference is loaded.
The caller passes a payload describing the incident, the cached timeline (a markdown table from incident-timeline-builder), and the source materials in their original (un-summarized) form so the writer can quote directly. The shape is tracker-agnostic — both Azure DevOps and Jira payloads use the same field names.
{
"incident": {
"id": "12345", // or "INC-456" for Jira
"url": "...",
"title": "...",
"created_at": "2026-04-29T14:32:00Z",
"resolved_at": "2026-04-29T16:08:00Z",
"severity": "1 - Critical", // or "Sev-1"
"reporter": "@alice",
"responders": ["@bob", "@carol"],
"customer_impact_summary": "All US-region property managers could not process rent payments for 96 minutes."
},
"timeline_markdown": "| Time (UTC) | Event | Source | Tag |\n| ... |",
"source_materials": {
"chat_messages": [...], // Slack or Teams
"tracker_events": [...], // AzDO work-item revisions or Jira issue history
"datadog_logs": [...],
"merged_prs": [...] // Azure Repos or any Git provider
},
"config": {
"postmortem_template": "google-sre",
"include_action_items": true,
"include_timeline_evidence_links": true
}
}
The incident block fields beyond id, url, and title are optional. The skill fills missing fields with [UNKNOWN] placeholders rather than guessing. customer_impact_summary in particular is often a synthesis the agent provides; when absent, the skill assembles a draft from the timeline's first user-visible event and tags it [INFERRED].
The skill runs four ordered steps.
Load references/postmortem-template.md. The reference is the source of truth for section headings (verbatim), section order, per-section content rules, and placeholder text for empty sections.
Render the YAML-style header block at the top of the document with these fields (in this order):
# Incident Postmortem: {title} ({YYYY-MM-DD})
**Status:** Draft
**Author:** {author display name or "Unknown"}
**Severity:** {severity}
**Duration:** {created_at} to {resolved_at} ({duration in minutes or hours})
**Detection:** {how the incident was detected — derived from the first non-deploy event in the timeline, or [UNKNOWN] when not derivable}
**Customer impact:** {customer_impact_summary, or a one-line synthesis from the timeline}
Set Status: Draft always; the user changes it to Approved or Reviewed after the doc has been read by stakeholders.
Walk the section catalog in references/postmortem-template.md in order and emit each section. For each section, apply the per-section content rules from the reference:
[VERIFIED], [OBSERVED], [INFERRED], or [UNKNOWN] inline. Never present unverified analysis as confirmed root cause.timeline_markdown for Timeline; build References from the source materials' URLs.Concatenate the header and the populated sections into a single markdown document. Add no preamble, no trailing summary, no commentary. The output is the document; the agent or user will render or save it.
When config.include_action_items is false, omit the Action Items section header entirely and adjust the section numbering in the table of contents (when one is present, which the v1.0.0 template doesn't ship by default).
When config.include_timeline_evidence_links is false, the Timeline section's table is rendered with an empty Source column. (The cached timeline_markdown already includes the source links; the skill must rewrite the table to drop the column when this flag is false. Use the table's column-count as the only signal that needs adjusting.)
These are hard rules. Each one prevents a failure mode that has been observed on real postmortem drafts.
[INFERRED] or [OBSERVED] tags. The Root Cause section is reserved for [VERIFIED] causes — anything else belongs lower.timeline_markdown verbatim. Do not add events the timeline-builder didn't produce.customer_impact_summary is missing and the timeline doesn't ground a count, write [UNKNOWN] or "scope not measured at incident time" rather than guess.These rules apply to everything this skill produces.
issuekit:prose-style on the final output (Phase 4); these rules are the floor.