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 (Gemini, Claude, Grok, ChatGPT, Open WebUI, 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 (Gemini, Claude, Grok, ChatGPT, Open WebUI) 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 follows Pride Versioning (PrideVer). This means we release when we are genuinely proud of the progress and quality, and our version numbers reflect our sentiment toward each release. Since Quiper is an end-user desktop application and not a library, this human-centric approach allows us to prioritize architectural integrity and user experience over rigid semantic constraints.
In addition to stable releases, Quiper provides two pre-production channels for testing:
- Nightly: Automatically generated every day at midnight (UTC) from the latest code in the
mainbranch. These builds are experimental and intended for developers or those who want the absolute latest features. - Beta: Manually triggered pre-releases used to validate specific features before they are merged into a stable version.
Both pre-production channels use the GitHub Actions Run Number as an internal build identifier. This ensures that the app can reliably detect updates even if the version string remains the same. Pre-production builds are explicitly marked with a -nonproduction suffix in their version string (e.g., 2.1.0-nightly-nonproduction).
You can opt-in to these channels in Settings → Updates.
Quiper is released under the MIT License.













