Agent
The headline CRD. An Agent declares a runtime, a goal, a model, the tools it may use, and when it wakes up — and the operator runs exactly one pod per Agent.
An Agent is a coding or automation agent expressed as a Kubernetes object. The operator creates a single pod per Agent (the agentlet plus the runtime CLI), wires its model credentials, mounts its tools, and fires runs on a schedule or on demand.
A minimal Agent
1apiVersion: v12kind: Secret3metadata: { name: claude-code-token, namespace: adaptive }4type: Opaque5stringData: { token: "sk-ant-REPLACE_ME" }6---7apiVersion: agentkube.io/v1alpha18kind: Agent9metadata:10 name: triage-bot11 namespace: adaptive12 labels:13 agentkube.io/agentgroup: support-team # agents sharing this share memory14spec:15 runtime: ClaudeCode # ClaudeCode|Codex|OpenCode|Aider|Cline|Goose|Cursor|Custom16 mode: supervised # supervised (exploratory) | system (deterministic)17 paused: false # YAML-created agents default to paused: true18 goal:19 inline: |20 Triage incoming GitHub issues: fetch new ones hourly, label, assign.21 model:22 name: claude-opus-4-723 provider: anthropic24 agentToken:25 secretRef: { name: claude-code-token, key: token }Core fields
runtime— which agent CLI runs in the pod; selects the image (see Runtime images).mode—supervisedlets the agent pick its own steps;systemexecutes a deterministic playbook.paused— manifests default to paused so you can review the resolved status before a run fires; setfalseto arm.goal—inlinetext or aconfigMapKeyRef.model+ optionalprovider— model binding; whenprovideris omitted the reconciler picks the tenant default for the model family.agentToken— a Secret ref holding the runtime's API key (mapped to the runtime's token env var).
Runtimes & modes
Set spec.image to override the default runtime image, or use runtime: Custom with your own image. Each Agent is single-replica by design — the controller names the pod after the Agent; there is no replicas knob.
Tools
spec.tools filters what reaches the agent across every source (runtime built-ins and bastion Tools):
1 mcpRefs:2 - name: github-tools3 tools:4 mode: allow # all | allow | deny (top-level, across all sources)5 allow:6 - Bash7 - Read8 - Edit9 - "mcp:github-tools/*"10 # per-source sub-filters also exist: native: {…} bastion: {…}Wake-up & scheduling
1 wakeup:2 enabled: true3 mode: interval # interval | schedule | oneShot4 interval: 15m5 # schedule: "*/15 * * * *" # when mode=schedule6 jitter: 30s7 concurrencyPolicy: Forbid # Allow | Forbid | Replace8 activeDeadlineSeconds: 18009 backoffLimit: 3Memory & context
memory (scope agent or group; backend objectStore, pvc, or none) plus context (restore prior memory, pinned files, token budgets) control what each run remembers. Agents sharing the agentkube.io/agentgroup label and scope: group share a memory store.
Status
.status carries phase (Active | Paused | Error | Succeeded | Failed), ready/desired replicas, currentRun / recentRuns with token usage, resolvedMCPEndpoints, effectiveTools, and conditions (Ready, MCPBound, TokenResolved, ScheduleValid, MemoryAccessible). kubectl describe agent <name> is your first stop when a run won't fire.