Skip to main content
Linger reads its settings from environment variables. For Docker Compose and for development, you set them in the .env file at the repository root. Copy .env.example to .env to start. The template starts every service with every feature that needs no personal key. .env.example has two sections: Required and Optional, grouped by feature. Each entry holds the value that pnpm dev uses. An empty value turns its feature off. Entries that stay commented out use the code default. Container images and other deployments do not read .env.example. They set their own environment. Rate limits, retry and timeout budgets, and optional tools use their code defaults.

Change these first

Most setups change only a few variables. The first four let other computers on your network reach Linger. The two voice keys turn on the two voice paths. Here is a .env for a host at 192.168.1.10:
Run docker compose up --detach --wait again after you change .env. Browsers and computers then reach Linger through port 3000.
The LINGER_SECRET_SEED in .env.example is public. It works only with a loopback WEB_PUBLIC_ORIGIN. In production, generate your own seed and keep it in a secret store.
Browsers allow the microphone only on localhost or HTTPS. To use voice from another computer, put an HTTPS proxy in front of port 3000. Serve other computers on your network covers the steps.

Required variables

Every deployment needs these four variables. The seed covers three call directions: TeamHub to node-services, node-services to TeamHub, and Voice Runtime to TeamHub. Each service derives its credential with HKDF-SHA256, a key derivation function. No override exists. A deployment sets a public wss:// address for AGENT_RUNNER_PUBLIC_GATEWAY_URL.

Addresses and network

Each service has one URL, and every caller of that service reads the same URL. Split deployments set their own. A CIDR (Classless Inter-Domain Routing) range names a block of IP addresses.

Agents and computers

Memory and the personal memory

Connected apps

The scoped Composio project key needs these permissions:
  • Connected-account link and read.
  • Auth-config read and create.
  • Proxy execute.
  • Tool catalog read and execute.

Storage

Voice

Voice has two paths with separate keys. Soniox turns on recording, dictation, and archive recovery. xAI turns on Grok Live. Recordings go to the artifact store through TeamHub, which needs ffmpeg and ffprobe on its PATH. The root docker-compose.yml runs LiveKit. pnpm dev runs livekit-server from your PATH on these values while a voice key is set.

Local development

These variables apply to pnpm dev and pnpm stack:up. Leave them commented out until you need them. The port variables move only the published ports. The containers keep listening on their default ports. Every variable that runtime code reads must appear in .env.example or in scripts/env-inventory.json. pnpm env:inventory:check checks this.

Other documented variables

These variables do not live in .env. Other tools and tests read them.

Keep learning

Serve other computers on your network

Serve Linger to other computers on your network.

Enable voice

Turn on recording, dictation, and voice mode.

Contribute

Use .env to run Linger from source.

Install with Docker Compose

Run every service in containers from a checkout.