Workspace

Panes & tiling

How Verde's tiled workspace is laid out — splits, scrolling strip, focus, resize, zoom, the sidebar, the terminal dock, and the browser pane.

Workspace anatomy

Each Verde window is one workspace tied to an imported project. Inside a workspace you get a tiling tree of panes — chat threads, terminals, and a browser pane — that share the main area. The sidebar on the left lists projects and threads; the main area is the tiling surface; the terminal dock is a terminal pane living in the same tree as chat and browser panes. A detached quick or companion pane is an overlay and stays fixed above that surface.

Tiled panes, the scrolling strip, and detached overlay geometry persist across launches.

Splitting panes

Splits come from the prefix table and the pane header buttons. With prefix mode enabled, Ctrl+B, then t starts a new chat thread, while Ctrl+B, then Shift+T creates a separate top-level terminal pane. Use v, -, Shift+V, or Shift+- when you want a tiled split inside the focused scrolling item.

With prefix mode enabled, Ctrl+B, then v creates a vertical split of the configured default pane type (chat or terminal) inside the focused pane; Ctrl+B, then - creates the matching horizontal split. Shift+V and Shift+- create the other type. The same keys work after Ctrl+B W. In a scrolling workspace the panes stay tiled together as one scrolling item, and the sidebar shows the same split as a clickable miniature instead of flattening it into unrelated pane rows.

For chat-vs-chat splits and terminal-vertical splits, use the pane header buttons: C| and C- split a chat pane vertically or horizontally; T| and T- do the same for terminals. Right-click terminal content for selection copy, zoom, workspace splits around the focused pane, and Close pane. Right-click a terminal tab to rename or close it. If terminal.profiles is configured in verde.json, the first custom launch profile also appears in the terminal context menu.

Use Ctrl+Alt+T for a new shell tab. Launch Codex, Claude, OpenCode, Cursor, Pi, FX, Grok, or Amp TUIs from the command palette, or open a running GUI thread in TUI; the built-in agent launchers are not entries in the terminal right-click menu.

Terminal-internal tabs live inside the focused terminal pane. Workspace split actions create new workspace panes in the tiling tree, not new tabs inside a terminal.

Moving focus

  • Ctrl+Arrow — focus the pane in that direction.
  • Ctrl+H / J / K / L are unbound by default; map the existing keybinds.workspace.focus_left/down/up/right actions to opt into vim-style focus.
  • Horizontal touchpad/wheel gestures pan a horizontal strip independently of focus. In vertical mode, hold Ctrl while using the vertical wheel so normal terminal and transcript scrolling remains available.
  • Tab — while focused inside a chat thread pane, return focus to the prompt box.
  • Alt+1 … Alt+9, Alt+0 — jump between workspaces by sidebar order.
  • Alt+↑ / Alt+↓ — cycle to the previous / next workspace.

By default, Verde automatically switches to a scrolling strip when a workspace reaches two tiled panes, keeping the same order shown in the sidebar. Settings → Workspace → Scrolling layout can keep that automatic behavior, pin the scrolling layout with Always, or retain the split tree with Disabled. Activation threshold changes the automatic trigger from 1–64 panes. Use Scrolling settings scope to edit the global defaults or override mode and threshold only for the currently selected workspace. Workspace overrides and scroll positions both survive restart. The command palette also exposes Scrolling Layout: Automatic, Always, and Disabled to set an immediate override for the current workspace; Scrolling Layout: Use Global Default clears it. Use Previous Pane and Next Pane there to move through panes in sidebar order; the displayed shortcut follows the selected scroll direction.

Scroll direction chooses a horizontal strip (the default) or vertical strip. Panes per view controls how many panes fit along that axis (1–6, default 2), and Pane spacing controls their gap. Manual wheel or touchpad scrolling is intentionally free-form, so the strip can stop with part of a pane visible like Niri. Adjacent focus movement scrolls just far enough to reveal the complete focused pane. Direct jumps from the sidebar, command palette, or numbered pane shortcut place the selected pane at the strip's leading edge (left in horizontal mode, top in vertical mode), including the final pane. Horizontal and vertical positions are restored independently per workspace; zoom temporarily fills the workspace without changing either saved position or the selected scrolling policy. Hovering the leading or trailing edge of the strip peeks to the adjacent pane without changing focus.

In scrolling mode, every tiled workspace pane becomes one column (or row) in sidebar order. Existing nested split geometry is flattened for the strip; browser tabs remain inside their single browser pane, and detached quick or companion panes remain fixed overlays rather than joining the strip.

Resizing

  • Alt+Shift+← ↑ ↓ → — grow the focused pane in that direction.
  • Drag the divider between two workspace panes to resize the split manually.
  • In scrolling layout, drag a pane's trailing edge to resize all columns within a 240–1600 px range. The custom width persists for that workspace; run Reset Scrolling Column Width from the command palette to return to Panes per view sizing.

Resizes are committed to the layout immediately and persist with the workspace.

Rearranging panes

  • Ctrl+Shift+H / J / K / L — move the focused pane past its neighbor in that direction.
  • Ctrl-drag a pane — pick it up with the mouse and drop it where it should go.
  • Drag pane rows in the sidebar to reorder them (scrolling strip order follows).

Use these when the layout is right but a pane is in the wrong place. Moves are non-destructive — every pane keeps its content and provider.

Zooming and closing

  • Alt+Z — zoom the focused pane to fill the workspace; press again to restore.
  • Pane context menu — close the pane (or Ctrl+W / Alt+X).

The sidebar

The left rail shows a pinned ACTIVE cluster of live, waiting, and recently finished work across workspaces, then the project tree beneath it. Each pane row carries its provider glyph and a live title, so you always know what is working without switching to it. ACTIVE stays put while you scroll the workspace list; if more than about ten rows need attention, that cluster scrolls on its own instead of burying the tree.

  • Ctrl+S — toggle the sidebar (visible ↔ icon rail).
  • Ctrl+Shift+S — toggle the sidebar's hidden mode (no rail at all).

When collapsed to the icon rail, each workspace avatar carries a row of small status pips — one dot per open pane, in layout order. Pips pulse green while an agent is working, yellow while it waits for input, and settle when it's done or errors, so you can watch several agents from a rail a few pixels wide. Context menus (new thread, close, expand) still work from the collapsed rail.

Right-click the sidebar for project import, rename, and Close workspace, and use the new-thread / pencil button to open a Codex TUI directly. Closing a workspace archives it without deleting its saved panes, threads, or layout. Use the command palette's reopen action—or verde live workspace reopen—to restore it.

The terminal dock

Verde's embedded terminals are powered by Ghostty's libghostty-vt terminal engine. Each terminal pane is a full terminal with tabs, splits, OSC titles, scrollback with a scrollbar, and per-terminal zoom.

  • Ctrl+Alt+T — new terminal tab inside the focused terminal pane.
  • Ctrl+Shift+R — rename the active terminal tab.
  • Ctrl+Shift+PageUp / Ctrl+Shift+PageDown — previous / next terminal tab.
  • Ctrl+Alt+↑ ↓ ← → — move focus between terminal splits inside the focused terminal pane.
  • Ctrl+- / Ctrl+= — per-terminal zoom; restored with the terminal layout.

Per-terminal zoom is independent of the workspace-level zoom (Alt+Z). It persists per terminal surface, not per workspace.

Terminal applications can render Kitty graphics-protocol images inline. The image follows terminal scrolling and is cleared when the application erases or replaces it, like other terminal content.

The browser pane

Press Ctrl+Shift+B to toggle the embedded browser pane next to the focused chat. The backend is the host platform's native webview: WPE WebKit on Linux, WKWebView on macOS, WebView2 on Windows. No bundled Chromium.

You can drive the browser pane from the CLI:

bash
verde live browser open --url https://example.com
verde live browser navigate --url https://example.com/dashboard
verde live browser eval --script "document.title"
verde live browser screenshot --json
verde live browser status --json

The inspector button enters Design Mode, where you can select an element or draw a region and send its context to a chat or terminal agent. See Design Mode for selection modes, routing, and screenshot support, and CLI reference for the full browser command surface.

Persisting layouts

Workspace layouts, per-terminal zoom, terminal tab state, and the browser pane's URL all persist across launches in Verde's SQLite state. Closing the app and reopening it restores the same tiling tree for each project. Closing a workspace from the sidebar or with Ctrl+Shift+W also preserves that state; reopen the workspace from the command palette when you need it again.

You can inspect the persisted layout without launching the app:

bash
verde state panes --project current --json

And the live layout while the app is running:

bash
verde live panes --project current --json

Experimental companion

Settings → Experimental features can enable the Companion sidecar (Sprout, Moss, or Vireo — pick the default under Appearance). Toggle it with Ctrl+Shift+Space. The companion is a pane-less overlay for orchestration: durable conversation, run/activity views, operation inspection, and Mission Control for multi-step goals. It stays experimental and is off by default.

Command palette and slash commands

Ctrl+Shift+P opens the command palette — a single ranked list of threads, panes, workspaces, and app commands. Ctrl+Enter on a thread result opens it in a fresh pane. The palette also carries Start New … TUI entries for Codex, Claude, OpenCode, Cursor, Grok, and Amp, and Open Current Thread in TUI entries that promote a GUI chat thread — including Pi, FX, and Grok — into that provider's terminal TUI.

The sidebar's History · N row opens the same palette scoped to one workspace's saved threads. Thread actions include open in a new pane, sync from the provider, open as a TUI or chat, and archive. Workspace actions also import existing Codex, OpenCode, and Claude Code threads. See Chat, models & runs for the complete workflow and current provider limitations.

Typing / in the composer opens a slash-command picker. Running a command shows a pending row in the transcript while it executes, then a result card (/usage renders a structured card with limit bars and recent daily usage).

Workspace commands, available with every provider:

  • /stack — start / stop / restart / status for every process and agent declared in the workspace's verde.yml.
  • /process — start / stop / restart / focus a single declared process by name; /process crashed refreshes status and reports the number of crashed processes.
  • //text — escape hatch: send a literal prompt that begins with a slash.

Provider-native commands surface in the same picker:

  • Claude Code/usage, /compact [instructions], plus skill commands such as /code-review, /debug, /loop, /batch, and /skills.
  • Codex/usage, /compact, /goal [status|clear|…], /review [changes|base <branch>|commit <sha>|custom …], and /shell confirm <command> (requires typed confirmation).
  • OpenCode, Cursor, Pi, FX, Grok — no native slash commands yet; /stack, /process, and // still work.

Edit this page on GitHub →