AlwaysAI
Bootable Thin Client With a Pluggable AI Provider Layer
Apr 2026
USB-boot thin client where one authenticated WebSocket server multiplexes PTYs, filesystem, exec and AI.
A self-hostable thin-client desktop. A Debian live-build ISO boots any PC into a browser-based desktop backed by one authenticated WebSocket server for PTYs, filesystem, command execution, state sync, and AI routing.
Overview
AlwaysAI is a thin-client design for the AI era. Flash the ISO to a USB drive, boot any PC, and get a browser-based desktop (Terminal, AI Assistant, Journal, Browser, Messenger) backed by a self-hostable server that owns the filesystem, PTYs, state, and AI routing. The device is disposable and the session lives on the server.
My Role
I designed and built AlwaysAI end to end: the bootable image, the desktop shell, the server and wire protocol, and the test setup.
Architecture
A pnpm and Turborepo monorepo:
- apps/desktop: React 19 and Vite shell using Zustand for app state, xterm.js for terminals, and react-rnd for draggable, resizable windows.
- apps/server: Express 5 and a ws WebSocket backend handling JWT auth (bcrypt), AI provider routing, node-pty terminal sessions, filesystem access, command execution, and state sync.
- packages/shared: types and utilities shared by desktop and server.
- bootable: Debian live-build scripts that produce the ISO.
- e2e: Playwright tests against the running desktop and server pair.
- Dockerized dev and prod.
Key Engineering Decisions
- Shared types package for the wire protocol. Desktop and server import the same types, so the protocol cannot drift between them.
- One authenticated WebSocket carrying terminals, filesystem, exec, and AI. This keeps a single auth and connection path, while the server keeps those concerns separated so they do not bleed into each other.
- AI providers behind a common interface. Anthropic, OpenAI, and Ollama are pluggable under apps/server/src/providers, so the client works unchanged across them.
- Server URL baked in at build time. The ISO build accepts ALWAYSAI_SERVER_URL, so anyone can point their own USB at their own self-hosted server.
- A lean live image. It has to come up on arbitrary hardware and land in a working shell with zero configuration.
Reliability & Security
- JWT-authenticated filesystem, exec, and state APIs.
- Playwright end-to-end tests run against the real desktop and server pair.