Skip to content

Labs: top bar and quick switcher layout - #43

Closed
sean-brydon wants to merge 7 commits into
mainfrom
labs-layouts
Closed

sean-brydon wants to merge 7 commits into
mainfrom
labs-layouts

Conversation

@sean-brydon

Copy link
Copy Markdown
Collaborator

Settings › Labs › Layout lets you try other ways to lay out the window. The sidebar stays the default and doesn't change. This branch adds the choice and a small registry for it, plus one direction: Top bar and quick switcher. Other branches add the other directions to the same registry.

The registry

app/src/components/layouts/registry.ts holds one entry per layout. An entry says:

  • what replaces the sidebar (side, or null for nothing);
  • what bar goes across the window's top (top);
  • what replaces the status bar (bottom);
  • what overlay it mounts (overlay).

App.tsx draws the layout from its entry. The prefs keep the layout's id (prefs.layout), and ?layout=<id> picks one in the mock. An id this Shipyard doesn't know shows the sidebar.

Top bar

There's no sidebar. The way around runs across the top, and the work gets the window's full width.

  • Home.
  • Projects ⌘E finds any worktree by its name or its task. What needs you comes first, from every project, and the next one is already picked. Then the project you're in, then the rest with their counts, and every box's state, offline ones too.
  • Open worktrees as tabs, each with its state. ⌃1–⌃9 go to them. Closing a tab leaves its agents running.
  • "2 need you" goes straight to the agent that has waited longest.
  • "2 working · 4 done", or a held ⌃⇥ anywhere, opens a switcher. It works like macOS ⌘-Tab: every agent as a card with the last lines of its screen, grouped by what it needs, starting on the worktree you were in before.
  • Review, the other places, search, notifications and Settings.

The tab strip underneath is unchanged and picks the agent. The status bar leaves out what the bar already says.

Directions explored

Grouped by the question each answers first:

  • Triage
    • Inbox first (Superhuman, GitHub notifications). Built on its own branch.
    • Board or mission control (Linear's board, kanban). Rejected by the user ("Nobody uses board"). Its grouping by state lives on in the switcher.
  • Switching
    • Top bar and quick switcher (Vercel and Linear switchers, browser tabs, ⌘-Tab). This PR.
    • Command first (Raycast, Zed's quick open). Built on its own branch.
    • Icon rail and breadcrumb (VS Code's activity bar, Arc). Built on its own branch.
  • Overview
    • Exposé of live agents (Mission Control). Folded into this PR's ⌃⇥ switcher, which works as an overlay in any layout.
    • Spatial canvas (tldraw, Figma). Not built: it needs a mouse, it's costly to keep live, and like the board it makes you arrange agents yourself.
  • Focus
    • Split-pane workspace (tmux, Zellij, Warp). Built on its own branch.
    • Remade sidebar (agents first, the tree demoted). Built on its own branch.

Scores

Each round, a fresh critic subagent scored the screenshots: 1440×900 and 1100×750, dark and light, 32 in all. I fixed what each round found before the next.

What needs you Switching Overview Focus and calm Learnability Visual quality Overall
Top bar, round 1 8 7 5 7 6 5 6
Top bar, round 2 8.5 8 8 8 6.5 7 7.5
Top bar, round 3 9 8 7 8 6 7 7.5
Top bar, round 4 9 9 7 9 6 8 8
Top bar, round 5 (final) 9 8 7 9 6.5 7.5 8
Baseline sidebar (median of the 5 critics) 6 6 7 6 8 7 6.5

My own baseline score is 7. Screenshots undersell how familiar the sidebar is, and that its tree keeps every worktree's state on screen.

Recommendation

  • Ship Top bar as a Labs option, not the default yet. It's fastest to what needs you and calmest. But its learnability (6.5) is where the sidebar clearly wins (8): ⌃⇥ and ⌘E have to be discovered.
  • Hybrid now. Keep the sidebar as the default and give it the top bar's best ideas, none of which depends on the layout:
    • the "N need you" pill;
    • the ⌃⇥ switcher;
    • the ⌘E finder that leads with Needs you.
  • To make it the default: teach ⌃⇥ once, and let the switcher pin open as a page for an overview that stays on screen. Then test it again.

Checks

  • pnpm typecheck:plugins, check:titles, check:csp, check:themes, test and build pass.
  • tsc -p e2e passes.
  • The new spec, e2e/layout-topbar.spec.ts (8 tests), passed 3 times over with --repeat-each=3. It covers opening a worktree, starting a task, reaching Settings, ⌃⇥, ⌘E and closing a tab.
  • Axe has three new scenes for the top bar, all clean.
  • cargo check and the docs build pass.
  • go vet passes, and go test -race passes. internal/wire failed once and passed on a rerun. internal/box needed -timeout 25m on a busy machine. Neither has Go changes on this branch.
  • In the full axe run, settings-boxes fails with a list violation. This branch doesn't touch that screen.

🤖 Generated with Claude Code

sean-brydon and others added 7 commits October 9, 2026 20:26
A small registry of layouts (components/layouts/registry.ts): each says
what replaces the sidebar, what bar goes across the top, what replaces the
status bar, and what overlay it mounts. Settings › Labs › Layout picks one;
prefs keep its id (?layout=<id> in the mock). The sidebar stays the default
and is untouched.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Settings › Labs › Layout › Top bar: Home, the project you're in (a menu of
every project's worktrees), the worktrees you have open as tabs, what needs
you, and the places across the top. ⌃⇥ held shows every agent as a card
with the last lines of its screen, ⌘-Tab style; ⌃1–⌃9 go to a worktree tab.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
After a critic's pass on screenshots: the project crumb opens a list of
every worktree to filter by name or task (with each project's counts and
the boxes, away ones too); the bar counts agents working and done beside
what needs you; worktree tabs show just their name and shrink gracefully;
the switcher groups agents by what they need with one ring for the pick;
narrow windows fold places into More instead of bare icons; the tab strip
drops its repeated breadcrumb under the top bar. Axe scenes for all three.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…needs you

Second and third critic passes: a stable Projects ⌘E button that opens on
the worktree in front, with what needs you from every project at the top
and open tabs marked; counts as one labelled chip (2 working · 4 done);
Review keeps its label down to 1280px; New task in words when there's
room; compact pill tabs whose × overlays on hover; the switcher starts on
the worktree you were in before, in two columns with the newest two done
and recent; the status bar leaves out what the bar already says.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
It opened under a resting pointer, which took the pick from the keyboard
and showed the worktree you were in rather than the one before.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…d keeps tab names whole

Fourth critic pass: places other than Review fold into ⋯ until there's
room for their names; the finder preselects the next agent that needs
you (or the worktree before), names every row, marks open and here, has
the boxes on a line of their own and teaches ⌃⇥; tab × shows on hover so
names keep their room; the counts chip turns to glyphs when narrow; the
finder is a proper combobox for screen readers.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@vercel

vercel Bot commented Oct 9, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
berth Ready Ready Preview Oct 9, 2026 9:06pm UTC
berth-docs Ready Ready Preview Oct 9, 2026 9:06pm UTC

Request Review

@sean-brydon sean-brydon changed the title Labs: new layouts (board, top bar, inbox) Labs: top bar and quick switcher layout Oct 9, 2026
@sean-brydon

Copy link
Copy Markdown
Collaborator Author

Stashed: not going ahead with this layout for now. The branch stays for later.

@sean-brydon sean-brydon closed this Oct 9, 2026

This branch was successfully deployed

2 active deployments
Preview – berth-docs — 030f74f5 Deployed Oct 9, 2026 by vercel[bot]
Preview – berth — 030f74f5 Deployed Oct 9, 2026 by vercel[bot]
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