A macOS menu bar app that puts your Mac to sleep on a timer. Set a countdown by hand, or switch on Camera mode and it starts the timer for you when it sees your eyes stay closed. Menu bar only, no Dock icon.
Timer:
- Remaining time shown in the menu bar next to the icon.
- Any duration from 15 minutes to 12 hours, plus one-click presets (15m, 30m, 1h, 1.5h, 2h, 3h, 4h, 6h).
- Extend a running timer by +5, +15, +30, or +60 minutes.
- Right-click the icon for a quick menu: start a common timer, stop the current one, or open Settings.
- Circular progress ring, and a moon icon that fills in while a timer runs.
Camera mode:
- Starts a 30-minute timer on its own when your eyes stay closed for about 15 seconds, and cancels it if you open them.
- Live preview with a border that turns green once your face is detected.
- After 1.5 hours it asks if you are still awake, and sleeps the Mac if there is no response within 30 seconds.
- All processing is on-device with Apple's Vision framework. No video is stored or sent anywhere.
Auto-start and system:
- Optionally arm a timer on its own once the Mac sits idle for a set number of minutes inside a nightly window, so you never forget to start one.
- Launch at login.
- In-place updates: checks once a day and installs a new version when you choose to (Sparkle).
- Adaptive app icon (light/dark), restrained system-style UI.
- macOS 14 (Sonoma) or later. The three latest macOS releases are supported; on macOS 26 (Tahoe) and later the UI uses Liquid Glass.
- A Mac with Apple silicon. Intel Macs are not supported.
- For building from source: Xcode 26 or later.
- Download the latest
Watch-Me-While-I-Fall-Asleep-vX.Y.Z-macOS.zipfrom the Releases page. - Unzip it and move Watch Me While I Fall Asleep.app to
/Applications. - Launch it. Releases from 2.1.0 on are signed with a Developer ID and notarized by Apple, so macOS opens them without a warning. A moon icon appears in the menu bar (there is no Dock icon).
From 2.2.0 on the app updates itself (see Updates).
git clone https://github.com/wiltodelta/watch-me-sleep.git
cd watch-me-sleep
./create-app.sh
mv "Watch Me While I Fall Asleep.app" /Applications/- Manual timer mode needs no permissions at all.
- Camera mode asks for Camera access the first time you open it (System Settings > Privacy & Security > Camera). It is optional; the timer works without it, and all camera processing stays on-device.
- Click the moon icon and select Timer.
- Set a duration with the slider or a preset, then click Start Timer.
- The icon fills in while the timer runs. Click it again to see the remaining time, add time, or stop.
Right-click the icon for a quick menu that starts a common timer (15m/30m/1h/1.5h/2h), stops the current one, or opens Settings.
- Click the moon icon, select Camera, and grant camera access.
- The preview border turns green once your face is detected.
- When your eyes stay closed for about 15 seconds, a 30-minute timer starts. Open your eyes for a few seconds to cancel it.
- Every 1.5 hours it asks if you are still awake; no response within 30 seconds sleeps the Mac.
Enable it in Settings, then pick the nightly window (start and end hour), how many idle minutes should pass, and the timer length. When the Mac sits idle past that threshold inside the window, a timer arms on its own. It stays out of the way while a timer is already running or Camera mode is active.
Open Settings from Settings… in the panel, from the right-click menu, or by opening the app again from Finder or Spotlight (useful if its menu bar icon is hidden).
- Auto-start when idle: the nightly window, idle threshold, and timer length.
- Startup: launch at login.
- Updates: current version, automatic daily checks on or off, and a Check for Updates… button.
The app uses Sparkle (MIT licensed; its notice ships in the app bundle) to check once a day for a new release. It never takes focus from what you are doing: when an update is found, an Install X.Y.Z… button appears in the panel footer, and the update window opens only when you choose it or check by hand from Settings > Updates. Updates are signed with an EdDSA key as well as the Developer ID, and install in place with a relaunch. Automatic checks can be turned off in Settings.
- "Watch Me While I Fall Asleep is damaged and can't be opened": releases
before 2.1.0 were not notarized. Update to the latest release, or clear the
quarantine flag with
xattr -cr "/Applications/Watch Me While I Fall Asleep.app". - The timer doesn't sleep the Mac: something may be holding a power
assertion (for example
caffeinateor a media app). Check withpmset -g assertions. - Camera mode isn't working: enable the app under System Settings > Privacy & Security > Camera, and make sure your face is visible and well lit. 2.1.0 is the first release signed with a Developer ID, a different signature from earlier builds, so macOS asks for camera access once more after the update.
- No icon in the menu bar: confirm you are on macOS 14 or later; on macOS 26 also check System Settings > Menu Bar > Allow in the Menu Bar. Opening the app again shows its settings window either way.
./create-app.shassembles the signed.appbundle: with the maintainer's Developer ID identity in the keychain it signs with it (hardened runtime and the camera entitlement inWatchMeSleep.entitlements), otherwise ad hoc, and then camera access re-prompts after every rebuild.RELEASE=1 ./create-app.sh && ./notarize.shadds a secure timestamp, notarizes, staples, and writes the release zip.bash maintain.shruns SwiftLint, the tests, and a release build../capture-screenshots.shrebuilds the app and regenerates the screenshots above through Accessibility, blurring the camera feed. It needs Accessibility and Screen Recording access for the terminal and turns the camera on briefly.
Releases are automated: the app version comes from the git tag. Pushing an
annotated vX.Y.Z tag makes GitHub Actions build the app, sign it with the
Developer ID, notarize it, and publish a Release with the zip and the Sparkle
appcast.xml attached. The annotation's first line is the release title and its
body the release notes, which also appear in the update window:
git tag -a vX.Y.Z -F notes.md # first line the title, blank line, then the notes
git push origin vX.Y.ZLocal builds carry the latest tag's version and are not meant for distribution.
Secrets, keys and verification steps: docs/build-and-release.md.
Quit the app from its panel, then move Watch Me While I Fall Asleep.app to the Trash. To remove its settings too:
defaults delete com.wiltodelta.watchmesleepRemove it from System Settings > Privacy & Security > Camera and from General > Login Items as well.
Licensed under the Apache License, Version 2.0. See LICENSE for the full text.



