Window layouts
Overlay and Basket: Claude and Codex with the sidebar as one window, side by side or stacked, moving together, saved setups, animation.
Last updated
Pairbar has two ways to sit with Claude and Codex:
| Mode | What it is |
|---|---|
| Overlay | Pairbar's sidebar lies over the app in front's own sidebar. Open a chat of the other app and its window comes to the same spot, so it feels like one window changing content. This is how Pairbar starts. |
| Basket | Claude and Codex docked together with one Pairbar sidebar, in a Pairbar frame, behaving like one window: Side by side, Stacked (one above the other) or Focus (one at a time). |
Pick one from the sidebar's layout button (in its header, next to the new-chat button), ⌘K ("Overlay", "Basket"), or a shortcut. Moving windows needs the Accessibility permission (the same one switching apps uses); without it, Pairbar shows how to allow it.
The basket#
Basket docks the two apps around the window you're using: it stays where it is, at its size, and the other app goes next to it, on the right when there's room there, otherwise on the side with more room. Only if neither side has room does the basket move and then shrink to fit the display. It never fills the display on its own. Pairbar remembers the basket for each set of displays, so it comes back where you left it.
- Side by side and Stacked rearrange the two apps in the same outline (Stacked in a wide, short basket grows a little within the display first, so neither app is cramped).
- Focus shows one app at a time in the whole card, the other right behind it in the same place; the sidebar and the frame don't move. Opening a chat of the other app, Swap apps or ⌃⌥⌘S brings the other one to the front in the same spot. There's no line between the apps in Focus, and leaving it brings back the split you had.
- Swap apps exchanges their places (in Focus, which one is in front); the sidebar stays put.
- The line between the apps sets how the room is shared: drag it (the pointer turns into ↔, or ↕ when stacked). It stops where either app would get smaller than 420 pt or than the app itself allows, and it settles on 50/50 when you're within 12 pt (with a light tap on a Force Touch trackpad, once each time it settles). There are no fixed ratios to pick: Side by side and Stacked each keep the split you last set for them, for each set of displays, so switching between them brings yours back.
- The basket is at least 480 pt tall when the display allows it, so the sidebar always fits whole: header, search, list and tabs.
- The basket is never smaller than the two apps allow, and never lets them overlap or stick out: it's always at least the sidebar's column plus each app's minimum size. When both apps can't fit side by side on a display at their smallest, the basket stacks them (or, if that doesn't fit either, shows them in Focus, one at a time) and says why.
- Overlay puts both apps in the basket's frame, one on top of the other (the one you were using in front), shows each app's own sidebar again if Pairbar hid it, and lays Pairbar's sidebar over the front one's, as before the basket. Pairbar's sidebar stays where it was on the basket's left edge all the way out (that's where the front app lands), so it never jumps or disappears on the way. From then on the sidebar follows the window in front.
How it looks#
The sidebar and a thin frame (8 pt on the top, right and bottom) are one continuous surface in the sidebar's colour, with one soft shadow and a faint outline. The sidebar runs the frame's whole height, so each of the basket's left corners is one curve, not the sidebar's inside the frame's. The two apps sit inside as one inset card, a hairline between them. The card's corners are the apps' own window corners (16 pt on macOS 26) and the basket's outer corners, the sidebar's included, are those plus the frame (24 pt), so the curves run evenly round each corner. There's no extra bar. The sidebar's column keeps one width whichever app is on the left (swapping never widens it), and going into the basket leaves the sidebar where it was over the app's own: the app gives up that part of its window.
Pairbar's sidebar doesn't hide in the basket, only in Overlay. In Overlay it lies over the app's own sidebar, so hiding it shows that one; in the basket the apps are laid out beside its column, so hiding it would leave an empty hole. So in the basket:
- The header has no hide button, ⌘K has no "Show the app's own sidebar", and Settings → General → Hide Pairbar is greyed out with "Docked in the basket, Pairbar is its sidebar. Switch to Overlay to hide it".
- ⌃⌥S and the menu bar's Show or hide Pairbar never hide it: with the basket in front they say "Pairbar stays docked in the basket — switch to Overlay to hide it" under the search field for a few seconds; with another app covering the basket they bring the basket, sidebar included, back to the front.
- It never goes down to its round button (a narrow Claude pane, Claude's own sidebar collapsed), and holding or double-tapping ⌥ doesn't peek when the apps' own sidebars are hidden (there's nothing under it to see).
- Docking while Pairbar is hidden shows it, and so does Pairbar starting up into the basket with the sidebar saved as hidden. It stays shown when you go back to Overlay.
- An app quitting leaves its place in the basket (with Open Claude or Open Codex) and the sidebar where it is; with neither app left the basket goes, and the sidebar with it, without hiding it.
Leaving the basket on ⌃⌥S was considered and turned down: it would move both apps' windows for a key that means "show or hide", and the basket's red button, its pill and the layout menu already do that.
The frame is drawn just above the apps and the basket's background just below them. Another app's window in front of the basket covers all of it, sidebar included, like any window. Click the sidebar or the frame to bring the whole basket back to the front.
A small pill hangs from the middle of the basket's top edge while it's in front (or the pointer is near the top edge): Side by side, Stacked, Focus, Swap apps and Overlay. It adds no height; turn it off with Settings → Windows → Show the basket's controls on its top edge. The pill is always wholly on the display: when the basket reaches the menu bar (the green button, say) it hangs just inside the top frame instead, and it slides along the edge rather than past the display's side. Every one of its controls is in the layout menu too, and each says what it is to VoiceOver.
Moving and resizing#
- Move it by dragging the sidebar's empty space or header, or either app by its title bar.
- Resize it by any outer edge or corner, including the sidebar's side: every edge has the same 14 pt press area (6 pt past the visible edge and the frame's outer 8 pt; on the left, the sidebar's outer 8 pt), and each corner's diagonal reaches 16 pt along both edges from the visible corner. The pointer shows the resize arrows (↔, ↕, or diagonal at the corners) on hover and all through the drag, and a press there never reaches the window behind.
- Share the room by dragging the line between the apps (↔, or ↕ when stacked): its press area is 10 pt wide, 5 pt each side of the seam, and belongs to Pairbar alone, so neither app's own edge takes the pointer there. A 2 pt accent line shows on it after a moment's hover.
- Kept on screen: the basket always stays whole on a display, its top below the menu bar like a window's title bar. A move stops at the display's edges; a resize stops there and at the smallest the apps allow, and the outline stops with it. An edge you bring within 8 pt of the display's edge snaps to it.
- A drag that loses its release (the button let go while macOS was busy switching Spaces, say) ends by itself where the pointer left it, a moment later; nothing stays held.
If the basket ever ends up partly off a display (an app window you moved yourself, a display that went), it's put back whole on the nearest display when you let go, the next time it's docked, and when displays change.
Moving it, the real windows stay put while you drag: Pairbar shows a stand-in of the basket (the frame and pictures of both apps) in a window of its own and moves it with the pointer at the display's rate, with Pairbar's real sidebar riding on top of it. Where the basket was, it shows a picture of what's behind it, so the apps never show at their old place. When you let go, each app is moved once to where the stand-in shows it, and the stand-in fades as they land. Dragging an app by its own title bar, macOS moves that window and the stand-in brings the rest along under it, placed from where the window really is.
The pictures need Screen Recording. So a move can start at once, Pairbar keeps recent ones, but takes them only when a drag is likely: when the pointer comes near the basket and the pictures it has are missing, out of date (the apps moved or were resized) or older than 30 seconds; never while the basket just sits there, never while you're typing in Claude or Codex, and at most once every few seconds. That keeps macOS's screen recording indicator (and the work) to moments you're about to drag. A press on the basket takes fresh ones too, and the move uses whichever is ready. Without the permission, or with no pictures at all, a move shows the outline below instead, never the apps' icons.
Resizing it, or dragging the line between the apps, shows an outline of the new size: the basket's shape, see-through, with a firm edge and the line between the apps where it would go. The apps and the sidebar stay as they are until you let go, then take their new sizes at once; pictures are never stretched or cut.
Resizing an app by its own edge works like the basket's edges: while you hold it, macOS resizes that app and the basket's outline shows the new shape, but the other app stays put; when you let go it takes the rest in one move, so it never chases your edge. With the basket off, the other app follows as you drag.
Pairbar tells its own window moves from yours by where it put each window, not by timing, so a move or resize you make during or just after one of Pairbar's is never lost, and an app that settles at its own minimum size a moment after being moved is followed rather than overlapped.
macOS's own tiling (dragging a window to the screen's edge, fn⌃← and the other fn⌃ arrows, the green button's Move & Resize menu) acts on one window. When it tiles a docked app, the whole basket takes that tile instead, so the group never comes apart. A tile too narrow for both apps side by side at their smallest (half a laptop's screen, say) gets them stacked.
The apps' own sidebars#
With Hide the apps' own sidebars in the basket on (Settings → Windows, on to start with), Pairbar's sidebar and each app's own are one or the other: you always have one sidebar, never none and never two. Docking hides each app's own sidebar, so Pairbar's is the basket's only one: it's a column on the left, and the apps show just their chat to its right.
- Pairbar presses the item in the app's own View menu (Claude's "Hide Sidebar", Codex's "Toggle Sidebar"), never a keystroke. It finds the item by the sidebar in its identifier or title, never by its shortcut alone (⌘B could be Bold). If an app has no such item (a renamed menu, a new version), nothing is pressed, its sidebar simply stays, and Pairbar says so ("Codex has no menu item for its own sidebar, so it stays shown").
- Going back to Overlay puts each app's own sidebar back the way it was, under Pairbar's.
- Pairbar can't be hidden in the basket (its column is the basket's only sidebar; ⌃⌥S says so, see The basket). Docking while Pairbar is down to its round button shows it.
- In Overlay, Pairbar's sidebar lies over the app's own, which it covers exactly, so showing Pairbar presses nothing: hiding the app's own there would move its chat under Pairbar and take away the edge you resize it by and the sidebar a peek shows.
- Hiding Pairbar (⌃⌥S, its button, the menu bar's Show or hide Pairbar) shows the app in front's own sidebar if it's hidden, and any Pairbar hid, so there's always one. Switching between Claude and Codex while Pairbar is hidden shows only a sidebar Pairbar itself hid.
- Locked (the lock screen instead of the sidebar), each app's own sidebar comes back, in the basket too; once unlocked, the basket's are hidden again.
- Pairbar only does this when something happens: you show or hide it, dock or undock, another app comes to the front, an app launches, the lock or this setting changes. A sidebar you open or close yourself in between is left as you set it until the next of those.
- Show Claude's own sidebar (or Codex's, the app in front) in the layout menu shows it again while docked, and hides it again. Codex's item is a toggle, so Pairbar goes by what it last did (or by its checkmark, when the item shows one); it never presses it without knowing it's hidden. If you show or hide Codex's sidebar yourself, use the same menu item again to line it back up.
- Quitting Pairbar (or an update's relaunch, or logging out) gives each app its own sidebar back first. What Pairbar hid is also kept on disk, so after a crash or a force quit the next launch gives it back, or keeps it hidden if the basket comes back (see below) and gives it back when you leave the basket.
Across a relaunch#
Pairbar remembers that the apps were docked. At the next launch it docks them again, in the basket as it was last on these displays, once both windows are open (it waits up to ten seconds for them); if they don't turn up, it stays in Overlay and gives the apps' own sidebars back.
With the setting off, the apps keep their own sidebars and Pairbar's lies over the left app's; Pairbar never presses their menus (turning it off gives back what it hid, as it was).
Window buttons#
- The basket's own buttons sit at the sidebar's top-left and act on the whole basket: red goes back to Overlay (both apps stay open, in the basket's frame, one on top of the other), yellow minimises both apps, the basket and the sidebar (bring either app back from the Dock and the other and the sidebar come back with it), green fills the screen with the basket, or puts it back.
- Each app's own buttons stay where the app draws them and work as usual; Pairbar follows what they do:
- close: the app's place says "Codex closed" with Open Codex;
- minimise: "Codex is minimised — click to restore" with Restore Codex;
- zoom (green): the whole basket fills the screen instead of that app alone;
- full screen: that app leaves the basket ("Codex went full screen, so it left the group"), and the other keeps its place.
- A place whose app isn't open says so with Open Codex; one whose window is on another Space, with Show Codex. The basket hides when neither window is on this Space, and the sidebar with it.
- An app that comes back (opened again after quitting, its window reopened, back from another Space) goes into its place in the basket as the basket is now (moved or resized while it was gone), whatever spot it opened at, even when it comes back in the middle of a move; the basket stays where you left it.
Where to find it#
- The layout button in the sidebar's header: Overlay or Basket (ticked as things really are, also after restoring a setup); in the basket, Side by side, Stacked or Focus, Swap apps, and with both apps in, Move divider left and Move divider right (up and down when stacked; a 5 % step each); Hide Claude's own sidebar (or Show; the app in front); Window settings….
- VoiceOver: the line between the apps is a splitter; its value is the first app's share, and increment and decrement move it 5 %.
- The basket's pill (see above).
- ⌘K or ⌃⌥K: Overlay, Basket, Side by side, Stacked, Basket: Focus, Swap apps.
- Shortcuts (Settings → Shortcuts): each of those can have one, and so can the two divider steps. Only Swap apps has one to start with: ⌃⌥⌘S. See Keyboard.
Animated swaps#
Going into the basket, changing its arrangement and swapping glide into place (about a quarter of a second). The real windows are never shown halfway, and never twice: they move once, under the animation, and it goes only once they're where it shows them. Pairbar's sidebar stays up the whole time in the basket, and the basket's frame is drawn once.
- In the basket, with Screen Recording allowed, the whole basket (its frame, the apps' pictures, the line between them) springs to the new arrangement while the real windows move underneath. Each picture keeps its window's size, clipped to its pane: when a pane changes size (side by side ⇄ stacked) its picture gives way to a plain pane rather than being stretched. In Focus, switching apps is a short crossfade. Pairbar never records or saves your screen; the pictures (and, while you drag the basket, the picture of what's behind it) stay in memory for the fraction of a second they're needed, and are never older than 30 seconds (the picture of what's behind the basket, 5 seconds). They're taken one window after the other, each at its own display's sharpness. The first time the basket moves, Pairbar offers the permission once ("For the smoothest animations, allow Screen Recording"); the welcome's permissions page offers it too.
- In the basket, without it, the apps take their new places at once and a clean outline of the basket (its edge and the line between the apps, nothing covering them) goes from the old arrangement to the new.
- Going into the basket, the apps glide in (with pictures, their pictures do), and the basket's frame fades in once they've landed. Out of it (Overlay), the basket's frame, the line between the apps and the pill fade out, while pictures of the apps slide to their shared frame, or the windows glide there; Pairbar's sidebar stays up where it is the whole time.
- Everything moves at your display's own refresh rate (120 Hz, 165 Hz…). A command that comes while something is moving waits, then carries on from where the animation is, never from the start.
- With Reduce Motion on, nothing glides or springs: the apps move at once; in the basket, with pictures, the old arrangement crossfades away over the new one. Leaving the basket, its frame goes at once. The sidebar turns into the dot (and back) at once, and its width jumps instead of easing. Turn it all off with Settings → Windows → Animate the basket and swaps.
Following the window in front#
In Overlay the sidebar sits on the front window of the app in front and moves with it as it moves: Pairbar hears of each move from macOS (with Accessibility allowed) and places the sidebar within the same display refresh, whether you drag the window, a window tool moves it, or macOS tiles it. While you drag a window by its title bar, the sidebar follows the pointer at the display's own rate (each display's, when you drag across displays) and stops with the window at the menu bar.
Another window of the same app brought forward (a click, the Window menu, ⌘`): the sidebar goes to it at once.
Another Space or full screen: the sidebar shows on the Space where the window is.
Nothing to cover (Overlay only; in the basket the column is always the sidebar's): over a window too narrow for the app's own sidebar, or (with Hide the apps' own sidebars in the basket off) with that sidebar collapsed, Pairbar shows only its round button. With the setting on, Pairbar is the app's sidebar, so a collapsed one of the app's own doesn't take it down to the button. Click it (or press ⌃⌥S, or use the menu bar's Show or hide Pairbar, or open Pairbar again) to show the sidebar over the app's content until you hide it.
Overlay width: matches the host's rendered divider when available, otherwise its saved sidebar width, without a separate Pairbar percentage cap. Claude's own narrow-window sidebar hiding still applies.
Another app in front: the sidebar stays on the window of the app you used last, ordered just above it like part of that window, so other apps' windows cover it as they cover the window. Pairbar puts it back above the window when the window order changes (an app comes to the front, a Space change, the window minimised or brought back), with a check every 5 seconds for anything macOS doesn't announce. In the basket the group's front window decides, as before.
When neither Claude nor Codex is in front, Pairbar looks at their windows only when macOS says something changed (a window moved, minimised, hidden, another Space), plus that 5-second check while its sidebar sits on a window in the background.
Opening a chat of the other app#
- In Overlay: the other app's window is moved to where the one in front is first, as always.
- In the basket: side by side or stacked, both already show, so the other app just comes forward; in Focus, it comes to the front in the same spot.
Saved setups#
Settings → Windows → Save setup… remembers where things are for the displays connected right now: the basket's frame, arrangement and split (restored exactly as you set it), or, in Overlay, each window. It suggests "Laptop" when only the Mac's own screen is connected and "Desk" when an external display is; saving under a name you already have replaces it. The list there has Restore, Rename… and Delete….
Setups are keyed by the displays themselves: each display's own id (which macOS keeps across restarts and ports) and where it sits. If the same displays come back arranged differently or at another resolution, the basket keeps its place on its own display, moved and scaled with it.
With Restore a saved setup when displays change on (off to start with), plugging a display in or unplugging it puts things back as saved for the new set of displays, a second after the change settles: the setup for exactly these displays in these places, else one for the same displays arranged differently, the most recent if several match. Otherwise, or when no setup matches, the basket is moved onto the nearest display that's left if it no longer fits where it was.
Limits#
- An app's minimum size: Claude and Codex won't get narrower than their own minimum, and don't say what it is, so Pairbar learns it: it reads back where each window ended up after every move (and after every drag of the basket) and grows the basket to fit. An app that states its minimum through Accessibility is taken at its word from the start. Pairbar never learns a limit from a size macOS imposed (the menu bar, the display's height) or from an app that hadn't answered yet; it looks again a moment later. The first resize below a minimum Pairbar hasn't met yet lands once and is then put right; later ones stop at it while you drag. If both minimums don't fit side by side, the basket stacks the apps or shows them in Focus (see The basket); an app bigger than the whole display keeps the basket's top-left corner on it.
- Full screen: a window already in macOS full screen is left alone ("Codex is in full screen, so it stays where it is").
- Other Spaces and minimised windows: a window that isn't on the current Space, or is minimised, isn't moved; in the basket its place shows what to do. The basket only shows on the Space the apps are on.
- Several windows: Pairbar docks the window its sidebar follows (the app's front window), not the others.
- Dragging across displays: the stand-in stays on the display the basket started on; let go and the basket lands on the display it's mostly over, whole.
- Stacking order: the basket's background is kept just below the two apps and its frame and the sidebar just above them. When you bring one docked app forward, Pairbar raises the other's window too (with Accessibility, without switching to it) so no other app's window ends up between them. Pairbar checks the order when something changes (an app comes forward, a window comes or goes, another Space) and every few seconds, and only reorders when something is out of place.
- How windows are moved: each app is moved on its own (a busy app never holds the other up), and only what changes is set: a move sets the position alone, a resize the position and then the size (size, position, size only near a display's edge). With VoiceOver or another assistive app on, Pairbar turns the app's animated accessibility frames off for the move and back on a couple of seconds after.
- Mission Control and Stage Manager: the basket isn't listed in Mission Control, and neither is the sidebar on its own (in Overlay or in the basket). With Stage Manager on, the basket still works, but Stage Manager may move one of the two windows into a stage of its own; Pairbar warns, and Settings → Windows shows a note. Turning Stage Manager off in Control Centre avoids it.
Guides and use cases for this
- GuideDock Claude and Codex together in the basketPut Claude and Codex in one Pairbar frame with one sidebar: pick a layout, swap, share the room, move and resize, and save setups per display.
- Use caseRun the Claude and Codex desktop apps side by side, with one sidebar, as one windowThe basket docks Claude and Codex with one sidebar: Side by side, Stacked or Focus, a draggable divider, and the whole group moving as one window.
- Use caseTrack every branch and pull request across your Claude Code and Codex chatsThe Tasks view groups chats from both apps and the cloud by branch or worktree, with PR checks, lifecycle sections and suggestions you approve or decline.
- GlossaryBasketPairbar's layout that docks the Claude and Codex apps with one sidebar in one frame, so they move, resize and swap as one window.
- ComparisonPairbar vs Superset: an overlay for the official apps, or an agent IDEPairbar sits over the official Claude and Codex apps; Superset is its own IDE that runs many CLI agents in parallel worktrees.
- ComparisonPairbar vs Conductor: two Mac apps for Claude Code and Codex, built differentlyConductor runs parallel agents in its own isolated workspaces; Pairbar organises the chats you run in the official Claude and Codex apps.