Skip to content

Repository files navigation

Vibeshed icon

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
  • Usage-aware sorting that adapts to how you work
  • Context-sensitive action boosting based on focused app, time of day, audio state
  • Dynamic theming that shifts with your system appearance and vibe

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
  • 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 across Claude, ChatGPT, and Codex
  • Homebrew package search, install, upgrade, and cleanup

Media & Communication

  • Spotify search and playback control with OAuth
  • 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

  • macOS 14 (Sonoma) or later
  • Swift 5.9+ (for building from source)

Installation

git clone https://github.com/idmitriev/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. Copy the example to get started:

cp config.example.yaml ~/.config/vibeshed/config.yaml

See config.example.yaml for all available options including keybindings, module settings, URL routing rules, and action aliases.

The app watches the config file for changes and hot-reloads automatically.

Modules

Module Description
Window Resize, move, tile, cycle, maximize/restore, focus windows
Tiling Per-display grid tiling, auto-tile, directional moves, focus border
Application Launch, focus, quit applications
Processes List and kill running processes
Browser Search/focus/close tabs in Safari and Chromium browsers
Bookmark Browser bookmarks and most-visited URLs
Clipboard Clipboard history with search, paste, and persistence
Audio Volume, mute, device selection, media key control
System Lock, sleep, restart, shutdown, appearance, screenshots
Settings Open macOS System Settings panes
Spotify Search artists/albums/playlists, playback control
GitHub Search repos, issues, PRs; view notifications
VSCode Search and open recent projects
JetBrains Search and open IDE projects
ITerm Session listing, command execution, new tabs
AI Search Claude/ChatGPT/Codex sessions
Zed Search and open recent workspaces
Homebrew Search, install, uninstall, upgrade packages and casks
Zoom Join meetings, start personal meeting, configured shortcuts
Telegram Quick-open configured chats and groups
Calendar Upcoming events, join Zoom/Meet links
MeetingPrep Prepare workspace for meetings
Timer Set timers and reminders
Math Arithmetic, unit/currency conversion
Web Search Search the web when nothing else matches
Emoji Search and copy/paste emoji
Theme Dynamic appearance theming
Self Open config, reload modules, view logs, quit

Modules load only when their config section is present. Each module declares required permissions (accessibility, automation, etc.) and the app guides you through granting them.

Key Bindings

Define bindings in the keybindings: config section. Each entry maps a key combo to an action or a key remap:

keybindings:
  - combo: "capslock+space"
    action: "app/togglePicker"
  - combo: "capslock+1"
    action: "alias/Safari"
  - combo: "ctrl+h"
    remap: "left"
    app: "com.apple.Terminal"

Modifiers: cmd, ctrl, option/alt, shift, capslock (hyper), space. Mouse buttons: mouse1-mouse5.

Architecture

  • Swift Package Manager with Package.swift — no Xcode project required
  • Actor-based modules for thread-safe concurrent action queries
  • SwiftUI for picker UI, status bar, and module preview views
  • Combine for debounced search input
  • NSPanel subclass for the floating picker window
  • YAML config with typed per-module schemas, validation, and hot-reload

Contributing

See CONTRIBUTING.md for the dev setup and house style.

Releases

Built, signed, and notarized by GitHub Actions on tag push. See RELEASING.md for the workflow.

Support

If Vibeshed saves you keystrokes, sponsor the project.

License

MIT

About

Keyboard-driven macOS launcher built with SwiftUI

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Sponsor this project

Packages

Contributors

Languages