Skip to main content

Config Web: Web-based Configuration Interface

Config Web is the bundled browser client served by the config-web subcommand of the Go Agent binary (/oem/usr/bin/agent). Device operations are exposed by the independently mountable Device Management API, so the page can be replaced or removed without coupling those operations to the static UI. Configuration changes are persisted to /userdata/agent/agent.toml and applied online. The page shows whether settings are pending, applied, failed, or waiting for a device reboot.

Model discovery, STT configuration tests, storage operations, and all other device-management calls are served directly by Config Web on port 80. The page does not construct cross-port Agent URLs, so Docker host-port overrides and USB-ECM access use the same API behavior.

Default Parameters

ParameterDefault Value
Port80
Config/userdata/agent/agent.toml
Binary/oem/usr/bin/agent config-web
Web root/oem/usr/share/aiden/config-web

Startup

/etc/init.d/S56config_web start
/etc/init.d/S56config_web stop
/etc/init.d/S56config_web restart
/etc/init.d/S56config_web reload

The init script supports start, stop, restart, and reload. It does not provide a status command; reload currently performs the same stop-and-start sequence as restart.

Access

Connect the device to your computer via USB-C. The device establishes a USB network at 192.168.42.1. Visit:

http://192.168.42.1

The web interface allows:

  • Opening the browser terminal exposed by ttyd at http://192.168.42.1:3000/webtty/
  • Switching the device language between Simplified Chinese (zh-CN) and English (en-US); this also controls user-facing Agent responses and <tts> content
  • Switching among registered model provider types such as OpenAI, Anthropic, OpenRouter, Kimi, Volcengine, and Ollama; Google Gemini models are available through compatible providers such as OpenRouter
  • Configuring API keys and model names
  • Selecting STT/TTS providers
  • Testing voice recognition and synthesis
  • Applying saved settings online, retrying failures, and explicitly rebooting only when USB settings require it
  • Applying saved settings online whenever the running Agent supports the change; documented restart exceptions are surfaced explicitly in the UI
  • Saving a system-default, direct, or custom proxy policy with each Wi-Fi network; custom proxy credentials are never returned to the browser

The Wi-Fi dialog accepts http://, https://, and socks5:// proxy URLs. A saved policy is activated automatically when that SSID becomes current. The Agent, OTA commands, managed subprocesses, and login shells continue to use the fixed local address 127.0.0.1:18080. That address accepts both HTTP and SOCKS5, and the local URL scheme matches the selected upstream scheme. Switching between HTTP and SOCKS5 restarts the Agent so its long-lived clients use the matching protocol; switching between proxies of the same type does not. The local SOCKS5 URL is rendered as socks5h:// to resolve target hostnames through the proxy; this does not change the SOCKS5 wire protocol.

NO_PROXY in the Wi-Fi dialog belongs only to that SSID's custom proxy. When Use system default is selected, both the upstream proxy and NO_PROXY come from /userdata/system/env; no Wi-Fi-specific NO_PROXY value is stored or merged into the system setting.

The header switch saves only the top-level locale through PUT /api/config/locale. The UI updates immediately and rolls back if persistence fails. The last confirmed value is cached in localStorage for first paint, but GET /api/device/snapshot remains authoritative. The next Agent task creates a new context session when the locale-specific system prompt changes; it does not rewrite the previous session. locale is intentionally separate from [stt].language, which only configures speech recognition.

Configuration Application Policy

Category changed by this implementationApplication boundary
Ordinary settings: locale/prompts, iteration and context limits, screenshot retention, telemetry, log retention, notifications, Live Activity, quick-capture TTLPublished online for subsequent tasks/operations; shared managers keep their identity
Components: input mode, selected models/provider credentials, STT/TTS/realtime voice, audio/VAD, HID clients, capture backend, search, quick-capture GPIO, storage policiesDrain affected work, prepare replacements, and switch components without restarting Agent; HTTP and Phone Bridge remain alive
frame_service.keep_streamonRestart only frame_service, wait for its listening socket, then queue the Agent snapshot; capture is briefly unavailable

Existing exceptions remain: Android/non-Android USB pointer descriptor changes and hid.keyboard_layout need a device reboot. Other device-type changes can apply online. Saving system environment variables shows Apply and restart Agent; only that explicit action restarts Agent. Deployment of a new binary still requires restarting Agent and Config Web; that is separate from changing runtime settings.

Voice/model changes wait for the current voice session. Failed replacements retain the previous runtime configuration and drained dialog. A held drag must be released before HID component replacement can succeed. Old model requests and TTS sessions retain their current provider until completion. Prompt/provider changes open a new context session at the next task/session boundary and leave existing transcript files intact.

USB restart requirements survive Agent-only restarts: the bound USB descriptor and <config-dir>/cache/usb-boot.json retain the active settings for the current Linux boot ID. A real device reboot accepts the saved USB identity and layout. Failed Quick Capture GPIO replacement retains the active configuration, so the same saved configuration can be retried after the hardware fault is corrected.