Skip to content

Using the UI

Running gmux with no arguments opens the dashboard in a dedicated browser window. You can also navigate to localhost:8790 directly; the first time you’ll need to authenticate by visiting the login URL from gmuxd auth.

The left panel lists your sessions grouped into projects.

Click the gmux logo at the top of the sidebar to return to the home screen.

The home screen shows your hosts, projects, and quick-launch buttons.

Each machine (local and remote) gets a card with a status indicator, session count, and launch buttons.

| Indicator | Meaning | |-----------|---------|| | Green dot | Connected, sessions visible | | Pulsing dot | Connecting to peer | | Red ✗ | Peer disconnected (shows error reason) | | Dimmed card | Offline: a tailnet device that looks like a gmux instance but is currently unreachable |

Offline cards appear for tailnet devices whose hostname matches the configured tsnet prefix (e.g. gmux-dev). They’re informational only: no launch buttons, no session count. Once the device comes online and is confirmed as gmux, it becomes a full peer and persists across restarts.

Connected peers show launch buttons for each configured adapter, just like the local host.

Sessions don’t appear in the sidebar until you add a project. The first time you open the dashboard, click the + button to launch a session. gmux creates a default “home” project that catches sessions started from your home directory. As you work in more repositories, use Manage projects to organize sessions by repo.

Click a project name to open the project hub, an overview of all sessions in that project grouped by host and working directory. The active project is highlighted in the sidebar.

Each project has match rules that determine which sessions belong to it. Rules can match by filesystem path (~/dev/gmux and its subdirectories) or by git remote URL (grouping clones across machines). See projects.json for the full reference on rules, precedence, and advanced options like exact matching and host scoping.

You can manage projects at any time via the Manage projects button at the bottom of the sidebar. A badge shows when there are running sessions that don’t match any project yet. The modal has two sections:

  • Your projects: configured projects with their match rules. Drag to reorder, click × to remove.
  • Discovered: directories with running sessions that don’t match any project. Type to filter, or enter a path to add directly.

Each session has a dot on the left edge:

IndicatorMeaning
Pulsing ringThe tool is actively working (building, thinking, running tests)
Blue dotNew output you haven’t seen yet (viewing the session clears it)
Muted ring (brief)Transient terminal activity, fades after a few seconds
No dotIdle or waiting for input

Agent sessions (pi, Claude, Codex) only trigger the blue unread dot when the assistant completes a turn, not on every line of output.

Hover over a session to reveal the × button. For live sessions this kills the process; if the adapter supports resume, the session moves to the Resume previous drawer at the bottom of the sidebar. Exited sessions that aren’t resumable can be dismissed with ×.

Click a project name in the sidebar (or navigate to /:project) to see the project hub. This is an overview of every session in the project, grouped first by host, then by working directory.

Each host gets a section with a status indicator and a breadcrumb path showing the topology chain. For example, a devcontainer running on a remote peer might show workstation › alpine-dev. Status indicators:

IndicatorMeaning
Accent dotLocal host
Green dotConnected remote peer
Pulsing yellow dotReconnecting to peer
Red dotPeer disconnected

Within each host, sessions are grouped by their working directory. Each folder row shows a path label and the session cards underneath. A + button on each row lets you launch a new session in that directory on that host.

Each card shows a status dot and the session title. Click a card to attach to that session’s terminal. The × button kills alive sessions or dismisses dead ones.

If a project has no sessions yet, the hub shows the project’s configured path with a + launcher to get started.

Click a session to attach. You get a full interactive terminal powered by xterm.js. Colors, cursor positioning, mouse support, and images all work. The header bar shows the session title, status label, and a working indicator.

Terminal window
gmux pi # coding agent
gmux pytest --watch # any command

There are several places to launch:

  • Sidebar header: click the + button at the top of the sidebar to launch in the default directory.
  • Sidebar project: hover a project name to reveal a + button. This launcher is context-aware: it targets the host and directory of whatever you’re currently looking at. Select a session on a remote peer, and the + targets that peer. Switch to a local session, it targets local.
  • Project hub: click the + on any folder row to launch in that specific directory on that host. For projects with peers, the per-host launcher routes the session to the correct machine.
  • Home screen: quick-launch buttons for starting a session without any project context.

All launch menus show the available adapters (Shell, pi, Claude Code, Codex). The first item aligns with the + button so a double-click launches the default adapter instantly.

Every view has a stable URL:

URL patternWhat it shows
/Home: host status, projects, quick launch
/:projectProject hub overview
/:project/:adapter/:slugA specific session’s terminal

For example, /gmux/pi/fix-auth-bug links directly to a pi session in the gmux project. URLs update as you navigate, work with browser back/forward, and are bookmarkable. Session slugs remain stable across kill and resume.

gmux ships a complete default keymap. Keys not listed here go straight to the terminal.

ShortcutAction
Shift+EnterSends a plain newline (\n) instead of Enter
Ctrl+CIf text is selected: copy to clipboard. Otherwise: sends SIGINT
ShortcutAction
Ctrl+Shift+CCopy selection to clipboard
Ctrl+VPaste from clipboard
Ctrl+Shift+VPaste from clipboard
Ctrl+Alt+TSends Ctrl+T (browser steals Ctrl+T)
Ctrl+Alt+NSends Ctrl+N (browser steals Ctrl+N)
Ctrl+Alt+WSends Ctrl+W (browser steals Ctrl+W)
ShortcutAction
Cmd+CCopy selection to clipboard
Cmd+VPaste from clipboard
Cmd+ASelect all terminal content
Cmd+LeftHome (beginning of line)
Cmd+RightEnd (end of line)
Cmd+BackspaceDelete to start of line (sends Ctrl+U)
Cmd+KClear screen (sends Ctrl+L)

All defaults can be overridden or disabled in settings.jsonc.

Open the same URL on your phone (or via remote access). The sidebar slides in from the left (tap ☰), and a bottom bar provides keys that phones don’t have:

ButtonSends
escEscape
tabTab
ctrlArms Ctrl for the next key (tap ctrl, then c = Ctrl+C)
altArms Alt for the next key
← →Arrow keys (hold to repeat)
Send (Enter)

When ctrl is armed, the toolbar transforms: esc and tab become and arrow keys, (send) becomes paste, and ← → switch to word-jump navigation. The toolbar returns to normal after the next keypress or when you tap ctrl again.