A native macOS dwell-click tool for head-tracker and other pointer-only users.
Move the cursor over a button on the floating panel, hold still for a moment — the action arms; hold still over your target — it clicks. No hands, no physical buttons. Built to replace the aging Windows Point-N-Click for a fully paralyzed user.
Inspired by Point-N-Click by Polital Enterprises.
- 🖱️ Dwell to click — hold the cursor still to fire the armed action; a re-fire gate prevents machine-gun clicks, and brushing the panel cancels instantly.
- 🎛️ Floating panel — Left / Right / Double / Drag / Middle actions, dark native look, a sliding highlight, smooth collapse/expand animations.
- 🧲 Hands-free everything — collapse, move (drag the ON/OFF button with the Drag action), and configure the panel entirely by dwelling.
- 🔀 Smart Middle — over a link it middle-clicks (open in a new tab); over empty space it starts auto-scroll.
- 📜 Auto-scroll — drops an anchor where you stop; move away to scroll (farther = faster), tunable intensity; stop moving to left-click and exit.
- ⏱️ Idle-disarm — clears the armed action after a period of no movement (default 2 min) so a later stray move can't fire.
- 🔧 Full Settings window — three tabs (Behavior / Panel / About), applied live.
- 🔊 Audio feedback — subtle system sounds on arm and click (toggleable).
- 🚀 Launch at login — via
SMAppService. - 🎨 Native app icon, menu-bar accessory (no Dock clutter).
| Button | Action |
|---|---|
| ⏻ Show / hide | Collapse/expand the panel; also its move handle |
| Left click | Single left click |
| Right click | Single right click |
| Double click | Double left click |
| Drag | Press-move-release (select text, move files, drag the panel) |
| Middle / Scroll | Middle click over a link · auto-scroll over the page |
Dwell flow: stop over a button → it arms (red highlight). Move anywhere and stop → the action fires there. Brush the panel to cancel — no dwell needed.
Move the panel hands-free: arm Drag, then dwell the ON/OFF button — the panel follows the cursor until you hold still to drop it. The position is remembered.
Opened from the menu-bar icon. Changes apply on Save.
Behavior
- Dwell timings in 0.01 s steps: AutoMouse Delay (screen dwell), panel-button dwell, Drag press / release.
- Default to Left Click, Automatic Cancel.
- Idle-disarm (minutes; 0 = never).
- Cursor precision: jitter tolerance + move threshold (tune out head-tracker tremor).
- Auto-scroll intensity.
- Sound feedback on/off.
- Launch at login.
Panel
- Orientation: vertical or horizontal (horizontal docks top-center by default).
- Button editor: toggle each button on/off and reorder the active ones. ON/OFF is pinned first but can be removed (Settings stays reachable from the menu bar).
- Icon style Custom / System and icon size.
- Panel width and opacity.
- Launch collapsed (start showing only the ON/OFF button).
About — version, credits, project link.
- macOS 14+
- Accessibility permission (required to inject clicks): System Settings → Privacy & Security → Accessibility → enable AllyClicker.
AllyClicker runs per-user and cannot appear on the macOS login window. To enter your password hands-free there, use the built-in macOS features that do run pre-login: Pointer Control → Dwell and the Accessibility Keyboard (System Settings → Accessibility).
No Xcode project needed — the app is assembled with Command Line Tools.
git clone git@github.com:umkasanki/ally-clicker.git
cd ally-clicker
./macos/App/setup-signing.sh # once: stable self-signed identity (keeps the a11y grant)
./macos/App/install.sh # build + install to /Applications, then launch./macos/App/build-app.sh builds to macos/build/AllyClicker.app without installing.
The pure core builds and tests cross-platform via SwiftPM: swift test.
AllyClicker is distributed through a personal tap:
brew tap umkasanki/tap
brew trust umkasanki/tap # third-party taps must be trusted once
brew install --cask allyclickerThe app is self-signed (not notarized), so clear the quarantine flag once, then grant Accessibility:
xattr -dr com.apple.quarantine /Applications/AllyClicker.appSystem Settings → Privacy & Security → Accessibility → enable AllyClicker.
- Open the latest release
and download
AllyClicker-<version>.dmg. - Double-click the
.dmg, then drag AllyClicker into the Applications folder. - First launch (the app is self-signed, not notarized, so macOS asks to confirm):
- right-click
AllyClickerin Applications → Open → Open in the dialog; or - if it's still blocked, run once in Terminal:
xattr -dr com.apple.quarantine /Applications/AllyClicker.app
- right-click
- Grant Accessibility: System Settings → Privacy & Security → Accessibility → enable AllyClicker, then relaunch.
To update, download the newer .dmg and drag over the old app (replace).
Releases are automated by .github/workflows/release.yml.
Push a version tag and the workflow builds the .dmg, publishes a GitHub Release, and
bumps the Homebrew cask in umkasanki/homebrew-tap:
git tag v0.2.0 && git push origin v0.2.0One-time setup: add a repo secret TAP_TOKEN — a token with Contents: write on
the homebrew-tap repo (the default GITHUB_TOKEN can't push to another repo).
Manual fallback: ./macos/App/make-dmg.sh builds macos/build/AllyClicker-<version>.dmg and
prints its SHA-256; upload the DMG to a Release and edit the cask by hand. See
packaging/homebrew/allyclicker.rb.
App icon: edit macos/tools/AppIcon.svg, mirror it in macos/tools/make-icon.swift, then
regenerate the .icns (see the macos-app-icon skill).
A monorepo, one directory per platform. There is no shared code between them
(Swift vs. C#) — the shared contract is docs/spec.md.
macos/ — the macOS app (Swift, shipping)
Sources/AllyClickerCore/ pure logic (DwellEngine state machine, AutoScroll, Settings)
App/AllyClicker/ AppKit panel, SwiftUI settings, CGEvent injection
App/ build-app.sh · install.sh · make-dmg.sh · setup-signing.sh
Tests/AllyClickerTests/ unit tests (dwell engine, settings, panel commands)
tools/ app-icon SVG source + CoreGraphics generator
windows/ — the Windows app (C#/.NET, in progress)
docs/ — spec (shared contract), plans, session context
packaging/ — Homebrew cask template
AllyClickerCore has no macOS UI dependencies and is fully unit-testable (it uses
its own Point type, not CGPoint, so it builds on Linux CI too — and, as a spike
confirmed, on Windows as well).
Inspired by Point-N-Click by Polital Enterprises — a Windows dwell-click tool.
Action button icon style inspired by DwellClick by Pilotmoon.
Auto-scroll algorithm based on LinearMouse (MIT).