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.