Ghostty-Based Terminal with Split Tabs and Notifications Designed for Claude Programming
When running Claude Code with macOS's built-in terminal, you need to open many Terminal windows when starting大量 sessions.
In most cases, we hand over requirements to Claude and switch to do other things. When we return much later to check, it might show Claude asking whether you agree to some operation.
If you're doing frontend development, after Claude generates code, you still need to switch to the browser window to start the preview.
There's a macOS terminal tool that meets all your needs—cmux.
If you also want to preview and edit files directly in the terminal without switching windows back and forth, try Yazi.
cmux
Features
- Notification Ring: Blue ring appears around pane when there's a new alert, with highlighted tabs
- Notification Panel: View notifications centrally, jump to unread with one click
- Built-in Browser: Split-screen browser right beside terminal, supports script control
- Tabs and Split Panes: Supports horizontal and vertical splitting, sidebar shows branches, PRs, directories, ports, and notifications
- SSH Workspace:
cmux sshconnects directly to remote, browser goes through remote network, drag images to transfer - Claude Teams:
cmux claude-teamsone-click multi-agent collaboration, native split-screen display - Browser Data Import: Supports Chrome, Firefox, Arc, etc.—logged in state right from the start
- Custom Commands: Configure project operations in cmux.json, use directly from command palette
- Scripting Capabilities: CLI + socket API to control workspaces, panes, and browser
- Native macOS: Swift + AppKit, fast startup, low resource usage
- Ghostty Compatible: Directly reuse existing themes and font configurations
- GPU Rendering: Based on libghostty, smoother display
- Rich Keyboard Shortcuts: Extensive shortcuts covering workspaces, split panes, browser operations, and more
Configuration
cmux reads configuration from Ghostty configuration files. If you previously used Ghostty, these options will be familiar.
Open ~/.config/ghostty/config configuration file and copy the following:
# === Theme Settings ===
# Follow system to automatically switch between light and dark themes
theme = dark:iTerm2 Dark Background,light:iTerm2 Light Background
# === Shell Integration ===
shell-integration = detect
# === Font Settings ===
font-size = 12
font-thicken = true
adjust-cell-height = 2
# === Window Settings ===
window-theme = system
window-save-state = always
background-opacity = 0.8
macos-titlebar-style = transparent
# === Mouse Settings ===
copy-on-select = clipboard
mouse-shift-capture = true
mouse-hide-while-typing = true
cursor-style = bar
cursor-style-blink = true
cursor-opacity = 0.85
# === Buffer ===
scrollback-limit = 8388608
# === Quick Terminal ===
quick-terminal-position = top
quick-terminal-screen = mouse
quick-terminal-autohide = true
quick-terminal-animation-duration = 0.2
# === Security Settings ===
clipboard-paste-protection = true
clipboard-paste-bracketed-safe = trueAfter modification, you must reload the configuration (via menu bar operation).
Installation
# brew tap manaflow-ai/cmux
brew install --cask cmuxKeyboard Shortcuts
Workspaces
| Shortcut | Operation |
|---|---|
| ⌘ N | New workspace |
| ⌘ 1–8 | Jump to workspace 1–8 |
| ⌘ 9 | Jump to last workspace |
| ⌃ ⌘ ] | Next workspace |
| ⌃ ⌘ [ | Previous workspace |
| ⌘ ⇧ W | Close workspace |
| ⌘ ⇧ R | Rename workspace |
| ⌘ B | Toggle sidebar |
Interface
| Shortcut | Operation |
|---|---|
| ⌘ T | New interface |
| ⌘ ⇧ ] | Next interface |
| ⌘ ⇧ [ | Previous interface |
| ⌃ Tab | Next interface |
| ⌃ ⇧ Tab | Previous interface |
| ⌃ 1–8 | Jump to interface 1–8 |
| ⌃ 9 | Jump to last interface |
| ⌘ W | Close interface |
Split Panes
| Shortcut | Operation |
|---|---|
| ⌘ D | Split right |
| ⌘ ⇧ D | Split down |
| ⌥ ⌘ ← → ↑ ↓ | Switch focus pane by direction |
| ⌘ ⇧ H | Flash focused pane |
Browser
Browser developer tool shortcuts follow Safari default settings, customizable in Settings → Keyboard Shortcuts.
| Shortcut | Operation |
|---|---|
| ⌘ ⇧ L | Open browser in split |
| ⌘ L | Focus address bar |
| ⌘ [ | Back |
| ⌘ ] | Forward |
| ⌘ R | Refresh page |
| ⌥ ⌘ I | Toggle developer tools (Safari default) |
| ⌥ ⌘ C | Show JavaScript console (Safari default) |
Notifications
| Shortcut | Operation |
|---|---|
| ⌘ I | Show notification panel |
| ⌘ ⇧ U | Jump to latest unread |
Find
| Shortcut | Operation |
|---|---|
| ⌘ F | Find |
| ⌘ G / ⌘ ⇧ G | Find next / previous |
| ⌘ ⇧ F | Hide find bar |
| ⌘ E | Find using selected content |
Terminal
| Shortcut | Operation |
|---|---|
| ⌘ K | Clear scrollback buffer |
| ⌘ C | Copy (when content selected) |
| ⌘ V | Paste |
| ⌘ + / ⌘ - | Increase / decrease font size |
| ⌘ 0 | Reset font size |
Window
| Shortcut | Operation |
|---|---|
| ⌘ ⇧ N | New window |
| ⌘ , | Settings |
| ⌘ ⇧ , | Reload configuration |
| ⌘ Q | Quit |
Session Restoration (Current)
After restart, cmux restores application layout and metadata:
- Window / workspace / pane layout
- Working directory
- Terminal scrollback buffer (best effort restoration)
- Browser URL and navigation history
What's NOT restored:
- Processes running inside terminal (such as Claude Code / tmux / vim)
Notifications
cmux supports desktop notifications, letting AI agents and scripts remind you when attention is needed.
View all pending notifications in one place, quickly jump to latest unread notifications.
Usage Scenario
- Left: Claude
- Top Right:
npm run dev - Bottom Right: Web browser
Yazi
Introduction
Yazi (meaning "duck") is a terminal file manager written in Rust, based on non-blocking asynchronous I/O. It aims to provide efficient, user-friendly, and customizable file management experience.
Installation
brew install yazi ffmpeg-full sevenzip jq poppler fd ripgrep fzf zoxide resvg imagemagick-full font-symbols-only-nerd-font
brew link ffmpeg-full imagemagick-full -f --overwriteIntegration (Optional)
Open ~/.zshrc and append the following to the end of the file (optional):
function y() {
local tmp="$(mktemp -t "yazi-cwd.XXXXXX")" cwd
command yazi "$@" --cwd-file="$tmp"
IFS= read -r -d '' cwd < "$tmp"
[ "$cwd" != "$PWD" ] && [ -d "$cwd" ] && builtin cd -- "$cwd"
rm -f -- "$tmp"
}After saving, execute source ~/.zshrc to take effect.
Then you can type y in the terminal instead of yazi to launch Yazi.
Configuration
Yazi has three configuration files:
yazi.toml- General configurationkeymap.toml- Key binding configurationtheme.toml- Color scheme configuration
Create file ~/.config/yazi/yazi.toml
Show hidden files and display symlink paths after filenames:
[mgr]
show_hidden = true
show_symlink = trueCreate file ~/.config/yazi/keymap.toml
Execute closing input and canceling filter when pressing <Esc> key in input mode:
[[input.prepend_keymap]]
on = "<Esc>"
run = ["close", "mgr:escape --filter"]
desc = "Close input and cancel the filter"Keyboard Shortcuts
Navigation
| Binding | Alternate Key | Action |
|---|---|---|
| k | ↑ | Move cursor up |
| j | ↓ | Move cursor down |
| l | → | Enter mouse-hovered directory |
| h | ← | Leave current directory, enter parent directory |
File Operations
| Binding | Action |
|---|---|
| o | Open selected file |
| O | Open selected file interactively |
| Enter | Open selected file |
| Shift+Enter | Open selected file interactively (some terminals don't support this yet) |
| Tab | Show file information |
| y | Copy selected files |
| x | Cut selected files |
| p | Paste copied files |
| P | Paste copied files (overwrite if target location exists) |
| Y or X | Cancel yank status |
| d | Delete selected files to trash |
| D | Permanently delete selected files |
| a | Create a file (directories end with /) |
| r | Rename selected file |
| . | Toggle hidden file visibility |
Copy Path
c⇒d means press c key first, then press another d key.
| Binding | Action |
|---|---|
| c⇒c | Copy file path |
| c⇒d | Copy directory path |
| c⇒f | Copy filename |
| c⇒n | Copy filename (without extension) |
Filter Files
| Binding | Action |
|---|---|
| f | Filter files |
Find Files
| Binding | Action |
|---|---|
| / | Find next file |
| ? | Find previous file |
| n | Go to next found |
| N | Go to previous found |
Search Files
| Binding | Action |
|---|---|
| s | Search files by name using fd |
| S | Search files by content using ripgrep |
| Ctrl+s | Cancel ongoing search |
Usage Scenario
You can directly preview and edit file content within the terminal.