Stream Deck plugin for displaying Claude state indicators for Ghostty terminal windows and enabling window switching directly from Stream Deck buttons.
- macOS 11.0 or later
- GhosttyThemePicker app running
- Elgato Stream Deck with Stream Deck software v6.0+
- Ghostty terminal
This plugin communicates with the GhosttyThemePicker app via a local HTTP API (port 49876). The GhosttyThemePicker app tracks all Ghostty windows and their Claude Code states.
Buttons are dynamically assigned to Ghostty windows, sorted by priority:
- Waiting (yellow) - Claude needs input (highest priority)
- Idle (gray) - No Claude process, available for new work
- Working (blue) - Claude is processing
- Running (green) - Claude detected but state unknown
Each button shows:
- A colored state indicator icon
- The project/workstream name
- Press - Focus the corresponding Ghostty window
- Install and run GhosttyThemePicker app
- Ensure it has Screen Recording permission (System Settings > Privacy & Security > Screen Recording)
# Clone the repository
git clone https://github.com/chfields/GhostyThemeStreamDeck.git
cd GhostyThemeStreamDeck
# Install dependencies and build
npm install
npm run build
# Install to Stream Deck
make installThen restart the Stream Deck application.
# Link plugin for development (auto-reload)
make dev
# Watch for changes
npm run watchAdd "Ghostty Window" buttons to your Stream Deck profile. The plugin will automatically assign windows to buttons based on their Claude state priority.
Typical setup: Add 4-8 buttons in a row to see all your Claude windows at a glance.
- Ensure GhosttyThemePicker app is running
- Check that the port file exists:
cat ~/.ghostty-api-port - Test the API:
curl http://localhost:49876/api/windows
- Grant Accessibility permission to GhosttyThemePicker (System Settings > Privacy & Security > Accessibility)
- Grant Screen Recording permission to GhosttyThemePicker
- Window titles are needed to detect Claude's waiting/working states
The plugin communicates with GhosttyThemePicker's API:
GET /api/health- Check if app is runningGET /api/windows- List all Ghostty windows with Claude statePOST /api/windows/:id/focus- Focus a specific window
MIT