Skip to content

Releases: atomsbaza/VigilScreen

v0.3.4 — Multi-display panic overlay overhaul + no-flash safelisted switching

Choose a tag to compare

@atomsbaza atomsbaza released this 24 May 16:53
2a20a1c

What's new in v0.3.4

Bug Fixes

  • Multi-display overlay — external monitors now blur correctly on macOS Sequoia; root cause was wrong display height used for CG→AppKit y-flip
  • Blur-to-hole flash eliminated — safelisted apps are always visible through holes during Panic Mode; switching to them is instantaneous with no full-blur frame
  • Mask hole coordinates — corrected for setups where the primary and focused displays have different heights
  • Chromium/Electron hole sizing — window bounds now sourced exclusively from CGWindowList; AX was returning inner content views, producing undersized holes
  • CGEvent tap reliability — tap now survives system-initiated disables (timeout / user input); no-flash guarantee no longer silently degrades mid-session
  • Run loop source leakCFRunLoopSource is correctly removed on panic release; eliminates accumulation across repeated panic cycles
  • New display during panic — a monitor connected while Panic Mode is active gets safelisted-app holes immediately

Performance

  • GPU blur pipeline pre-warmed at launch
  • Per-app CALayer mask rebuilt on-demand via CGWindowList only (~1–3 ms)
  • 250 ms loop skips no-op ticks via rect-signature comparison
  • Preemptive mask rebuild on click only fires for safelisted-app windows

Installation

Download VigilScreen-0.3.4.dmg below, open it, and drag Vigil Screen.app to Applications.

Or via Homebrew:

brew upgrade --cask vigil-screen

v0.3.3 — Vigil Screen

Choose a tag to compare

@atomsbaza atomsbaza released this 11 May 14:55
8647c7f

New Features

  • Panic Mode now mutes system audio on trigger and restores the prior mute state on release (toggleable in Settings → Panic Mode)
  • Panic Mode now clears the clipboard on trigger — prevents bystanders from pasting recently-copied passwords (not restored, toggleable in Settings → Panic Mode)

v0.3.2 — Vigil Screen

Choose a tag to compare

@atomsbaza atomsbaza released this 08 May 18:55

Bug Fixes

  • Fixed a crash on launch caused by duplicate UUIDs when merging local and iCloud lock history events

v0.3.1 — Vigil Screen

Choose a tag to compare

@atomsbaza atomsbaza released this 08 May 18:37
67a163b

What's New

✅ iCloud Sync — now actually working

Settings, App Safelist, and Lock History sync automatically across all your Macs signed into the same iCloud account. The feature was claimed in v0.2.0 but the entitlement was missing — it silently no-oped on every launch. Now fixed.

Settings → General shows a live iCloud Sync status with connection indicator and last-synced time.

🍎 Apple Watch unlock

Apple Watch side-button double-press now unlocks Panic Mode alongside Touch ID and password. No new code needed — LAPolicy.deviceOwnerAuthentication already supported it. The toggle in Settings → Panic Mode has been renamed to "Require authentication to release" to reflect all three methods.

Enable in: System Settings → Touch ID & Password → Use your Apple Watch to unlock apps and your Mac

🔧 Internal

  • Renamed DockLock.entitlementsVigilScreen.entitlements (last file with the old name)
  • Added Claude Code project config (.claude/settings.json, /release command)

Install

brew upgrade --cask vigil-screen

Or download the .dmg below.

Known Issues

  • Secondary monitor connected after Panic Mode is already active won't have a blur overlay — re-trigger Panic Mode (⌘⇧L twice) as a workaround. Fix planned for v0.3.2.

v0.3.0 — Vigil Screen

Choose a tag to compare

@atomsbaza atomsbaza released this 06 May 15:45
f8ecf4b

Vigil Screen v0.3.0 Release Notes

Highlights

  • App renamed from DockLock to Vigil Screen
  • New feature: Shoulder Surfing Detection — automatically triggers Panic Mode when someone looks over your shoulder
  • Three Panic Mode bug fixes: fullscreen apps, Chromium browsers, Stage Manager
  • Redesigned Panic Mode button with shortcut hint

New Features

Shoulder Surfing Detection

Vigil Screen now watches for uninvited viewers using your Mac's front camera — fully on-device, no uploads.

  • Continuous face detection via Vision + AVFoundation
  • Configurable sensitivity and minimum detection duration before triggering Panic Mode
  • Auto-release: Panic Mode lifts automatically (no Touch ID required) once the threat clears for a set delay (3–30 s)
  • Lock History records shoulder surfing events with a purple badge
  • Toggle on/off in Settings → Shoulder Surfing

App Renamed to Vigil Screen

DockLock is now Vigil Screen — a cleaner name that better reflects what the app does.


Bug Fixes

Panic Mode — Fullscreen Apps Now Stay Visible

Safelisted apps running in fullscreen mode (their own macOS Space) were incorrectly blurred even when on the safelist. Fixed by detecting the AXFullScreen attribute and punching a full-screen hole in the overlay mask.

Panic Mode — Chromium Browsers Now Respected by Safelist

Chrome, Edge, Brave, Arc, and other Chromium-based browsers were always blurred even when added to the safelist. These apps have limited Accessibility API support so their windows weren't being detected. Fixed by adding a CGWindowListCopyWindowInfo fallback that works for all apps regardless of AX support.

Panic Mode — Stage Manager Stages Now Covered

When Stage Manager was active, app thumbnails on the left side were not covered by the blur overlay — they render above the overlay window level. Fixed by hiding Stage Manager during panic and restoring it on release.

Accessibility Permission Alert on Every Launch

The ⌘⇧L shortcut would silently fail after the first launch if Accessibility permission was off. Now a clear alert appears on every launch without permission, with a direct "Open Settings" button.


Improvements

Panic Mode Button Redesign

  • Icon changed to exclamationmark.shield.fill for clearer intent
  • ⌘⇧L shortcut hint now visible directly on the button
  • Filled red background (pre-macOS 26) / red Liquid Glass tint (macOS 26+)

Installation

After granting Accessibility permission for the first time, quit and reopen Vigil Screen for the ⌘⇧L shortcut to activate.

  1. Download Vigil Screen.dmg from GitHub Releases
  2. Open the DMG and drag Vigil Screen to Applications
  3. Launch — right-click → Open on first run if macOS shows a security warning
  4. Grant Accessibility permission when prompted, then quit and reopen

Known Issues

Issue Status
Blur overlay not covering secondary monitors connected after Panic Mode is already active Open — planned fix in v0.3.1

DockLock v0.2.1

Choose a tag to compare

@atomsbaza atomsbaza released this 19 Apr 06:14
11c1a04

Auto-lock your Mac on Bluetooth proximity + panic-hide sensitive apps with one hotkey.


What's New

🔧 Panic Mode — No More Overlay Flash on App Switch

  • Switching from a non-safelisted app to a safelisted app no longer causes a blur flash
  • Previously: the overlay briefly showed a wrong-sized hole (blur strip along the window edge) before correcting itself — caused by the app relaying out its window chrome (tab bar, traffic lights) during activation, making the cached AX rect momentarily narrower than the final rect
  • Now: overlay alpha clears to 0 instantly on every app switch (suppressing macOS's implicit CA fade), then rebuilds the mask from the settled rect 70 ms later and fades back in smoothly over 180 ms
  • Rapid back-to-back app switches cancel any pending reapply so no stale state accumulates

Bug Fixes

  • Fixed: blur flash when switching from a non-safelisted to a safelisted app during Panic Mode
  • Fixed: mask rebuild on activation could query AX mid-relayout, producing a hole too narrow for the app's actual window — now rebuilds only after the window has settled

Installation

  1. Download DockLock-v0.2.1.dmg below
  2. Open the .dmg and drag DockLock.app to Applications
  3. Launch from Applications — right-click → Open on first launch (see note below)
  4. Grant Accessibility and Camera permissions when prompted

⚠️ Gatekeeper warning: macOS will show a security warning on first launch since the app is not yet notarized. Right-click → Open → Open anyway, or run:

xattr -cr /Applications/DockLock.app

Notarization is planned for a future release once the Apple Developer account is active.

Requirements: macOS 15 Sequoia or later · Apple Silicon or Intel


Build from Source

git clone https://github.com/atomsbaza/DockLock.git
cd DockLock
open DockLock.xcodeproj

Requires Xcode 16+ and Swift 6.0+.


What's Next

  • Notarized release — no Gatekeeper warning, Homebrew Cask (brew install --cask docklock)
  • iCloud Sync activated — Settings, App Safelist, and Lock History sync across all your Macs

Feedback

Found a bug? Open an issue
Have a feature request? Request here
Security issue? Email atomsbaza2@gmail.com

DockLock v0.2.0

Choose a tag to compare

@atomsbaza atomsbaza released this 18 Apr 05:08
5000fe6

Auto-lock your Mac on Bluetooth proximity + panic-hide sensitive apps with one hotkey.


What's New

📸 Intruder Capture

  • Automatically photographs anyone who fails a Panic Mode unlock attempt (wrong Touch ID or password)
  • Photo saved locally to ~/Pictures/DockLock Captures/ — never uploaded anywhere
  • macOS notification fires immediately so you know even when you're away from the desk
  • Thumbnail visible in History log — tap to view full-size
  • Toggle on/off in Settings → Panic Mode → "Capture photo on failed unlock"

🚨 Panic Mode — Safelist Model (redesign)

  • New safelist approach: blur covers everything; only your trusted apps stay visible and interactive above the blur
  • Previously hid specific apps (blocklist) — now blurs everything and keeps only safelisted apps visible
  • Default safelist: Terminal, Xcode, VS Code, Safari, Chrome, Slack, Notion
  • Add/remove apps via the + button or keyboard Delete key
  • Blur overlay uses NSVisualEffectView with CGContext bitmap masks punching transparent holes for safelisted windows — updated every 250ms so safelisted apps stay fully interactive
  • Full-screen apps on non-safelisted apps are automatically exited and hidden
  • Auth dialog appears above the blur — Touch ID + password fallback both work correctly
  • Overlay stays visible during authentication so nothing leaks while the dialog is open

📋 Lock History

  • Full audit log of every lock event: Proximity Lock triggers, Panic Mode activations, and failed unlock attempts
  • Intruder Capture events show thumbnail with tap-to-enlarge
  • Clear history at any time (also deletes captured photos from disk)

📊 Menubar Live Stats

  • Live Bluetooth RSSI and lock countdown shown next to the menu bar icon
  • Toggle on/off in Settings → General

🔐 Security hardening

  • panicRequiresTouchID and intruderCaptureEnabled are local-only — cannot be changed remotely via iCloud
  • Intruder Capture events (failed unlock timestamps) are excluded from iCloud sync and stay on-device only
  • Fixed: duplicate Panic Mode observers when proximity lock triggered while already active
  • Fixed: AXValue force casts replaced with safe CFGetTypeID checks — no more crash paths that could leave the screen permanently blurred
  • Fixed: stopRunning() dispatched to background queue (mirrors startRunning())

☁️ iCloud Sync (infrastructure — activates in v0.2.1)

  • CloudSyncStore implemented — routes NSUbiquitousKeyValueStore external-change notifications to Settings, App Safelist, and Lock History
  • Non-security settings (panicShortcutEnabled, proximityLockDelay, proximityRSSIThreshold, showMenuBarStats) sync across Macs automatically once the entitlement is enabled
  • Activation requires the iCloud Key-value storage entitlement — available once the paid Apple Developer account is set up for notarization

Bug Fixes

  • Fixed: wrong password during Panic Mode release now correctly triggers Intruder Capture (previously only biometric failure triggered it)
  • Fixed: overlay would flash briefly when switching between apps during Panic Mode
  • Fixed: full-screen apps could sit above the blur overlay and remain visible
  • Fixed: clear() in Lock History now removes events from iCloud KV store (previously stale events could re-sync back after clearing)
  • Fixed: concurrent capturePhoto calls no longer overwrite the completion handler

Installation

  1. Download DockLock-v0.2.0.dmg below
  2. Open the .dmg and drag DockLock.app to Applications
  3. Launch from Applications — right-click → Open on first launch (see note below)
  4. Grant Accessibility and Camera permissions when prompted

⚠️ Gatekeeper warning: macOS will show a security warning on first launch since the app is not yet notarized. Right-click → Open → Open anyway, or run:

xattr -cr /Applications/DockLock.app

Notarization is planned for v0.2.1 once the Apple Developer account is active.

Requirements: macOS 15 Sequoia or later · Apple Silicon or Intel


Build from Source

git clone https://github.com/atomsbaza/DockLock.git
cd DockLock
open DockLock.xcodeproj

Requires Xcode 16+ and Swift 6.0+.


What's Next (v0.2.1)

  • Notarized release — no Gatekeeper warning, Homebrew Cask (brew install --cask docklock)
  • iCloud Sync activated — Settings, App Safelist, and Lock History sync across all your Macs

Feedback

Found a bug? Open an issue
Have a feature request? Request here
Security issue? Email atomsbaza2@gmail.com

DockLock v0.1.0

Choose a tag to compare

@atomsbaza atomsbaza released this 14 Apr 09:32

Auto-lock your Mac on Bluetooth proximity + panic-hide sensitive apps with one hotkey.


What's New

This is the first public release of DockLock.

🔒 Proximity Lock

  • Auto-locks your Mac when your iPhone or Apple Watch goes out of Bluetooth range
  • Automatically triggers Panic Mode before locking — apps stay hidden even if the screen is woken without authenticating
  • Smart hysteresis prevents false triggers
  • Customizable lock delay and RSSI signal threshold

🚨 Panic Mode

  • One hotkey (⌘+Shift+L) instantly hides Terminal, Xcode, VS Code, browsers, Slack, and more
  • Works on full-screen apps
  • Touch ID required to release
  • Fully customizable app blocklist

🎉 First-Run Onboarding

  • Guided setup checklist on first launch — Accessibility, Bluetooth pairing, and blocklist status
  • Up and running in under a minute

✨ Liquid Glass (macOS 26)

  • Native macOS 26 Liquid Glass UI with graceful fallback on macOS 15–25

🔐 Privacy-first

  • Fully local — no cloud, no analytics, no telemetry
  • Pure Apple frameworks (CoreBluetooth, LocalAuthentication) — zero external dependencies
  • PrivacyInfo.xcprivacy included for notarization compliance

Installation

  1. Download DockLock-v0.1.0.dmg below
  2. Open the .dmg and drag DockLock.app to Applications
  3. Launch from Applications — right-click → Open on first launch (see note below)
  4. Grant Accessibility permission when prompted

⚠️ Gatekeeper warning: macOS will show a security warning on first launch since the app is not notarized yet. Right-click → Open → Open anyway, or run:

xattr -cr /Applications/DockLock.app

This is standard for open-source apps distributed outside the App Store. Notarization is planned for v0.2.0.

Requirements: macOS 15 Sequoia or later · Apple Silicon or Intel


Build from Source

git clone https://github.com/atomsbaza/DockLock.git
cd DockLock
open DockLock.xcodeproj

Requires Xcode 16+ and Swift 6.0+.


What's Next (v0.2.0)

  • Notarized release (no Gatekeeper warning)
  • Menubar live stats (Bluetooth RSSI)
  • Lock history log
  • Homebrew Cask (brew install --cask docklock)

Feedback

Found a bug? Open an issue
Have a feature request? Request here
Security issue? Email atomsbaza2@gmail.com