Automation · IT and security
How to build incident to resolution
The incident is over and nobody can reconstruct when it started, who was paged, or what was said to customers. Here is how an incident process that records itself actually works, the prompts that build it, and what running it demands.
Built with Tray Headless
- System Datadog
- Step Declare
- Step Assemble channel
- Step Timeline from events
- System Statuspage
Declaring is one action that creates everything else, and the timeline is assembled from events rather than remembered afterwards.
The short answer
What is an incident to resolution workflow?
There are four parts to incident to resolution: declaring cheaply so nobody hesitates, assembling the channel and roles in one action, building the timeline from system events instead of from memory, and making the postmortem and its actions unavoidable. What sinks most attempts is the timeline. Reconstructing what happened from Slack scrollback a week later produces a story rather than a record, and the times are always wrong in the direction that flatters everybody.
What matters here
- Make declaring cheap. If declaring feels like a big deal people wait, and the waiting is the expensive part.
- Build the timeline from events as they happen. Reconstructing it later produces a story, and the times always flatter.
- Separate detect, acknowledge, mitigate and resolve. One duration hides which part is actually slow.
- Update customers on a cadence, even when there is nothing new. Silence is read as nothing being done.
- Track action items to closure. A postmortem whose actions are never done is a document, not a control.
Who this is for
You run engineering operations, SRE or IT. Incidents are handled well and recorded badly, and the postmortem is written from Slack scrollback by whoever has time.
How it works in practice
From something breaking to the record being trustworthy, in order.
- 1
Declaring is one action from anywhere
A command in chat or a click from an alert. Anything heavier and people wait to see if it recovers.
- 2
The channel, roles and record are created together
Incident commander, comms lead and scribe assigned from the rota, not volunteered for mid-incident.
- 3
The timeline builds itself from events
Alerts, deploys, status changes and key messages, timestamped as they happen.
- 4
Customer updates run on a cadence
Every thirty minutes for a severity one, whether or not there is news, because silence reads as inaction.
- 5
Resolution captures four separate times
Detected, acknowledged, mitigated, resolved. One number hides which part was slow.
- 6
The postmortem is created automatically with the timeline in it
Draft populated, owner assigned, due date set, and actions tracked to closure.
What incident response is made of
Four parts, and the third is the one that makes the other three trustworthy.
Cheap declaration
One action, from chat or an alert. Every gate you add is time spent deciding whether this counts.
One-action assembly
Channel, roles, bridge, status page and record created together, from a rota rather than by asking.
An event-built timeline
Assembled as it happens from alerts, deploys and status changes. Memory is not a source.
An unavoidable postmortem
Draft created on resolution with the timeline already in it, an owner, and action items tracked until closed.
The Tray Headless prompts
Paste these into Claude Code or Codex with the Tray Headless plugin installed. Each stage runs on its own. The systems named in them are the worked example rather than a requirement, and every prompt says so.
Once per project, run
/tray-workflows:set-workspace
to pick the workspace these build in. Point it at a sandbox first.
- 1
First, find the event sources
The timeline is only as good as the events feeding it.
Headless skills
build-workflowUse build-workflow. The systems in play are PagerDuty, Datadog, Slack, Statuspage, Jira, Zendesk and GitHub, or whatever we run in those seats. Before you plan anything, tell me which of them are already authenticated in the workspace, because I do not want a connector stubbed that I have not authenticated. I expect PagerDuty, Datadog, Slack, Jira and Statuspage. What I need from each of them: how to read alert fire and acknowledge times, how to read deploy events, how to create and update a status page incident, and how the on-call rota is queried. The rota matters most. Roles assigned from a rota happen; roles assigned by asking during an incident do not.
- 2
Make declaring one action
Every gate you add is time spent deciding whether this counts.
Headless skills
build-workflowUse build-workflow. Declaring should be a single action: a slash command in chat, or one click from an alert. Ask for exactly two things: a one-line description and a severity. Nothing else. Everything else is derived or filled in later. On declare, in one step: Create the incident channel, named consistently so it is findable Assign incident commander, comms lead and scribe from the on-call rota Open the bridge and put the link in the channel topic Create the incident record with a stable id For severity one and two, open a status page incident in investigating Do not ask who wants to be commander. Assign from the rota and let people swap. Asking wastes the first ten minutes, which are the ones that matter.
Severity can be corrected later and usually is. Making people get it right at declaration time is the most common reason declaring gets delayed.
- 3
Build the timeline from events, not memory
A reconstructed timeline is a story, and the times always flatter.
Assemble the timeline continuously, as things happen: Alerts firing, with their original timestamps Who was paged and when they acknowledged Deploys and feature flag changes in the window, which is the first question anybody asks Status page updates Messages in the channel marked as significant, by reaction or command Severity changes, with who changed it and why Never rely on somebody scrolling back afterwards. A week later the scrollback is incomplete, the timestamps get rounded, and the version that gets written is the one everybody remembers instead of the one that happened.
- 4
Update customers on a cadence
Silence is read as nothing being done.
Headless skills
tray-gotchastray-patternsUse tray-gotchas, then run customer communications on a timer: Severity one: every 30 minutes Severity two: every hour Regardless of whether there is news. "Still investigating, next update at 14:30" is an update. Prompt the comms lead when an update is due and post it to the status page. Do not auto-publish text nobody approved, and do not let the timer lapse silently. Also handle: linking affected support tickets so the volume is visible, suppressing routine automated customer email during a severity one, and recording exactly what was told to customers and when, because that becomes the contractual record.
- 5
Capture four times, and make the postmortem unavoidable
One duration hides which part was actually slow.
On resolution, capture detected, acknowledged, mitigated and resolved as four separate timestamps. Time to acknowledge and time to mitigate are different problems with different fixes, and a single duration hides which one you have. Then create the postmortem automatically for anything at severity two or above: the draft with the timeline already in it, an owner, and a due date. Do not wait for somebody to volunteer. Track action items in the tracker the team already uses, with owners and dates, and report on them until they close. An overdue postmortem action from an incident three months ago is the most useful number in this whole workflow, and it is the one nobody produces.
- 6
Test it, then hand the severity matrix over
Because what counts as a severity one is an operational judgement.
Run the per-step schema checks and the whole-workflow audit before this touches production, and run a game day against it before trusting it in anger. Then open the same workflow in Tray Build so engineering operations can adjust the severity matrix, the update cadences and the role assignments in the visual canvas.
What it connects to
Incidents touch monitoring, people, customers and the record, all at once.
ServiceNow
Open the incident, keep status and assignment group current, and append work notes so the timeline survives the call.
Reads and writes
PagerDuty
Read who was paged and when they acknowledged, and page the roles the severity requires.
Reads and writes
Datadog
Read the alert that fired and its timestamp, which is where time to detect actually comes from.
Reads
Slack
Create the channel, assign roles, and capture messages marked as significant into the timeline.
Reads and writes
Statuspage
Publish and update customer-facing status on a cadence, and record exactly what was said and when.
Reads and writes
Jira
Create the postmortem and its action items where the team already works, and track them to closure.
Reads and writes
Zendesk
Link the tickets the incident generated, which is the honest measure of customer impact.
Reads
GitHub
Read deploys and flag changes in the window, because that is the first question anybody asks.
Reads
Same build, other stacks
The design does not change if you run something else in one of these seats. The same prompts build it against Microsoft Teams, Jira Service Desk, Google Chat or Freshservice.
Named systems are the ones most teams run, not the only ones that work. Each is an authentication in your Tray workspace, referenced by name, so the workflow never holds a credential. Where we have a connector page, the name links to it.
Running it in production
This runs at the worst possible moment, when nobody has attention to spare for tooling.
It runs on the platform, not on your laptop
Declaration, assembly and the update timer run on the same engine, at 3am, when the person who built it is asleep.
The timeline is evidence
Built from system events with original timestamps, not reconstructed. That distinction is what makes a postmortem worth reading and an incident report defensible.
Managed credentials, not secrets in a config file
Publishing to a customer status page is a public act. That credential lives in your workspace, scoped to status only, and separately revocable.
Engineering ops owns the matrix
Severity definitions, update cadences and role assignments open in Tray Build, adjusted after the game day rather than during the incident.
Action items are chased until closed
Overdue postmortem actions reported continuously. A postmortem whose actions never happen is a document, not a control.
Questions people ask
Why make declaring so cheap?
Because if declaring feels like a big deal people wait to see whether it recovers, and that waiting is the expensive part. Ask for a line of description and a severity, and let severity be corrected later.
Why build the timeline from events?
Because reconstructing it from chat scrollback a week later produces a story rather than a record. The timestamps get rounded and the version written is the one everybody remembers.
Why four timestamps, not one duration?
Because time to acknowledge and time to mitigate are different problems with different fixes. A single incident duration hides which one you actually have.
Should customer updates go out when there is no news?
Yes. "Still investigating, next update at 14:30" is an update. Silence during an outage is read as nothing being done, and it generates the support volume you least want.
What is the most useful number this produces?
Overdue postmortem action items from incidents months ago. It is the clearest signal that the process is a document instead of a control, and almost nobody produces it.
Vibe-coding app guides
Vibe-code an entire app with Helix
This moves the data between systems. It does not give anybody a screen to work in. Build that app in Claude Code, Codex or Cursor, then deploy and run it governed on Tray Helix. Same kind of guide, same kind of prompts.
How to build an incident and postmortem tracker (opens helix.tray.ai in a new tab)
Further reading
Background on the same subject, for the case rather than the build.
Related guides
Customer success
How to build support ticket routing
Route on the skill needed and the account, not on who is free. Derive priority from contract and impact, and time the clock from the customer. The prompts.
IT and security
How to build security alert triage
Enrich before a human sees it, suppress the known-benign, escalate on asset value, and measure what you closed rather than what fired. The prompts.
IT and security
How to build vulnerability to ticket routing
Rank on exploitability and exposure rather than CVSS, group by fix instead of by finding, and route to whoever ships the patch. The prompts that build it.
Last reviewed September 2026.