feat: add startup launch support (#1421)

Add launch-at-startup support across the Electron desktop app and the web CLI.

Electron now supports macOS launch-at-login through the native login item API. Login launches start OpenChamber in the background without opening a window, while Dock activation, deep links, and second-instance launches still open or focus the normal app window. The desktop Settings UI now exposes a localized launch-at-login toggle in Desktop Network Access.

The web CLI now includes `openchamber startup status|enable|disable`, backed by native user services:
- macOS: launchd LaunchAgent
- Linux: systemd --user service
- Windows: Task Scheduler

Startup services run `openchamber serve --foreground` so the OS service manager owns process lifetime and restarts. Foreground service updates now defer restarts to the service manager instead of spawning duplicate CLI restarts.

Startup services snapshot useful environment variables by default so provider tokens, PATH, SSH agent settings, and OpenCode configuration survive login/reboot starts. The snapshot avoids shell/session-only state, uses systemd-compatible env quoting on Linux, and avoids unused env artifacts on macOS.

Also adds localized docs for startup services and environment variables.
This commit is contained in:
Bohdan Triapitsyn
2026-05-26 01:36:11 +03:00
committed by GitHub
parent e97bf0d9dc
commit 2014303bc0
30 changed files with 1854 additions and 30 deletions
@@ -0,0 +1,134 @@
---
title: Variables de entorno
description: Configura la integración de OpenChamber y OpenCode con variables de entorno.
---
# Variables de entorno
OpenChamber lee estas variables al arrancar. Para servicios de inicio, `openchamber startup enable` guarda por defecto una copia del entorno actual, así que vuelve a ejecutarlo después de cambiar variables que quieras usar en el servicio.
## Servidor OpenChamber
### `OPENCHAMBER_HOST`
Dirección donde escucha el servidor web de OpenChamber. Usa `0.0.0.0` para permitir acceso desde otras máquinas.
### `OPENCHAMBER_UI_PASSWORD`
Contraseña para la interfaz del navegador. Úsala cuando no te limites a localhost, o cuando uses túneles o un proxy inverso.
### `OPENCHAMBER_DATA_DIR`
Cambia el directorio de datos de OpenChamber. Por defecto es `~/.config/openchamber`.
### `OPENCHAMBER_COMPRESS_API`
Controla la compresión de respuestas de la API. `true` o `1` la activa; `false` o `0` la desactiva.
### `OPENCHAMBER_SKIP_API_COMPRESSION`
Desactiva la compresión de respuestas de la API si vale `true` o `1`. Tiene prioridad sobre `OPENCHAMBER_COMPRESS_API`.
### `OPENCHAMBER_VERBOSE_REQUEST_LOGS`
Activa logs HTTP detallados si vale `true` o `1`.
### `OPENCHAMBER_UPDATE_API_URL`
Cambia el endpoint de comprobación de actualizaciones. La mayoría de usuarios no debería tocarlo.
### `OPENCHAMBER_PACKAGE_MANAGER`
Fuerza el gestor de paquetes usado para actualizar cuando la detección automática se equivoca.
## Servidor OpenCode
### `OPENCODE_HOST`
Conecta OpenChamber a un servidor OpenCode existente. Debe ser un origin `http` o `https` con puerto explícito y sin ruta, query ni hash. `OPENCODE_HOST` tiene prioridad sobre `OPENCODE_PORT`.
### `OPENCODE_PORT`
Define el puerto del servidor OpenCode. Con OpenCode gestionado pide ese puerto; con `OPENCODE_SKIP_START=true` conecta a un servidor externo en ese puerto.
### `OPENCODE_SKIP_START`
Evita que OpenChamber arranque su propio servidor OpenCode cuando vale `true`.
### `OPENCHAMBER_OPENCODE_HOSTNAME`
Hostname para el servidor OpenCode gestionado por OpenChamber. Por defecto es `127.0.0.1`.
### `OPENCODE_BINARY`
Ruta al ejecutable `opencode` que debe usar OpenChamber.
### `OPENCODE_CONFIG`
Ruta a un archivo de configuración concreto de OpenCode.
### `OPENCODE_CONFIG_DIR`
Ruta al directorio de configuración de OpenCode para agents, skills, snippets y descubrimiento de config.
### `OPENCODE_DATA_DIR`
Directorio de datos personalizado para el servidor OpenCode gestionado.
### `OPENCODE_WSL_DISTRO`
Elige la distro WSL usada para la integración con OpenCode en Windows.
### `OPENCHAMBER_OPENCODE_WSL_DISTRO`
Alias específico de OpenChamber para elegir la distro WSL. `OPENCODE_WSL_DISTRO` tiene prioridad si ambas están definidas.
### `OPENCODE_JWT_SECRET`
Secreto para firmar tokens de autenticación de la UI. En servicios persistentes, usa un valor largo y aleatorio.
## Terminal y Git
### `OPENCHAMBER_TERMINAL_SHELL`
Ejecutable de shell para las sesiones de terminal en OpenChamber.
### `OPENCHAMBER_GIT_BINARY`
Ejecutable de Git usado por las funciones Git de OpenChamber.
### `GIT_BINARY`
Override alternativo para el ejecutable de Git. Para ajustes específicos de OpenChamber, prefiere `OPENCHAMBER_GIT_BINARY`.
### `OPENCHAMBER_GIT_READ_CACHE_TTL_MS`
TTL, en milisegundos, para lecturas de archivos con cache respaldadas por Git. Usa `0` para desactivar la cache al depurar.
## Voz y túneles
### `OPENAI_API_KEY`
API key para funciones de voz de OpenChamber que llaman a servicios compatibles con OpenAI.
### `OPENCHAMBER_ALLOW_REMOTE_OPENAI_COMPAT_URLS`
Permite base URLs remotas compatibles con OpenAI para funciones de voz cuando vale `true` o `1`.
### `NGROK_AUTHTOKEN`
Token de autenticación de ngrok usado por los comandos de túnel de OpenChamber. También puedes configurarlo con `ngrok config add-authtoken <token>`.
## Ayudas de runtime
### `BUN_BINARY`
Ejecutable de Bun que OpenChamber debe usar al iniciar procesos daemon.
### `BUN_INSTALL`
Raíz de instalación de Bun. OpenChamber la usa para encontrar `bin/bun` al iniciar daemons y actualizar.
### `VITE_OPENCODE_URL`
API base URL de build-time para la web app construida con Vite. La mayoría de usuarios no debería usarla en CLI o desktop normales.
@@ -44,6 +44,33 @@ openchamber stop
`openchamber` por sí solo inicia el servidor en segundo plano. Añade `--foreground` para mantenerlo asociado a tu terminal.
## Iniciar OpenChamber al iniciar sesión
Usa `startup enable` para instalar un servicio nativo de usuario. OpenChamber usa `launchd` en macOS, `systemd --user` en Linux y Task Scheduler en Windows.
```bash
openchamber startup enable
openchamber startup status
openchamber startup disable
```
Para proteger la UI, define la contraseña al habilitar el servicio:
```bash
OPENCHAMBER_UI_PASSWORD='secret' openchamber startup enable
```
`startup enable` guarda una captura del entorno actual en el servicio para que el arranque se parezca más a ejecutar `openchamber` desde la misma shell. Así conserva tokens de proveedores, `PATH`, configuración del agente SSH y otras variables CLI de auth/config. Usa `--no-env-snapshot` si quieres un entorno de servicio mínimo.
Puedes gestionar túneles de forma independiente para ese servicio en ejecución:
```bash
openchamber tunnel start --port 3000
openchamber tunnel stop --port 3000
```
Detener el túnel no reinicia el servicio ni la app.
## "OpenCode is restarting"
Mientras el servidor se inicia o reinicia, OpenChamber muestra un estado "OpenCode is restarting" y pausa las solicitudes hasta que esté listo. Esto es normal justo después de iniciar o reiniciar. Si nunca desaparece, consulta [Conexión de OpenCode](/es/troubleshooting/opencode-connection/).