HelixML

Architecture for operators

How Helix's components fit together. What runs where, what talks to what, and what you need to provide.

Components

Helix has three distinct tiers:

1. Control plane

The control plane is the main Helix API and UI. It manages:

  • User authentication and organizations
  • Projects, spec tasks, and the Kanban board
  • Repository connections and code intelligence indexing
  • Assistant and agent configuration
  • Orchestration of sandbox sessions

The control plane is a single Go binary serving HTTP on port 8080 (or whatever you configure). It ships as a Docker image and a Helm chart (helix-controlplane).

Dependencies:

  • PostgreSQL (main database; bundled in the chart or external)
  • pgvector with vectorchord extension (for RAG and code intelligence; bundled separately)
  • An LLM provider for inference (configured via controlplane.providers)

2. Sandbox (Hydra)

The sandbox is a separate service that runs agent desktop sessions. It uses Docker-in-Docker to provide isolated container environments for each session.

The sandbox ships as a Helm chart (helix-sandbox). It connects to the control plane via a shared runner token.

Dependencies:

  • The control plane must be reachable from inside the sandbox
  • Privileged pods (for Docker-in-Docker)
  • GPU nodes (for hardware video encoding; software fallback available)
  • Large persistent volumes (for Docker image cache)

3. Agent (inside the sandbox)

The code agent (Claude Code, Goose, Qwen Code, or Zed Agent) runs inside a container that the sandbox provisions per session. The agent:

  • Connects to Zed IDE via ACP
  • Routes inference through the control plane's /v1 proxy
  • Clones the project's repositories
  • Makes commits to a working branch

The agent process is started automatically when a sandbox session starts.

Network diagram

Internet / User Browser
        │
        │ HTTPS (port 443 or 8080)
        ↓
Control Plane (API + UI)
        │
        ├── Postgres (main DB)
        ├── pgvector (vector DB for RAG/code intelligence)
        ├── SearXNG (web search for assistants)
        └── Chrome (headless browser for assistants)
        │
        │ Internal HTTP (runner token auth)
        ↓
Helix Sandbox (Docker-in-Docker host)
        │
        └── Hydra (session isolation)
            ├── Agent Session A ──────────────┐
            │   └── Code Agent                │ WebSocket
            ├── Agent Session B               │ (H.264 video)
            └── ...                           ↓
                                       User Browser

SearXNG and Chrome serve the web search API and the agents' web search and browser skills. See Configure web search.

The video stream for agent desktop sessions goes directly from the sandbox to the user browser over WebSocket — the control plane doesn't proxy video.

Ports

ServicePortNotes
Control plane API + UI8080The main entry point for users
Sandbox (internal)8080Internal only; not exposed to users
Agent video WebSocket8080+Multiplexed through the control plane URL

For production, put a reverse proxy (nginx, Traefik) in front of the control plane to handle TLS and serve on 443.

global.serverUrl

The global.serverUrl Helm value (or FRONTEND_URL env var) is the public URL that:

  • Users type into their browsers
  • OAuth callbacks return to
  • Sandbox containers use to reach the control plane API for inference

This must be set correctly. In Kubernetes, localhost resolves to the pod itself — if you set this to http://localhost:8080, agent inference will fail with connection errors. Set it to either:

  • The cluster-internal service URL: http://my-helix-controlplane.helix.svc.cluster.local
  • Your public ingress hostname: https://helix.example.com

What you provide

What you provideNotes
LLM provider API keysAnthropic, OpenAI, etc. — or a self-hosted endpoint
Source control OAuth appGitHub App, GitLab OAuth consumer, or Bitbucket OAuth consumer
TLS terminationIngress with cert-manager or a load balancer
License keyFrom your account
Encryption key32-byte hex string; generate once, never rotate
StoragePVCs for Postgres, pgvector, and the control plane data volume
GPU nodes (optional)For hardware video encoding; software fallback available

Scaling

  • Control plane: Stateless beyond the database. Scale horizontally by adding replicas; use a shared Postgres and pgvector.
  • Sandbox: Scales by adding GPU nodes. The sandbox chart can run on multiple nodes; Hydra distributes sessions.
  • Database: Use a managed Postgres (Amazon RDS, Cloud SQL, Azure Flexible Server) for production HA. Keep pgvector on the bundled chart (it requires extensions that managed services don't provide).