A Kubernetes terminal console in Rust · kube-rs · ratatui

SAUR-ON
One eye over the entire cluster.

See what exists, understand what needs attention, inspect the evidence behind every judgment, and act only when policy allows.

UNKNOWN≠ZERO≠HEALTHY
$cargo install saur-on
view source →
ops@production-eu · sauron v1.0
┌ saur-on ┐
│ Context:
ops@production-eu [read-only]
│ Cluster:
https://10.42.0.1:6443/
│ Namespace:
<all>
│ Resource:
overview
│ Objects:
135 synchronized
y yamll logsp prev logss shelld describef port-fwde explainT timelinea adjacentx xraym journal? help
┌ cluster eye ┐
╭ SAUR-ON / EYE ──────────────────────────────────────────────────────────────────────────
│ CONTEXT  production-eu       NAMESPACE  all                 ● LIVE
├─────────────────────────────────────────────────────────────────────────────────────
│  03 NEED ATTENTION     128 HEALTHY     04 UNKNOWN     07 CHANGED
├─────────────────────────────────────────────────────────────────────────────────────
│  Deployment  payments/api         DEGRADED   2/4 ready   84% cpu/r
│  Pod         payments/api-7fc2    PENDING    0/2 ready   evidence: 4
│  HelmRelease platform/ingress     DRIFTED    rev 42      reconcile: idle
╰─────────────────────────────────────────────────────────────────────────────────────
 eye  Evidence ranked · UNKNOWN is never rendered as healthy
: resource/ filterS sortI invertw widespace mark[ ] history? help
Viewing cluster eye livewatch 12ms · 135 objects · 0 stale

Every frame is selectable text. No screenshots. No fabricated state.

:workflow

From signal to evidence
without leaving the terminal.

SAUR-ON keeps identity, provenance and uncertainty attached to every step, from a failing row to the guarded operation that resolves it.

01:pods -A / cpu/%r>80 or health!=healthy

Find pressure and failure without losing unknown values.

02e explain selected

Read the fields, events and metrics supporting the verdict.

03x xray --depth 3

Trace verified dependencies and understand the blast radius.

04:restart payments/api

Preview, authorize, revalidate and journal the operation.

:why saur-on

Kubernetes gives you a lot of state, but not always a clear answer.

SAUR-ON exists to keep identity, evidence, relationships and action in one place, without turning uncertainty into certainty just to make the interface look clean.

See the cluster. Understand the evidence. Act only when the policy says you should.

:philosophy

Four rules that keep
the interface honest.

Each rule removes a class of lie from the interface before a single row is drawn.

UNKNOWN ≠ ZERO

Missing evidence never becomes a healthy value.

UID ≠ NAME

A recreated object is a different object.

RELATIONSHIP ≠ CAUSE

Topology is evidence, not speculation.

COMMIT ≠ OBSERVED EFFECT

What SAUR-ON requested and what the cluster later became are separate facts.

:architecture

Layers that never merge.

Every layer produces the input for the next. Nothing upstream is inferred from what only a later layer may assert.

Observation, diagnosis, topology and mutation remain separate layers.

  1. 01DISCOVERY
  2. 02WATCHED STATE
  3. 03EVIDENCE + HEALTH
  4. 04RELATIONSHIPS
  5. 05POLICY
  6. 06GUARDED ACTION
  7. 07JOURNAL

:evidence

521automated checksunit + simulated API
106adversarial flowscombined live sequences
75mstability run1,263 observed cycles
0failuresstable threads and file descriptors

Measured against an isolated Kubernetes cluster. Numbers describe the recorded run, not a comparative benchmark.

:features

Built for operators who
need the whole truth.

Keyboard-first workflows, live Kubernetes primitives and explicit uncertainty, composed into one fast console.

w

Live cluster state

Native Kubernetes watches keep built-in resources and discovered CRDs continuously current.

/

Typed filters

Combine quantities, percentages, labels, age and health with three-valued logic that preserves unknowns.

e

Evidence-first health

Deterministic resource health cites the exact fields, metrics, events and conditions behind every verdict.

x

Explain + Timeline

Inspect correlated evidence and meaningful UID-scoped transitions without fabricated history.

a

Adjacent + Xray

Traverse verified ownership, references, selectors, storage and networking relationships across the cluster.

l

Logs and sessions

Stream multi-container logs, exec, shell, attach and manage concurrent loopback port forwards.

b

Operator workflows

Use bookmarks, saved views, workspaces, bulk selections, custom keymaps and a global object finder.

p

Plugins + headless

Extend commands through bounded plugins or export structured checks, snapshots and evidence bundles.

:safety

Read-only means
read-only.

Every mutation passes through one policy boundary. SAUR-ON previews the change, checks authorization, binds confirmation to the exact object incarnation, then revalidates identity at commit time.

Central mutation gateway RBAC and policy evaluation UID + resourceVersion preconditions Append-only operation journal Secret and annotation redaction Explicit uncertain outcomes
POLICY DECISIONALLOW
operation
scale deployment/api → 6
context
production-eu
identity
verified · 41d8…02be
authorization
patch apps/deployments
blast radius
6 pods · 2 dependents

:integrations

Your delivery stack,
inside the same view.

Inspect reconciliation, ownership and release history across the systems already running your cluster.

FLUX

Reconcile with context

Kustomizations, HelmReleases, sources and image automation with dependency-aware actions.

:flux reconcile platform
ARGO CD

See desired and live

Applications, sync status, refresh and guarded rollback — the same policy gateway as every other operation.

:argo app payments
HELM

Understand every release

Read-only history, masked values and manifest identities from the release Secret. No rollback or uninstall.

:helm history ingress

PLUGINS: bounded execution, typed inputs and structured reports

HEADLESS: deterministic checks, snapshots and machine-readable output

EVIDENCE BUNDLES: redacted, checksummed export for offline review

:install

Put the eye on your cluster.

Requires a Rust toolchain, a Kubernetes kubeconfig and network access to the API server.

$cargo install saur-on
1

Create ~/.config/sauron/config.toml. It does not exist by default, so create it first:

$mkdir -p ~/.config/sauron
$echo 'readonly = false' >> ~/.config/sauron/config.toml

With readonly = true you cannot mutate anything.

2

Launch it normally:

$sauron

straight from the shell

$sauron --context production-eu pods -A
$sauron --readonly

as a library

$cargo add saur-on