Runs on OpenShift and nine other Kubernetes platformsWhich ones

Unified Cluster Management

See what is breaking,
and what will break next.

Stop finding out from your users — without shipping telemetry to someone else's cloud. Kairos runs in your network, warns you before disk, memory or capacity runs out, and brings you a fix with the evidence behind it. Nothing changes until a person approves it.

  • Self-hosted, works disconnected
  • Telemetry stays in your own database
  • AI optional — your model, per feature
kairos — your-cluster

Kairos runs in your network. Type a command, or pick one below.

KairosCollect1Forecast2Investigate3Propose4Approve5Run6Verify7
  • OpenShift
  • Kubernetes
  • Rancher / RKE2
  • VMware Tanzu
  • Mirantis
  • k3s
  • MicroK8s
  • kubeadm
  • Minikube
  • Kind

Designed for

Regulated estatesFinance
Air-gapped installsPublic sector
Multi-cluster NOCsTelecommunications
Edge fleetsLogistics
On-prem onlyEnergy

The operating loop

What happens when something breaks

From the first signal to a verified fix, every step is written down and every change waits for a person. This is the part of the product that does the work, not just the watching.

  1. Warned before it breaks, or alerted when it does

    A forecast raises an alert before a disk, a memory limit or a cluster's capacity runs out, and every forecast is graded afterwards against what actually happened. A rule raises one when a reading crosses its line. Related alerts are correlated into one incident, with the signals that raised it, and sent to Slack, Teams, Google Chat, email or PagerDuty. A maintenance window holds those messages during planned work and announces anything still wrong when it ends.

    Who does itThe platform — statistics and rules over the readings it stored. No model involved.

  2. An agent investigates, in writing

    The incident agent runs the checks a person would — events, logs, the workload, what changed recently — and writes each step down as it goes. Steps are appended, never rewritten, so the record cannot be tidied to fit its conclusion. Each incident reads as what happened, why, and how to fix it; run a step in the built-in terminal and the model reads the output back, quoting only lines that were really printed.

    Who does itAn AI agent, on the model you assigned to this job — yours, on your hardware, if you prefer.

  3. A specific fix, with its reasoning

    A concrete change — restart, scale, roll back, set resources, cordon a node — with the evidence it rests on and how it would be undone. Without a model, the remedy the rule itself names is proposed instead.

    Who does itChosen from a fixed catalogue of operations. Nothing can name an arbitrary API call.

  4. Policy decides, then a person approves

    A deny-by-default policy decides whether the change may happen at all. Only low-risk changes may ever run unattended, and every change the agent can make is medium risk or higher — so each one waits for someone to approve it. A command an administrator types themselves, in a container or a bastion shell, is not a proposal: it is recorded word for word, not approved.

    Who does itYou. Risk is computed from the verb and the target, never taken from whatever proposed it.

  5. Carried out from inside your cluster

    The agent in your cluster claims the approved change and runs it under its own ServiceAccount. A claim that is not picked up in time expires rather than running late against an object that may have been replaced.

    Who does itThe agent in your cluster. The platform holds no cluster credential and never connects inward to make a change.

  6. Checked afterwards, and recorded

    After a wait long enough for a rollout to finish, the platform checks whether the problem went away — the object's phase, ready count, restarts and the alerts naming it — and records the verdict beside the incident.

    Who does itThe platform — arithmetic over stored readings, never a model's opinion of its own fix.

  7. Remembered for next time

    When a similar incident comes back, it shows what was changed last time and whether verification said it worked. A fix verified to have made things worse is not proposed again for the same object.

    Who does itThe platform — records it already keeps, matched by the shape of the signals. A candidate, never a promise.

The consoles

Everything it watches, in one product

Dependency map

  • Blast radius
  • Declared relationships
  • Live traffic

What breaks if this breaks. Every object in the cluster and the manifest field that connects it to the next one, walked from one focus outward.

See what it collects

Why this and not a hosted platform

Five ways this differs from hosted observability

Not a longer feature list — a different shape. Everything below is a consequence of the product running inside your network instead of ours, and every claim is checkable in the code that ships.

  1. Nothing leaves your network unless you send it

    Telemetry lands in your own database, behind your own address. The whole product installs into your cluster or onto a host beside it, and the install bundle carries its own checksums.

    Hosted platformsCollection is the vendor's cloud by definition — the question is only which region it lands in.

  2. It provisions clusters, not just watches them

    On OpenShift, describe the cluster you want and it generates the Ansible, runs it on vSphere, and hands you the same bundle it ran. Observability and the thing being observed are one product.

    Hosted platformsMonitoring only. Provisioning is a separate tool, a separate contract and a separate audit trail.

  3. You choose the model, per feature — or none

    Design, authoring, diagnosis, alerting and the assistant each take their own provider — six are supported, including Ollama on your own hardware. Sending a feature's data outside needs an explicit acknowledgement for that feature, which the database enforces.

    Hosted platformsOne assistant, the vendor's model, the vendor's inference. Opting a single feature out is not usually on offer.

  4. The agent is read-only until you say otherwise

    Collection asks only to read, and the platform refuses to start if its collection catalogue gains a write verb. Changes are opt-in, one operation at a time, each approved. Secrets are never listed — the Secrets page is derived from what references a secret, so it shows the secrets your workloads use and never their contents.

    Hosted platformsAgent permissions are a document you are asked to trust, checked at review time rather than at run time.

  5. Model-written playbooks are approved twice

    Once for the request, once for the generated bytes — and there is no state from which model output reaches a hypervisor without a person in between. The absent transitions are asserted by tests, not just missing.

    Hosted platformsAI suggestions are advisory text. What happens after you copy them out is outside the product.

Security

Enforced, not documented

Every control below is something the system makes impossible, not something we intend. Each one names the mechanism and the file, because a claim you cannot check is a claim you should not believe.

Enforced bya queue, not a call

Changes reach your cluster without a credential for it

No kubeconfig, no service-account token, no network path inward to make a change. The agent inside your cluster asks for work and carries it out under its own ServiceAccount, so compromising this platform yields a queue of proposals your own RBAC still has to permit. The exceptions are ones you add: a bastion host or a monitored VM is reached over SSH with the key you give it.

packages/core/src/actions/

Enforced bya guard at module load

Collection is read-only, and the platform refuses to start otherwise

A write verb anywhere in the collection catalogue throws in the platform before its first request is served — the catalogue that renders the ClusterRole you apply. Changes are a separate, opt-in catalogue whose rules reach the ClusterRole you apply only for the operations you enable — and the same catalogues render the table the console shows you, so the grant and the description cannot disagree.

agents/permissions.ts — assertReadOnly()

Enforced byan absent grant

Secrets are never listed, and that is permanent

Kubernetes has no metadata-only list verb for secrets, so listing them would hand a token inside your cluster the ability to read every credential in it. The Secrets page is derived from what references a secret instead — names and where they are used, never contents.

agents/permissions.ts

Enforced bythe query layer

A query that forgets its tenant throws instead of running

Tenant-scoped reads inspect their own SQL and refuse to execute unless the text constrains the tenant. Forgetting the predicate is an error at the call site, not a leak discovered later.

packages/db — TenantScopeError

Enforced bymount order

An ingestion key is never a human session

The ingest routes are mounted ahead of the session middleware, so a cookie arriving on an ingestion request is never resolved into a principal. Agent keys carry ingestion-only scopes the database constrains, plus two switches that are off unless you turn them on: container exec, and carrying out approved changes.

services/api/src/index.ts

Enforced bysealed at rest

Stored credentials are sealed, and reads never return them

Hypervisor accounts, model provider keys and Git tokens are sealed with AES-256-GCM and decrypted only where they are used; reads return a hint and a fingerprint. One deliberate exception: a backup destination's access key is written into the storage-location file you download to apply to your cluster. A build credential is destroyed when the build reaches a terminal state.

packages/core/src/crypto.ts

Enforced bya CHECK constraint

An automatic destructive change is unstorable

Auto-execution requires the low risk tier, and the tier is computed from the verb and the scope rather than taken from whatever proposed the change. For delete, exec and rollback the database refuses an automatic policy outright, so that rule survives a bug in the layer above it; for every other verb the policy code enforces it.

migration 005 — ai_auto_requires_low_risk

Enforced bya static gate

Model-written Ansible is judged before a person is asked to approve it

An allowlist of modules, no shell, raw or script, file lookups only, egress limited to addresses the request itself creates, and no_log required on any task that interpolates a secret. It ends in a real syntax check over a temporary directory rather than a guess about strings, and a refused bundle is never stored — so there is nothing to approve by mistake.

provisioning/gate.ts

Collection

Everything the cluster reports, in one place

Collection that fits on a node

The Go agent is a static image under 7 MB with no third-party modules. Metrics from the kubelet, logs from the node filesystem, events, traces over OTLP, and more than fifty kinds of cluster inventory. A TypeScript collector (about 130 MB) also ships and speaks the same protocol; the Go agent is where new collection work goes.

Telemetry that survives an outage

In the in-cluster install, agents post to a gateway inside your own cluster. It acknowledges in milliseconds, writes to disk and forwards on its own schedule, so a platform outage costs bounded disk on one StatefulSet. If the outage outlasts the disk, the oldest data goes first.

Inventory that reconciles

A batch marks what it did not contain as gone, so a deleted workload disappears instead of lingering. An incomplete listing reconciles nothing at all — a stale row beats an emptied console.

Read-only unless you enable changes

Collection asks only for read verbs — get, list and watch — and the platform refuses to start if its collection catalogue ever gains a write verb. One grant does more than read: get on nodes/proxy, which is how kubelet metrics are read today, also reaches the kubelet's exec endpoint on current Kubernetes versions — so treat the agent's token as able to run commands on its node's pods, and keep it to that ServiceAccount. Changes are a separate, opt-in catalogue: an operation appears in the ClusterRole you apply only when you enable it, and each one is policy-checked and approved before the agent carries it out.

Side by side

The same questions, answered both ways

CapabilityKairosHosted SaaS observability
Where telemetry livesYour own database, on your network.The vendor's cloud, in a region you pick.
Air-gapped installSupported. The platform fetches nothing at runtime; mirror the images to your registry and use a local model.Needs a path from your network to the vendor's cloud.
Cluster provisioningOn OpenShift, generates and runs the Ansible. A person requests every build, and larger ones wait for an operator's approval.Usually a separate product.
Agent footprintA Go agent under 7 MB with no third-party modules (a TypeScript collector, about 130 MB, also ships).Varies by vendor — compare the image size and its dependency list.
What the agent may writeNothing by default. Each change you enable is policy-checked and approved.Varies by vendor and by integration.
AI modelYours, chosen per feature — or none at all.The vendor's, applied platform-wide.
During a platform outageIn-cluster installs buffer to disk and forward later; if the disk fills, the oldest data goes first.Varies by vendor — ask where it buffers and what it drops first.

The right-hand column describes the hosted category as a whole, not any one vendor, and covers only properties that follow from being hosted. Individual products differ; check yours.

How it works

From a first message to a cluster reporting

1 · Talk to us, receive a licence

Tell us what you run. We agree the plan and the platforms that fit, then issue a licence key naming them, with the install bundle and the guide for your topology. Licences run for a term — a year unless agreed otherwise.

2 · Install it next to your clusters

Inside your OpenShift cluster, or on a host beside any supported cluster, from a dated bundle that carries its own SHA-256 checksums. Register the cluster in the console, then deploy the agent with the key the console issues for it.

3 · Your first cluster reports

Within minutes of the agent starting: nodes, workloads and the rest of the inventory, metrics and events — it sends a heartbeat and metrics every 30 seconds. Alerts evaluate from the first readings; forecasts start as history builds, and each is graded once its moment passes.

Plans

Three plans, sized by your estate

Every plan runs the same product in your network. What scales is how many clusters, nodes and people it covers, how long it keeps history, and how much the AI agents may spend each day.

Starter

One cluster, to prove it on.

Clusters
1
Nodes
8
Users
5
Retention
30 days
Unattended AI calls a day
50

Includes

  • Cluster, node and workload metrics, events and inventory
  • VMs and their databases, over SSH
  • Alerts to your webhooks
  • Compliance controls and certificate expiry
  • A runbook library

Priced per estate — ask us about Starter

Pro

A production estate of a few clusters.

Clusters
5
Nodes
40
Users
25
Retention
90 days
Unattended AI calls a day
200

Everything in Starter, plus

  • Logs, traces and application performance
  • Graded forecasts of disk, memory and capacity
  • Approved changes, and commands in a container
  • Continuous AI watch and must-gather analysis
  • Cost, drift, upgrade readiness and SLOs
  • Self-service provisioning within quota

Priced per estate — ask us about Pro

Enterprise

Large or regulated estates.

Clusters
Unlimited
Nodes
200
Users
Unlimited
Retention
395 days
Unattended AI calls a day
1,000

Everything in Pro, plus

  • A dedicated AI inference host
  • Provisioning specs drafted by a model from a description
  • The request path through a namespace, hop by hop
  • Fine-tuning on your own incidents, with separate consent

Priced per estate — ask us about Enterprise

There is no public price list: each licence is quoted for the estate it covers, and its limits can be adjusted to fit.

Ask about pricing

Questions

What teams ask before a call

More in the docs
Does any of our data leave our network?
Not unless you send it. Telemetry lands in your own database and nothing calls home to us. Data leaves only when you set it up: a hosted AI provider assigned to a feature (an explicit acknowledgement for that feature, enforced by the database), hosted fine-tuning, an export or alert channel to a tool you already run, or a Git repository you mirror to.
Which AI models can we use — and can we run it without AI?
Six providers: Ollama on your own hardware, Hugging Face, Anthropic, OpenAI, NVIDIA and Google, assigned separately to each feature. Or none: collection, alerts, incidents, graded forecasts, proposed fixes, approvals and verification all run without a model. The written investigations and the assistant need one.
What does the agent need permission to do?
Read. Its ClusterRole asks to get, list and watch the kinds it collects — never Secrets — including get on nodes/proxy to read kubelet metrics — which on current Kubernetes versions also reaches the kubelet's exec endpoint, so treat that token as able to run commands on its node's pods. The platform refuses to start if a write verb appears in its collection catalogue. Changing the cluster, and running a command in a container, are separate grants you opt into: each appears in the ClusterRole only when you enable it. Every change through the queue is policy-checked and approved first; a command an administrator runs in a container is recorded, not approved.
Can it run fully disconnected?
Yes. Nothing on the platform fetches from the internet at runtime — no CDN, no remote fonts, no call home — and Helm charts render offline. Mirror the container images to your own registry before installing, mirror the repositories any catalogue add-on installs from, and assign a local model through Ollama if you want AI.
Which platforms does it support?
Ten: OpenShift, Kubernetes, Rancher / RKE2, VMware Tanzu, Mirantis Kubernetes Engine, k3s, MicroK8s, kubeadm, Minikube and Kind. Your licence names the ones it covers. Provisioning new clusters is OpenShift only, and Linux VMs beside your clusters are monitored over SSH with no agent.
What happens if our licence lapses?
The console stops serving your estate's pages until a renewal key is entered. Your configuration and history are retained, so a renewal picks up where you left off.
How long until we see our first data?
Minutes after the agent is deployed. It sends a heartbeat and metrics every 30 seconds, and the first inventory, metrics and events arrive on its first cycle. Forecasts begin as history accumulates. The time before that is the install itself, which you run on your own infrastructure with the guide for your topology.

Talk to us

Tell us about your estate

Send this and someone from our team will reply. We talk through what you run, then issue a licence key, the install bundle and the guide for your topology.

What you send is kept in the enquiry list of the team that runs this site, which only its operators can open, so that they can reply to you. It is not sent anywhere else.