v3.2.0  Linux & Windows packages out now

The Kubernetes client that
runs where you need it

A fast desktop app on your kubeconfig - or the very same UI served from inside the cluster behind OIDC login, where every person acts as themselves and Kubernetes RBAC decides what they can touch.

Free and open source, AGPL-3.0 · no account, no telemetry

panope - cluster overview
Panope cluster overview: usage gauges with sparklines, resource counts, problem and warning panels, top CPU and memory, node and storage summaries.
One codebase, two deployments

Your desktop, or your cluster

The interface is identical. Only the transport and the identity change - so what you learn in one, you already know in the other.

Desktop app

An Electron shell that talks to the cluster from the main process. It reads the kubeconfig you already have.

  • Every context in your kubeconfig, switchable - plus a Fleet view that summarises them all at once
  • Port-forwarding straight to localhost, opened in your browser in one click
  • Node shells and ephemeral debug containers when you need to get your hands dirty
  • Nothing to deploy, nothing to expose - it is just a program on your machine

In the cluster

The same UI served from a pod behind your identity provider, for teams who should not be passing kubeconfigs around.

  • OIDC login, then every API call is impersonated as that person
  • Kubernetes RBAC stays the real boundary - Panope can only ever subtract from it
  • Per-team roles gate features RBAC cannot express, like the web terminal
  • Every mutation is audited: who, what, when, and whether it worked
What you get

Everything you reach for, in one window

Built for the things you actually do all day, not a dashboard you glance at once a week.

Live, not polled

Tables ride self-healing watch streams, so rows change the instant the cluster does. Reconnects with backoff on their own.

Every CRD, automatically

All CustomResourceDefinitions are discovered and grouped by API group, with dedicated ArgoCD and Crossplane sections.

Logs, exec, forwarding

Streaming logs with filters, a real xterm.js terminal with live resize, and one-click port-forwards that pick a free local port.

Edit with confidence

A YAML editor using server-side apply, with a dry run first and a diff against the live object before anything is written.

A dashboard you arrange

Drag panels where you want them, hide what you do not need. Thresholds colour themselves and problems flash. The layout survives restarts.

Can I? Answered properly

A verb-by-resource matrix answered by the cluster's own authorizer, not guessed from Role objects - so webhooks and aggregation count.

Helm and GitOps

Install and upgrade charts with a values diff, roll back from history, and see ArgoCD sync and health with drift called out.

Right-sizing

Measured usage against declared requests: what is OOM-killing, what is about to, and what is quietly burning ten times what it uses.

Fleet at a glance

Every kubeconfig context probed in parallel, trouble first - without switching context to find out something is on fire.

New in 3.1.0

An assistant that works the cluster, not a chatbox

Ask why a pod is crashlooping, what changed in the last hour, or to scale a deployment down. It reads logs, events, metrics and objects to find the answer, and it can act - but only through you.

Bring your own model

Three ways to connect, so nothing is locked to one vendor or one bill:

  • Your installed Claude Code CLI, so usage rides your Claude plan with no API key
  • The Anthropic API with your own key
  • Anything OpenAI-compatible: Ollama, vLLM, LM Studio, OpenRouter, or OpenAI itself

Point it at a local model and the whole loop stays on your machine.

It cannot outrun you

  • Every read runs as your identity - it never sees more than you can
  • Anything that changes the cluster stops at a confirmation card you approve
  • Approved actions honour read-only mode and land in the audit log
  • Secret values and credential-like Helm values are redacted before they leave the box

New in 3.1.0: give it tools beyond Panope by adding your own MCP servers (a command or an HTTP endpoint). Their tools are namespaced so they cannot shadow a Panope tool, and every external call stops at the same confirmation card - because Panope cannot vouch for a third-party tool the way it can for its own. On the Claude Code provider there is also an opt-in unrestricted mode that hands the CLI its own shell and files, clearly marked as running outside Panope's gate.

A look around

Dense where it counts

Real screens against a real cluster.

panope - pods
Pod list with live CPU and memory bars and status pills. AI assistant investigating CoreDNS: tool steps, a diagnosis, and a suggested YAML fix. Streaming pod logs with filter and container controls. Interactive shell inside a container. YAML editor with syntax highlighting and apply controls. Topology graph: a Deployment linked to its ReplicaSet, Pods and the Service routing to them. Split view: two Deployments open side by side, each with its own tabs and pods. Related objects tree from Deployment to ReplicaSet to Pods and Service. ArgoCD applications with sync and health status. Helm chart catalogue from configured repositories.
Install

Running in a minute

Linux

deb · rpm · AppImage

Download

Windows

installer · zip

Download

macOS

 

planned
in the cluster (Helm)
# read-only by default, no Ingress, nothing exposed
helm install panope oci://ghcr.io/buzzwordy/charts/panope \
  --namespace panope --create-namespace

# for a team: OIDC login + per-user impersonation.
# the allowlist is required - the chart refuses a
# blanket impersonation grant.
helm upgrade panope oci://ghcr.io/buzzwordy/charts/panope -n panope \
  --set auth.mode=oidc \
  --set rbac.impersonate.enabled=true \
  --set 'rbac.impersonate.groups={platform-admins}'
container image
# the same server the chart deploys
docker pull ghcr.io/buzzwordy/panope:3.2.0

# it refuses to start without auth - deliberate.
# to try it locally against your own kubeconfig,
# opt out explicitly (never behind an Ingress):
docker run --rm --network host \
  -v ~/.kube/config:/kubeconfig:ro -e KUBECONFIG=/kubeconfig \
  -e PANOPE_INSECURE_NO_AUTH=true -e PORT=8080 \
  ghcr.io/buzzwordy/panope:3.2.0

A note on the security model

In cluster mode the ServiceAccount holds only the impersonate verb - it cannot read a single pod on its own. Every request carries the logged-in user's identity, so the API server authorises against their RBAC. Impersonation is applied at the client level, which means watches, logs, exec and port-forwards all carry it too, and reserved system: subjects are refused outright.

Give it a cluster and see

Point it at something you already run. It is read-only until you say otherwise.

Panope is free and open source. If it saves you time:

Buy me a coffee