Skip to content

Add multiple desktop windows with shared conversations - #414

Open
jsgrrchg wants to merge 31 commits into
zeronsh:mainfrom
jsgrrchg:zeron/multi-window-feasibility-study
Open

jsgrrchg wants to merge 31 commits into
zeronsh:mainfrom
jsgrrchg:zeron/multi-window-feasibility-study

Conversation

@jsgrrchg

@jsgrrchg jsgrrchg commented Sep 16, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Add multiple native desktop windows that share the same conversations and engine. Users can keep the same chat open in several windows or work on different chats, with independent drafts, navigation, scrolling, and panels.

Behavior

  • Open a window from File → New Window, the command palette, a conversation's Open in another window menu, or zeron --new-window.
  • On macOS, choose New Window from the running app's Dock menu, including when all windows have been closed. This dispatches the same application-wide action as the keyboard shortcut.
  • Use Cmd+Option+N on macOS and Ctrl+Alt+N on Windows/Linux. Preserve Cmd/Ctrl+Shift+N for new projects and existing custom shortcut assignments.
  • Share conversation history, optimistic messages, queues, and running agents. Emit sounds and notifications once through an application-wide service.
  • Keep other windows running when one closes. Coordinate unsaved-file decisions, updates, and account changes across every window.
  • Forward subsequent launches and conversation links to the running GUI for that data directory, using an authenticated loopback endpoint and a separate OS-owned GUI lock.

Implementation and persistence

Application/runtime ownership is separate from each window's state. Conversation subscriptions are shared, settings merge through one writer, and application services coordinate notifications, lifecycle, launch forwarding, and native window entry points.

Cold launches restore the main window. Extra window identities and drafts remain session-local. macOS keeps the application alive after the last window closes; Windows/Linux exit. A separately running engine daemon survives GUI shutdown.

Validation

  • 1,056 UI tests passed, including the regression for opening a window after the runtime is already ready without leaving it covered by the startup overlay.
  • 11 executable tests passed.
  • Native Fedora X11 probe passed: CLI forwarding, Ctrl+Alt+N, three windows, one engine, closing the original window, and last-window exit.
  • Native Wayland fixture passed: window creation, distinct identities, content visibility in newly opened windows, original-window close, and replacement window.
  • Manually exercised the debug app on Fedora GNOME/Wayland with ZERON_DATA_DIR="$HOME/.zeron-dev" and ZERON_IPC_PORT=27655: same chat in two windows, independent draft, switching one window to another chat, the command palette, and closing/reopening a window.
  • Native macOS and Windows probes are provided but have not been run on this Linux host.

Screenshots

Captured from the running development app on Fedora GNOME/Wayland. Images are uploaded GitHub attachments; no screenshot files are committed to the repository.

The same conversation in two windows, with a draft only in the right window:

Shared conversation with an independent draft

Different conversations selected independently, sharing the same history sidebar:

Independent conversations in two native windows

New window in the command palette, alongside the unchanged new-project shortcut:

New window and keyboard shortcuts in the command palette


View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need. Autofix is disabled.

@jsgrrchg
jsgrrchg marked this pull request as ready for review September 18, 2026 22:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant