Network boundary
Hybrid edition 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 connector tool schema. Draw.io source: /images/security/hybrid-aws-architecture.drawio
- 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 — Workbench, identity, agent registry, and connector catalog. Agent configuration is authored here and synced into your cluster. AI Engineers sign in to Workbench; 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 connector tool schema. Each is detailed in Data that leaves the on-prem installation.
- Your models and tools sit outside the VPC and are reached from it via NAT.
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.Workbench sign-in. Identity goes to xpander Cloud; everything after sign-in is browser ↔ your cluster.
- The AI Engineer signs in at
chat.xpander.ai(SAML 2.0 SSO on enterprise plans). - The console tells the browser which self-hosted cluster to use.
- 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.Prompt flow. The task pipeline runs in your cluster; model and tool 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 Workers.
- Workers call your configured LLM providers; the AI Gateway calls target APIs. Both leave your VPC via NAT.
- Threads, task state, and results are written to your cluster’s PostgreSQL.
- Prompts, completions, and tool 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, Self-Hosted overview, Air-Gapped, and access control pages, plus the public shapes those pages point at (agent list, connector tool schema, MCP attach payload).What does not leave
These stay in your cluster. They are not sent to xpander Cloud:How the cluster talks to Cloud
The Agent Controller is the only Hybrid component that reaches xpander Cloud. It authenticates withorganization_id + environment_id + the deployment-manager API key, reports heartbeats, and pulls agent, connector, and MCP configuration. Other pods (workers, gateway, API, MCP, chat) do not call Cloud.
Workbench login 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.
Cloud Controls in the locations console (Chat, Streaming, Scheduler) are feature toggles for the location. Their on-the-wire schema is not published; they do not carry runtime payloads.
1. Cluster identification
Sent on every control-plane request so the deployment manager can identify which cluster is calling.2. Health status (heartbeats)
The Agent Controller reports heartbeats so the locations console 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 the console is documented to show:3. Agent metadata (stored in Cloud, pulled by the cluster)
Agent definitions are authored in the Workbench 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):4. Connector tool schema (pulled)
The connector catalog lives in Cloud. Your cluster pulls each tool 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 AI Gateway at invocation time. A stored tool definition (redacted; Jira list-issues):5. MCP configuration (pulled)
MCP servers registered for the agent are pulled with the rest of the agent definition. Documented attach payloads from Add Agent Tool:6. Workbench login identity (browser → Cloud)
Hybrid sign-in is xpander Cloud identity (chat.xpander.ai), including SAML 2.0 SSO on enterprise plans. That traffic is the user’s browser to Cloud, not the Agent Controller.
What Cloud holds for a Workbench user (same created_by_details shape as agent metadata):

