Skip to main content
In the Hybrid deployment, your data and agents run in your cluster and the control plane runs in xpander Cloud. Every task executes inside your VPC; the cluster initiates outbound TLS on port 443 to the control plane, and xpander Cloud never opens a connection into your environment. No inbound firewall rules are required for xpander. The design principles behind this page - permission model, credential isolation, encryption, safety controls - are on the Security Architecture page. The Air-gapped deployment removes the Cloud connection entirely.

Network boundary

AWS architecture of the xpander Hybrid deployment. Left: users reach the cluster over a corporate VPN into the private subnet, or optionally through an Internet gateway and NLB. AZ A private subnet runs EKS, the Agent Controller, the execution tier, and the AI Gateway. AZ B holds RDS, ElastiCache, and KMS. A VPC endpoint connects over PrivateLink to xpander Cloud. The deployment manager receives the cluster identity and health status and serves agent configuration and the skill schema. LLM providers and target APIs are reached from the VPC via NAT.

Hybrid deployment on AWS. Left: your data plane - corporate VPN into the private subnet, or optional Internet + NLB. Right: xpander Cloud. The PrivateLink sync carries cluster identity, health status, agent configuration, and the skill schema.

How to read the diagram:
  • Users reach your cluster two ways. Corp VPN is the company network path into the private subnet (chat, API, Agent Controller) - no public NLB required. See VPN / corporate network access. Internet is the optional public path through the Internet gateway and NLB.
  • Your VPC spans two Availability Zones. Public subnets hold the NLB and NAT gateways. Private subnets hold EKS (AZ A) and data stores (AZ B).
  • xpander Cloud - Xpander Chat, identity, agent registry, and the skills catalog. Agent configuration is authored here and synced into your cluster. AI Engineers sign in to Xpander Chat; that path is browser-to-Cloud, not cluster egress.
  • PrivateLink - the Agent Controller reaches Cloud through the Endpoint svc and Deploy mgr. The connection carries the cluster’s identity (organization and environment IDs with the API key), health status, agent configuration, and the skill schema. Each is detailed in Data that leaves the on-prem installation.
  • Your models and target APIs (the systems behind your skills) sit outside the VPC and are reached from it via NAT.
Two outbound paths to the control plane: Supported PrivateLink regions: us-west-2, us-west-1, eu-west-2, eu-central-1, ap-south-1. The service itself is in us-west-2 (pass --service-region us-west-2 when creating the VPC endpoint from another region).

Authentication flow

Sign-in is the one flow that talks to xpander Cloud directly - and it carries identity, not work.
Authentication flow. An AI Engineer signs in at xpander Cloud (Xpander Chat, SSO). The console returns the cluster address. From then on chat, tasks, and results travel between the browser and the cluster's Chat and API services, backed by the cluster's PostgreSQL.

Sign-in to Xpander Chat. Identity goes to xpander Cloud; everything after sign-in is browser ↔ your cluster.

  1. The AI Engineer signs in at chat.xpander.ai (SSO over OIDC on enterprise plans).
  2. Xpander Chat tells the browser which self-hosted cluster to use.
  3. Chat, tasks, and results move between the browser and your cluster. Chat content and task data are not part of the sign-in exchange.

Agent runtime flow

The prompt path - what happens when a user sends a task to an agent - runs inside your cluster.
Agent runtime flow. A user reaches Chat and API in the cluster, then the Agent Controller, the execution tier, and AI Gateway. The execution tier calls LLM providers via NAT; the AI Gateway calls target APIs via NAT. Threads, tasks, and results are stored in the cluster's PostgreSQL. xpander Cloud is shown off to the side: not on this path, no prompts, no skill data.

Prompt flow. The task pipeline runs in your cluster; model and skill calls leave via NAT. xpander Cloud is not on this path.

  • The user’s prompt enters through your ingress to the cluster’s Chat/API services, then the Agent Controller and the execution tier (the agent-worker service). New agents run on Claude Code, Codex or OpenCode on the executor fleet; their model calls go through the Agent Controller’s LLM proxy, the only component that reaches a model provider.
  • The execution tier calls your configured LLM providers; the Agent Controller’s skill relay calls target APIs. Both leave your VPC via NAT.
  • Threads, task state, and results are written to your cluster’s PostgreSQL.
  • Prompts, completions, and skill data are not sent to xpander Cloud.

Data that leaves the on-prem installation

Below is the Hybrid data-plane → xpander Cloud surface. It covers only fields documented in the Hybrid deployment, Deployment options, Air-gapped deployment, and access control pages, plus the public shapes those pages point at (agent list, skill schema, MCP attach payload).

What does not leave

These stay in your cluster. They are not sent to xpander Cloud: Model calls you configure (OpenAI, Anthropic, Bedrock, and so on) and skill calls to your systems leave your VPC toward those systems. They do not transit xpander Cloud.

How the cluster talks to Cloud

The Agent Controller is the only Hybrid component that reaches xpander Cloud. It authenticates with organization_id + environment_id + the deployment-manager API key, reports heartbeats, and pulls agent, skill, and MCP configuration. Other pods (agent-worker, gateway, API, MCP, chat) do not call Cloud. Sign-in to Xpander Chat is not cluster egress. Users sign in at chat.xpander.ai (SSO on enterprise plans). The cloud UI then tells the browser which self-hosted cluster to use; chat, tasks, and debugging traffic go client-to-cluster. Settings > Locations in Xpander Chat also shows feature toggles for each connected cluster, called a location. Verify the Connection documents them. Their schema is not published, and they carry no runtime payloads.

1. Cluster identification

Sent on every control-plane request so the deployment manager can identify which cluster is calling.
The API key value is never logged by the installer (typed secrets are placeholdered; Helm writes them to a mode-600 values file that is removed on exit).

2. Health status (heartbeats)

The Agent Controller reports heartbeats so Settings > Locations in Xpander Chat can show Connection established and per-service status on the Components tab. The heartbeat JSON schema is not published. Public docs establish that heartbeats exist, are authenticated with the same organization / environment / API key, and that the console displays status per service. They do not document field names, intervals, or response bodies. Do not treat the following as a wire-format dump. It only restates what Xpander Chat is documented to show:
Heartbeats do not include chat text, skill results, knowledge-base content, or credentials.

3. Agent metadata (stored in Cloud, pulled by the cluster)

Agent definitions are authored in Xpander Chat on xpander Cloud and pulled so your cluster knows which agent to load. This is catalog metadata - not invocations. The public List Agents response is the documented shape of that catalog. Example (redacted; no customer content):
The cluster’s request that fetches this list carries the cluster identification headers only. Thread text, skill outputs, and knowledge-base hits are not part of this catalog.

4. Skill schema (pulled)

The skills catalog lives in Cloud. Your cluster pulls each skill operation as an LLM function-call definition - the operation’s name, description, and parameter schema - not the tokens used to call those APIs. Tokens stay in Kubernetes secrets and are injected by the skill relay at invocation time. A stored function-call definition (redacted; Jira list-issues):
Skill-level general parameters that carry preset values are stripped from this schema before it is stored, so the definition describes the call shape only. Credentials, connection tokens, and invocation results are never part of it.

5. MCP configuration (pulled)

MCP endpoints registered for the agent are pulled with the rest of the agent definition. Documented attach payloads from the Add Agent Tool endpoint:
MCP invocations and skill results run from your cluster’s MCP service. They do not go to xpander Cloud.

6. Xpander Chat sign-in identity (browser → Cloud)

Hybrid sign-in is xpander Cloud identity (chat.xpander.ai), including SSO over OIDC on enterprise plans. That traffic is the user’s browser to Cloud, not the Agent Controller. What Cloud holds for an Xpander Chat user (same created_by_details shape as agent metadata):
After authentication, the UI directs the client to your cluster. Chat threads, Monitor data, and task results are fetched from your PostgreSQL - they do not pass through Cloud.
Self-hosted SDK calls use the Agent Controller API key issued at install time, not your xpander Cloud API key. See Using the SDK with Self-Hosted.

Security Architecture

Permission model, credential isolation, encryption, and safety controls

Hybrid deployment Guide

Installer, PrivateLink, sizing, and data residency table

Air-Gapped Architecture

Every component in your environment, zero egress to xpander

Access Control

RBAC, SSO, API keys, and in-cluster audit logs