cmux-next: New Tab suggestions are an omnibar popover

Merged
TE
25d ago
+81081-37453

Typing in the New Tab field ("Ask anything or type a URL") had three problems:

  • The suggestions showed inline and pushed the page down.
  • "reddit" showed nothing.
  • Blank browser tabs were offered as "about:blank workspace-N".

Leo asked for a real omnibar. Bead: cx-gl7dv, taken over from op-next-motion.

What changed

  • The rows float in a popover anchored under the composer. It is a solid theme surface on the dropdown layer, and the page under it no longer moves.
  • The rows are now an omnibar, and the top row is highlighted and is what Return does:
    • A word that completes an address comes first. "reddit" gives reddit.com, from visited pages and then a built-in list of top sites. Return opens it in a browser tab.
    • Matching open tabs and workspaces follow. Picking one switches to it.
    • "Search the web for …" and "Ask <agent>" come last. The Ask row shows the chip's model as its detail.
    • For other text, "Ask <agent>" is the top row, followed by the web search and the matches. If there is no agent to ask, Return still shows the existing "no agent" note instead of searching.
    • An address keeps its "open" row on top.
  • Tabs and pages still on an about: page are left out of the popover's rows. A split page's Open Tabs list still lists them, so a blank tab can be moved.
  • An address completes from 3 letters, so "go" or "no" stays a prompt.

This widens cx-e2aa's rule (rows only for addresses and other tabs, 2026-10-09). Workspaces, Search and Ask now also get rows, as Leo asked on 2026-10-12.

Verification

  • New behavior test webviews/test/new-tab-omnibar.test.tsx, run with bun test webviews/test/new-tab-omnibar.test.tsx:
    • Red on 546a6b44: 0 pass, 3 fail. reddit.com was missing, there was no .nt-popover, and a prompt had no Ask row.
    • Green on the head: 3 pass.
  • The existing New Tab tests (new-tab-no-agent, new-tab-send-button, new-tab-default-agent) and ui-rules pass. bun run check passes, including the layers, type-scale, format and lint checks.
  • New gallery scenario typed-reddit shows "reddit" typed over the page. typed-tab-match and typed-address notes are updated.
  • Localization: one new key, newTab.row.searchFor ("Search the web for {text}"), with all 21 locales. Non-English values are marked needs_review. generated/strings.json was regenerated (gen-strings.mjs --check agentPane passes). The Ask and Switch-to-workspace rows reuse existing keys.
  • Web-only change: no Swift or Rust is touched.

Changelog

  • Changed: The New Tab field's suggestions float in a popover under it, and it completes addresses like "reddit", matches tabs and workspaces, and offers web search and Ask.

Showcase

new tab omnibar reddit light

new tab omnibar reddit dark

Open the live gallery

🤖 Generated with Claude Code