Internals

Architecture

How the control plane fits together, plus the gRPC API reference.

Storing millions of short-lived tasks as Kubernetes CRDs pushes etcd past its comfort zone (single-digit GB storage limits, write-rate bottlenecks, control plane degradation). AX keeps its state in Redis and uses Redis Streams as the work queue between the API server and a horizontally scaled pool of controllers.

                      ax apply -f task.yaml
                            ax-server
                      (gRPC API + /healthz)
                     store & publish event
                              Redis
               (Task Hashes + Event Streams + PubSub)
                      XREADGROUP (Streams)
                          ax-controller
                   (Horizontally Scaled Workers)
                        gRPC (Control API)
                         Agent Substrate
                ┌───────────────────────────────┐
                │ • Atespace Provisioning       │
                │ • Actor Creation & Activation │
                │ • Worker Assignment           │
                │ • Egress Policy Filtering     │
                └───────────────────────────────┘

Components

Binary Role
ax Developer CLI. Applies manifests, inspects and watches resources, tunnels to the cluster.
ax-server Stateless gRPC API on port 8080. Validates manifests, persists to Redis, publishes events.
ax-controller Reconciliation workers. Consume the Redis stream, provision atespaces and actors on Agent Substrate, apply egress policy, and drive tasks toward desired state. Scale by adding replicas.
ax-task-runner Entrypoint inside every task container. Bootstraps the workspace, serves metadata, and runs the agent command. A thin wrapper over the runner package, which custom images can embed directly.

API reference

The control plane exposes the ax.v1alpha1.AX gRPC service. Health checks are plain HTTP: GET /healthz on the same port returns 200 OK.

Tasks

RPC Description
GetTask Get a task by atespace and name.
ListTasks List tasks in an atespace, with pagination.
UpdateTask Create or update a task.
DeleteTask Delete a task.
SuspendTask Checkpoint actor state and pause the task.
ResumeTask Resume a suspended task.
WatchTask Server-streaming RPC that emits status and condition transitions as they happen.

Gateways

RPC Description
GetGateway Get a gateway by atespace and name.
ListGateways List gateways in an atespace.
UpdateGateway Create or update a gateway.
DeleteGateway Delete a gateway.

Workspaces

RPC Description
GetWorkspace Get a workspace by atespace and name.
ListWorkspaces List workspaces in an atespace.
UpdateWorkspace Create or update a workspace.
DeleteWorkspace Delete a workspace.

Models

RPC Description
GetModel Get a model configuration by atespace and name.
ListModels List model configurations in an atespace.
UpdateModel Create or update a model configuration.
DeleteModel Delete a model configuration.

Request and response types follow the <Method>Request / <Method>Response convention. Generated Go types live in pkg/apis/v1alpha1.