A macOS menu bar utility that blocks all keyboard and mouse input—perfect for when your cat decides to take a nap on your keyboard.
- Complete input blocking: Blocks keyboard, mouse, trackpad, and scroll wheel
- Menu bar only: No dock icon, minimal footprint
- Safe toggle hotkey:
Escape+Delete(hard for cats to press) - Emergency unlock:
Fn+Escapealways unlocks, no matter what - Auto-timeout: Automatically unlocks after 10 minutes (safety feature)
- Failsafe: Always starts unlocked, even after crashes
- Download and unzip
Catlock.zipfrom the latest release - Move
Catlock.appto Applications - Launch and grant Accessibility permission when prompted
- Restart the app after granting permission
Note: The app is signed and notarized by Apple, so it should open without any Gatekeeper warnings.
Catlock requires Accessibility permission to intercept input events.
On first launch:
- You'll see a permission prompt
- Go to System Settings → Privacy & Security → Accessibility
- Enable Catlock in the list
- Restart the app
Why Accessibility? CGEventTap requires this permission to intercept events from other applications. Without it, the app cannot block input.
| Action | Hotkey |
|---|---|
| Toggle lock | Escape + Delete |
| Emergency unlock | Fn + Escape (always works) |
Click the cat icon in the menu bar to enable/disable Catlock.
- Cat outline = Unlocked (normal operation)
- Filled cat = Locked (input blocked)
- Launch the app (you'll see a cat icon in the menu bar)
- Open a text editor
- Press
Escape+Deleteto enable Catlock - Try typing—nothing should happen
- Press
Escape+Deleteagain to disable - Verify typing works again
Tip: If anything goes wrong, Fn + Escape will always unlock.
- macOS 13 Ventura or later
- Accessibility permission
- Open
Catlock/Catlock.xcodeprojin Xcode - Select your development team in Signing & Capabilities
- Build and run (⌘R)
- Keyboard:
keyDown,keyUp,flagsChanged - Mouse:
mouseMoved, all click events, drag events - Scroll:
scrollWheel
EventTapManager.swift: CGEventTap handling, hotkey detectionAppDelegate.swift: Menu bar UI, app lifecycleInfo.plist: LSUIElement (menu bar only), accessibility descriptionmain.swift: App entry point with MainActor isolation
- Signed and notarized by Apple
- App Sandbox is disabled (required for CGEventTap)
- Hardened Runtime is enabled
- No private APIs used
- Distributed outside Mac App Store
- Ensure Accessibility permission is granted
- Restart the app after granting permission
- Check System Settings → Privacy & Security → Accessibility
- Use the failsafe:
Fn+Escape - Check if another app is capturing these keys
- Relaunch the app
- Press
Fn+Escape(always works) - Wait 10 minutes (auto-timeout)
- If all else fails: hold power button to restart
MIT
