Features
- Hybrid local/remote transport — Full hybrid transport layer with unified workspace connection state, ensuring thin client and hybrid modes behave consistently. Includes health checks when the workspace switcher opens, a CloudOff indicator for unreachable remotes, and cross-server session transfer via
invokeOnServerwith a resume-first strategy. - Multiple remote workspaces — Workspace selector UI supporting multiple remote workspaces, with the ability to remove workspaces via right-click or hover trash icon. Fresh remote servers prompt the user to name the workspace on first connect.
- Browser-accessible WebUI — The headless server now serves a full web UI on the same port. Log in with the server token from any browser to create sessions, manage workspaces, and use OAuth for Claude and Copilot — no desktop app required.
- Session export/import — Send to Workspace UI for transferring sessions between servers. Transferred sessions correctly inherit the LLM connection of the destination workspace.
- Mobile WebUI — 120% default zoom, 1.3× touch target scaling, iOS Safari auto-zoom prevention, and a responsive layout rewrite using container queries. Improved back button behavior, panel headers, compact mode, and card responsiveness. (Partially addresses #419)
Improvements
- Supply chain security hardening —
trustedDependencieswhitelist blocks unauthorized install scripts.--frozen-lockfileenforced on all CI workflows to prevent silent dependency resolution drift. - Remote server directory browser —
server:homeDirchannel enables the directory browser to work against remote server paths. - Connect-to-server UX — Rewritten flow with two distinct paths: connect to an existing workspace or create a new one.
- Self-signed TLS support — Remote
wss://connections accept self-signed certificates for local and intranet deployments.
Bug Fixes
- Skill/source mention resolution — Mentions are now resolved to semantic markers instead of being stripped, preserving context in agent prompts.
- Subprocess server spawn — Subprocess servers are built before the headless server starts, and use
process.execPathinstead of barebunto locate the runtime. (Fixes #441) - Server crash on abort — Catches unhandled promise rejections that previously crashed the server on session abort.
- WebUI workspace switching —
switchWorkspacewas a no-op, breaking push event delivery; now correctly routes events. - WebUI TLS rejection — WebUI is served on the WebSocket port, preventing browsers from rejecting the TLS certificate.