The missing control panel for running multiple Claude Code sessions.
If you're running 3, 5, or 10 Claude Code sessions at once, you know the problem: they all look the same. You alt-tab through a stack of identical terminals trying to remember which one is your backend, which is your frontend, and which one finished five minutes ago and is waiting for you.
Ghostty Theme Picker fixes this. Each session gets a distinct theme from Ghostty's 300+ built-in options, so you can tell them apart at a glance. The Window Switcher (⌃⌥P) shows all your sessions in one panel — sorted by state, so the ones waiting for your input float to the top. Workstreams let you define your daily setup (theme + directory + auto-launch Claude) and spin everything up with one click.
Have a Stream Deck? It gets even better. Install the plugin straight from Settings and get a physical button for each Claude session — color-coded by state, so you can see across the room which ones need you. Each button shows the workstream name and lights up green when Claude is waiting for input, blue when it's working, or gray when idle. Dedicated buttons let you launch workstreams or roll a random theme with a dice icon. Tap any button to focus that window. It turns your Stream Deck into a Claude Code mission control.
The Elgato Stream Deck MK.2 — 15 programmable buttons for your Claude sessions
It's a macOS menu bar app for Ghostty. No Dock icon, no clutter — just a lightweight tool that makes multi-session Claude Code actually manageable.
This app requests the following macOS permissions:
| Permission | Why We Need It | How We Use It |
|---|---|---|
| Screen Recording | To read window names from Ghostty | The Window Switcher feature (⌃⌥P) uses macOS's CGWindowList API to display the actual names of your open Ghostty windows. Without this permission, windows would show as "Window 1", "Window 2" instead of their actual titles. We do not record, capture, or store any screen content. This permission only allows us to read window metadata (names and positions) from the system. |
Data Collection: This app does not collect, transmit, or share any data. All settings (themes, workstreams, favorites) are stored locally on your Mac using macOS UserDefaults. No analytics, no telemetry, no network requests (except to run ghostty +list-themes locally).
Open Source: The complete source code is available in this repository. You can review exactly what the app does and build it yourself if preferred.
- Window Switcher - Press ⌃⌥P from anywhere to quickly switch between open Ghostty windows
- Global Hotkey - Press ⌃⌥G from anywhere to open Quick Launch panel
- Random Theme - Launch Ghostty with a random theme (⌘R) - automatically avoids recent themes
- Workstreams - Named presets with themes, directories, commands, and auto-launch
- Auto-launch - Automatically open configured workstreams when the app starts
- Theme Preview - Color swatches show theme colors before launching
- Favorites - Star themes you like for quick access
- Exclude List - Hide themes you don't like from random rotation
- Import/Export - Share workstream configurations as JSON
- Recent Themes - Quick access to your last 5 themes
- Menu Bar Only - Lives in your menu bar, no Dock icon
Click the terminal icon in your menu bar and select Random Theme to launch Ghostty with a random theme. Each click gives you a different theme.
Press Control + Option + G from anywhere to instantly open the Quick Launch panel:
- Random Theme - Launch with a random theme
- Workstreams - Your saved presets with themes and directories
- Favorites - Your starred themes
- Recent - Recently used themes
Select an option to launch Ghostty, or press Esc to close. No need to click the menu bar!
Press Control + Option + P from anywhere to instantly see and switch between all your open Ghostty windows:
- Claude state detection - Windows where Claude is waiting for input (showing
✳) appear at the top - Smart sorting - Windows sorted by: Needs Input → Claude Running → Working → Other
- Workstream matching - Windows automatically matched to workstreams by working directory
- Search windows - Type to filter by window name or workstream name
- Click to focus - Select any window to bring it to the front
Claude Code Integration:
The Window Switcher detects Claude Code's state by reading the window title:
✳ Claude Code= Needs Input (sorted to top with hourglass icon)⠐ Claude Code(spinner) = Working (shown with gear icon)- Claude process detected = Claude badge (when title detection unavailable)
This works automatically when Claude Code sets dynamic window titles. Workstreams launched from this app don't use --title, allowing Claude to control the title and show its status.
Workstream Detection:
Windows are matched to workstreams in two ways:
- By PID - Windows launched from this app are tracked automatically
- By directory - Windows opened manually are matched by their working directory to workstream configurations
First time setup: The Window Switcher requires Screen Recording permission to read window names from macOS. When you first press ⌃⌥P, you'll see a permission prompt with:
- Open System Settings button - Takes you directly to Privacy & Security settings
- Retry button - Re-checks permission after you grant it
This permission only allows the app to read window metadata (names and positions). We do not record, capture, or store any screen content.
Perfect for multiple Claude sessions: When running several Claude Code workstreams, the Window Switcher shows which sessions need your attention, letting you jump to them instantly without alt-tabbing through all your other apps.
Workstreams are saved presets for different projects or tasks. Perfect for running multiple Claude Code sessions with distinct visual identities.
To create a workstream:
- Click the menu bar icon → Manage Workstreams...
- Click Add Workstream
- Configure your workstream:
| Field | Description | Example |
|---|---|---|
| Name | Display name in the menu | Backend API |
| Theme | Ghostty theme to use | Dracula |
| Working Directory | Start in this folder | /Users/me/projects/api |
| Window Title | Custom window title | Claude - Backend |
| Command to Run | Command to execute on launch | claude |
| Extra Ghostty Options | Additional CLI flags | --font-size=14 |
| Auto-launch | Open this workstream when app starts | Toggle on/off |
Example workstream setups:
Name: Claude - Backend
Theme: Dracula
Directory: ~/projects/backend
Command: claude
Title: Claude Backend
Name: Claude - Frontend
Theme: Solarized Light
Directory: ~/projects/frontend
Command: claude
Title: Claude Frontend
Name: Quick Terminal
Theme: Tokyo Night
Directory: ~
Command: (empty - uses default shell)
Star themes you like for quick access:
- After launching with a random theme, the theme name appears at the bottom of the menu
- Open Recent submenu and click Add to Favorites to save it
- Favorited themes appear in the Favorites submenu
Hide themes you don't want from random rotation:
- Open Recent submenu and click Exclude '[theme]' from Random
- Excluded themes will never appear when using Random Theme
- View excluded themes in the Excluded submenu
- Click any excluded theme to re-include it, or Clear All Excluded to reset
Share your workstream configurations:
- Open Manage Workstreams (⌘,)
- Click Export... to select which workstreams to save to a JSON file
- Click Import... to load workstreams from a JSON file
- Imported workstreams are added to your existing list
Great for sharing setups with teammates or backing up your configuration.
| Shortcut | Action |
|---|---|
| ⌃⌥G | Open Quick Launch panel (global - works from any app) |
| ⌃⌥P | Open Window Switcher (global - works from any app) |
| ⌘R | Launch with random theme (from menu) |
| ⌘, | Manage Workstreams |
| ⌘Q | Quit |
The Extra Ghostty Options field accepts any valid Ghostty CLI flags. Some useful ones:
--font-size=14 # Set font size
--window-padding-x=10 # Horizontal padding
--window-padding-y=10 # Vertical padding
--background-opacity=0.95 # Transparent background
--cursor-style=block # Cursor style (block, bar, underline)See Ghostty documentation for all available options.
Once Ghostty is open, you can create splits using these keybindings:
| Shortcut | Action |
|---|---|
| ⌘D | Split right (vertical) |
| ⌘⇧D | Split down (horizontal) |
| ⌘⇧Enter | Toggle zoom on current split |
| ⌘] | Focus next split |
| ⌘[ | Focus previous split |
| ⌘W | Close current split |
Note: Splits are created within Ghostty, not via CLI options. Each split shares the same theme as the window.
- Use the Window Switcher (⌃⌥P) - Instantly jump between your Claude sessions without alt-tabbing through all your apps
- Distinct themes are automatic - Random Theme automatically excludes your last 5 themes, so each new session looks different
- Set window titles - Include the project name in the title for easy identification in the Window Switcher
- Use the command field - Set
claudeto auto-start Claude Code when the terminal opens - Organize by project - Create one workstream per project with its directory pre-configured
- Use splits for related work - Within a single themed window, use ⌘D to split for related tasks (e.g., running tests while coding)
- Auto-launch your daily setup - Enable auto-launch on your most-used workstreams to open them automatically when the app starts
brew tap chfields/tap
brew install --cask ghostty-theme-picker- Download
GhosttyThemePicker.dmgfrom the Releases page - Open the DMG and drag
GhosttyThemePicker.appto Applications - Launch from Applications or Spotlight
This app is not signed with an Apple Developer certificate. macOS will block it by default. To open it:
Option 1: Right-click to Open
- Right-click (or Control-click) on
GhosttyThemePicker.app - Select "Open" from the context menu
- Click "Open" in the dialog that appears
Option 2: System Settings
- Try to open the app normally (it will be blocked)
- Go to System Settings → Privacy & Security
- Scroll down to find the message about GhosttyThemePicker being blocked
- Click "Open Anyway"
You only need to do this once. After that, the app will open normally.
- macOS 13 or later
- Ghostty installed at
/Applications/Ghostty.app
git clone https://github.com/chfields/GhosttyThemePicker.git
cd GhosttyThemePicker
xcodebuild -scheme GhosttyThemePicker -configuration Release buildThe built app will be in ~/Library/Developer/Xcode/DerivedData/GhosttyThemePicker-*/Build/Products/Release/
- On launch, fetches available themes via
ghostty +list-themes - Themes, workstreams, and favorites are stored in macOS UserDefaults
- When launching Ghostty, passes CLI arguments like:
ghostty --theme=Dracula --working-directory=/path/to/project --title="My Terminal" -e claude
This app is open source and scanned with CodeQL. See SECURITY.md for details on what the app does and doesn't do.
MIT