Desktop Relay (Mobile/Web connection)

Connect your desktop Foxl to the web app for remote access with full agent capabilities

The Desktop Relay - Settings > Connect > Mobile/Web in the desktop app - lets you connect your desktop Foxl agent to the web app at app.foxl.ai and to the phone apps. When connected, they route your conversations through your desktop agent, giving you full tool access from any browser.

This connection is for the Desktop companion. code.foxl.ai is a standalone cloud service: it does not pair with Desktop or require it to be running. Its orchestrator and coding agents use Foxl-managed models and credits. See Code model access.

How It Works

ModeWhat you get
ConnectedFull agent: browser automation, code execution, file management, git, memory, skills, terminal
DisconnectedRead-only: your conversations are still there, but a new message is refused until a desktop is reachable. This Desktop companion does not supply managed model inference.

Connecting Your Devices

Step 1: Sign In on Desktop

Open the desktop app and sign in with your Foxl account (Google, Apple, GitHub, or magic link). Open Settings > Connect > Mobile/Web and toggle Remote Access on.

Step 2: Sign In on the Web App

Open app.foxl.ai and sign in with the same account. Your desktop is automatically detected - no pairing code needed.

Step 3: Connected

The web app connects to your desktop agent automatically. When your desktop app is running, the web app has full tool access.

Connection is automatic - just sign in with the same account on both devices. Multiple web browsers can connect to a single desktop.

Connection Status

The web app shows your connection status:

  • Desktop Connected: Connected to your desktop agent. Full tool access available.
  • Desktop Offline: Desktop app is not running or unreachable. You can read your conversations; sending waits for the desktop.

When the desktop comes back online, the web app detects it automatically and switches back to full agent mode in place - no reload.

Remote Terminal

When connected, you can access your desktop terminal from the web app:

  • Spawn terminal sessions directly from the chat UI
  • View real-time terminal output remotely
  • Multiple tabs and split view supported
  • The agent can also use the terminal tool to run commands

Transport security

Every connection between your browser, the relay and your desktop runs over TLS, so nothing on the network between them can read your traffic.

On top of that, your browser and your desktop establish their own encryption with keys the relay never holds, so what travels through it is ciphertext it has no way to open. What that covers today:

  • terminal output and what you type into a terminal,
  • every request your app makes to your desktop and its response - a note you save, a file you write, and the file contents, workspace listings, settings and tool output that come back. A live chat message is not one of these; it takes a different route and is listed below,
  • the method and the path of those requests, so the relay does not learn which endpoints you touched either,
  • terminal session lists, spawns and exits, and the folder a terminal opens in.

The keys are ECDH P-256, one session per connected client, and the payloads are AES-256-GCM. Payloads are compressed before they are encrypted, because encrypted bytes cannot be compressed afterwards - measured on one real 1.5 MB conversation, that is 224 KB on the wire instead of 1536 KB, so a long chat opens as quickly on cellular as it did before encryption.

Encryption engages per connected client, and only when both ends can do it. A client that cannot complete the handshake is served in the clear instead, on purpose: the relay carries a spread of client versions, and a phone runs the web bundle that was signed into the app build you installed rather than the one on app.foxl.ai, so it gains the handshake only when you install v0.6.27 or later. A browser tab, phone app or desktop older than that runs over TLS alone until it updates - nothing stops working and the other clients on the same desktop are unaffected, but for that one session the relay reads the whole list above as well. This is not a rare case: when this page was last measured, in September 2026, most clients that had connected in the previous week were still on builds older than v0.6.27, so treat the encryption as a property of a pair of updated devices rather than of your account.

Two things are not covered yet, and both are the live HTTP paths. Live chat - the message you send, with any images or documents attached to it, and the reply as it streams back - and a file preview's raw bytes travel inside HTTP requests and responses the relay handles directly rather than over the encrypted socket. They are protected by TLS only, not encrypted between your devices, so the relay can read them while they are in flight. The app sends the current message only, so your earlier messages do not cross the relay on this path; a Foxl Code chat turn that runs its model on your desktop travels the same way and does carry the conversation so far. Making them ciphertext needs a framing change on both routes and a decrypting reader in the app, which is the next step rather than a setting. Note the stored conversation and the file itself are covered by the point above; it is the live exchange - what you send and what streams back - that is not.

The identity pin, and the safety number that is not shown yet

Because the relay passes the key exchange between the two ends, it is worth being able to tell that it only passed it along. Your desktop has a permanent identity key, kept in ~/.foxl/tunnel-identity.json, so reinstalling the app leaves it in place. Your browser or phone remembers its fingerprint the first time it connects and refuses to set up the encrypted session if it ever changes, so after a device's first connection an attempt to sit in the middle cannot pass as a normal reconnect. Traffic for that client then runs over TLS alone until the pin is cleared.

The short code derived from that key - the safety number - is computed on both ends but is not yet shown on either, so there is no screen to compare it on and no button to accept a changed one. Today a changed key surfaces as a refused encrypted session and a warning, with the old and new numbers, in the browser's developer console. The ordinary cause is the ~/.foxl data folder being reset or the desktop moving to a new machine; the pin lives in the app's local site data (for a browser, app.foxl.ai's site data), so clearing it lets the next connection pin the new key.

What the relay can still read

  • Notification previews. A notification's title and body pass through readable, because the relay is what builds the push your phone shows on its lock screen and it has to put the text in it. Showing a generic "you have a notification" instead was the alternative, and we chose the useful lock screen.
  • Live chat, in both directions - the message and attachments your app sends, and the reply while it streams - and a file preview's bytes: the two paths described above. Live chat is TLS-only, not end-to-end encrypted.
  • The conversation id on a chat request, so a "reply finished" push can open the right conversation.
  • The shape of your use: that a device connected, when, and how much data moved.

Everything in the list above these is encrypted, for a client that completed the handshake; a client too old for it gets all of it in the clear. These are the reasons this page does not make a blanket claim, and they are listed rather than summarised so you can decide for yourself.

What this page used to say

An earlier version of this page claimed end-to-end encryption for browser-to-desktop traffic before the software did it - the desktop offered a key and no browser ever answered, so every session was protected by TLS alone and the relay read the payloads it forwarded. The page was corrected at the time, and the encryption described above has since been built and tested. We are recording both because the first version of that claim was one you might have made a decision on.

Tracked in #538.

What this means in practice. The relay stores none of your traffic - it forwards and forgets, and it does not keep your conversations, memory or files. Most of what it forwards it now has no key for; the list above is what is left.

If even that is not acceptable for your data, the desktop app works fully offline from the relay - use it locally and leave remote access off. Bring-your-own-key requests never touch the relay at all.

Device Management

From Settings > Connect > Mobile/Web on the desktop, you can:

  • View connected devices: See all web browsers and phones connected to your desktop
  • Disconnect a device: Revoke access for a specific device
  • Toggle remote access: Enable or disable remote client connections
  • Restart the connection: reconnect the tunnel without restarting the app

Offline Fallback

When your desktop is disconnected, the web app stays open in a read-only state:

  • Your conversations are still readable; sending a message is refused with a note to open Foxl on your computer, because foxl.ai serves no model inference
  • The Channels screen (your team's channels and DMs) and Foxl Code keep working, since they run on the relay and in the cloud rather than on your desktop; the Telegram, Slack and Signal bots run on the desktop and pause with it
  • When the desktop reconnects, the app switches back to full agent mode in place

Sleep/Wake Reconnection

Foxl automatically reconnects after your laptop sleeps:

  • The desktop app detects sleep/wake events via Durable Object ping timing
  • If no ping is received within 90 seconds, a reconnect is triggered
  • The web app detects the reconnection and restores full agent access without a reload

Troubleshooting

Web app says "Desktop Offline" but the app is running

  • Check that both devices are connected to the internet
  • Wait a few seconds - the web app detects desktop status automatically
  • Try a hard refresh (Cmd+Shift+R) in the web app
  • Toggle Remote Access off and on under Settings > Connect > Mobile/Web

Connection drops after laptop sleep

  • Foxl should auto-reconnect within a few seconds of waking
  • If it doesn't reconnect, toggle Remote Access off and on under Settings > Connect > Mobile/Web

Connection drops frequently

  • Ensure your network allows WebSocket connections
  • Check if a firewall or VPN is blocking the connection

The desktop goes offline whenever you quit the app

That is the default - the tunnel belongs to the app window. Turn on Keep running when closed and your machine stays reachable after you quit; see Background service.

On this page