Skip to content

(idea) Responsive pane tabs for mobile: show tmux panes as tabs on narrow screens #85

@generev

Description

@generev

Problem

When a tmux session has multiple panes (e.g. 3–4 AI agents running side by side), the current agentboard view renders the entire session layout. On desktop this is fine, but on a phone the panes become tiny and hard to read or interact with.

Proposed Solution

Detect screen width and switch behavior at a breakpoint (e.g. 768px):

  • Desktop (wide): keep the current behavior — render the full session layout with all panes visible
  • Mobile (narrow): instead of the cramped split view, display each pane as a full-screen tab, with a tab bar showing pane titles (e.g. [Claude] [Codex] [Gemini] [Cmd]), each tab filling the full screen

Tab names would come from tmux pane titles (#{pane_title}), which many setups already configure meaningfully.

Why this seems feasible (based on a quick read of the code)

A few things in the existing architecture make this look relatively approachable:

  • The WebSocket terminal-attach message already has a tmuxTarget field that accepts session:window.pane format, the protocol can already address individual panes, the frontend just never populates this field
  • useMobileLayout and the 767px breakpoint are already used throughout, no new responsive infrastructure needed
  • The horizontal session tab UI on mobile already exists as a pattern to build on

The main missing pieces appear to be: (1) backend calling tmux list-panes to discover panes per window, and (2) a pane tab switcher in the mobile UI that sets tmuxTarget accordingly.

Relation to #59

Different from #59 (tiling): that proposes reimplementing split-screen natively in the browser; this is purely a presentation adaptation for small screens using the pane layout that already exists in tmux.

Happy to take a stab at a PR if this direction sounds good.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions