Noktron
Pre-release · run daily against a real cluster

The loop does not end at the merge. It ends at the healthy pod.

Noktron turns a labelled GitHub issue into a manifest change, delivers it the way your team has agreed to accept changes, watches the Argo CD rollout, and verifies health in the cluster — scoped to exactly what changed.

Go 1.26
Kubernetes ≥ 1.29
Helm OCI chart
Artifacts cosign signed
Apache-2.0
The gap

Your coding agent thinks “merged” means “done”. Your cluster disagrees.

Every agent that writes Kubernetes manifests stops at the pull request. What happens next — does Argo CD actually sync it? does the pod actually come up? is it still healthy two minutes later? — is left to a human staring at a dashboard.

Noktron closes that gap. A run is only SUCCEEDED when it can name the resources it watched go green, and for how long.

Issue understood agent
Manifests written agent
Pull request merged agent
Argo CD synced the change noktron
Pods came up, and stayed up noktron
Failure classified and fed back noktron
How it works

One label starts it. Nothing else is manual.

Six stages, two of which no other agent runs at all — and a failure path that goes back into the same agent session instead of into your inbox.

01

GitHub issue

Labelled noktron. That is the entire trigger surface.

02

Agent job

Sandboxed pod, manifests only, writes inside the configured paths.

03

Pre-flight

kubeconform + conftest on the rendered output.

fails → back to 02
04

Delivery

Pull request, auto-merge or direct push — your team's rule, per environment.

05

Argo CD sync

The change reaches the cluster the way it always does.

06

Observer

Scoped health check on the resources that actually changed.

classified failure → next iteration's context
SUCCEEDED
healthy, and still healthy after the stability window
↑ on failure the classified diagnosis goes back to 02 as the next iteration's context

Pre-flight runs against the rendered output, so what gets validated is what Argo CD will actually apply — not the templates. A failure never reaches your repo; it goes straight back into the same agent session as feedback.

What “verified” means

A green check is a list you can read, not a vibe.

After delivery the observer resolves the Argo CD application down to the individual resources the change actually touched, waits for the sync, and then requires them to be healthy and stay healthy for a stability window. The run records that scope.

A failure is classified before it goes back to the agent — and the agent is explicitly allowed to give up. When a fix is outside the repo's reach, it escalates with copy-pasteable instructions instead of burning iterations.

ImagePullBackOff CrashLoopBackOff schema rejection quota exceeded missing permission → escalate
run/4f21c9 platform · sandbox SUCCEEDED
Why green? 6 RESOURCES IN SCOPE
Deployment/checkout-apiavailable 3/34m 12s
ReplicaSet/checkout-api-7c9f3 ready4m 12s
Service/checkout-apiendpoints 34m 10s
ConfigMap/checkout-api-envsynced4m 14s
HPA/checkout-apiscaling active3m 58s
IngressRoute/checkout-webaccepted4m 09s
scope resolved from apps/checkout/** · argo app app-sandbox
healthy for 120s stability window · 2 iterations · redacted: 4 tokens, 1 connection string
Run record — illustrative values
Talking to a run

There is no separate console to learn.

Everything happens in the issue or the pull request you already have open.

@noktron stop
Stops after the current iteration.
@noktron restart
Throws the branch away and starts over.
@noktron reopen
Reactivates a run that already ended.
@noktron continue
Resumes after a manual fix or a takeover.
a PR review or inline comment
A review iteration on the same branch, then a reply in the thread and resolve when addressed.
a push to the work branch
Automation pauses. Your commits are never force-pushed over.
Quick start

Install to first verified run in 15 minutes.

1

Install the chart

Secrets are referenced by name only. Noktron never reads them, and nothing secret belongs in your Git repo.

SHELL
helm install noktron oci://ghcr.io/fakieheelflip/charts/noktron \
  --namespace noktron --create-namespace \
  --set github.mode=pat \
  --set github.pat.secretRef.name=noktron-github-pat \
  --set reconciler.argocd.authTokenSecretRef.name=noktron-argocd \
  --set llm.apiKeySecretRef.name=noktron-llm
2

Declare a project

One Project per config repo. paths is the hard boundary the agent may write inside — and at the same time the scope the verification is resolved against.

PROJECT.YAML
apiVersion: noktron.io/v1alpha1
kind: Project
metadata:
  name: platform
  namespace: noktron
spec:
  configRepo: { url: https://github.com/your-org/your-gitops-repo }
  auth: { githubAppRef: { name: noktron-github-pat } }
  agentProfileRef: { name: default }   # ships with the chart
  environments:
    - name: sandbox
      paths: ["apps/**"]
      argoApplication: app-sandbox
      deliveryMode: manual             # manual | auto-merge | direct-push
3

Label an issue noktron

That is the trigger. Watch it in the embedded UI.

SHELL
kubectl -n noktron port-forward svc/noktron 8090:8090
BEFORE YOU EXPOSE IT The UI has no authentication of its own in v0.1. It can pause every run and it shows the prompts that were sent. Put it behind your ingress auth — forward-auth or an OIDC proxy — or leave it on port-forward.
Security model

It drives an LLM against your cluster. The boundaries are the product.

Noktron never reads Kubernetes Secrets

Not in the control plane, not in the observer, not via the agent proxy (ADR-0005). The curated read-only ClusterRole contains no secrets rule, and the proxy refuses to start if one ever appears.

Agent pods are untrusted workloads

Separate namespace, Pod Security restricted, resource quota, egress NetworkPolicy, no Kubernetes API access by default. Cluster view goes through the scoped, redacting, audited noktronctl proxy.

Redaction before persistence and before every LLM call

Tokens, keys, connection strings, JWTs, base64 blobs and Secret data are masked. What was masked — classes and counts, never contents — is visible in the UI.

Path policy enforced twice

In the runner pre-flight and again server-side before delivery. The agent can only change files under the environment's configured paths.

No force-push, ever

Human commits on a work branch survive. A human push pauses automation (HUMAN_TAKEOVER) until @noktron continue.

Loop guards and an audit trail

Iteration, cost and wall-clock budgets, identical-diff guard, circuit breaker, global kill switch. Kill-switch changes, merges, escalations, raw-prompt access and bundle exports land in an append-only audit table.

DEFAULTS direct-push and auto-merge are off unless you say so twice — once at install time, and again per environment. Report vulnerabilities via GitHub private vulnerability reporting; first response within 7 days.
Architecture

One Go binary, two workloads, one database.

PostgreSQL holds everything that must outlive a pod.

ingest

GitHub webhooks and polling — issue labels, comments, reviews, pushes.

orchestrator

Run lifecycle, agent jobs, prompts, delivery.

observer

Argo CD sync plus in-cluster health verification, scoped to the change.

apiserver / uiapi

Internal API for agent pods; REST + SSE for the UI.

CRDs Project NoktronRun AgentProfile noktron.io/v1alpha1
Roadmap

Where it is, and where it goes next.

v0.1 NOW
  • GitHub → agent → delivery → Argo CD → in-cluster verification → feedback
  • Human channel in issues and pull requests
  • Embedded UI
v0.2 NEXT
  • App-repo writes (image-bump chain)
  • In-app auth and RBAC for the UI
  • Replay-an-iteration debugging
  • OpenAI and LiteLLM as first-class providers
  • Slack escalations
v0.3 LATER
  • Flux reconciler
  • GitLab
  • Multi-cluster projects
STATUS Pre-release, under active development. The CRD API noktron.io/v1alpha1 may still change. It is run against a real cluster daily, which is where most of the bugs come from.

Merged is not done.
Green is done.

Install the chart, declare one project, label one issue — and read the list of resources that went green.