AgentFleet
AgentFleet is a Platform-scoped declaration of one or more agents, each reconciled into a Deployment running under the tenant's identity. The scale subresource is deliberately omitted: `kubectl scale` would be ambiguous (min? max? per-agent?) for a fleet, so per-agent replica overrides live on AgentSpec.Replicas and fleet-wide behavior is driven by .spec.scaling (KEDA) instead.
AgentFleetSpec declares one or more agents and the platform scaffolding around them (KEDA scaling, NetworkPolicy, the tenant identity binding). Each agent runs as a Deployment in the tenant's namespace, under the tenant ServiceAccount, executing the tenant's own image. The agent loop and its tools live in that image and run in that process — so an action the agent takes is taken *as the tenant*, and the Kubernetes audit log records the tenant's identity against it. That is the property the platform exists to provide: an agent's claim about what it did can be checked against the record of what happened, because both name the same principal.
What kubectl get shows
| Column | Type | Meaning |
|---|---|---|
Platform | string | — |
Phase | string | — |
Ready | integer | — |
Spec
agents[]objectrequiredAgents is the list of agents to provision in this fleet.
imagestringrequiredImage is the container the agent runs — the tenant's own build, carrying its agent loop and its tools. There is no platform-supplied agent runtime and no separate tool server. A tool server would execute the agent's actions under its own identity, which is exactly what makes an action untraceable to the agent that requested it: the audit log names the tool server, and the agent's claim to have done something cannot be confirmed or refuted. Tools run in the agent's process, as the tenant, so the two records line up.
modelRoutestringrequiredModelRoute is the named route on the Platform's ModelGateway.
namestringrequiredsystemPromptstringrequiredSystemPrompt is the agent's instruction text.
replicasinteger (int32)Replicas overrides the fleet-wide scaling minimum for this agent.
resourcesobjectResources overrides the default container resources. The tenant's ResourceQuota applies either way; this is for an agent that needs a different shape than the default.
3 fields under
resourcesclaims[]objectClaims lists the names of resources, defined in spec.resourceClaims, that are used by this container. This field depends on the DynamicResourceAllocation feature gate. This field is immutable. It can only be set for containers.
2 fields under
claimsnamestringrequiredName must match the name of one entry in pod.spec.resourceClaims of the Pod where this field is used. It makes that resource available inside a container.
requeststringRequest is the name chosen for a request in the referenced claim. If empty, everything from the claim is made available, otherwise only the result of this request.
limitsobjectLimits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
requestsobjectRequests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. Requests cannot exceed Limits. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
platformRefobjectrequiredLocalRef references a CR by name in the same namespace.
namestringrequired
scalingobjectScaling controls KEDA's ScaledObject for the runtime Deployments.
enabledbooleanrequireddefaulttrueEnabled — when false, the operator scales the Deployment to 0 and removes the ScaledObject. Toggled false by the kill-switch on budget breach.
maxinteger (int32)default10Max replicas.
mininteger (int32)default1Min replicas. Use a pointer so 0 (kill-switch state) is distinguishable from "field absent" — with int32 + omitempty, the zero value gets dropped and re-defaulted, making min=0 unrepresentable.
queueDepthTriggerinteger (int32)default10QueueDepthTrigger: scale up when SQS depth exceeds this value.
queueUrlstringQueueUrl is the SQS queue the fleet's work originates from. When set the operator emits a KEDA aws-sqs-queue trigger; otherwise a CPU-utilization placeholder. The tenant role must have sqs:GetQueueAttributes on this queue (granted via the agent-iam baseline policy + an in-policy resource ARN derived from the URL).