AI-Powered Incident Response System with Multi-Agent Investigation

incident.io · Tech · 2025 · source Agentic: yes · promotional bias: med · source-backed · extracted with prompt 0.5.4 (schema v2)

Generated from extraction.json — do not edit by hand. Every claim cites verbatim source evidence; stated means the quote directly asserts the claim, implied means it supports it indirectly.

Problem

Domain: Incident response and site reliability engineering

Incident.io needed an AI SRE product that could investigate production incidents quickly enough to help responders during the incident, while avoiding noisy, overconfident, or irrelevant recommendations in a high-pressure Slack-centered workflow.

Constraints:

Architecture

Incident.io built AI SRE around an investigation object that lives alongside each incident. An orchestration layer first gates whether there is enough information to investigate, then runs parallel searcher checks over code changes, Slack, historical incidents, and observability data. Search results become evidence-backed findings, findings become hypotheses, and the system critiques those hypotheses by generating questions. Specialized sub-agents answer those questions by drilling into metrics, traces, documentation, or other tools, then report back to the main reasoning loop. Results are progressively disclosed through Slack: a compact report in-channel, reasoning in the thread, and a richer dashboard with traces and citations. Evaluation uses post-incident time travel: after the incident closes, graders compare the AI investigation against what responders did and what actually caused the incident.

Diagram confidence: reconstructed (reconstructed from prose).

flowchart LR
  incident-record["incident-record"] --> investigation-orchestrator["investigation-orchestrator"]
  investigation-orchestrator --> context-sufficiency-gate["context-sufficiency-gate"]
  investigation-orchestrator --> searcher-checks["searcher-checks"]
  searcher-checks --> github-gitlab-search["github-gitlab-search"]
  searcher-checks --> slack-search["slack-search"]
  searcher-checks --> historical-incident-search["historical-incident-search"]
  searcher-checks --> observability-search["observability-search"]
  searcher-checks --> retrieval-indexes["retrieval-indexes"]
  retrieval-indexes --> reranking-pipeline["reranking-pipeline"]
  searcher-checks --> findings-store["findings-store"]
  findings-store --> hypothesis-builder["hypothesis-builder"]
  hypothesis-builder --> critique-question-generator["critique-question-generator"]
  critique-question-generator --> sub-agent-workers["sub-agent-workers"]
  sub-agent-workers --> findings-store
  investigation-orchestrator --> slack-report-surface["slack-report-surface"]
  slack-report-surface --> reasoning-dashboard["reasoning-dashboard"]
  slack-report-surface --> ambient-slack-monitor["ambient-slack-monitor"]
  slack-report-surface --> user-feedback-loop["user-feedback-loop"]
  investigation-orchestrator --> time-travel-evaluator["time-travel-evaluator"]
Drag to pan · scroll or use +/− to zoom · reconstructed from the source's described component topology

Components

Component Role Interacts with
incident-record The incident object that triggers and anchors an AI investigation. investigation-orchestrator, slack-report-surface
investigation-orchestrator Coordinates gated investigation flow, parallel checks, hypothesis building, critique, sub-agent dispatch, and report production. incident-record, context-sufficiency-gate, searcher-checks, findings-store, hypothesis-builder, critique-question-generator, sub-agent-workers, slack-report-surface, reasoning-dashboard
context-sufficiency-gate Prevents the system from launching a full investigation when the incident description is too vague. investigation-orchestrator
searcher-checks Parallel retrieval jobs that gather potentially relevant incident context from connected systems. github-gitlab-search, slack-search, historical-incident-search, observability-search, retrieval-indexes, reranking-pipeline, findings-store
github-gitlab-search Searches code changes and pull requests that may explain an incident. searcher-checks, retrieval-indexes
slack-search Indexes opted-in Slack channels and incident conversation context for deployment notes, human findings, and ongoing updates. searcher-checks, ambient-slack-monitor
historical-incident-search Finds prior incidents that resemble the current one. searcher-checks, retrieval-indexes
observability-search Connects to observability tools such as Datadog and Grafana to inspect logs, metrics, traces, and upstream dependencies. searcher-checks, sub-agent-workers
retrieval-indexes Postgres-backed text, tag, summary, and selective vector indexes used to build candidate result lists. searcher-checks, reranking-pipeline
reranking-pipeline Uses frontier models to shortlist and rerank candidate retrieval results in batches. searcher-checks, retrieval-indexes
findings-store Stores concrete observations backed by evidence for hypothesis construction. investigation-orchestrator, hypothesis-builder, sub-agent-workers
hypothesis-builder Builds narrative explanations of what may have caused the incident from accumulated findings. findings-store, critique-question-generator
critique-question-generator Critiques hypotheses, identifies uncertainty, and produces questions that would rule out or strengthen each hypothesis. hypothesis-builder, sub-agent-workers
sub-agent-workers Focused agents assigned one question at a time, with access to investigation context and tools such as metrics, traces, docs, and web search. critique-question-generator, observability-search, findings-store, investigation-orchestrator
slack-report-surface Posts compact investigation reports and supports conversational follow-up in the incident channel. incident-record, investigation-orchestrator, reasoning-dashboard, user-feedback-loop, ambient-slack-monitor
reasoning-dashboard Provides deeper reasoning traces, citations, hypotheses, confidence, and raw source links outside Slack. slack-report-surface, investigation-orchestrator
ambient-slack-monitor Monitors ongoing Slack conversation so human discoveries can trigger subsequent investigation turns. slack-search, slack-report-surface, investigation-orchestrator
time-travel-evaluator After incidents close, preprocesses incident history and runs graders against investigation claims, relevance, and component quality. investigation-orchestrator, user-feedback-loop
user-feedback-loop Collects delayed Slack usefulness feedback and in-channel negative feedback for the product team. slack-report-surface, time-travel-evaluator

Data flow

An alert or incident opens an AI investigation. The system waits until it has enough context, then launches searcher checks across connected systems such as GitHub/GitLab, Slack, historical incidents, and Datadog/Grafana logs, metrics, and traces. Retrieval first narrows candidates through text similarity, summaries, tags, selective embeddings, and reranking, then the investigation layer converts useful hits into findings. The main loop builds hypotheses from those findings, critiques uncertainty, fans out specific questions to sub-agents, and folds the answers back into the hypothesis. A compact Slack report, thread reasoning, and dashboard citations expose the result to responders. After the incident closes, graders and user feedback score the investigation and feed prompt, retrieval, and integration improvements.

6 supporting quotes
“when an incident is created, we will create an investigation that lives alongside it and it's like coupled to that incident.”transcript, stated
“we gate the full-on investigation flow up until the point where we're like cool we know enough now that we know the nature of the problem.”transcript, stated
“we end up in quuing a bunch of different checks in parallel and we call these our like searcher checks.”transcript, stated
“these searches are complete they feed back into what we call an assessment stage so it's at this point that we end up building kind of a list of what we call findings”transcript, stated
“Eventually, all of these agents will finish. And when they finish, they report their answer back to the main reasoning loop.”transcript, stated
“when every incident closes, we give it maybe a couple of hours and then we pre-process everything from the incident”transcript, stated

Why this architecture

Incident response demands fast, inspectable, and conservative assistance. Incident.io therefore decomposes the work into deterministic search/indexing where possible, LLM reranking where semantic judgment is useful, a gated multi-agent investigation loop for complex reasoning, and progressive disclosure in Slack to reduce noise. The post-incident evaluator exists because live incidents lack immediate ground truth, but resolved incidents provide the complete context needed to grade what the AI claimed and what responders used.

5 supporting quotes
“faced with this challenge of context window management and how you're going to quickly go through all of the resources that you have in both a time effective and a cost-effective manner”transcript, implied
“we typically either generate free from text summaries or we tag documents. So we end up taking a frontier model”transcript, stated
“the results that we're putting into the top of the funnel are deterministic which is one. And when you don't find something, your question is not like why did that vector not match”transcript, implied
“we have a very compact report that will be in the channel itself and then we'll use the thread and this additional dashboard interface we have to provide more detail.”transcript, stated
“after someone's written a postmortem, now because of all the information that people have fed into the system and we've watched how the incident progressed”transcript, stated

Models used: frontier models · GPT-4o · embedding models · large language models

Scale

Alternatives considered (roads not taken)

Run the full investigation immediately for every incident

Rejected because: The system first checks whether enough information exists; otherwise positivity bias would produce low-quality output from vague incidents.

“sometimes someone may have created an instant that just goes it's broken and you're like I can try but like you said earlier with like positivity bias that won't go well.”transcript, stated
“we gate the full-on investigation flow up until the point where we're like cool we know enough now that we know the nature of the problem.”transcript, stated

Rely primarily on vector embeddings for retrieval

Rejected because: Vectors were difficult to debug and suffered from chunking, fuzzy matching, and versioning problems, so the team shifted toward summaries, tags, text similarity, and LLM reranking.

“we walked back a lot of the vectorization. So because the vectors were so hard to debug and you have all these like issues around like how do you even know if the thing is right”transcript, stated
“we typically either generate free from text summaries or we tag documents.”transcript, stated

Put all investigation detail directly into Slack

Rejected because: Incident channels are noisy, so the product uses a compact report, thread details, and a dashboard for deeper citations.

“We always have this constant trade-off in Slack, which is we don't want to produce too much noise.”transcript, stated
“we have a very compact report that will be in the channel itself and then we'll use the thread and this additional dashboard interface we have to provide more detail.”transcript, stated

Ask responders for feedback during the incident

Rejected because: Active incidents are urgent and distracting responders with feedback requests would likely annoy them, so Incident.io waits until after resolution.

“because an incident is such essentially an urgent moment people are they don't want any distractions”transcript, stated
“once the incident is over then we'll send them a message and again we'll use Slack to do that”transcript, stated

Evaluate only the final root-cause answer

Rejected because: The team recognized that useful investigation includes ruling things out, surfacing relevant context, and providing value along the path to the cause.

“There is value in so many places that you can provide here. It is not necessarily the case that looking at a dashboard and confirming that something isn't true”transcript, stated
“Ideally, we want to be providing value at all the different levels from having like extremely accurate recausing, but also all the way along the chain.”transcript, stated

Patterns

multi-agent-orchestration (architecture)

The investigation orchestrator coordinates parallel searcher checks, hypothesis critique, and sub-agents that answer focused questions before returning to the main reasoning loop.

“we've started passing it into this multi- aent system that we've been building”transcript, stated
“we end up fanning out to a bunch of other agents where those agents have just one task and those agents are told you have this question to answer”transcript, stated

rag-retrieval (retrieval)

The system searches code changes, Slack messages, historical incidents, and observability data to ground incident hypotheses in connected operational context.

“we're engaging with our rag pipelines. We're looking at anything that we can find in your GitHub like code changes or gitlab.”transcript, stated
“We're also talking to your sack workspace. So people can go this channel over here is where people often talk about I'm about to deploy something”transcript, stated

retrieval-ranking (retrieval)

Incident.io builds broad candidate lists and reranks them with frontier models in batches, using top-k shortlists before final synthesis.

“use frontier models to then rerank them and go give me the top three of this batch of 25. and then we collate them into a final batch where we'd rerank them again”transcript, stated

tool-use-orchestration (operations)

Sub-agents and searcher checks call operational tools and data sources such as metrics, traces, Slack, GitHub/GitLab, Kubernetes docs, Datadog, and Grafana.

“those agents are told you have this question to answer here is the rest of the context from the investigation. do whatever you need to do to try and answer it.”transcript, stated
“drilling into metrics, drilling into traces, maybe even searching the web, like maybe you've asked, "Does Kubernetes even work like this?"”transcript, stated

confidence-thresholding (evidence)

The system critiques hypotheses and calibrates the assertiveness of reports based on confidence and uncertainty.

“We will dial down what we're claiming based on the level of confidence and uncertainty that we have.”transcript, stated
“Saying "here's a potential avenue you can investigate" creates a very different expectation than confidently stating a conclusion.”summary, stated

eval-driven-development (evaluation)

The team evaluates after incident closure, scores investigation claims, and uses component-level graders plus prompt eval suites to debug failures.

“we then run a ton of graders and we produce a scorecard on our investigation that goes everything that you claimed and everything that you thought was going on”transcript, stated
“we have different graders that we run on the different units of the investigation.”transcript, stated

context-compaction (context)

Large code changes and incident artifacts are summarized, tagged, shortlisted, and reranked so the reasoning loop receives relevant context instead of raw volumes of data.

“some of these code changes may be huge, like tens of thousands, hundreds of thousands lines of code”transcript, stated
“we typically either generate free from text summaries or we tag documents.”transcript, stated

human-in-the-loop-gate (control)

The system works in Slack with responders, exposes citations and uncertainty, and collects human feedback rather than autonomously fixing production incidents.

“So the behavior we see usually is people will scan the report and then they'll have an immediate intuition about hey this is actually where I want to take the conversation next or this is the interesting aspect of it.”transcript, stated
“once the incident is over then we'll send them a message and again we'll use Slack to do that”transcript, stated

observability-tracing (operations)

Incident investigations include connections into logs, metrics, traces, Datadog, and Grafana so hypotheses can be tested against operational signals.

“connections to data dog and graphana. And that's where we're looking at your connections into logs metrics and traces”transcript, stated

data-quality-loop (learning)

Post-incident evaluation and missing-integration analysis reveal which data sources or permissions would have improved investigations.

“we're looking around and going what happened inside of the incident in a tool that we don't have access to.”transcript, stated
“actually had you given us access then we would have been able to do a much better job of this investigation.”transcript, stated

Tradeoffs

Gate investigation start based on available context

Chose wait until the incident has enough information over force an investigation from a vague incident stub.

Rationale: Gating avoids positivity-bias output and keeps investigation quality higher when responders most need trustworthy help.

“sometimes someone may have created an instant that just goes it's broken and you're like I can try but like you said earlier with like positivity bias that won't go well.”transcript, stated
“we gate the full-on investigation flow up until the point where we're like cool we know enough now that we know the nature of the problem.”transcript, stated

Use hybrid deterministic retrieval plus LLM reranking

Chose text summaries, tags, conventional Postgres indexing, selective embeddings, and reranking over heavy reliance on pure vector similarity.

Rationale: Hybrid retrieval preserves semantic ranking where it helps while making failed searches easier to inspect and debug.

“landed on a combination of honestly text similarity, LLM summarization and vector embeddings”transcript, stated
“it's a lot simpler and it works a lot better for us and yeah it yeah that's what we're going with nowadays.”transcript, stated

Progressively disclose incident findings

Chose compact Slack report, thread reasoning, and dashboard citations over putting all findings directly into the incident channel.

Rationale: Responders need immediate signal without losing the ability to inspect evidence and reasoning when they have time.

“we don't want to produce too much noise. Already these are noisy spaces.”transcript, stated
“we have a very compact report that will be in the channel itself and then we'll use the thread and this additional dashboard interface we have to provide more detail.”transcript, stated

Evaluate after incident closure

Chose time-travel scorecards and graders after the incident has resolved over requiring live ground truth or only human-labeled evaluations.

Rationale: Resolved incidents naturally reveal the cause, actions, and responder behavior needed to score investigation usefulness at scale.

“if we choose to evaluate our investigation after the incident has closed, potentially after someone's written a postmortem”transcript, stated
“allows us to even without us having humans generating this like ground truth data. We can do a really good job of evaluating the system”transcript, stated

Let agents handle repeat monitoring tasks

Chose agent callback tasks that report only when something changes over having humans refresh status pages or metrics repeatedly.

Rationale: AI agents are well-suited for repetitive monitoring work that is valuable but tedious for responders during incidents.

“ideally we'd be looking at this status page every single minute or be checking this metric every five minutes”transcript, stated
“you can assign agents to do those tasks and then they can report back only if something has changed.”transcript, stated

Gotchas (what bit them)

Vague incident reports can trigger positivity-bias output if the investigation starts too early.

Root cause: LLMs tend to produce requested output even when the available incident context is insufficient.

Resolution: Incident.io gates the full investigation until the system knows enough about the nature of the problem.

“sometimes someone may have created an instant that just goes it's broken and you're like I can try but like you said earlier with like positivity bias that won't go well.”transcript, stated
“we gate the full-on investigation flow up until the point where we're like cool we know enough now that we know the nature of the problem.”transcript, stated

Pure vector retrieval was hard to debug under incident-response pressure.

Root cause: Embedding matches, chunking behavior, and vector similarity failures are less inspectable than tags and text summaries.

Resolution: The team reduced reliance on vectors and moved toward text summaries, tagged keywords, conventional indexing, and model reranking.

“because the vectors were so hard to debug and you have all these like issues around like how do you even know if the thing is right”transcript, stated
“You're just looking at the tags and you're going why did this document not have the tag that I was looking for?”transcript, stated

Large context windows did not remove context-management work.

Root cause: Incident evidence can include huge code changes and many operational artifacts; long context windows still suffer from context rot.

Resolution: Incident.io preprocesses, summarizes, tags, and reranks candidate context before reasoning over it.

“code changes may be huge, like tens of thousands, hundreds of thousands lines of code”transcript, stated
“there's still context rot and like the more we can manage that context the better.”transcript, stated

Technically real findings can still be harmful if they are irrelevant.

Root cause: Modern frontier models hallucinate less often, but false positives and misleading relevance can distract responders during critical incidents.

Resolution: The team tunes for signal over noise, confidence-calibrated language, automated evals, and feedback loops.

“at the top of the list of priorities that we have is making sure that this thing is rock solid and reducing these ideas of false positives.”transcript, stated
“we're trying to tune ourselves to be extraordinarily allergic to anything that we say that would send anyone down the wrong path.”transcript, stated

Prompts can overfit to the builder's own operational context.

Root cause: Engineers may encode assumptions from Incident.io's internal practices that do not hold for customer environments.

Resolution: The team explicitly watches for internal-context leakage while debugging evals and adjusting prompts.

“your prompt has embedded some of your context as a human that may or may not be relevant to the situation of the customer.”transcript, stated
“we were overfitting to our situation which was going to make us much worse on our customer base.”transcript, stated

Live user feedback can itself become incident-response noise.

Root cause: Responders are under pressure and may be annoyed by feedback prompts during the incident.

Resolution: Incident.io delays formal feedback until after the incident while still allowing in-channel negative feedback if responders choose to give it.

“if you go and send them a message and say is this useful during that moment one they're not going to reply to you but also might piss them off as well.”transcript, stated
“you can also go hey at incident actually that kind of sucks [laughter] and that will collect it as feedback for us”transcript, stated

Evaluation

Incident.io evaluates AI SRE through post-incident time-travel scorecards, nuanced false-positive/true-positive style metrics, component-specific graders, prompt-level eval suites, user clicks and feedback, and delayed Slack usefulness checks after the incident has ended.

Metrics: scorecard of investigation claims after incident closure · false positives, true positives, false negatives, and true negatives · signal-to-noise ratio of final claims · root-cause-analysis quality · RAG search precision and recall · responder clicks and viewed findings · post-incident usefulness feedback

5 supporting quotes
“we then run a ton of graders and we produce a scorecard on our investigation that goes everything that you claimed and everything that you thought was going on”transcript, stated
“the confusion matrix, which is what they're talking about in terms of false positives, true positives, false negatives, true negatives.”transcript, stated
“Did we find things that appear to be relevant to the responders according to who clicked into this, who looked at this”transcript, stated
“we have different graders that we run on the different units of the investigation.”transcript, stated
“we have our eval which are our unit tests on the prompts internally in the codebase”transcript, stated

Outcomes

The transcript describes Incident.io as about four years old, serving customers from startups to Netflix, building AI for about 1.5 years, targeting one-to-two-minute incident investigation output, moving from 25k-token-era constraints to larger 200k-token contexts while still managing context, and evaluating after every incident closes.

5 supporting quotes
“we're going to combine all this together to come up with a sense of what we actually think is going on”transcript, stated
“eventually come back to you with, hey, this is my hypothesis of what's happening. This is what I think you should do about it.”transcript, stated
“What we've actually found is much better is we typically either generate free from text summaries or we tag documents.”transcript, stated
“if you really want to dig in, you can click out to an external link and then we have this much richer view which shows a full reasoning trace”transcript, stated
“we then run a ton of graders and we produce a scorecard on our investigation”transcript, stated