Navigation only when you ask. kute makes the cluster's actual state visible without digging — every view answers a question instead of leaving you to assemble it from scattered objects, events, and describe pages.
g d ↵ — three keys from anywhere to Deployments. No chords, no modifier keys, no memorizing.Each view brings together the relevant resources, events, conditions, and relationships to explain what is happening, why it matters, and where to investigate next.
“Where is it broken?”
Unhealthy sorts first, healthy namespaces collapse — the whole cluster's problems on one screen.
“Why is it broken?”
Last termination on top — exit 137, OOMKilled, 4m ago — with logs across restart boundaries.
“What changed?”
Rollouts, restarts, and warnings from the last 30 minutes in one deduped, ordered stream.
The resting state is one full-width table of live resources. Where you are lives in a one-line breadcrumb; where you can go lives behind a single key. Press g and a jump palette appears — fuzzy search across every kind, resource name, namespace, and context, with the eight daily kinds ranked on top, each aliased by its highlighted first letter.
n ↵ alt-tabs straight back.One palette shell, three scopes. Every one opens pre-selected on the most recently visited other entry — alt-tab semantics, like editor Ctrl-Tab — so ↵ alone toggles back. Same input, same selection, same keys — learn it once.
Not a checklist to consult — the same six decisions, applied consistently, everywhere.
Header bar · body · keybar. Errors, empty states, and loading are not a different-looking app — the shell paints in the first frame and only the rows change.
Connection lost mid-incident? The last snapshot stays browsable, desaturated, with an age stamp and a visible retry countdown. Stale data beats no data.
No modal ever blocks browsing. A 403 is a card with the verbatim message and four ways out — jump elsewhere, switch context, copy the error, ask who-can.
A crashlooping pod opens with its last termination — never buried under labels. Unhealthy sorts first in every list; condition messages render verbatim.
Every resource kind — built-in or CRD — is a registry entry: columns, status derivation, verbs. New kind support is data entry, not a new screen.
No forwards, no chip, no mark column. The header, strips, and keybar grow indicators only while the state they describe exists.
Every view is the same recipe — header bar · body · keybar — rendered from a kind registry and a command table. Pods, nodes, Helm releases, and a CRD kute has never seen all arrive through the same machinery.
Every action shows its command. Exec, forward, scale, bulk delete — the exact kubectl equivalent is printed before anything runs. Copyable documentation, not abstraction.
kubectl scale deploy/nebula-qa --replicas=6PROD comes from the prodContexts list in ~/.config/kute/config.yaml, never a name heuristic. Secrets decode in memory only and re-mask on exit.
The overview screen routes you to existing views; the pods table stays the resting state. No charts for their own sake.
Exec suspends kute and hands the tty to kubectl, like git hands off to your editor. Exit restores exactly where you were.
Helm rollback yes; install-from-repo no — shipping software is CI's job, and kute won't pretend otherwise.
No setup wizard, no plugin system, no per-CRD layout files. Discovery and sensible defaults over knobs.
An operator's screen belongs to the cluster, not the tool. If every view answers a question instead of listing objects — and every action shows exactly what it will run — kute becomes the most honest window into a cluster: nothing hidden, nothing to dig for. the bet
Explore the full Kute experience with kute --demo—a built-in fake cluster with no setup or configuration.
Or install with Homebrew