Quiper is a macOS status-bar app that keeps your AI chat services in a single floating window. A global hotkey reveals the overlay, every service gets ten pre-created WebKit tabs, and the app stays out of the Dock so you can drop into an AI convo and return to work without re-arranging windows.
- Overlay built for AI sites – Define any site that works in Safari (ChatGPT, Gemini, Grok, Claude, internal tools, etc.). Quiper opens each one inside its own
WKWebViewstack so session switches are instant. - Keyboard first – The default global shortcut is
⌥ Space, but you can record any combination. - Persistent sessions – Each service owns ten live
WKWebViews. They keep scrollback and form contents, while cookies/cache live in the shared WebKit store so authentication survives next launch. - Notification bridge – A JavaScript shim mirrors the browser
NotificationAPI intoUNUserNotificationCenter.
Requirements: macOS 14.0+ (Sonoma), Apple silicon or Intel.
- Download the latest
.appfrom the Releases page — direct download:Quiper.app.zip. - Move
Quiper.appto/Applications. - Because this project isn't signed or notarized (Apple requires a paid Developer ID for that), Gatekeeper will block the first launch. Open Settings → Privacy & Security and click Open Anyway next to Quiper.
- Relaunch
Quiper.app, click Open on the follow-up dialog, and macOS will remember that exception for this bundle path. - Approve the notification prompt if you plan to use browser banners.
If you rebuild, rename, or move
Quiper.app, Gatekeeper treats it as a new binary, so repeat steps 3–4 after each update.
git clone https://github.com/sassanh/quiper.git
cd quiper
open Quiper.xcodeproj # Opens in Xcode
# Press Cmd+R to build and runCreate a distributable bundle:
./build-app.sh # Builds with xcodebuild, creates Quiper.app
open Quiper.app- Default
⌥ Spacetoggles the overlay above every desktop. - Capture a new combo via Status menu → Set New Hotkey. The selection is saved into
~/Library/Application Support/Quiper/settings.jsonunder thehotkeykey and re-registered immediately.
| Action | Shortcut |
|---|---|
| Switch session 1–9 | ⌘ 1 … ⌘ 9 |
| Session 10 | ⌘ 0 |
| Switch service 1–9 | ⌘ ⌃ 1 … ⌘ ⌃ 9 (or ⌘ ⌥ + digit) |
| Open Settings | ⌘ , |
| Toggle Web Inspector | ⌘ ⌥ I |
| Hide overlay | ⌘ H |
| Find in page | ⌘ F |
| Zoom in/out | ⌘ + / ⌘ - |
Dismissing the window via shortcut or menu simply hides it; Quiper reactivates the previously focused app automatically.
- Show / Hide Quiper
- Settings window
- Show / Hide Inspector (reflects the active state)
- Clear Web Cache (purges
WKWebsiteDataStore.default()) - Set New Hotkey
- Install at Login / Uninstall from Login
- Quit
Quiper supports per-theme window customization:
- Color Scheme: Force Light or Dark mode, or follow System preference.
- Window Background: Choose blur effect (with material options) or solid color.
- Per-Theme Settings: When using System mode, configure light and dark themes separately.
- Services – Drag services directly in the header segmented control or open Settings → Engines to add/delete/reorder entries. Each service includes a CSS selector used to focus the correct input field when the session becomes visible.
- Custom CSS – Inject custom CSS per-engine for transparent backgrounds or style overrides.
- Custom Actions – Define JavaScript snippets triggered by global or app-specific shortcuts to automate tasks (e.g., clicking 'New Chat' or scraping content).
- Manual edits – All preferences live at
~/Library/Application Support/Quiper/settings.json. Edit while Quiper is closed.
- Each service entry in
settings.jsonspawns tenWKWebViews during startup. Quiper hides all but the active view, so switching is instantaneous. - WebKit data (cookies, local storage, cache) is shared. Logging out of a service in one session signs out the others.
- The default services (ChatGPT, Gemini, Grok) live in
Settings.shared.defaultEngines.
WebNotificationBridgeinstalls a user script that patchesNotification,Notification.requestPermission, andnavigator.permissions.queryto match Safari's behavior.- When a site issues
new Notification(...), Quiper builds aUNNotificationRequestwith the service URL, display name, and session index stored inuserInfo. NotificationDispatcherimplementsUNUserNotificationCenterDelegate; clicking a banner brings Quiper to the front, selects the recorded service, and activates the session before focusing the input field.
| Item | Path | Notes |
|---|---|---|
| Settings | ~/Library/Application Support/Quiper/settings.json |
JSON object; edit while Quiper is closed. |
| LaunchAgent | ~/Library/LaunchAgents/com.<username>.quiper.plist |
Created/removed via Install at Login. |
| Downloads | ~/Downloads/ |
Files initiated inside Quiper are saved here. |
Hit Clear Web Cache in the status menu to wipe cookies/cache without touching the JSON. For a full reset, quit Quiper and delete the settings file.
- Global hotkey fails – Capture a new one so Quiper overwrites the
hotkeyentry insettings.json. - Notifications never appear – Use the status menu to open macOS notification settings and ensure alerts are allowed.
- Web view stuck or stale – Use Clear Web Cache or reload the service.
- Build errors – Ensure Xcode 16+ CLT are installed (
xcode-select --install).
- Fork the repository and branch from
main(feat/<topic>). - Run
swift buildbefore opening a pull request. - Include macOS version, Quiper build hash, repro steps, and screenshots for UI changes.
Quiper is released under the MIT License.














