Agents Helm Chart
Install the Agents control plane (Jangar) and run an AgentRun end-to-end on kind.
Agents Helm Chart
The Agents chart deploys the Jangar control plane plus the full Agents CRD suite. It is production-minded by default (RBAC, optional PDB/HPA/NetworkPolicy) while still supporting fast local iteration.
What you get
- Jangar API and controllers for Agents, Orchestration, Tools, Signals, Schedules, Artifacts, Workspaces
- Native runtime that executes AgentRuns as Jobs/Pods in the cluster
- A full CRD suite with examples you can apply immediately
Requirements
- Kubernetes 1.25+
- Helm 3.12+
kind,kubectl,helminstalled locally
Kind quickstart (end-to-end)
This flow spins up a kind cluster, installs Postgres, deploys the chart, and runs a smoke AgentRun so you can verify the control plane is operational.
scripts/agents/kind-e2e.shThe first run may take a while because the script builds a local Jangar image. If the
services/jangar/.output bundle is missing, it will run bun install and bun run build
to generate it before building the container.
Expected output:
deployment/agentsbecomes readyagentrun/agents-workflow-smokereachesSucceeded
Verify manually:
kubectl -n agents get agentruns
kubectl -n agents describe agentrun agents-workflow-smoke
kubectl -n agents get jobsAccess the control plane UI locally:
kubectl -n agents port-forward svc/agents 8080:80Then open http://127.0.0.1:8080.
What the script does
The scripts/agents/kind-e2e.sh script performs the following steps:
- Creates a kind cluster (or reuses the existing one).
- Builds a local Jangar image and loads it into kind.
- Installs Postgres via the Bitnami chart in the
agentsnamespace. - Creates the
jangar-db-appSecret with the database URL. - Installs the Agents chart using
charts/agents/values-kind.yaml. - Applies the smoke AgentProvider/Agent/ImplementationSpec/AgentRun examples.
- Waits for the AgentRun to succeed.
Codex PR end-to-end (optional)
This flow runs a Codex agent inside the cluster and creates a GitHub PR. It requires a Codex auth session and a GitHub token with repo write access.
Create the secrets:
kubectl -n agents create secret generic codex-auth \
--from-file=auth.json="$HOME/.codex/auth.json"
kubectl -n agents create secret generic codex-github-token \
--from-literal=GITHUB_TOKEN="$(gh auth token)" \
--from-literal=GH_TOKEN="$(gh auth token)"Mount the auth secret so the controller can set up a writable Codex home directory:
helm upgrade agents charts/agents --namespace agents --reuse-values \
--set controller.authSecret.name=codex-auth \
--set controller.authSecret.key=auth.jsonApply the Codex provider + agent, then run an AgentRun with an inline ImplementationSpec:
kubectl -n agents apply -f charts/agents/examples/agentprovider-native-workflow.yaml
kubectl -n agents apply -f charts/agents/examples/agent-native-workflow.yaml
cat <<'EOF' | kubectl -n agents apply -f -
apiVersion: agents.proompteng.ai/v1alpha1
kind: ImplementationSpec
metadata:
name: codex-e2e-proof
spec:
source:
provider: manual
externalId: manual:codex-e2e-proof
url: https://example.com/agents/codex-e2e-proof
summary: "Codex E2E proof"
text: |
Create a new file docs/agents/codex-e2e-proof.md with the single line:
"Codex E2E test ran on 2026-02-03."
acceptanceCriteria:
- File exists with the note
---
apiVersion: agents.proompteng.ai/v1alpha1
kind: AgentRun
metadata:
name: codex-e2e-pr
spec:
agentRef:
name: codex-native-workflow
implementationSpecRef:
name: codex-e2e-proof
runtime:
type: workflow
config:
ttlSecondsAfterFinished: 900
workflow:
steps:
- name: implement
parameters:
stage: implement
workload:
image: jangar-local:kind
resources:
requests:
cpu: 250m
memory: 512Mi
secrets:
- codex-github-token
parameters:
repository: proompteng/lab
base: main
issueTitle: "Codex E2E proof"
issueUrl: "https://github.com/proompteng/lab"
EOFWait for the run and confirm the PR:
kubectl -n agents wait --for=condition=Succeeded agentrun/codex-e2e-pr --timeout=1800s
kubectl -n agents get jobs
kubectl -n agents logs job/codex-e2e-pr-step-1-attempt-1Configuration knobs
The kind script supports the following environment overrides:
CLUSTER_NAME(default:agents)NAMESPACE(default:agents)POSTGRES_RELEASE(default:agents-postgres)POSTGRES_USER(default:agents)POSTGRES_PASSWORD(default:agents)POSTGRES_DB(default:agents)CHART_PATH(default:charts/agents)VALUES_FILE(default:charts/agents/values-kind.yaml)SECRET_NAME(default:jangar-db-app)SECRET_KEY(default:uri)KUBECTL_CONTEXT(default:kind-<cluster>)IMAGE_REPOSITORY(default:jangar-local)IMAGE_TAG(default:kind)BUILD_IMAGE(default:1, set to0to skip the Docker build)
Production checklist
For production deployments, keep the same chart but switch to production values:
- Use an external Postgres with
database.secretRef. - Prefer image digests (
values-prod.yamlalready does this). - Enable
podDisruptionBudgetandnetworkPolicyas needed. - Consider
autoscaling.enabledfor the control plane. - Scope controllers via
controller.namespacesor enable cluster scope explicitly.
Troubleshooting
If the AgentRun does not complete:
kubectl -n agents logs deployment/agents
kubectl -n agents get agentruns
kubectl -n agents describe agentrun agents-workflow-smoke
kubectl -n agents get jobsCommon fixes:
- Ensure the cluster has enough CPU/memory for Jobs.
- Re-run the script to reinstall the chart and smoke resources.
- If using a custom image registry, ensure image pull secrets are configured.
Clean up
helm uninstall agents -n agents
helm uninstall agents-postgres -n agents
kind delete cluster --name agents