A macOS menu bar app that keeps your machine awake and your status green — no more "away" on Slack or Teams while you step away for coffee.
- Standard mode — nudges the mouse cursor by 2px and back every N seconds (requires Accessibility permission)
- Zen mode — keeps the display awake and resets the idle timer via a native macOS API, with no cursor movement and no Accessibility permission required
- Humanized mode — irregular timing with randomized bursts, breaks, and idle phases to mimic real human activity
- Schedules — configure active days and time windows (e.g. Mon–Fri, 9am–5pm)
- Smart pausing — auto-pauses on battery, on lock screen, or for a timed duration (15 min / 1 hour / until tomorrow)
- Launch on login — starts automatically with macOS
Go to the Releases page and download the latest .dmg for Apple Silicon (arm64).
Because the app isn't notarized with an Apple Developer certificate, macOS Gatekeeper will block it. Run this once in Terminal after moving it to Applications:
xattr -cr /Applications/AlwaysJiggle.appThen open it normally.
- Node.js 18+
- npm
- macOS (Apple Silicon recommended)
- Xcode Command Line Tools (for the Swift helper)
git clone https://github.com/ncesar/AlwaysJiggle.git
cd AlwaysJiggle
npm installThe native helper binary is already compiled and committed at helpers/jiggle-helper. If you need to recompile it:
swiftc helpers/jiggle-helper.swift -o helpers/jiggle-helpernpm startThis compiles TypeScript and launches Electron. The app will appear in your menu bar.
npm run distThe output is placed in the release/ folder.
src/
main/
index.ts # App entry, IPC handlers
tray.ts # Menu bar tray + popup window
jiggleEngine.ts # Start/stop/pause/resume orchestration
humanEngine.ts # Humanized timing state machine
conditions.ts # Battery and lock screen monitoring
scheduler.ts # Schedule evaluation
store.ts # Persistent settings (electron-store)
preload.ts # Context bridge for renderer IPC
types.ts # Shared TypeScript interfaces
renderer/
index.html # Popup UI
renderer.ts # UI logic and state binding
style.css # Styles
helpers/
jiggle-helper.swift # Native Swift binary (mouse, zen, idle)
Contributions are welcome. A few guidelines:
- Fork the repo and create a branch from
main - Keep changes focused — one feature or fix per PR
- Run
npm startto verify nothing is broken before opening a PR - Open a PR with a clear description of what and why
If you find a bug or have a feature idea, open an issue first so we can discuss it.
Built by César Nascimento, a fullstack developer. Feel free to connect.
MIT
