AI SRE benchmark

19 Kubernetes faults. 3 agents. Every trace public.

We break a small app on a kind cluster in known ways, hand each agent only the alert, and grade the root cause against the fault we injected. A judge model scores first, then a person checks every verdict. Misses are published with the hits. Arvo builds Aurora and wrote the scenarios; read the numbers with that in mind.

Auroracommit 87d22baf
89%
34 correct, 4 partial, 0 wrong of 38 graded runs
median 154 s · $0.35 a run
bedrock/us.anthropic.claude-sonnet-5
HolmesGPT0.43.0
74%
14 correct, 4 partial, 1 wrong of 19 graded runs
median 45 s
bedrock/us.anthropic.claude-sonnet-5
K8sGPT0.4.40
0%
0 correct, 11 partial, 8 wrong of 19 graded runs
median 13 s
us.anthropic.claude-sonnet-4-5 (K8sGPT sends temperature, which Bedrock rejects for Sonnet 5)
#FaultAlert the agent receivesAuroraHolmesGPTK8sGPT
01Worker OOMKilled after a batch size changeKubePodCrashLooping
02Log shipper sidecar OOMKilled, app container healthyKubePodCrashLooping
03Frontend rollout stuck on a mistyped image tagKubeDeploymentRolloutStuck
04New api pods blocked on a Secret that does not existKubeDeploymentRolloutStuck
05Frontend crash loop from an invalid nginx configKubePodCrashLooping
06api restarts because the liveness probe targets the wrong portKubePodCrashLooping
07api Service selects no pods after a selector changeHighErrorRate
08Worker pod Pending, CPU request larger than any nodeKubePodNotReady
09api failing because redis is Pending on an unbindable PVCKubePodCrashLooping
correct104 s
10api crash loop from a wrong REDIS_HOSTKubePodCrashLooping
wrong13 s
11frontend 5xx from a wrong api Service targetPort, next to a noisy but harmless workerHighErrorRate [critical] namespace=shop service=frontend
12Two faults at once, worker OOM and a frontend Service selecting no pods; the alert covers only the workerKubePodCrashLooping [warning] namespace=shop deployment=worker
13frontend 5xx because a NetworkPolicy blocks api to redisHighErrorRate [critical] namespace=shop service=frontend
correct110 s
14api rollout stuck because a ResourceQuota forbids the surge podKubeDeploymentRolloutStuck [warning] namespace=shop deployment=api
15One in three api requests fails because a stray Deployment's pods carry app=apiHighErrorRate [warning] namespace=shop service=frontend
16New api pods crash because their dnsConfig search domains are for another cluster domainKubePodCrashLooping [warning] namespace=shop deployment=api
wrong16 s
17Worker OOMKilled every few minutes by a slow leak in its code; logs look cleanKubePodCrashLooping [warning] namespace=shop deployment=worker
18api rollout stuck on an init container waiting for a Service that does not existKubeDeploymentRolloutStuck [warning] namespace=shop deployment=api
19Half of frontend requests fail; one frontend pod loaded an edited ConfigMap, the other still runs the old configHighErrorRate [warning] namespace=shop service=frontend
wrong49 s

How a run works

  1. kind v0.33.0, Kubernetes v1.37.0, 3 nodes. The shop app: nginx, a Python API, a worker, redis, a load generator. Synthetic, no customer code.
  2. One fault is injected with the scenario's break.sh; check.sh proves it is visible.
  3. Each agent gets the alert text and read-only cluster access. Aurora runs under its default observability_only policy.
  4. Correct means every must_identify item in the scenario is stated and no listed wrong answer is asserted. Judge: us.anthropic.claude-opus-5-5, then a person.

Aurora's verdicts were checked by a person and come from two repeats per scenario. HolmesGPT's and K8sGPT's are the judge model's only, from one repeat each, until a person reviews them; the second repeat and the review are next.

What is not comparable yet: K8sGPT has no notion of an alert, it scans the namespace. It also ran on Sonnet 4.5 because it always sends a temperature parameter that Bedrock rejects for Sonnet 5. Costs are recorded for Aurora only.

Rerun it, or add your agent

Everything is in Arvo-AI/aurora-lab: scenarios, the runner, every transcript and grade, and this table as results.json.

git clone https://github.com/Arvo-AI/aurora-lab && cd aurora-lab
./lab.sh up && ./lab.sh break 03-bad-image-tag
./runner/h2h.sh 03-bad-image-tag runs/mine

To put another agent on the board, open an issue titled "Benchmark: <agent>" with a script that takes the alert text and prints the root cause. We run it on all 19 faults and publish the result, whatever it is. Submit an agent.

Read the full write-up: lab report v1. Fix the faults yourself: runbooks, each with Aurora's real trace.

Results updated 2026-10-15. Scenario and tool versions are recorded with every run in the repo.