- Home
- Skills
- Technical Documentation
- Postmortem Forge: Incident Postmortem & RCA
More screenshots
Works with the AI Agents you already use
Postmortem Forge: Incident Postmortem & RCA
Build a source-linked incident timeline from Slack exports, PagerDuty JSON and logs. Review the milestones, calculate TTD/TTM, then lint the postmortem for missing owners, dates and verification.
$5
Postmortem Forge: Incident Postmortem & RCA
Example session with this skill installed
Use the included synthetic inventory incident exports to draft a blameless postmortem. Show the source-linked timeline, explain which milestone IDs were reviewed, and calculate TTD and TTM without guessing missing facts.
- Read your context and instructions
- Compiled the postmortem forge
Reproducible synthetic example, not a production case study. This is the complete captured JSON output from the packaged timeline script with examples/milestones.json. Milestone choices and the finished report are included in examples/README.md and examples/postmortem.md.
{
"events": [
{
"id": "E001",
"time": "2026-10-17T14:02:08.000Z",
"text": "2026-10-17 14:02:08 UTC deploy: inventory-api release b7c41a2 (PR #681)",
"kind": "change",
"sources": [
"examples/raw/deploy.log:1"
]
},
{
"id": "E002",
"time": "2026-10-17T14:03:00.000Z",
"text": "2026-10-17 14:03:00 UTC synthetic trace: first inventory reservation timeout",
"kind": "note",
"sources": [
"examples/raw/deploy.log:2"
]
},
{
"id": "E003",
"time": "2026-10-17T14:10:12.000Z",
"text": "triggered_at: inventory-api p99 latency above 800ms",
"kind": "detection",
"sources": [
"examples/raw/pagerduty.json#/alerts/0/triggered_at"
]
},
{
"id": "E004",
"time": "2026-10-17T14:11:30.000Z",
"text": "acknowledged_at: inventory-api p99 latency above 800ms",
"kind": "note",
"sources": [
"examples/raw/pagerduty.json#/alerts/0/acknowledged_at"
]
},
{
"id": "E005",
"time": "2026-10-17T14:15:00.000Z",
"text": "[2:15 PM] Eli: maybe it is Redis? checking connection counts",
"kind": "hypothesis",
"sources": [
"examples/raw/slack-export.txt:2"
]
},
{
"id": "E006",
"time": "2026-10-17T14:20:00.000Z",
"text": "[2:20 PM] Noor: Redis healthy; reject the Redis hypothesis",
"kind": "hypothesis",
"sources": [
"examples/raw/slack-export.txt:5"
]
},
{
"id": "E007",
"time": "2026-10-17T14:25:00.000Z",
"text": "[2:25 PM] Noor: flipped inventory_cache_v2 off; checking effect",
"kind": "note",
"sources": [
"examples/raw/slack-export.txt:4"
]
},
{
"id": "E008",
"time": "2026-10-17T14:31:00.000Z",
"text": "[2:31 PM] Eli: mitigation verified: inventory latency under 500ms for 6 minutes",
"kind": "note",
"sources": [
"examples/raw/slack-export.txt:3"
]
},
{
"id": "E009",
"time": "2026-10-17T14:47:00.000Z",
"text": "[2:47 PM] Noor: confirmed cache TTL was zero after PR #681; schema allowed zero",
"kind": "diagnosis",
"sources": [
"examples/raw/slack-export.txt:1"
]
},
{
"id": "E010",
"time": "2026-10-17T15:03:22.000Z",
"text": "2026-10-17 15:03:22 UTC deploy: inventory-api reverted PR #681",
"kind": "mitigation",
"sources": [
"examples/raw/deploy.log:3"
]
},
{
"id": "E011",
"time": "2026-10-17T15:19:40.000Z",
"text": "resolved_at: inventory-api p99 latency above 800ms",
"kind": "note",
"sources": [
"examples/raw/pagerduty.json#/alerts/0/resolved_at"
]
}
],
"milestones": {
"started": {
"id": "E002",
"time": "2026-10-17T14:03:00.000Z",
"sources": [
"examples/raw/deploy.log:2"
]
},
"detected": {
"id": "E003",
"time": "2026-10-17T14:10:12.000Z",
"sources": [
"examples/raw/pagerduty.json#/alerts/0/triggered_at"
]
},
"diagnosed": {
"id": "E009",
"time": "2026-10-17T14:47:00.000Z",
"sources": [
"examples/raw/slack-export.txt:1"
]
},
"mitigated": {
"id": "E008",
"time": "2026-10-17T14:31:00.000Z",
"sources": [
"examples/raw/slack-export.txt:3"
]
},
"resolved": {
"id": "E011",
"time": "2026-10-17T15:19:40.000Z",
"sources": [
"examples/raw/pagerduty.json#/alerts/0/resolved_at"
]
}
},
"metrics": {
"ttd": {
"seconds": 432,
"from": "E002",
"to": "E003"
},
"ttcd": {
"seconds": 2208,
"from": "E003",
"to": "E009"
},
"ttm": {
"seconds": 1248,
"from": "E003",
"to": "E008"
},
"duration": {
"seconds": 4600,
"from": "E002",
"to": "E011"
}
},
"warnings": []
}
Connects securely to your tools. The creator never sees your data.
About this skill
An incident report needs evidence you can check. Postmortem Forge reads local exports, keeps the source beside each event, and calculates durations after you review the milestones.
The important boundary: a deploy does not prove when impact started. A rollback attempt does not prove recovery. Suggested tags stay suggestions, and missing milestones return unknown.
What you get:
- A UTC timeline builder for timestamped text, Slack JSON exports, PagerDuty lifecycle records and deploy logs. It preserves dates and seconds, handles explicit timezone offsets, sorts events and merges exact duplicates without dropping their sources.
- A Markdown report linter. Missing sections, vague tasks, and action items without an owner, a valid ISO due date or a verification step fail the check. Blame language, timeline gaps, metric presence and Prevent/Detect/Mitigate coverage produce review advisories.
- A contributing-factors playbook, report template and runnable synthetic example. The example includes the raw evidence, reviewed milestone IDs and a finished report. You can also lint a report you already wrote.
Use it for a blameless incident postmortem, root cause analysis (RCA), outage report, post-incident review (PIR), or correction-of-error (COE) draft.
The included example contains 11 events. TTD is 7m12s, measured from the first observed timeout to the alert. The flag is switched off before mitigation is verified. Those are separate events on purpose.
Requires Node.js 18+ and an agent that can run local scripts. No package installation or API keys. Scripts make no network requests; your agent's usual provider policy still applies to any evidence or output it receives.
Limits: the parser supports documented export shapes, not every vendor format. Clock-only messages require a date and UTC offset. Named timezones and daylight-saving transitions need explicit offsets. Optional masking catches common secrets, emails and IPv4 patterns, but it cannot guarantee safe sharing. Human review remains necessary.
How to use
Skills on Agensi run inside your AI agent. Copy the prompt, paste it into your agent, and it connects to Agensi and installs this skill for you. If a payment is needed, your agent shows it to you first.
Reviews
No reviews yet
Be one of the first to try it. Every listed skill passes our trust checks below.
Security scanned
Passed our 8-point scan before listing
Fresh listing
Recently published to Agensi
Money-back guarantee
Doesn't do what its page promises? You get your money back.
Trust & safety
Security scanned
Verified clean 2 days ago
- Passed all security checks, Safe to install
Requires