The fear is reasonable: an AI with unsupervised access to production is a bad idea. KubeIntellect is built so that never happens by default. It can diagnose freely, but out of the box it cannot change your cluster without a human approving the exact action first; automatic changes happen only where an operator has explicitly switched them on. Here is the security model, from the outside in.

1. Read-only RBAC by default

Diagnostic reads — get, describe, logs, top, events — run automatically. Nothing is changed while KubeIntellect is just answering questions. The Helm chart installs a read-only ServiceAccount by default — write verbs (rbac.createClusterOps) and exec (rbac.allowExec) are opt-in — and a read-only API key can only query. No cluster-admin required. Running the server locally instead? It acts with your kubeconfig’s permissions, so use a read-only context for read-only use.

2. Human-in-the-loop approval on every change, by default

By default, every mutating action — scale, restart, patch, apply, exec, delete — pauses and waits for you. You see the exact command and approve or deny it before anything touches the cluster. The workflow freezes during the wait, so approval can come seconds or hours later. Skipping the gate is always a deliberate operator choice: kq --auto-approve for test environments, “approve all” for the rest of a single turn, or allow-listed auto-fixes at autonomy level A3 (the default is A1, with an empty allowlist). A small set of especially destructive operations (delete namespace, delete a PersistentVolume, drain a node) always require confirmation, even with auto-approve on.

3. Role-based access control

Access is scoped by API-key role: read-only keys can only read; operator keys can create/scale/patch/exec with approval but cannot delete or drain; admin keys can perform all writes with approval. You hand out the least privilege each person or automation needs.

4. Secrets are off-limits

Secrets and ServiceAccounts are blocked for every role, enforced before any command runs — the agent cannot read or exfiltrate credentials, by design. Sensitive namespaces (kube-system, cert-manager, ingress-nginx, the monitoring stack, and KubeIntellect’s own) are protected out of the box.

5. A hardened command layer

Commands don’t go through a shell. They’re parsed, shell-injection metacharacters are rejected, YAML is validated, verbs are checked against the caller’s role, protected namespaces and resources are blocked, and risky operations are classified and gated — all before execution. Output is capped so a runaway query can’t flood anything.

A cap has its own failure mode: a truncated listing can read like a complete, healthy one. KubeIntellect now marks whether each cluster snapshot is complete and will not call the cluster healthy from a partial one. Why an agent should never answer “healthy” from a truncated snapshot tells the story of the bug that taught us this.

6. An auditable trail

Decisions and actions are recorded in order, so you can reconstruct exactly what happened for a postmortem or a compliance review. Because the default gate ties every change to a human approval, there’s an accountable decision behind it.

Built on a peer-reviewed architecture

This isn’t a marketing posture. The original KubeIntellect architecture — including human-in-the-loop confirmation on all mutating operations — was published and peer-reviewed in the Journal of Grid Computing (2026). The current v4 line builds on it, and the security model above is documented in the open security reference. You can read the paper and try it on your own cluster to see for yourself — the setup wizard can also create a local Kind cluster (Docker Compose and Helm are in the self-hosting quickstart):

pip install kubeintellect
kubeintellect init   # your LLM key, your kubeconfig (or a local Kind cluster)
kq -q "what's unhealthy in the cluster right now?"   # a read; any write would pause for your approval