Half-price runs, no pod
execution: batch sends the prompt to the vendor’s batch API (Anthropic, OpenAI or Gemini) at
about half the price and records the answer on the Agent. See batch runs.
ai-agent-subsystem turns “run a coding agent” into a declarative Kubernetes operation. You
describe what the agent should do (a recipe), where it runs (a runtime template), and which
run you want (parameters). A controller reconciles each run into a Kubernetes Job, supervises it,
streams its output, and records the result on the resource’s status. Kubernetes stays the single
source of truth.
Half-price runs, no pod
execution: batch sends the prompt to the vendor’s batch API (Anthropic, OpenAI or Gemini) at
about half the price and records the answer on the Agent. See batch runs.
A signed, pinned install
One install.yaml per release: images pinned by digest, cosign-signed, with SBOMs and SLSA
provenance. Non-root, read-only root filesystem, NetworkPolicy. No cert-manager.
Kubernetes is the API
No database, no backend service, no UI to host. Your RBAC, quotas, GitOps and audit logs already cover it.
You never touch D
The CRDs are the API. Typed TypeScript contracts are generated from the same source, so they cannot drift. D matters only to contributors changing the API.
Everything is built from three Custom Resources that reference each other in a chain:
flowchart LR
AD["AgentDefinition<br/>the recipe"] -->|agentDefRef| ST["Station<br/>the runtime"]
ST -->|stationRef| AG["Agent<br/>one run"]
AG -->|controller creates| JB["Job → Pod"]
classDef ad fill:#2f5fd8,color:#fff,stroke:#16224f;
classDef st fill:#3f7be0,color:#fff,stroke:#16224f;
classDef ag fill:#5b93ec,color:#fff,stroke:#16224f;
class AD ad
class ST st
class AG ag
AgentDefinition
The recipe: prompt template, model, allowed tools, permissions, and output sinks.
Station
The runtime: a Pod template plus a recipe reference and run-history limits.
Agent
One run: a Station reference, parameters, and a status that tracks the lifecycle.
Controller
Watches Agents, builds Jobs, patches status, and prunes old runs.