Skip to Content

Connection Tab

TL;DR

Connection is the network surface: live RPC counters, per-method breakdown, bandwidth charts, and a complete outage history. Use it to debug “why isn’t my chat streaming?” and to audit when the desktop disconnected.

When chat feels slow or the agent goes silent, the Connection tab is the first place to look.

What the Connection tab shows

The tab has four panels: live counters (bytes/sec, requests/sec), a per-method table that highlights which gRPC methods are hot, a connection-state timeline, and a complete outage history. The data comes from a stats ticker inside internal/desktop/services/connection, which samples the underlying network/connection.Manager on a fixed cadence and pushes the snapshots into the React store.

Connection states explained

The connection moves through six observable states: connected (steady stream of bytes), connecting (initial dial), reconnecting (retry with countdown), stale (last byte time elapsed past threshold), disconnected (intentional close), and error (a fatal error — usually auth or transport). The same state is surfaced in compact form by the system tray status indicator, so you do not have to keep this tab open just to glance at it.

Outage classification

Each outage is tagged by classifyOutage (internal/desktop/services/connection/outages.go) with one of two reasons: auth when the token was rejected, or server when the transport or upstream failed. The outage history table groups by reason so you can see at a glance whether you are looking at a network problem or an authentication problem.

Auth-class outages mean the daemon is reachable but your token is rejected. Try reauthenticating from Settings → Account before debugging the network.

Bandwidth charts

The bandwidth panel renders rolling-window graphs for upload and download with separate lines. The sample cadence is the same ticker that feeds the live counters, and the data is local-only — nothing leaves the desktop. This is the panel to watch when you suspect a runaway tool call is silently exfiltrating MBs in the background.

Per-method breakdown

The per-method table shows every gRPC method with its calls/sec, bytes/sec, and error rate. When chat feels slow, the suspect method is AgentService.Stream — high latency there points at the daemon or upstream LLM, not your network, so you can stop tweaking your wifi and start checking machine health.

L2 disconnect — what it means

Clicking Disconnect — here, in the tray, or in Settings → Connection — performs an L2 disconnect: the desktop closes the gRPC ClientConn so no bytes leave the process. The OAuth token stays in the keychain, so reconnect is one click. The implementation is Service.Disconnect() in internal/desktop/services/connection/service.go.

L2 disconnect closes the socket but does not log you out. To revoke the token entirely use Settings → Account → Sign out, or cmdop logout in the CLI. The full L2 explanation lives on the system tray page.

Sticky disconnect across restart

Ticking “Stay disconnected across restart” in the tray (or toggling AutoConnect in Settings → Connection) persists the choice — cfg.DesktopUI.AutoConnect = false. The desktop comes back disconnected on next launch until you opt back in, which is the safe default for shared machines.

Last updated on