Skip to main content
Version: dev

Custom resources

Both resources use the API group agent.rossoctl.dev and the version v1alpha1. For the function of each resource, see Control plane.

The operator API reference is the source of this page. The project generates that document from the resource definitions.

AgentRuntime

This resource adds a workload to the platform. The short names are art and agentrt.

apiVersion: agent.rossoctl.dev/v1alpha1
kind: AgentRuntime
metadata:
name: weather-agent
namespace: team1
spec:
type: agent
targetRef:
apiVersion: apps/v1
kind: Deployment
name: weather-agent

The spec fields

FieldTypeNecessaryFunction
typestringYesagent or tool.
targetRefTargetRefYesThe workload that this resource configures.

What the operator adds to the workload

Labels on the workload:

LabelValue
rossoctl.io/typeagent or tool, from the spec.type field.
app.kubernetes.io/managed-byrossoctl-operator. The operator removes this label when you delete the AgentRuntime resource.

Annotations on the workload:

AnnotationValue
rossoctl.io/skillsA JSON array of skill names, for example ["weather-forecast"]. The operator reads this annotation. It does not write it. The backend writes it, or you write it. The operator then writes the result to the status.linkedSkills field, when the skillDiscovery feature gate is on.

On the pod template:

KeyValue
rossoctl.io/type, a labelagent or tool. It marks each pod of this workload.
rossoctl.io/config-hash, an annotationA hash of the resolved configuration. A change starts a rolling update.

Configuration layers

The operator calculates the hash from two ConfigMaps. The more specific layer wins.

  1. The namespace layer. A ConfigMap with the label rossoctl.io/defaults=true, in the namespace of the workload.
  2. The cluster layer. The rossoctl-platform-config ConfigMap, in the rossoctl-system namespace.
Two items are outside the hash

The authBridgeMode and mtlsMode fields of one resource are not in the hash. The webhook reads them when Kubernetes creates a pod.

The feature gates in the rossoctl-feature-gates ConfigMap apply to the whole cluster. A namespace cannot replace them, and an AgentRuntime resource cannot replace them. They control which RossoCortex components run, which are the proxy, the identity helper and the client registration. They also control whether skill discovery is active.

AgentCard

This resource reads and stores the data of an agent, for discovery. The short names are agentcards and cards.

The operator creates this resource for each agent. It uses this pattern for the name: {name}-{kind}-card. A Deployment with the name weather-agent therefore receives a resource with the name weather-agent-deployment-card.

apiVersion: agent.rossoctl.dev/v1alpha1
kind: AgentCard
metadata:
name: weather-agent-deployment-card
namespace: team1
spec:
syncPeriod: 30s
targetRef:
apiVersion: apps/v1
kind: Deployment
name: weather-agent
identityBinding:
trustDomain: localtest.me
strict: false

The spec fields

FieldTypeNecessaryFunction
targetRefTargetRefYesThe workload of this agent.
syncPeriodstringNoThe interval between two reads of the card. The default is 30s. Use the Go duration format.
identityBindingobjectNoSee the next table.

identityBinding

FieldTypeFunction
trustDomainstringReplaces the --spire-trust-domain value of the operator, for this resource only. An empty value selects the value of the operator.
strictbooleanfalse, the default, writes the result to the status only. true makes a failure start a network isolation.

The operator reads the SPIFFE identity from the SAN URI of the first certificate in the x5c chain of the signature.

The status fields

FieldTypeFunction
cardobjectThe stored agent card. See The card data.
conditionsarrayThe standard Kubernetes conditions for the read operation.
lastSyncTimetimestampThe time of the last successful read.
protocolstringThe protocol that the operator found, for example a2a.
targetRefTargetRefThe workload that the operator found.
validSignaturebooleanWhether the signature of the card is valid.
signatureVerificationDetailsstringA description of the last validation.
signatureKeyIdstringThe kid value from the header of the signature.
signatureSpiffeIdstringThe SPIFFE identity from the header of the signature. The operator writes this field only when the signature is valid.
signatureIdentityMatchbooleantrue when the signature is valid and the identity binding passed.
cardIdstringA hash of the content of the card. Use it to detect a change.
expectedSpiffeIDstringThe identity that the operator used for the binding.
bindingStatusobjectSee the next table.

bindingStatus

FieldTypeFunction
boundbooleanWhether the identity is in the permitted list.
reasonstringBound, NotBound or AgentNotFound.
messagestringA description.
lastEvaluationTimetimestampThe time of the last evaluation.

The card data

The status.card field has the structure of an A2A agent card.

FieldTypeFunction
namestringThe name of the agent.
descriptionstringWhat the agent does.
versionstringThe version of the agent.
urlstringThe address of the agent.
documentationUrlstringThe address of the documents of the agent.
iconUrlstringThe address of an icon.
providerobjectThe organization field and the url field.
capabilitiesobjectThe streaming, pushNotifications and extensions fields.
defaultInputModes[]stringThe media types that the agent accepts.
defaultOutputModes[]stringThe media types that the agent produces.
skills[]objectSee The skills in a card.
supportsAuthenticatedExtendedCardbooleanWhether a second card exists.
signatures[]objectThe signatures, as section 8.4.2 of the A2A specification describes.

capabilities.extensions

FieldTypeFunction
uristringThe identifier of the extension.
descriptionstringWhat the extension does.
requiredbooleanWhether a client must support the extension.
paramsobjectThe configuration of the extension.

The skills in a card

FieldTypeFunction
idstringThe identifier of the skill.
namestringThe name of the skill.
descriptionstringWhat the skill does.
tags[]stringWords that describe the type of the skill.
examples[]stringExample situations.
inputModes, outputModes[]stringThe media types.
parameters[]objectThe name, type, description, required and default fields.

signatures

FieldTypeFunction
protectedstringThe protected header, in base64url. It contains the alg, kid, typ and x5c values.
signaturestringThe signature, in base64url.
headerobjectOptional header values, for example timestamp.

TargetRef

Both resources use this type.

FieldTypeNecessaryFunction
apiVersionstringYesFor example apps/v1.
kindstringYesDeployment, StatefulSet or Sandbox.
namestringYesThe name of the workload.