A desktop anti-idle activity simulator with automatic window discovery, varied cursor movement and application-aware activity.
Download · Features · Quick start · Schedule · Platforms · Development
Application interface with demonstration data. Screenshots follow your light or dark theme.
Built with Rust · GPUI
- Varied activity. Windows and existing browser tabs rotate without immediate repeats when alternatives are available. Browser reading and VS Code reviews run as complete scenarios; other windows use cursor routes through several different areas.
- Automatic window discovery. Open applications become available automatically, without window lists, permissions to configure or practice documents.
- Application-aware actions on Windows. Read existing browser tabs with smooth scrolling and a faster return, briefly select and clear visible text, or review VS Code Extensions, Explorer, folders and project files while restoring the editor's state.
- Pauses for your input. Physical keyboard or mouse activity interrupts the simulation. It resumes after 8 seconds without physical input; a global shortcut stops it immediately.
- Weekly schedule. Choose days of the week and start and finish times, including overnight shifts, and optionally launch Emploidle at login.
- Tray controls and updates. Start, stop or reopen the window from the tray. Builds with updater support offer signed updates with download progress and a restart button.
- Light, dark or system theme. Switch the theme at the bottom of the window; the choice is saved with your preferences.
More screenshots: schedule, paused activity and updates
Weekly schedule
Paused activity
Application update
Download an installer from GitHub Releases.
| Platform | Package | Installation |
|---|---|---|
| Windows x64 | -win-x64-setup.exe |
Run the installer. |
| macOS Apple Silicon | -mac-arm64.dmg |
Open the disk image and drag Emploidle to Applications. |
| macOS Intel | -mac-x64.dmg |
Open the disk image and drag Emploidle to Applications. |
| Linux x64, X11 | -linux-x64.AppImage or .deb |
Make the AppImage executable and launch it, or install the package for your distribution. |
Filenames begin with Emploidle-<version>. See Platform notes for permissions and session requirements.
On startup, builds with updater support check GitHub Releases for a newer version. Choose Update and restart to download, verify and install it, or Later to keep working. A failed download or installation shows an error and a Retry button; offline checks leave the application usable.
Install a build containing the updater manually once. Earlier builds cannot update themselves. Signing and publishing instructions are in the release guide.
- Open the applications you want to use, then launch Emploidle.
- Press Start. The main window hides to the tray and activity begins; new windows are discovered automatically.
- Use Stop in the window or tray menu to finish, or press Ctrl + Alt + Escape globally. On macOS, use Control + Option + Escape.
| Application or capability | Available actions |
|---|---|
| Open foreground windows | Curved cursor movement and hovering; accessible content rows are preferred. |
| Recognized document apps, supported sites and IDEs on Windows | Focus the window and scroll native accessibility controls, restoring the original scroll position after reading. |
| Existing tabs in supported Chromium browsers | Choose another available tab, save its scroll position, scroll smoothly toward the bottom and return faster, or briefly select and clear visible text. Long and infinite pages use a bounded reading interval before returning. Ambiguous tab identities are skipped. |
| VS Code and compatible editors exposing supported Windows accessibility controls | Review Extensions and Explorer, expand project folders, then visit several different unopened text files. Scroll only inside the created editor tabs and close them afterward. Existing tabs, previews, group selections and folder expansion states are preserved. Ambiguous controls are skipped. The editor must already be running. |
| Supported mail inbox and sent-message lists | Scroll the list and return without opening messages or selecting text. Conversation views and chat pages that can mark messages read merely by activation are skipped. |
| Other communication views and unrecognized applications | Hover in an already active window; no message opening or typing. |
Actions depend on the controls exposed by each application. Unsupported actions are skipped. If a view changes concurrently, its newer position is preserved; a failed restoration stops further activity. Opening a temporary page can still affect the site's viewing history or activity log.
Comment entry, mail drafts and unread-channel navigation are currently unsupported. Emploidle does not type into external documents or forms, or substitute local practice documents for these operations.
| Action | Result |
|---|---|
| Open the main window while running | Activity pauses; Stop remains available. |
| Close or minimize the main window to the tray | Running activity resumes. |
| Tray → Show window, Start or Stop | Control activity without leaving Emploidle open on the desktop. |
| Tray → Quit | Exit the application. |
| Green tray icon | Activity is enabled, including scheduled runs. |
| Orange tray icon | Paused for physical input, the open main window or a manual Stop. |
| Original blue tray icon | Not yet started or stopped automatically at the scheduled finish. |
Open windows and browser tabs are rediscovered between scenarios. Available targets are visited in shuffled rounds, avoiding the current window or tab when alternatives exist. Physical input interrupts the current scenario.
Choose the days and set Start and Finish under Schedule, then press Apply. The schedule follows the system's local time, and Emploidle must remain open in the tray for it to run. Selected days identify when a shift starts; a Friday overnight shift finishes on Saturday even when Saturday is unchecked. Existing schedules keep all days selected.
| Setting or action | Behavior |
|---|---|
00:00–00:00 or no selected days |
Scheduling is disabled. |
| Different start and finish times | A shift on each selected day, including shifts that cross midnight. |
| Manual Stop during a shift | Suppresses the remainder of that shift; the next shift can start automatically. |
| Manual Start outside a shift | Runs until Stop or the next scheduled finish. |
| Start with system | Launches in the background at user login; off by default. |
Schedule and startup preferences are stored in the application's config directory. Older saved window selections are ignored.
| Platform | Requirements and limits |
|---|---|
| Windows | Native controls use the built-in Windows PowerShell UI Automation provider. Restorable scrolling, Chromium tab controls and IDE trees require compatible accessibility providers. Protected windows can reject access or focus changes. |
| macOS | Enable Accessibility and Input Monitoring under System Settings → Privacy & Security. Window discovery requires Accessibility; Start requests Input Monitoring when needed. Secure Input can restrict monitoring in protected applications. |
| Linux | Requires an X11 session with XInput 2 and XTEST devices. Wayland is unsupported because global window control and physical input monitoring cannot be guaranteed through XWayland. |
Restorable scrolling, browser tabs and IDE tree actions currently require Windows. macOS and Linux support automatic discovery and cursor activity.
Requires the Rust toolchain, Node.js 22 or newer, and pnpm 9.15.4, pinned in package.json. On Linux, install the X11, Wayland, xkbcommon, Vulkan and fontconfig development packages listed in the build workflow. Packaging uses cargo-packager: cargo install cargo-packager --locked.
pnpm install
pnpm dev:desktop # run
pnpm build:desktop # produce a bundled binary/installerThe interface is written in Rust with GPUI Kit in src/ui.rs. Node.js runs development and release tooling. Installers are written to target/packager/. Local builds do not require the updater signing key.
Regenerate the light and dark screenshots:
pnpm screenshotsThe ignored screenshots test in src/ui.rs opens the real GPUI window for each theme and state, renders it to an image at the display's scale and crops it. Demonstration data replaces your settings; capture does not read your open windows, change startup settings or run activity. Images are written to screenshots/; schedule captures frame its controls, and paused/update captures show the corresponding main-window states. Capture currently runs on Windows only and briefly shows windows at the top-left corner of the screen.
pnpm check:versions
pnpm lint
pnpm lint:workflow
pnpm test
cargo clippy --locked --all-targets -- -D warnings
cargo test --lockedNative Windows checks require an unlocked desktop without simultaneous keyboard or mouse input. After building the debug application, run:
cargo build --locked
pnpm test:windows
node scripts/windows-vscode.mjsThe VS Code check requires an installed editor. It uses a separate workspace, profile, shared-data directory and extension directory, with extensions and autosave disabled; the verification process is closed afterward.
Commit messages and pull request titles follow Conventional Commits. pnpm release derives the next version and CHANGELOG.md from commits, synchronizing package.json, Cargo.toml and Cargo.lock through .versionrc.json.
Run pnpm check:versions to check version parity, or pnpm release --dry-run to preview a release. A pushed v<version> tag builds installers for Windows, Linux and macOS and prepares a draft GitHub Release. Follow the release guide for signing, updater artifacts and publishing.
Native activity and restoration
Windows accessibility inspection identifies visible controls, browser domains, scroll percentages and native element identities. Scrolling records the exact control and its before/after positions; restoration proceeds only while the view still matches the action's result. Tab cleanup addresses the created tab by its native runtime identity and preserves a user-selected different tab. VS Code reviews use the same native identities to restore the sidebar and editor selection, avoid replacing preexisting preview tabs, and preserve an editor if it has acquired user edits.
Existing HTTP and HTTPS tabs are identified through native accessibility controls without first activating them. Browser reading preserves the original scroll position and existing text selections. Supported mail list routes remain available for scrolling; conversation and notification routes are excluded when activation can change read states. These checks depend on the site's route and accessibility provider; unknown sites cannot provide a universal read-state guarantee. The older temporary-page helper restricts link transitions to visited HTTPS links on the same origin and recognized viewing routes. No extension or service credentials are required.
Process names and startup registration
Each launch generates a random 15-character process name, also used for the window title and tray tooltip. The text inside the window keeps the Emploidle name. If setting the random name fails, the application exits before starting its activity worker or window.
- Windows: the launcher briefly runs as
emploidle.exe, starts a copy with a random.exefilename in the temporary directory'semploidle-processesfolder, then exits. The copy omits the version resource so Task Manager uses its random filename; the original executable retains its metadata. Arguments and the working directory are preserved. Unlocked copies from earlier runs are removed on the next launch; the final copy remains until a later launch or temporary-file cleanup. Both debug and release builds run without a console window. - Linux: changes the kernel process name through
/proc/self/comm, visible in tools such asps -o comm. The executable path and command line retain their original names. - macOS: changes the kernel process name through
kern.procname, preserving the application bundle and its signature. Views based on bundle metadata or command-line arguments may still show Emploidle.
Launch at login uses HKCU Run on Windows, a LaunchAgent on macOS or XDG autostart on Linux. Windows registration uses the original installed executable instead of its temporary renamed process copy.
See CONTRIBUTING.md for commit conventions and verification commands. Report bugs and request features through GitHub Issues.
MIT · Copyright © 2026 Khasky