Skip to main content
>_ supraj.dev
INCIDENTS · AI

Postmortem Drafter

The best postmortems are written while memory is fresh — which is exactly when nobody has energy to write them. This loop drafts the document within minutes of resolution, from the actual timeline, and leaves the judgment calls to the humans who were there.

TRIGGER
PagerDuty: incident → resolved
GATHER
war-room Slack thread, alert timeline, deploy log ±2h
REASON · AI
reconstruct blameless timeline, draft impact & contributing factors
FLAG
uncertain claims marked [VERIFY] — never stated as fact
ACT
draft doc in /postmortems + link to incident channel
01 — INSTALL
brew install supraj/tap/pm-drafter
pm-drafter init --pagerduty $PD_TOKEN --slack $SLACK_TOKEN
02 — CONFIGURE

Map your services to their war-room channels and deploy pipelines. The template is yours to edit.

# drafter.yaml
trigger:
  pagerduty: incident.resolved
gather:
  slack_channel: from_incident   # war-room
  deploys: github-actions ±2h
  metrics: [error_rate, p99]
draft:
  template: blameless-v2.md
  unverified_marker: '[VERIFY]'
act:
  repo: acme/postmortems
  notify: incident_channel
03 — HOW IT WORKS
01
Fires on PagerDuty resolution. It reads the war-room thread, the alert timeline, and every deploy in the ±2h window.
02
The draft follows your blameless template: timeline, impact, contributing factors, action items — with names replaced by roles.
03
Anything the AI can't verify from the record is tagged [VERIFY] inline. The incident commander reviews, edits, and publishes.
04 — EXAMPLE OUTPUT
$ pm-drafter last
[Jul 05 23:12] INC-4471 resolved (SEV-2, 34m)
  gathered: 212 slack msgs · 3 deploys · 2 alerts
  draft: postmortems/2026-07-05-checkout-latency.md
  flagged: 2 × [VERIFY]
  → posted to #inc-4471 for review