Skip to content

eddowding/ClaudeLauncher

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Claude Launcher

A lightweight macOS menu bar app that gives you instant access to Claude Code via a global hotkey. Press Option+Space anywhere, type a question, get a streaming response in a floating panel.

Think of it as the ChatGPT desktop overlay, but backed by your local Claude Code CLI.

What it does

  • Option+Space opens a floating frosted-glass panel above all windows
  • Type a question, hit Return — response streams in with markdown rendering
  • Panel stays visible when you switch apps
  • Escape to dismiss, Option+Space again for a fresh prompt
  • Menu bar icon only — no Dock icon, no Cmd+Tab entry
  • ~350KB release binary

Requirements

  • macOS 14+
  • Claude Code CLI installed at ~/.local/bin/claude
  • Accessibility permissions (for the global hotkey)

Build & Run

git clone https://github.com/eddowding/ClaudeLauncher.git
cd ClaudeLauncher
swift build
.build/debug/ClaudeLauncher

For a release build:

swift build -c release
.build/release/ClaudeLauncher

Install as app

Create a proper .app bundle so macOS can add it to Login Items:

# Build the bundle
APP=ClaudeLauncher.app
mkdir -p "$APP/Contents/MacOS" "$APP/Contents/Resources"
swift build -c release
cp .build/release/ClaudeLauncher "$APP/Contents/MacOS/"

Then copy the Info.plist from this repo into $APP/Contents/ (or use the one generated by the build script), move to /Applications, and add to Login Items via System Settings > General > Login Items.

cp -R ClaudeLauncher.app /Applications/
codesign -f -s - /Applications/ClaudeLauncher.app

Working directory (project context)

Claude Code picks up CLAUDE.md from whatever directory it runs in. By default, Claude Launcher runs from $HOME. To point it at a specific project:

Option 1: Dotfile (recommended)

echo "$HOME/path/to/your/project" > ~/.claude-launcher-dir

Option 2: Environment variable

export CLAUDE_LAUNCHER_DIR="$HOME/path/to/your/project"

The dotfile is simpler for Login Items since environment variables don't persist across app launches. Resolution order: CLAUDE_LAUNCHER_DIR env var > ~/.claude-launcher-dir file > $HOME.

How it works

Four files, one dependency:

File Purpose
main.swift NSApplication bootstrap, .accessory policy (no dock icon)
AppDelegate.swift Menu bar icon + HotKey registration
FloatingPanel.swift Borderless NSPanel — stays above all apps, frosted glass, bottom-center positioning
ContentView.swift SwiftUI: text input + streaming markdown response

The app spawns claude -p "your question" --output-format text via a clean shell, streams stdout chunks into the UI, and renders markdown inline.

Uses soffes/HotKey for the global keyboard shortcut (Carbon wrapper, keeps it simple).

Rebuild shortcut

After making changes:

pkill ClaudeLauncher; swift build -c release && cp .build/release/ClaudeLauncher /Applications/ClaudeLauncher.app/Contents/MacOS/ClaudeLauncher && codesign -f -s - /Applications/ClaudeLauncher.app && open /Applications/ClaudeLauncher.app

License

MIT

About

Option+Space floating overlay for Claude Code CLI on macOS

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages