Slower is a macOS reminder CLI written in V. It can run in the foreground, start a detached background worker, or install a launchd agent for login-managed reminders.
- macOS
- V
Slower uses system commands for platform integration:
osascriptfor notificationssayfor speechlaunchctlforlaunchdmanagement
If osascript or say is unavailable, Slower skips that capability.
New install:
brew install leovoon/tap/slowerUpdate an existing install:
brew update
brew upgrade leovoon/tap/slowermake buildIf v is not on your PATH, pass it explicitly:
make V=/path/to/v buildOr directly:
v -o slower ./cmd/slower/main.vmake testOr directly:
v test ../slower start --interval 45 --message "Stand up and stretch"
./slower status
./slower stop./slower run
./slower start
./slower stop
./slower status
./slower list
./slower voices
./slower launchd install
./slower launchd uninstall--session,-n- session name (default:default)--interval,-i- interval in minutes (default:60)--quiet,-q- quiet hours inHH:MM-HH:MM--message,-m- notification message--say-message- spoken message only--sound,-s- notification sound name, ornone--voice,-v- voice name forsay, ornone--log- enable logging to~/.slower/logs/<session>.log--log /path/to/file.log- compatibility form for a custom log path--log --log-path /path/to/file.log- explicit custom log path form
./slower start --session work --interval 45 --quiet 22:00-08:00 --log
./slower status --session work
./slower stop --session workUse --all with stop or status to act on every known session.
./slower run --session focus --interval 25 --sound none --voice noneInstall a login-managed agent:
./slower launchd install --session work --interval 45 --message "Stretch"Preview the generated plist without installing it:
./slower launchd install --dry-run --session work --interval 45Remove the agent:
./slower launchd uninstall --session work
./slower launchd uninstall --session work --purgestop unloads a running launchd job but keeps the plist on disk. launchd uninstall removes the plist.
The V rewrite keeps a few old shell-era aliases so existing usage does not break immediately:
sessionsmaps tolist- top-level
uninstallmaps tolaunchd uninstall --namemaps to--session--timeand-tmap to--interval
Slower stores runtime state under ~/.slower/:
sessions/<session>.json- session statelocks/<session>.lock- single-instance locklogs/<session>.log- session event log
LaunchAgents are written to:
~/Library/LaunchAgents/com.leovoon.slower[.<session>].plist
Format:
make fmtRelease build:
make releaseThis project is inspired by a walker reminder by Mario Zechner (@badlogicgames, https://x.com/badlogicgames).
