AI Adoption GuideSoftwareSupport
Root Cause Diagnostic Agent
Agent reads logs, traces, and account state to diagnose technical issues and propose resolution steps.
Software processDiscoverDesignBuildTestReleaseAdoptSupportRetire
By Don, DoneThat’s AI coach · updated
What this agent is for
A root cause diagnostic agent helps a support engineer move from a vague production symptom to a concrete, reviewable hypothesis. It pulls together the signals an engineer would normally chase by hand: application and infrastructure logs, distributed traces, and the customer's account or tenant state. From those inputs it proposes a likely cause, the evidence that supports that cause, and a short list of resolution steps.
The agent does not close the ticket, restart services, or change customer data on its own. It drafts a diagnosis for a human to confirm or reject. That split matters in production support, where a confident-sounding wrong answer can waste time or worsen an outage.
Use this page when you are designing or evaluating an agent that sits beside the support engineer during triage. Pair it with routing and drafting workflows rather than treating diagnosis as a standalone automation. Related pages: Smart Ticket Routing, Emerging Issue Detection, and Agent Response Drafting.
Inputs the agent must have
Diagnosis quality tracks data completeness. The agent should refuse to invent a cause when the evidence is incomplete.
Required inputs typically include:
- Logs tied to the incident window: service logs, error streams, and deploy or config change markers when available
- Traces for the failing request path: spans that show latency, dependency failures, timeouts, and error status codes
- Account state: plan or tier, feature flags, recent configuration changes, known limits, and identity or tenant identifiers that scope the investigation
Optional but useful context includes recent deploys, known incident notices, prior tickets for the same account, and runbook links for the implicated service. Optional context can refine a diagnosis. It must never substitute for missing logs, traces, or account state.
When any of the three required inputs is missing, empty, or clearly out of window for the reported symptom, the agent should return empty diagnostic output. Empty here means no proposed root cause, no ranked hypotheses, and no resolution steps. A short structured reason such as missing_traces or account_state_unavailable is enough for the engineer to see why the agent stayed silent. Filling gaps with generic advice ("check the network," "retry later") trains people to trust noise.
How a useful diagnosis is shaped
A strong agent output is narrow, evidence-backed, and easy to falsify. Structure the proposal so an engineer can accept, adjust, or discard it in one pass.
A practical diagnosis payload includes:
- Symptom restatement in operational terms (what failed, for whom, when)
- Proposed root cause stated as a single primary hypothesis, not a laundry list
- Evidence map linking each claim to a log line, span, or account field
- Alternatives considered with one-line reasons they were deprioritized
- Proposed resolution steps ordered for safety (verify, contain, fix, confirm)
- Confidence note that reflects evidence coverage, not rhetorical certainty
Prefer causal language that points at a system condition over blame language that points at a person. "Checkout API returned 503 after connection pool exhaustion on payments-db following deploy abc123" is actionable. "Database is broken" is not.
Resolution steps should be proposals only: which check to run next, which config or flag to inspect, which rollback or feature disable to consider, which customer-visible mitigation to offer. The engineer decides what actually runs in production.
Keep the agent's role aligned with quality outcomes. Faster triage that still requires human confirmation reduces mean time to understand without outsourcing accountability for production changes.
Where the human stays in the loop
Support engineers remain the decision owners. The agent proposes; the engineer confirms.
Confirmation means the engineer reviews the evidence map against the live tools they trust, accepts or edits the root cause, and chooses which resolution steps to execute. If the hypothesis is wrong, the engineer should be able to mark it rejected and optionally feed a short correction so the next attempt on the same ticket does not repeat the same dead end.
Do not auto-apply remediations from this agent. Do not auto-notify customers with a causal explanation until an engineer has signed off. Diagnosis and customer messaging are different jobs; draft replies belong in Agent Response Drafting after the cause is confirmed.
Human review is especially important when:
- Multiple services show correlated errors and the primary cause is ambiguous
- Account state shows a billing, entitlement, or compliance constraint that looks like a product bug
- Traces are sampled and the failing path may not appear in the retrieved set
- Logs suggest a deploy regression but rollback would affect other tenants
In those cases the agent can still help by organizing evidence. It should not present a single cause as settled fact.
Operating boundaries and failure modes
Define explicit non-goals so the agent does not drift into adjacent automations.
Stay out of routing. Ticket priority and queue assignment belong to Smart Ticket Routing. The diagnostic agent may emit tags such as payments or auth as side products of its evidence map, but those tags are hints for the engineer, not routing decisions.
Stay out of early warning. Detecting a rising error cluster across accounts is the job of Emerging Issue Detection. When an emerging-issue signal already exists, pass it in as optional context. Do not require the diagnostic agent to rediscover fleet-wide patterns from a single ticket's inputs.
Fail closed on thin data. Incomplete correlation IDs, wrong time windows, redacted logs, or permission-denied account reads should yield empty diagnostic output plus a machine-readable skip reason. Retry only after the missing input is supplied.
Avoid hallucinated certainty. If logs show an error but traces do not reach the implicated dependency, say so. If account state shows the feature disabled, prefer that explanation over a speculative code defect. When evidence conflicts, surface the conflict instead of picking a winner to sound decisive.
Protect sensitive fields. Account state often includes PII, secrets, or payment details. The diagnosis shown to the engineer should cite field names and safe values (plan tier, flag key, error code) without dumping raw secrets into the ticket timeline.
How to evaluate the agent in practice
Judge the agent on engineer time saved and diagnosis usefulness, not on how often it sounds confident.
Useful evaluation checks:
- Evidence discipline: every proposed cause cites at least one log, trace, or account-state field that an engineer can open
- Empty-output rate under missing inputs: when you deliberately strip logs, traces, or account state, the agent must return empty diagnostics rather than a generic cause
- Edit distance: how much the engineer changes the proposed cause and steps before acting
- False lead rate: how often the first proposed cause is rejected because evidence was misread or overfit
- Handoff quality: whether a confirmed diagnosis feeds cleanly into response drafting and into any emerging-issue workflow when the case is not isolated
Run these checks on real tickets with known outcomes, including tickets that were configuration mistakes, dependency outages, and customer-side errors. A diagnostic agent that only performs well on clean application exceptions is not ready for production support.
When the loop works, the engineer spends less time assembling context and more time deciding. The agent stays valuable only while it remains humble about missing data and subordinate to human confirmation.
Is this worth automating for you?
Whether this pays back depends on how much time it takes your team today. Most teams estimate that from memory, and the estimate is usually wrong in one direction or the other. This one is rated high effort to implement, so the baseline matters more than usual.
DoneThat reconstructs where the time actually went, with no timers to forget, so you can measure the baseline before committing to a project and check the gain afterward.
Measure the baseline first