Foreman 101: agentic coding as Kubernetes resources Foreman is an agentic coding system that runs as Kubernetes resources, treating model claims of success as untrusted requests rather than results. The system uses Workloads, agents, and verifiers to ensure only verified code lands, with a Helm chart installable on any cluster. Foreman is an agentic coder that runs as Kubernetes resources. You describe work as a Workload, it decomposes into tasks, agents running on your nodes pick them up, and a branch comes out the other end with something deterministic standing between that branch and your main. This is the walkthrough. Four objects to understand, an install, an agent, a verifier, and a real run. Every command and every output below is from a working cluster. Foreman is deliberately small. Almost everything you do is one of these. coder and verifier .The shape of a run is: you apply a Workload, the controller synthesizes AgenticTasks, the scheduler routes each to a FleetNode whose agent can serve it, the agent runs the model in a loop with tools, and the result lands as a branch plus a verdict. Worth stating plainly, because it shapes every design decision: the model is not trusted, and specifically its claim to have succeeded is not trusted. A coder agent finishes by calling a tool that says "I am done, verdict GO." Foreman treats that as a request, not a result. If the model says GO and produced no diff, the run is recorded as NO-GO. If the verifier's checks do not pass, the work does not land, no matter how confident the summary was. That is the difference between an agent that writes code and a system you can leave running. Everything else in this post is plumbing around that idea. Foreman ships as a Helm chart that depends on LLMKube core. Any cluster will do; a throwaway kind cluster is fine, and no GPU is required to follow along. kind create cluster --name foreman-101 helm repo add llmkube https://defilantech.github.io/LLMKube helm repo update helm upgrade --install llmkube llmkube/llmkube \ --namespace llmkube-system --create-namespace helm upgrade --install foreman llmkube/foreman \ --namespace foreman-system --create-namespace \ --set agent.mode=native \ --set 'agent.roles={worker,coder,verifier}' Two flags on that second install are worth understanding rather than copying. agent.mode=native runs the real agent loop. The chart's default is stub , which registers a FleetNode and does nothing, so that a chart install can be smoke-tested on a cluster with no model and no credentials. agent.roles is what the scheduler matches against. A node advertising only worker will never be given coder work. Advertise the roles this node should actually serve. You should end up with three pods and a registered node: bash $ kubectl get pods -n llmkube-system NAME READY STATUS RESTARTS AGE llmkube-controller-manager-777d9f756b-xb7xr 1/1 Running 0 56s $ kubectl get pods -n foreman-system NAME READY STATUS RESTARTS AGE foreman-agent-568b74c49f-mnkc8 1/1 Running 0 27s foreman-operator-7c687499f9-k96mb 1/1 Running 0 27s $ kubectl get fleetnodes NAME PHASE VERSION HEARTBEAT AGE foreman-agent-568b74c49f-mnkc8 Ready 0.9.12 20s 20s Foreman needs two kinds of credential, and they do different jobs. A git credential lets the agent read the issue and push the branch. A model credential lets it talk to a hosted API, and is not needed at all if you serve the model yourself. git: the API token, plus the credential used for the push kubectl create secret generic foreman-github \ --from-literal=GITHUB TOKEN="$GITHUB TOKEN" -n foreman-system kubectl create secret generic foreman-git-credentials \ --from-literal=token="$GITHUB TOKEN" -n foreman-system helm upgrade foreman llmkube/foreman -n foreman-system --reuse-values \ --set agent.githubToken.secretName=foreman-github \ --set coder.gitCredentialsSecret=foreman-git-credentials \ --set agent.gitRemoteURL=https://github.com/