Skip to Content

System Tray

TL;DR

The tray menu is always visible on macOS, Windows, and Linux. It shows connection state, lets you connect or disconnect, exposes a “stay disconnected across restart” toggle, and gives one-click access to the main window, the launcher, and settings. Disconnect is an L2 operation — it closes the socket but does not sign you out.

The system tray is the always-on companion to the main window. Even with the desktop hidden, the tray icon tells you whether the agent is reachable and lets you flip connection state in one click.

Tray location per platform

The tray lives in the macOS menu bar (top right), the Windows system tray (bottom right), and the Linux app indicator. On macOS the activation policy is not Accessory — the dock icon stays visible by design, because Apple’s review process requires visible feedback for apps that perform background work.

Status indicator

The tray icon’s colour reflects connection state — green for connected, yellow for connecting or reconnecting, and red for disconnected or errored. The first line in the tray menu shows the verbose state: uptime when connected, a reconnect countdown when reconnecting, the last byte timestamp when stale, or the error message when the connection has failed.

Connect / Disconnect — what they actually do

This is the most important section on the page. Clicking Disconnect performs an L2 disconnect: it closes the gRPC ClientConn so no bytes leave the process, but the OAuth token stays in the keychain. Clicking Connect opens a fresh ClientConn, resumes heartbeats, and the workspace sees you online again. Concretely:

  • Connect — open ClientConn, resume heartbeats, machines online.
  • Disconnect — close ClientConn, heartbeats stop, machines look offline to the workspace, but you stay logged in.

The implementation lives in internal/desktop/services/connection/service.go (Service.Disconnect()).

Disconnect is not Sign out. The token stays in the keychain, so reconnect is one click. To revoke the token entirely, use Settings → Account → Sign out, or cmdop logout in the CLI.

”Stay disconnected across restart”

The tray menu has a checkbox labelled “Stay disconnected across restart”. When ticked, the desktop persists cfg.DesktopUI.AutoConnect = false. On the next launch the desktop comes back in disconnected state until you click Connect (or untick the box). This is the safe choice when stepping away from a shared machine without signing out.

“Stay disconnected” is sticky across restarts and affects every machine your workspace tracks until you reconnect. The same toggle is also exposed in Settings → Connection and the Connection tab.

Other tray menu items

The tray menu also exposes quick window toggles — Open Chat, Open Launcher, Open Settings — plus version info, “Check for updates”, and Quit. These mirror the same actions available from inside the main window so you do not have to bring it forward to use them.

Right-click vs. left-click on macOS

Both buttons open the same menu on macOS — there is no separate right-click action. On Windows the system tray follows OS convention (left-click toggles, right-click opens the menu).

Notifications and tray badge

Certain events raise system notifications: a permission ask while the window is hidden, an agent finishing a long-running task, an outage detected by the connection service. The tray icon may also show a small badge for unread events; the badge style and notification filters live in Settings → Appearance.

Last updated on