grove

Multi-window

Grove supports multiple top-level OS windows. The two big use cases: side-by-side viewing — two task worktrees, or code next to a browser — and tearing a tab off into its own window by dragging it out of the tab strip.

The model

  • Each window is a full, independent Grove surface pointed at one workspace: its own panes, panels, selection, terminals, and browser tabs. Layout persists per window.
  • Two windows can point at the same workspace — that's the side-by-side case.
  • New Window is Cmd+Shift+N (from the menu); macOS dock-reopen restores your last workspace.

One window owns a task

The backend enforces a cross-window lock: one worktree is never driven from two windows at once. If a task is active in another window, the rail tells you which one rather than letting two agents' surfaces fight over the same files.

Tear-off

Drag a tab out of the tab strip and it becomes its own window:

  • File tabs migrate cleanly — same buffer, same state.
  • Terminal tabs can't carry a live process across OS windows, so the tear-off starts a fresh shell at the same directory.
  • Browser tabs recreate the page at the same URL (history doesn't carry).

Shared underneath

The heavyweight services — language servers, the comment store, the diff poller, the MCP server, the IDE bridge — are single shared instances across all windows. Opening a second window doesn't double your memory for rust-analyzer.

Current limitations

  • One workspace per window (no multi-root).
  • Window size/position isn't persisted — only the layout inside each window is.
  • Chats aren't window-locked the way tasks are.