KubeHealth is one binary you point at your kubeconfig. It groups warnings into one row per broken workload, ranks them by how new they are, and, if you want, asks a small model running on your laptop what to check first.
KubeHealth reads your cluster's warning events and turns them into one row per broken workload, newest first.
The namespace list never leaves the screen. Pick a namespace for its live status, pick an object for its ownership chain and full timeline, ask for logs or a root cause without changing pages.
Download a build from the releases page, then:
tar -xzf kubehealth_*_darwin_arm64.tar.gz cd kubehealth_*_darwin_arm64 xattr -d com.apple.quarantine kubehealth # macOS ./kubehealth # localhost:8080
tar -xzf kubehealth-embed_*_darwin_arm64.tar.gz
cd kubehealth-embed_*_darwin_arm64
xattr -d com.apple.quarantine kubehealth-embed
./kubehealth-embed # + local model
Each model diagnoses 54 incidents recorded from real clusters, through KubeHealth's own prompts and tools; the table shows how often its answer names the real cause and the right fix.
Each case is one object in a recorded cluster, what is really wrong with it, and the words a right answer has to contain. Open one to see exactly what KubeHealth puts in front of the model.
A snapshot is a cluster saved to files at one moment. The bench runs on these files instead of a live cluster, so every model sees exactly the same evidence, and anyone can run it again without a cluster.
kubehealth bench record reads a live cluster once, read-only: every object KubeHealth looks at, the events, and the last 150 lines of each container's log (and of its previous run).kubehealth bench run loads the files as a stand-in cluster, with the clock stopped at the recording time: "first seen 8 min ago" reads the same on every run, and the model's tool calls are answered from the files.Never stored: Secret and ConfigMap values (only their key names), literal environment values, last-applied annotations, and the system namespaces.
Open a snapshot to see what KubeHealth's overview showed for that cluster at the recording time, row by row, in the order it ranked them:
A row without a case is a real problem that isn't scored on its own, often the dependency behind another case's symptom.