Show HN: Ghostty-based terminal with vertical tabs and notifications
Source: Hacker News
Overview
I run many Claude Code and Codex sessions in parallel. Previously I used Ghostty with split panes and relied on native macOS notifications to know when an agent needed attention. Claude Code’s notification body is always just “Claude is waiting for your input”, which provides no context, and with many tabs open the titles become unreadable.
To solve this, I built cmux, a native macOS app written in Swift/AppKit. It uses libghostty for terminal rendering and reads your existing Ghostty configuration (themes, fonts, colors, etc.).
Features
-
Sidebar with vertical tabs
Shows the git branch, working directory, listening ports, and the latest notification text for each workspace. -
Notification system
- Picks up terminal sequences (OSC 9/99/777).
- Provides a CLI (
cmux notify) that can be wired into agent hooks for Claude Code, OpenCode, etc. - When an agent is waiting, its pane gets a blue ring and the corresponding tab lights up in the sidebar.
Cmd+Shift+Ujumps to the most recent unread notification.
-
In‑app browser
- Scriptable API ported from agent‑browser1.
- Agents can snapshot the accessibility tree, obtain element references, click, fill forms, evaluate JavaScript, and read console logs.
- You can split a browser pane next to a terminal pane, allowing Claude Code to interact directly with your development server.
-
Full scriptability
- CLI and socket API let you create workspaces/tabs, split panes, send keystrokes, and open URLs in the browser.
Demo
Repository
Footnotes
-
https://github.com/vercel-labs/agent-browser (source of the in‑app browser API) ↩