README.md

April 10, 2026 · View on GitHub

Guard icon

Guard

Camera access monitor for macOS
Block-first. Open source. Fully local.

Download DMG · Website · Report Bug

Version Platform License Stars


Guard sits in your menu bar and monitors your Mac's camera. The moment any process tries to access the camera, Guard freezes it instantly — before it can read a single frame — and asks you what to do.

Guard — Camera access monitor for macOS

How it works

App opens camera


Guard detects (~500ms)


SIGSTOP — process is FROZEN
(can't read camera frames)


Alert: "Allow or Block?"
      / \
   Allow  Block
     │      │
  SIGCONT  SIGTERM
  (resume) (kill)
  1. Detect — Polls CoreMediaIO's kCMIODevicePropertyDeviceIsRunningSomewhere every 500ms
  2. Freeze — Sends SIGSTOP to the offending process (kernel-level, cannot be caught or ignored)
  3. Decide — You choose: Allow, Block, or Always Block

Features

  • Block-first — Processes are frozen before they can read a single frame
  • Real-time monitoring — 500ms camera state polling via CoreMediaIO
  • Permanent block list — Auto-blocks untrusted apps silently on future attempts
  • Activity log — Full history with process name, PID, bundle ID, and timestamps
  • Flashing menu bar icon — Red flash when camera is active
  • 30s approval timeout — Auto-blocks if you don't respond
  • Launch at login — Optional, via LaunchAgent
  • Fully local — No network calls, no telemetry, no accounts
  • Tiny footprint — ~250KB binary, minimal CPU usage

Install

Download

Grab the latest DMG from the releases page.

Build from source

git clone https://github.com/FaisalFehad/Guard.git
cd Guard
./build.sh
open build/Guard.app

Requires swiftc (included with Xcode Command Line Tools). Run xcode-select --install if you don't have it.

Requirements

  • macOS 14 (Sonoma) or later
  • Apple Silicon or Intel

How it's built

ComponentTechnology
Camera detectionCoreMediaIO (kCMIODevicePropertyDeviceIsRunningSomewhere)
Process freezingPOSIX signals (SIGSTOP / SIGCONT / SIGTERM)
UIAppKit (NSStatusItem, NSAlert, NSTableView)
PersistenceJSON file (activity log) + UserDefaults (block list)
Launch at loginLaunchAgent plist
BuildDirect swiftc compilation — no Xcode project needed

Limitations

  • Detection, not prevention. Guard detects camera access and reacts (~500ms). A true zero-gap blocker would require a kernel extension or Apple-signed Camera Extension.
  • Process identification is heuristic. macOS doesn't expose a "who has the camera" API. Guard uses a scoring system (frontmost app, known camera apps) to identify the process. It's usually right, but background processes may be misidentified.
  • SIGSTOP requires same-user ownership. Guard can freeze apps you own. System processes owned by root require sudo.

Privacy

Guard collects zero data. No network calls. No analytics. No telemetry. No accounts. Everything runs locally on your Mac. The activity log is stored in ~/Library/Application Support/Guard/ and never leaves your machine.

License

MIT

Contributing

Issues and pull requests are welcome. If you find a bug or have a feature request, please open an issue.