GitHub
Connect AI assistants to GitHub - manage repos, issues, PRs, and workflows through natural language.
Beschreibung vom Entwickler (englisches Original)
Kubernetes RCA agent that sandboxes its own AI with OPA Gatekeeper. MCP-ready for any client.
Diese drei werden nie zu einer Punktzahl zusammengefasst: Meinungen, Messungen und Beliebtheit sind verschiedene Dinge.
Für diesen Server haben wir noch keine Zusammenfassung in einfacher Sprache geschrieben. Unten stehen die Fakten, die wir aus der Registry gelesen haben.
Wähle die KI-App, die du nutzt, und kopiere die Einstellungen.
AI_API_KEY, AI_MODEL, KUBECONFIGAls geheim markierte Werte sind Schlüssel zu deinem Konto. Gib sie nie weiter und füge sie nie in einen Chat ein.
Du brauchst
Welche App nutzt du?
Wähle oben deine App. Wir merken sie uns, damit der Button beim nächsten Mal „In … installieren“ anzeigt.
Öffne Claude Desktop → Settings → Developer → Edit Config und füge dies in claude_desktop_config.json ein
{
"mcpServers": {
"k8gents": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"AI_API_KEY",
"-e",
"AI_MODEL",
"-e",
"KUBECONFIG",
"docker.io/jdoornink/k8gents:0.1.1"
],
"env": {
"AI_API_KEY": "your-value",
"AI_MODEL": "your-value",
"KUBECONFIG": "your-value"
}
}
}
}Führe das in deinem Terminal aus
claude mcp add k8gents --env AI_API_KEY=your-value --env AI_MODEL=your-value --env KUBECONFIG=your-value -- docker run -i --rm -e AI_API_KEY -e AI_MODEL -e KUBECONFIG docker.io/jdoornink/k8gents:0.1.1Trag die leeren Werte ein, bevor du ihn startest.
In .cursor/mcp.json in deinem Projekt oder in ~/.cursor/mcp.json einfügen
{
"mcpServers": {
"k8gents": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"AI_API_KEY",
"-e",
"AI_MODEL",
"-e",
"KUBECONFIG",
"docker.io/jdoornink/k8gents:0.1.1"
],
"env": {
"AI_API_KEY": "your-value",
"AI_MODEL": "your-value",
"KUBECONFIG": "your-value"
}
}
}
}Dein Browser fragt, ob er die App öffnen darf, dann zeigt die App die Einstellungen und bittet dich um Bestätigung. Schlüsselwerte bleiben leer, damit du sie selbst einträgst.
In .vscode/mcp.json in deinem Projekt einfügen
{
"servers": {
"k8gents": {
"type": "stdio",
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"AI_API_KEY",
"-e",
"AI_MODEL",
"-e",
"KUBECONFIG",
"docker.io/jdoornink/k8gents:0.1.1"
],
"env": {
"AI_API_KEY": "your-value",
"AI_MODEL": "your-value",
"KUBECONFIG": "your-value"
}
}
}
}Dein Browser fragt, ob er die App öffnen darf, dann zeigt die App die Einstellungen und bittet dich um Bestätigung. Schlüsselwerte bleiben leer, damit du sie selbst einträgst.
Dieser Server läuft auf deinem Computer, und ChatGPT kann sich nur mit Servern im Internet verbinden. Wähle eine andere App.
Deine Auswahl bleibt in einem Cookie auf diesem Gerät; kein Konto nötig.
AI_MODEL envKUBECONFIG envDiese Einstellungen werden aus dem Registry-Eintrag des Entwicklers erzeugt. Wenn in der README etwas anderes steht, folge der README.
Läuft auf deinem Computer; die Tool-Liste erscheint nach der Installation in deiner KI-App.
Wir prüfen Informationen, die jeder sehen kann; den Code haben wir nicht gelesen. Checks, die nicht zutreffen, werden nicht mitgezählt. · Geprüft am 9. Nov. 2026
Der Registry-Name wurde mit dem GitHub-Konto JDoornink bestätigt, dem das Repo gehört
Dieses Repo haben wir noch nicht von GitHub gelesen
Dieses Repo haben wir noch nicht von GitHub gelesen
Dieser Server läuft auf deinem Computer; es gibt keinen Endpunkt im Internet
Läuft auf deinem Computer und nutzt stattdessen lokale Einstellungen
Läuft auf deinem Computer; Tool-Listen können wir nur von Endpunkten im Internet lesen
Verglichen mit allen aktiven Servern dieser Kategorie in der Registry. Sterne zählen nur, wenn dem Herausgeber das Repo gehört.
Er hat 1 von 1 zutreffenden Basischecks bestanden. Den Code haben wir nicht gelesen. Bevor du einen Schlüssel oder Token hinzufügst, sieh nach, welche Zugriffe der Server verlangt, und nutze einen Schlüssel, der nur die Berechtigungen hat, die du brauchst.
Das musst du eintragen: AI_API_KEY
Er läuft auf deinem Computer. Deine KI-App startet ihn bei Bedarf, und die Daten laufen nicht über die Server des Entwicklers (außer der Server ruft selbst einen Onlinedienst auf).
Das GitHub-Repo wurde zuletzt – geändert, und die neueste Version (0.1.1) kam vor 7 Monaten in die Registry.
Apps, die MCP unterstützen, etwa Claude Desktop, Claude Code, Cursor und VS Code. Außerdem brauchst du Docker auf deinem Computer.
In derselben Kategorie: GitHub, Desktop Commander, Cloudflare MCP
Server derselben Kategorie von anderen Entwicklern, sortiert nach Sternen.
So liest du eine Karte:↓ Downloads pro Wochei★ GitHub-SterneiDrei Säulen: Bewertungen · Checks · NutzungiAktualisiert = neueste Version in der Registry veröffentlichti
Connect AI assistants to GitHub - manage repos, issues, PRs, and workflows through natural language.
MCP server for terminal commands, file operations, and process management
Unverändert aus dem Repo des Entwicklers übernommen. PopNx MCP hat den Inhalt weder geprüft noch empfiehlt es ihn. HTML, Bilder und Skripte wurden entfernt. Links führen von dieser Website weg.
A Human-in-the-Loop RCA Agent for Kubernetes — LLM Diagnosis, OPA-Bounded Remediation
K8gentS is a Kubernetes diagnostic agent built around a single premise: an LLM is well-suited to *reason* about cluster failures, but unfit to *act* on them unsupervised. It continuously watches the cluster event stream, runs Warning-class events through a Gemini-powered root cause analysis (RCA) pipeline, and surfaces the top hypotheses with resolution steps to Slack. Every remediation is human-in-the-loop (HITL) — a reviewer approves or rejects via interactive buttons before anything mutates. Approved fixes execute inside an ephemeral Job whose blast radius is bounded by an OPA Gatekeeper admission policy at the API server, independent of RBAC. The reasoning is non-deterministic by design; the controls around it are not.
The goal: reduce MTTR on diagnosable failures without handing an LLM a kubectl apply.
Building the Kubernetes side of this is straightforward. The real challenge is making a diagnostic layer trustworthy when the engine behind it is fundamentally non-deterministic.
Traditional observability is built on guarantees. Alerts fire on known thresholds. Dashboards show reproducible numbers. Logs return consistent answers to the same query. SRE success depends on that predictability — it's what makes incident response repeatable and on-call sustainable.
An LLM-driven diagnostic layer breaks that contract. The same pod failure can produce three different plausible explanations across three different runs. Each may be coherent. Each may even be correct under different assumptions. But "plausible" is not the same as "right," and for infrastructure, the gap between them is where outages live.
Some of the specific problems I've been working through while building K8gentS:
1. Confidence scoring with an unbounded output space. The agent returns top-3 root causes with confidence metrics, but confidence in what, exactly? The model is not selecting from a fixed set of known failure modes — it's generating free-form hypotheses. A calibrated confidence score needs a reference distribution, and the distribution here is whatever the model happened to produce this run.
2. When to trust reasoning vs. fall back to deterministic checks. - THE ART Some failures (CrashLoopBackOff, OOMKilled) have well-traveled diagnostic paths and a deterministic check will be right every time. Others benefit from the model's ability to interpolate across signals. Drawing that line — and doing it at runtime — is non-trivial and where the art really lies.
3. Evaluating an agent that's supposed to find failures you didn't anticipate. The standard ML evaluation approach assumes you know what "correct" looks like. For a diagnostic agent, part of the value is catching novel failure modes — by definition, failures you couldn't pre-enumerate. So how do you decide what is wrong and what is right?
4. The "Tool in the Cluster" problem. How do you monitor the monitor? Currently the service is set to run as a service in the cluster, but what if the service itself causes resource exhaustion, or is experiencing failures itself? How can you identify if the service itself is the cause of your issue?
5. Determining the right model for this problem. With so many other types of Machine Learning models out there, is a non-deterministic large language model really the right choice or is another model better suited for infrastructure type problems?
These are the questions I'm actively working on. If you've solved any of them — or have a sharper framing than I've got — I'd like to hear it.
CrashLoopBackOff states, OOMKilled events, and other failure conditions such as Connectivity/DNS, Database Deadlock, or Secret/Config Missing.The agent is designed so that each layer independently limits blast radius — not as redundancy for its own sake, but because no single control is sufficient when the reasoning engine is non-deterministic.
| Layer | Mechanism | What it prevents |
|---|---|---|
| Pod security | runAsNonRoot, read-only filesystem, all Linux capabilities dropped | Container escape, privilege escalation |
| RBAC | Agent pod is strictly read-only; write verbs live only on k8gent-executor-sa | Agent compromise → cluster mutation |
| Ephemeral executor | Short-lived Jobs via k8gent-executor-sa; ttlSecondsAfterFinished=120 | Persistent foothold after remediation |
| OPA Gatekeeper | Rego policy enforced at the API server admission layer | Executor escaping its scope, even if RBAC is misconfigured |
| Log sanitization | Regex sweeper strips IPs, JWTs, API keys, emails before LLM call | Secrets exfiltration via LLM prompt |
| Rate limiting | Hourly circuit breakers and event debouncing | Noise-driven API budget exhaustion |
| Ingress-free comms | Slack Socket Mode; no exposed endpoints or Ingress rules | Inbound attack surface |
The OPA Gatekeeper policy (defined in deploy/helm/k8gents/templates/opa-gatekeeper/) explicitly blocks the executor service account from modifying serviceAccountName, enabling hostNetwork or hostPID, operating inside kube-system, or mutating any resource kind other than pods and deployments — enforced directly at the Kubernetes API admission layer, independent of RBAC.
K8gentS ships as a Helm chart. OPA Gatekeeper is a declared chart dependency — the security sandbox installs automatically alongside the agent.
kubectl authenticated to the target clusterAI_API_KEY)SLACK_BOT_TOKEN starting xoxb- and SLACK_APP_TOKEN starting xapp-)SLACK_CHANNEL_ID) and a comma-separated list of approver Slack user IDs (ALLOWED_APPROVERS)api.slack.com.xapp-...).chat:write and chat:write.public OAuth scopes → generates a Bot Token (xoxb-...).docker build -t your-registry/k8gent:latest .
docker push your-registry/k8gent:latest
Update image.repository in deploy/helm/k8gents/values.yaml to match your registry path.
# Fetch chart dependencies (downloads OPA Gatekeeper)
helm dependency update deploy/helm/k8gents
helm install k8gents deploy/helm/k8gents \ --namespace k8gent-system \ --create-namespace \ --set secrets.aiApiKey="YOUR_GEMINI_KEY" \ --set secrets.slackBotToken="xoxb-..." \ --set secrets.slackAppToken="xapp-..." \ --set secrets.slackChannelId="C12345678" \ --set secrets.allowedApprovers="U123456,U789012"
To disable the OPA sandbox (if your cluster already runs Gatekeeper with its own policies):
--set sandbox.enabled=false --set gatekeeper.enabled=false
kubectl logs -l app=k8gents -n k8gent-system -f
You should see the watcher connect to the cluster API and the Slack Socket Mode connection initialize.
Key environment variables (set via --set agent.* in Helm, or directly if running locally):
| Variable | Default | Description |
|---|---|---|
WATCH_NAMESPACES | all | Comma-separated namespaces to watch, or all for cluster-wide |
AI_MODEL | gemini-2.5-pro | Any model name supported by the Google GenAI SDK |
LOG_LEVEL | INFO | Python logging level |
REMEDIATION_MODE | api | api (Kubernetes client, safe in-cluster) or subprocess (kubectl, local dev only) |
Changing AI_MODEL requires no code changes — the agent routes all LLM calls through the configured model name dynamically.
What's implemented and working:
io.github.JDoornink/k8gentsWhat's genuinely unsolved: