Skip to content

Cluster page

The Cluster page gives operators a real-time view of the Kubernetes cluster backing the Agentweaver AKS deployment: sandbox capacity, Kubernetes health checks, and any legacy subtasks recorded as waiting for capacity.

Kubernetes owns scheduling (issue #217)

The platform no longer pre-gates on quota. It submits the SandboxClaim and waits for Kubernetes to schedule and bind the pod, so a Pending pod is an expected transient state, not a failure. The namespace ResourceQuota no longer caps CPU/memory (only object counts). The Pending capacity KPI, the Waiting for capacity badge, and the pending-capacity table are back-compat surfaces that only reflect historical runs.

It is available under the Cluster nav item in the SYSTEM section of the project left rail. Route: /projects/:projectId/cluster.

Cluster page with KPI cards, health checks, sandbox claims, and capacity tables

📸 Screenshot — cluster-page.pngShows: the Cluster page with Orphaned, Pending capacity, Checks OK, and Warm pool KPI cards plus Health checks, Sandbox claims, orphaned pods, pending capacity, warm pools, and sandbox objects. Path: open a project → click Cluster in the SYSTEM section of the left rail → /projects/:projectId/cluster.

When to use the Cluster page

Open the Cluster page when:

  • a coordinator run shows subtasks in ⏳ Waiting for capacity (amber badge in the topology graph);
  • runs are dispatching slowly and you suspect pod scheduling or node-pool autoscaling delays;
  • you want to confirm that all Kubernetes API components are reachable;
  • orphaned pods are accumulating (the reaper has not swept them yet);
  • after a deployment or scaling event, to confirm the cluster is healthy.

KPI cards

The KPI cards at the top of the page summarize the cluster signals the current UI exposes:

CardWhat it shows
OrphanedAgent pods that no longer match an active run.
Pending capacityLegacy. Subtasks recorded in the historical PendingCapacity status; empty for new runs (Kubernetes now owns scheduling).
Checks OKHealthy checks divided by all reported cluster checks.
Warm poolReady vs. desired warm sandbox replicas when warm-pool data is available.

Below the KPIs, the page shows Health checks, Sandbox claims, Orphaned agent pods when present, Pending capacity, Warm pools, and Sandbox objects.

Component health table

Cluster checks run concurrently each time the page loads:

CheckWhat it testsTypical failure cause
PostgresConnectivity to the Postgres databaseNetwork policy, password rotation
GitHub token storeConfigured GitHub token store validity for the current scopeToken expiry, missing per-user token, GitHub API outage
Azure Key VaultKey Vault reachability and required mcp-oauth-signing-key lookupManaged identity misconfiguration, network policy, or skipped npm run azure:provision-infra
Agent pod quotaCPU headroom in the namespace. Since #217 removed the ResourceQuota CPU cap there is no hard limit to measure against, so this check now reports unknown.Node-pool autoscaling delays
Warm poolWarm-pool agent-sandbox availability for generic sandboxes (replicas: 3) and AgentHost (replicas: 2)Warm-pool replica count below target, SandboxTemplate CRD issue
Kubernetes APIKubernetes API server reachabilityIn-cluster network policy, apiserver overload

Each check shows:

  • A status badge such as healthy, warning, degraded, or critical.
  • A detail message (visible on warn/fail) explaining the specific failure.
  • The duration the check took in milliseconds.

All six checks have a 5-second individual timeout. A timed-out check appears as fail with the detail "timed out".

If the Key Vault row shows critical: secret 'mcp-oauth-signing-key' not found, the required OAuth signing-key provisioning step was skipped. Run npm run azure:provision-infra before redeploying; do not use the installer --skip-oauth-key flag for a production first deploy.

Active agent pods table

Lists pods currently running that have a matching active run record:

ColumnMeaning
Pod nameKubernetes pod name
Run IDThe run the pod is serving (links to an orchestration detail when available)
NodeKubernetes node the pod is scheduled on
Started atWhen the pod was created

A healthy system should show only pods with active runs here.

Orphaned agent pods table

Lists pods that are running but have no matching active run. These will be terminated on the next reaper sweep (default: every ~2 minutes).

If orphaned pods are not being cleaned up, check:

  • That the heartbeat is enabled and ticking (see the Heartbeat page).
  • That Coordinator:ReaperIntervalTicks is not set to an unusually large value.

Pending-capacity runs table

Legacy / back-compat. Kubernetes now owns pod admission and scheduling (issue #217), so new runs never enter PendingCapacity. This table stays in the UI only to render historical records; for a live run whose pod is still being scheduled, look for sandbox.provisioning_pending heartbeats on the child run rather than an entry here.

Lists coordinator subtasks recorded in the historical PendingCapacity status:

ColumnMeaning
Coordinator run IDThe parent coordinator run
SubtaskThe subtask that was waiting
Pending sinceWhen the subtask entered PendingCapacity
Retry countHow many dispatch attempts were made under the removed park/retry loop

Warm pools table

Lists every SandboxWarmPool CRD object in the namespace. Each row represents one pool:

ColumnMeaning
NameKubernetes name of the SandboxWarmPool object
DesiredTarget number of pre-warmed sandboxes declared in the pool spec
ReadySandboxes currently ready to accept a claim
AvailableSandboxes that are ready and not yet claimed by a run
Statushealthy when ready equals desired; warning when below desired; critical when none are ready

A pool in warning or critical means new run dispatches fall back to creating an ad-hoc sandbox, which adds latency to run startup.

Sandbox objects table

Lists all Sandbox CRD objects in the namespace, both warm-pool-managed and ad-hoc per-run sandboxes:

ColumnMeaning
NameKubernetes name of the Sandbox object
Phasestandby (warm, waiting for a claim), running, pending, or unknown
ReadyWhether the sandbox pod is ready
PodUnderlying pod name, if scheduled
Warm poolThe SandboxWarmPool that owns this sandbox; blank for ad-hoc sandboxes
AgeHow long the object has existed

Sandbox claims table

Lists all SandboxClaim CRD objects in the namespace:

ColumnMeaning
NameKubernetes name of the SandboxClaim object
Phasebound (assigned to a sandbox), pending (waiting for one), or unknown
ReadyWhether the claimed sandbox is ready
RunThe run ID that created this claim, linking to an orchestration detail when present
Bound sandboxThe Sandbox object this claim is bound to; blank when still pending
Warm poolThe pool the bound sandbox came from; blank for ad-hoc claims
AgeHow long the claim has existed

404 fallback

When the API is not deployed on AKS, or the cluster diagnostics endpoint is unavailable, the page displays a message indicating that cluster diagnostics are not available for this deployment. No other page functionality is affected.