Skip to content

mimran-khan/deceiverme

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

deceiverMe

Native macOS menu bar app for timed cursor movement, session management, system monitoring, and idle prevention.


Release License macOS Swift

Stars Forks Issues Downloads

Watchers Repo Views


Overview · Screenshots · Features · Quick Start · Build · Contributing · License


Screenshots

Dashboard      Settings

Left: Dashboard with live session stats  |  Right: Settings panel


Overview

deceiverMe moves the cursor on a configurable schedule — set the pixel step, direction, and interval. Use it for demos, long-running sessions, or keeping the display and system from idling on machines you own or are authorised to control.

Single-file, zero dependencies. One Swift file + one Info.plist. Compiles to a universal binary (Intel + Apple Silicon) with ad-hoc codesign.

App deceiverMe.app
Source MouseMoverNative.swift + Info.plist
Build ./build.sh → universal binary, ad-hoc codesign, optional zip
Repo github.com/mimran-khan/deceiverme
Author mimran-khan

(back to top)


Features

Cursor Movement

  • Configurable step size — pixels per move (default 5)
  • Five directions — right, left, up, down, or circular
  • Adjustable interval — seconds between moves (default 10)
  • Safe bounds — cursor clamped to main display via CoreGraphics

Session Modes

Mode Behaviour
Run forever Runs until manually stopped
Fixed duration Auto-stops after N hours of active time (paused time excluded)
Stop at date & time Stops when system clock passes the chosen moment

Quick-start presets from the menu: Saved Settings, Run Forever, 1 h, 4 h, 8 h.

Dashboard

Live control centre accessible from the menu bar:

  • Status badgeIdle / Running / Paused
  • Session clock — elapsed HH:MM:SS, time remaining, move count, progress bar
  • System monitor — CPU/GPU temperature, CPU %, RAM, network throughput
  • Action buttons — Start, Pause/Resume, Stop, Settings
  • Version tag — current version at a glance

Auto-Update

On every Dashboard open, the app queries the GitHub Releases API:

  • New release detected → a notification banner appears at the bottom
  • One-click update → downloads the .zip, extracts, replaces the running app, and relaunches automatically
  • Up to date → banner stays hidden
  • Fallback → if the zip asset is missing, the button opens the release page instead

The check is a single background HTTPS GET — no telemetry, no data leaves your machine beyond the version query.

System Monitor

Real-time telemetry in the Dashboard and menu bar:

Metric Source
CPU temperature SMC (dynamic key discovery — Apple Silicon & Intel)
GPU temperature SMC (dynamic key discovery)
CPU usage host_processor_info
RAM usage host_statistics64
Network throughput getifaddrs (↓ / ↑)

Menu Bar

  • Dock-free — runs as an LSUIElement agent; no Dock icon, no app-switcher entry
  • Close = hide — closing the Dashboard hides the window; the app keeps running in the menu bar
  • Status icon — concentric rings (template image)
  • Banner rotation — live elapsed time, system stats
  • Start submenu — presets (saved settings, run forever, 1 h / 4 h / 8 h)
  • Pause / Resume, Stop
  • Dashboard ⌘W · Settings ⌘, · Quit ⌘Q

Global Hotkey

Default ⌘⇧Space — toggles start / pause. Customisable in Settings via Record shortcut….

URL Scheme

Scheme: deceiverme://

open "deceiverme://start"                  # start with saved settings
open "deceiverme://start?duration=1800"     # start, 30 min session
open "deceiverme://start?until=1700000000"  # start, stop at Unix epoch
open "deceiverme://stop"                    # stop
open "deceiverme://pause"                   # toggle pause

Notifications

Session-end alerts via UserNotifications (banners on macOS 11+). Toggle in Settings.

(back to top)


Quick Start

  1. Download the latest .zip from Releases, or build from source.
  2. Move deceiverMe.app to /Applications.
  3. Open the app — the menu bar icon appears.
  4. Grant Accessibility when prompted: System SettingsPrivacy & SecurityAccessibility → enable deceiverMe.
  5. Open Settings → configure pixels, direction, interval, session mode → Save.
  6. Start from the Dashboard, menu bar, hotkey, or URL scheme.

(back to top)


Build from Source

Prerequisites

  • macOS 11+ with Xcode Command Line Tools
xcode-select --install

Build

chmod +x build.sh   # first time only
./build.sh

The script compiles with -O -whole-module-optimization, builds a universal binary (Intel + Apple Silicon), ad-hoc codesigns, and produces a distributable zip.

Output

deceiverMe.app/               ← repository root (gitignored)
dist/deceiverMe-macos.zip     ← distributable archive

Build Options

Variable Effect
BUILD_STYLE=native Single-arch for current CPU only
SKIP_CODESIGN=1 Skip codesigning
SKIP_ZIP=1 Skip zip creation
BUILD_STYLE=native ./build.sh
SKIP_ZIP=1 ./build.sh

(back to top)


Reference — internals, defaults, and repo layout

How It Runs

  1. NSApplication + NSStatusItem + Dashboard NSWindow
  2. Timer on RunLoop.main (.common mode) fires every moveIntervalmoveMouse()
  3. AXIsProcessTrustedWithOptions before first start
  4. shouldAutoStop on tick → optional stopMovement(notify:reason:)
  5. 1 Hz UI refresh for menu + Dashboard
  6. SMC temperature polling via persistent IOKit connection with dynamic key discovery

UserDefaults Keys

Key Purpose
pixelMove Pixels per move
direction MovementDirection raw value
moveInterval Interval (seconds)
totalDuration Duration (seconds)
prefsSessionKind 0 forever / 1 fixed / 2 stop at
sessionUntilEpoch Deadline (timeIntervalSince1970)
notifyOnSessionEnd Bool
preventIdleSleepWhileRunning Bool (default true)
hotkeyKeyCode Carbon virtual key
hotkeyCarbonModifiers Carbon modifiers bitmask

Repository Layout

.
├── LICENSE
├── README.md
├── AGENTS.md
├── build.sh
├── .gitignore
├── screenshots/
│   ├── dashboard.png
│   └── settings.png
├── packaging/
│   └── Info.plist
└── MouseMoverNative/
    └── MouseMoverNative.swift

Permissions

Permission Required How to enable
Accessibility Yes System SettingsPrivacy & SecurityAccessibility → enable deceiverMe
Notifications Optional Allow when prompted for session-end alerts

Restart the app after changing permissions.


Troubleshooting

Click to expand
Issue Fix
Build fails at swiftc Install CLT; check Swift errors in terminal
codesign fails Read the error; or SKIP_CODESIGN=1 ./build.sh
Zip missing Ensure SKIP_ZIP is not set; check dist/ is writable
App won't open Right-click → Open; review Gatekeeper / quarantine
Cursor never moves Accessibility off → add app and restart
Hotkey not working Pick another combo in Record shortcut…
Can't save settings Stop the running session first
Screen still locks Enable Keep display & system awake in Settings; confirm session is active (not paused). MDM policies can override.
Temperatures show SMC access requires running without sandboxing; ad-hoc signed builds work on personal machines. v1.3.0+ uses dynamic key discovery to support all Apple Silicon generations (M1–M4).

Security & Privacy

  • No telemetry — the only outbound request is the GitHub Releases API update check.
  • Cursor control and idle-sleep assertions are sensitive in managed environments — follow your org's policy.
  • Ad-hoc signing is fine for personal builds; wide distribution needs Developer ID + notarization.

Contributing

Contributions, issues, and feature requests are welcome.

  1. Fork the repo
  2. Create your branch (git checkout -b feature/amazing-feature)
  3. Make changes and ensure ./build.sh passes
  4. Commit (git commit -m 'feat: add amazing feature')
  5. Push (git push origin feature/amazing-feature)
  6. Open a Pull Request

See Issues for known bugs and planned features.


License

Distributed under the MIT License. See LICENSE for details.


deceiverMe is built and maintained by mimran-khan

If you find this useful, consider giving a ⭐

About

macOS menu bar app for session-based activity simulation (rail/studio workflows)

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors