Vibeshed
A keyboard-driven macOS launcher built with SwiftUI. Control your Mac with keystrokes — manage windows, switch apps, search browser tabs, control Spotify, and more from a single floating picker.
Goals
- Keyboard-first. Every action reachable in a few keystrokes; mouse optional.
- Native and unobtrusive. Pure SwiftUI, menu-bar only, no Dock icon, no Electron.
- Modular by default. Each integration is a separate module; load only what you configure.
- Hackable config. One YAML file at
~/.config/vibeshed/config.yaml with hot-reload.
- Composable actions. Anything triggerable from the picker is also reachable via
vibeshed:// URLs and key combos.
- Local-first. No telemetry. State and history stay on disk.
Non-goals
- Not a cross-platform tool. macOS only. No plans for Linux/Windows.
- Not a Raycast/Alfred replacement. No store, no plugin marketplace, no paid tier — modules ship in-tree.
- Not a scripting platform. Workflows belong in shell/AppleScript; Vibeshed dispatches, it does not orchestrate.
- No mobile companion, no cloud sync, no AI chat surface inside the picker.
- No GUI configuration. Config is YAML; if that's a dealbreaker, this is the wrong tool.
Features
Launcher
- Fuzzy-matched searchable picker with keyboard navigation and preview pane
- Hold Shift (⇧Return, ⇧double-click, ⌘⇧1–9) to run an action and keep the picker open, with only the search text cleared — for firing several similar actions in a row, like a batch of cask installs
- Esc steps back one level (from a parameter step or pushed list to where you picked it) and ⌘Esc closes from anywhere; hidden with the toggle hotkey, the picker keeps your place for 10 seconds (
picker.resetAfter), then opens on a fresh search
- Usage-aware sorting that adapts to how you work
- Context-sensitive action boosting based on focused app, time of day, audio state
- Picker colors follow the applied palette theme, live while you browse themes
- Optional backdrop behind the picker — blur, tint, vignette, grain — with fade, focus-pull and iris animations
Window Management
- Cycle window sizes anchored to screen edges, tile halves, maximize/restore
- Enlarge/shrink while keeping split position
- Focus windows by title or app name
Applications & Browser
- Launch, focus, or quit any app
- Search and switch browser tabs across Safari and Chromium browsers
- Browser bookmarks and most-visited sites
- Safari history, Favorites and iCloud Tabs from your other devices
- Files from Finder's Recents, opened in their default apps
- Default browser with per-URL routing to specific browsers/profiles
Productivity
- Clipboard history with search and paste
- Timers and reminders
- Math expressions, unit conversions, currency conversion
- Calendar events with one-click join for Zoom/Meet
- Meeting prep: hide distractions and surface relevant docs
Developer Tools
- VSCode, JetBrains, and Zed project/workspace search
- iTerm session management and command execution
- GitHub repo/issue/PR search and notifications
- AI session search and resume across Claude Code, Claude Desktop, Codex, and OpenCode
- Homebrew package search, install, upgrade, and cleanup
Media & Communication
- Wallpaper search across Wallhaven, Unsplash and public-domain museum collections, with previews and credits
- Spotify search that plays songs, albums, artists and playlists, plus playback control (no API setup)
- System audio volume, mute, device selection, media keys
- Telegram chat quick-open
- Zoom meeting join, start, and configured meeting shortcuts
System
- Lock, sleep, restart, shutdown, toggle dark mode
- Empty trash, flush DNS, purge memory, screenshots
- App-scoped key remapping (remap keys per-application)
- Global and per-app key combo bindings
- Custom action aliases with keyword search
Requirements
- Apple silicon only (M1 or later). Releases are arm64 builds and won't open on Intel Macs.
- macOS 14 (Sonoma) or later
- Swift 5.9+ (for building from source)
Installation
Download the latest signed and notarized build from vibeshed.dev or Releases, unzip it and drag Vibeshed.app to Applications. Or use Homebrew:
brew install --cask idmitriev/tap/vibeshed
To build from source:
git clone https://github.com/vibeshed/vibeshed.git
cd vibeshed
make build
make run
The app runs as a menu bar item (no Dock icon). Use make run-debug to see logs in the terminal, or make log in a separate terminal for live OSLog streaming.
Configuration
Configuration lives at ~/.config/vibeshed/config.yaml. On first launch Vibeshed writes a config there. Caps Lock works as a modifier in it:
| Shortcut | Does |
|---|
| Caps Lock + Space | Toggle the picker |
| Caps Lock + ← → ↑ ↓ | Focus the window on that side |
| Caps Lock + W A S D | Cycle the window's height or width against the top, left, bottom or right edge |
| Caps Lock + M | Maximize / restore the window |
| Caps Lock + P | Pick a window to focus |
Windows and the tiling grid (two side-by-side splits) get 4pt of padding and gaps. The default browser is left alone, and these modules are enabled:
- the ones backed by macOS itself: apps, system actions, settings panes, audio, processes, performance, windows, tiling, clipboard history, themes, math, timers, emoji and web search;
- one for each app it finds on the Mac: browser tabs, Homebrew, Claude, ChatGPT/Codex, OpenCode, VS Code (and Cursor, Windsurf), JetBrains IDEs, Zed, iTerm, Ghostty, Spotify, Telegram, Zoom and GitHub (via the
gh CLI or GitHub Desktop).
Without Homebrew, it also adds an Install Homebrew alias that runs the brew.sh install script in a new Terminal window, and enables the Terminal module that alias runs in.
This is the beginning of the README. Read the rest at the original. Read the full README ↗