KeyPoint is a native menu bar utility for keyboard-driven pointer control. It is implemented in Swift with AppKit, SwiftUI, ScreenCaptureKit, Vision, Core Graphics, and the macOS Accessibility API.
The project uses Swift Package Manager. Xcode and an .xcodeproj are not required.
- macOS 14 or later
- Swift 6 toolchain from Xcode Command Line Tools or Xcode
- Accessibility permission for the global shortcut, Accessibility detection, window switching, and input synthesis
- Screen Recording permission for Vision detection
KeyPoint is intentionally not sandboxed. The App Sandbox does not permit its system-wide event tap and cross-app accessibility workflow.
swift test
Scripts/run.shScripts/run.sh performs a release SwiftPM build, creates dist/KeyPoint.app, ad-hoc signs it for local use, and opens it with Launch Services. Building the bundle separately is also supported:
Scripts/build-app.sh
open dist/KeyPoint.appLocal builds target the current Mac. Set UNIVERSAL=1 to produce an arm64/x86_64 app. Scripts/package-dmg.sh enables the universal build by default.
You can compile just the SwiftPM executable with swift build, but launch the generated app bundle when granting TCC permissions so macOS sees a stable bundle identifier.
On first launch, use the onboarding window to request both permissions. macOS may require KeyPoint to be relaunched after a permission changes.
To build and install the app in ~/Applications, run ./install.command. The installer removes an existing Neverclick.app, registers KeyPoint with Launch Services, and resets Accessibility and Screen Recording permissions for both app identities. You must grant both permissions to KeyPoint and relaunch it.
The default global activation shortcut is Control-Space.
- Press Control-Space to detect targets.
- Type the yellow hint shown over a target.
- Optionally adjust the click position with an arrow key, Option-
J/I/K/L, or Option-1through9. - Press Return to click. Press Escape at any time to cancel.
During a session:
- Tab toggles all-displays and frontmost-window scope.
- Backtick cycles Vision, Clairvoyance, and Grid engines.
- Shift-A/D/W/S switches to a window in that direction.
- Shift-Q/E cycles window z-order; Shift-Z activates a window behind the pointer.
Single, Dual, Multi, and Path selection modes are available in Settings. Dual requires two targets. Multi and Path queue any number of targets and execute them on Return; Path preserves selection order.
- Vision captures displays or the frontmost window with ScreenCaptureKit, then uses Vision rectangle and text-region requests. It caches unchanged frames and falls back to Grid if no candidates are found.
- Clairvoyance walks the frontmost app's AX tree with depth, time, and target-count limits. It prefers
AXPressand falls back to a synthesized mouse click. - Grid creates deterministic geometric targets without screen capture.
Vision is implemented entirely in Swift for this package. Its detector boundary is isolated so a future shared C/Rust core can replace it without changing capture, session, or overlay code.
- Captured images are analyzed in memory and are not written or transmitted.
- KeyPoint runs offline and has no network client.
- Secure Input is an intentional macOS security boundary. KeyPoint detects it when possible and does not attempt to bypass it.
- DRM-protected pixels may be omitted by macOS; Grid and Clairvoyance remain available.
- There is no supported public API for moving another app's window between Spaces. KeyPoint does not use fragile private APIs.
KeyPoint writes operational logs to ~/Library/Logs/KeyPoint/KeyPoint.log. The current log rolls at 2 MB, with up to five 2 MB archives retained. Choose Reveal Logs in Finder from the menu bar item to open the log location.
The installer leaves legacy logs in ~/Library/Logs/Neverclick/ if they exist. It does not copy them into the KeyPoint log set.
Logs contain operational metadata such as permission results, subsystem timings, display and window identifiers, image dimensions, and pointer or window coordinates. They never contain captured pixels or typed characters.
Open Settings from the menu bar item or with Command-comma. The UI includes detection tuning, grid dimensions, selection mode, locale, activation key code, an interactive hint-keyboard priority editor, permission status, and JSON import/export. Settings are stored under keypoint.settings.v1 in UserDefaults and do not require hand-editing a configuration file. Existing Neverclick settings are not migrated.
Create a Developer ID-signed app and DMG:
export CODE_SIGN_IDENTITY="Developer ID Application: Example Corp (TEAMID)"
Scripts/package-dmg.shStore notarization credentials once, then submit and staple the DMG:
xcrun notarytool store-credentials keypoint-notary \
--apple-id "developer@example.com" \
--team-id "TEAMID" \
--password "app-specific-password"
export NOTARY_KEYCHAIN_PROFILE=keypoint-notary
Scripts/notarize.shSigning and notarization require the distributor's Apple Developer credentials and therefore cannot be completed by the source build itself.
Sources/KeyPointCore— portable settings, targets, hint labels, and selection policySources/KeyPointApp— menu bar shell, SwiftUI settings/onboarding, capture, AX, event tap, overlay, input, and window integrationTests/KeyPointCoreTests— deterministic core testsPackaging— bundle metadata and hardened-runtime entitlementsassets/keypoint.png— source artwork converted toAppIcon.icnsduring bundlingScripts— build, launch, DMG, and notarization commands
KeyPoint is available under the MIT License. See LICENSE for details.