Have Your Mac Announce the Time Every Hour
Schedule the built-in say command with a LaunchAgent so your Mac speaks the time on the hour.
Save a LaunchAgent plist that runs /usr/bin/say with a StartCalendarInterval of minute 0, then load it with launchctl.
01Command
Command
$ cat > ~/Library/LaunchAgents/com.user.saytime.plist <<'EOF'
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0"><dict>
<key>Label</key><string>com.user.saytime</string>
<key>ProgramArguments</key><array>
<string>/usr/bin/say</string><string>The time is</string><string>$(date +%%I %%M)</string>
</array>
<key>StartCalendarInterval</key><dict>
<key>Minute</key><integer>0</integer>
</dict>
</dict></plist>
EOF
launchctl load ~/Library/LaunchAgents/com.user.saytime.plist02What it does
launchd is macOS's native scheduler and pairs perfectly with the built-in text-to-speech command say. A per-user LaunchAgent with StartCalendarInterval fires at minute 0 of every hour without needing cron or admin rights. Combine it with a shell wrapper if you want the phrase to include the actual current time.
03Risk
!Warning: The Mac must be awake to speak — sleeping Macs skip the announcement. To change the wording or voice, edit the ProgramArguments array; to stop it entirely, unload and delete the plist.
04Undo
Undo
$ launchctl unload ~/Library/LaunchAgents/com.user.saytime.plist && rm ~/Library/LaunchAgents/com.user.saytime.plist05Sources
- launchctl - control launchd agentsEvidence: Documents loading LaunchAgent plists with launchctl and StartCalendarInterval scheduling.
- say - output text to speechEvidence: Documents the say command used as the scheduled program.
Last verified: 2026-09-18 · Category: Media