Native macOS menu bar clipboard manager with a Spotlight-style overlay.
Minimum supported OS: macOS 26.
- Menu bar utility (no regular Dock app window)
- Global open shortcut (default:
⌘⇧V, configurable) - Captures clipboard history for text, links, code, paths, and images
- Fast local fuzzy search
- Image OCR (Vision) for searchable image text
- In-app preview panel toggle with
⌘Y
↑ / ↓— move selectionReturn— paste selected entry into previous app⌘Y— open/close in-app preview for selected entry⌘D— delete selected entry⌘Z— undo deleteEsc— close overlay
⌘Y— close previewEsc— close preview
swift build
swift test
swift runFast local reload script (build + kill old process + run):
./scripts/reload-dev.shLogs:
tail -f /tmp/cbmanager-dev.logBuild release app bundle into dist/CBManager.app:
./scripts/build-app.sh 1.0.0Build DMG into dist/CBManager-<version>.dmg:
./scripts/build-dmg.sh 1.0.0Install app to /Applications:
./scripts/install.shThis repo includes a GitHub Actions workflow: .github/workflows/release.yml.
- Trigger: push a tag like
v1.0.0 - Workflow builds release DMG and uploads assets to the matching GitHub Release:
CBManager-<version>.dmgCBManager-<version>.dmg.sha256
- Release notes are auto-generated from
CHANGELOG.mdusing:scripts/release-notes-from-changelog.sh- Preferred source section:
## [<version>] - Fallback source section:
## [Unreleased]
- Update
CHANGELOG.md. - (Optional) Preview notes locally:
./scripts/release-notes-from-changelog.sh 1.0.0 CHANGELOG.md /tmp/release-notes.md- Tag and push:
git tag -a v1.0.0 -m "v1.0.0"
git push origin main --tagsIf the release does not exist yet, create it first:
gh release create v1.0.0 --title "v1.0.0" --notes "placeholder"This project is unsigned (no paid Apple Developer cert/notarization). Downloaded apps may be quarantined by macOS.
After dragging app to /Applications, clear quarantine:
xattr -dr com.apple.quarantine "/Applications/CBManager.app"You can also right-click the app and choose Open once to allow launch.
- SQLite DB:
~/Library/Application Support/CBManager/clipboard.sqlite - Images:
~/Library/Application Support/CBManager/images/ - App settings (includes global shortcut):
~/Library/Application Support/CBManager/settings.json - Paste diagnostics log:
~/Library/Application Support/CBManager/paste.log
Search uses an instant local fuzzy ranking pipeline first, then asynchronously appends QMD results without blocking typing or list refresh. QMD keyword search starts at 3+ characters, and semantic search starts at 5+ characters. To keep the overlay responsive, the live list starts with 100 rendered matches and expands the window as you scroll while still searching across the full result set.
- Paste doesn’t work
- Grant Accessibility permission to the installed
CBManager.app - Check
~/Library/Application Support/CBManager/paste.logfor activation and permission diagnostics
- Grant Accessibility permission to the installed
- App won’t open after download
- Use the
xattrcommand above to remove quarantine
- Use the
- Focus not returning to previous app
- Reopen once with global shortcut so previous-app reference is refreshed
- Global shortcut should persist across reinstall
- It is stored in
~/Library/Application Support/CBManager/settings.json
- It is stored in
- Want a clean slate
- Quit app, then remove:
~/Library/Application Support/CBManager/clipboard.sqlite~/Library/Application Support/CBManager/images/~/Library/Application Support/CBManager/settings.json
- Quit app, then remove:
- Contributor/agent guidance:
AGENTS.md - Release notes/history:
CHANGELOG.md
