VCode home

The VCode desktop app

Agents: claude, codex, opencode, cursor · On: desktop · beta

The desktop app is VCode in its own window on Windows, Linux and the Mac. It shows the same app as app.fezu.dev, and adds a tray icon, start at login, notifications and its own updates. The install command installs it on any computer with a desktop.

Why you would use it

You work at a computer and want VCode one click away, not lost among browser tabs. You also want to hear when a thread finishes or needs you while the window is hidden.

How to use it

With a workstation. Run the install command on a computer you are logged in to at its desktop (install-on-linux, install-on-macos, install-on-windows). The command installs the app as well as VCode itself. At the end the app opens:

Sign the app in from the workstation. On a computer linked to your account, run:

v-code box app

It prints Opened the VCode app. and the app opens signed in to the account. v-code alone does the same, and so does v-code box link after Already linked to <email>. Where the app is not installed, v-code box app opens app.fezu.dev in the browser instead. If the site refuses, it prints Could not sign the app in: and the reason, then opens the browser. On a computer that is not linked, v-code box app and v-code run v-code box link, which opens the app on its login card (link-this-box).

The app alone. On a computer that should not run agents, install only the app:

  1. On fezu.dev/account, open Add a workstation, pick the computer's system, and tick App only (#add-app-only). The link /account/add?app=only opens the page with it ticked.

  2. Tap Copy (#add-copy). Each tap makes a new start code and puts it in the command. The code works once, within 5 minutes.

  3. Paste the command into a terminal on that computer (PowerShell on Windows). For Linux and the Mac it reads:

    curl -fsSL https://fezu.dev/install | V_CODE_APP=only V_CODE_START=<start code> sh
    

    and for Windows:

    $env:V_CODE_APP='only'; $env:V_CODE_START='<start code>'; irm https://fezu.dev/install.ps1 | iex
    
  4. The app opens, signed in to your account. A code that has expired leaves the app on its sign-in screen.

In the app in a browser on a computer, the install button (#install) opens the Finish onboarding screen with the same command, Copy command (#is-go) making the start code (install-on-a-phone).

Every day.

What you see

Every line from the app step starts with VCode desktop app:.

The command stops before it installs anything when:

Check Message
V_CODE_APP is no or only v-code: V_CODE_APP is <value>; it must be no or only
V_CODE_START comes with V_CODE_APP=only v-code: V_CODE_START is for V_CODE_APP=only
V_CODE_START is a start code v-code: V_CODE_START is not a start code; copy the command again
V_CODE_APP=only comes without V_CODE_JOIN or --port v-code: V_CODE_APP=only installs the app alone; V_CODE_JOIN and --port are for the box (on Windows: v-code: V_CODE_APP=only installs the app alone; V_CODE_JOIN is for the box)

Linux: the sandbox question

On a Linux computer that restricts user namespaces, such as Ubuntu 23.10 and later, the window needs one AppArmor rule to run sandboxed. The command asks once:

The VCode window needs one AppArmor rule to run sandboxed. Add it with sudo? [Y/n]

The Mac and Windows

On the box's own PC

When the app runs on the same computer as a workstation, it talks to that workstation directly on the computer, without going through fezu.dev. The tab badge then reads <box name> · local. There is nothing to set up: the app and the workstation agree on it each time the app connects. If the direct way fails, the app keeps working through fezu.dev, as on any other computer, and tries again 5 minutes later. A browser on the same computer always goes through fezu.dev.

Options and settings

Option Default What it changes
V_CODE_APP=no unset The install command installs VCode without the desktop app
V_CODE_APP=only unset The command installs only the desktop app, no workstation, and opens it
V_CODE_START=<code> unset With V_CODE_APP=only: the start code that signs the app in. Copy on Add a workstation and Copy command in the app put one in
Start at login (tray menu) on Starts the app hidden in the tray when you log in

Limits and known gaps

Updates

The app checks for a new version 30 seconds after it starts, every time you launch it again while it runs in the tray, and then every hour (every 5 minutes on the dev channel). It downloads and checks the new version while you work. Once it is ready:

The version before stays on disk.

Remove it

The box's uninstall removes the app too:

The app's own settings folder (channel, log) stays, as the box's env file does. Its state goes, so an install after it starts the app at login again.