HelixML

Configuration reference

Environment variables, Helm values, project YAML, and agent app YAML schema for Helix deployments.

Project YAML

Projects are defined in YAML. The full schema:

apiVersion: helix.ml/v1alpha1
kind: Project
metadata:
  name: my-app                    # Used as the project identifier
 
spec:
  description: "What this project is for"
 
  repositories:
    - url: "https://github.com/org/my-app"
      branch: main
      primary: true               # The primary repo is cloned first and receives PRs
    - url: "https://github.com/org/shared-lib"
      branch: main
 
  agent:
    name: "My Agent"
    runtime: claude_code          # claude_code | goose_code | qwen_code | zed_agent
    model: claude-sonnet-4-6      # omit for claude_code
    provider: anthropic           # anthropic | openai | helix | (any configured provider)
    code_agent_credential_type: api_key  # api_key (default) | subscription (Claude Code only)
 
    # Goose-specific:
    goose:
      recipes:
        - name: triage
          path: .goose/recipes/triage.yaml

Agent app YAML

Agent apps (called assistants in the YAML schema) configure conversational agents with skills, knowledge, and triggers. See Build an agent app for a walkthrough.

name: My Assistant
description: "What this agent app does"
 
assistants:
- name: Support
  model: claude-sonnet-4-6
  provider: anthropic
  system_prompt: |
    You are a helpful assistant.
  temperature: 0.3
  max_tokens: 4096
  max_iterations: 10
  agent_type: helix_agent          # helix_basic | helix_agent
 
  # Skills
  web_search:
    enabled: true
    max_results: 10
 
  browser:
    enabled: true
 
  # Knowledge bases (RAG) — see guide-rag-knowledge
  knowledge:
  - name: my-docs
    description: "Product documentation"
    refresh_enabled: true
    refresh_schedule: "0 */6 * * *"
    rag_settings:
      results_count: 4
      chunk_size: 1024
      chunk_overflow: 64
      enable_vision: false         # true to index images and scanned PDFs
    source:
      web:
        urls:
        - https://docs.example.com/
        crawler:
          enabled: true
          max_depth: 2
          max_pages: 200
          readability: true
 
  # API integrations (OpenAPI)
  apis:
  - name: My API
    description: "Internal API"
    url: https://api.example.com
    schema: ./openapi.yaml
    headers:
      Authorization: Bearer ${MY_API_KEY}
 
  # MCP servers — HTTP transport
  mcps:
  - name: My MCP Server
    url: https://mcp.example.com/tools
    headers:
      Authorization: Bearer ${MCP_TOKEN}
 
  # MCP servers — stdio transport (runs as subprocess)
  # mcps:
  # - name: Filesystem
  #   type: stdio
  #   cmd: npx
  #   args: ["-y", "@modelcontextprotocol/server-filesystem", "/workspace"]
 
  # Triggers — see guide-triggers
  triggers:
  - slack:
      bot_token: ${SLACK_BOT_TOKEN}
      channels:
      - support
  - teams:
      tenant_id: ${TEAMS_TENANT_ID}
      client_id: ${TEAMS_CLIENT_ID}
      client_secret: ${TEAMS_CLIENT_SECRET}
  - discord:
      bot_token: ${DISCORD_BOT_TOKEN}
      guild_id: "123456789"
  - cron:
      schedule: "0 9 * * 1-5"
      input: "Generate daily summary"
  - webhook: {}                    # Helix generates a unique URL
  - azure_devops:
      org_url: https://dev.azure.com/myorg
      token: ${AZURE_DEVOPS_TOKEN}
      events: [work_item_created, work_item_updated]
  - crisp:
      website_id: ${CRISP_WEBSITE_ID}
      api_key: ${CRISP_API_KEY}
      api_secret: ${CRISP_API_SECRET}

Control plane environment variables

These are passed via controlplane.extraEnv in the Helm chart (or as environment variables in a non-Kubernetes deploy). See Linux & Kubernetes for how to set them.

Desktop streaming

VariableDefaultDescription
HELIX_VIDEO_MODEzerocopyPipeWire capture: zerocopy (DMA-BUF→CUDA, fastest), native (DMA-BUF via GStreamer), shm (shared memory, most compatible). Use shm if browser shows endless reconnects.
HELIX_ENCODERautoH.264 encoder: nvenc (NVIDIA), vaapi/vaapi-legacy (Intel/AMD), openh264/x264 (software).
HELIX_GOP_SIZE120Group of Pictures size in frames (120 = 2s at 60fps). Lower = faster mid-stream join.
HELIX_RENDER_NODEunsetVA-API render device path (e.g. /dev/dri/renderD129). Set on multi-GPU hosts. Use SOFTWARE to disable VA-API.

Control plane behaviour

VariableDefaultDescription
HELIX_DISABLE_VERSION_CHECKunsetDisable the upstream version-check ping at startup. Set to any non-empty value.
HELIX_SKIP_AUTOMIGRATEunsetSkip GORM AutoMigrate on startup. Only set if you run schema migrations out-of-band.
HELIX_GITHUB_BASE_URLhttps://github.comOverride for GitHub Enterprise Server.
FRONTEND_URL(from serverUrl)Public URL of the Helix UI, injected into email links and OAuth callbacks.

Sandbox host (sandbox.extraEnv)

VariableDefaultDescription
HELIX_SANDBOX_APT_MIRRORunsetOverride APT mirror for dev container bootstrapping. Useful in air-gapped environments.

Helm chart key reference

helix-controlplane

KeyDescription
global.serverUrlPublic URL of the deployment. Must be set correctly — sandboxes use it to reach the control plane.
controlplane.licenseKeyExistingSecretKubernetes secret name containing the license key
controlplane.encryptionKeyExistingSecretAES-256-GCM encryption key secret. Do not rotate after data is written.
controlplane.runnerTokenExistingSecretShared token for sandbox↔control-plane auth
controlplane.providers.*LLM provider configuration (see Configure LLM providers)
controlplane.extraEnvAdditional environment variables for the control plane pod
global.extraEnvEnvironment variables for all pods (useful for proxy settings)

helix-sandbox

KeyDescription
sandbox.apiUrlURL of the control plane, as seen from inside the cluster
sandbox.runnerTokenExistingSecretMust match controlplane.runnerTokenExistingSecret
sandbox.extraEnvAdditional environment variables for the sandbox pod

Full values-example.yaml files are in the Helix repository.