The Pomodoro Technique is a time management method that uses a timer to break down work into 25-minute intervals and take breaks periodically. It is extremely helpful for my long-term productivity as I often forget to take breaks while focusing on work, therefore I’ve been searching for a simple Pomodoro app for macOS. Unfortunately, it seems like most of the current ones has at least one of the following issues:

  • Has ads (e.g. Be Focused).

  • Needs subscription (e.g. Time Out, Focus Booster).

  • Needs account registration (e.g. Focus Booster)

Creating an account or paying annual subscription for a timer sounds ridiculous, so I tried to create my own – Crontab combined with AppleScript seems to be the perfect solution.

Add these into your crontab by invoking the editor with crontab -e:

25,55 * * * * osascript -e 'display notification "Ya know what they say: All play and no rest makes for a dull hunter, nya?" with title "Time to take a rest!" sound name "Glass"'
0,30 * * * * osascript -e 'display notification "Happy hunting!" with title "Time to get back to work!" sound name "Glass"'

At :25 and :55 of each hour, you will receive notifications like this:

A banner notification

…with a notification sound. At :00 and :30, you’ll see these:

Another banner notification

Also, by changing System Preference -> Notifications -> Script Editor alert style from “Banners” to “Alert” (see this StackOverflow answer), you can get notifications that’ll stay until you manually dismiss them (so you can finished the work at hand without forgetting to take breaks).

An alert notification

Of course they get native dark mode support in Mojave too:

A dark alert notification

You can customize the message and the sound by following AppleScript’s official documentation.

Bonus

Easiest way to create a reminder:

# Usage: remind [time in seconds] [description]
# Example: remind 60 Pour the tea.
# Then a notification would pop up in 60 seconds with title "Pour the tea."
remind() {
    sleep "$1"
    shift # Remove first argument
    osascript -e "display notification with title \"$*\" sound name \"Glass\""
}

Edit 2019-04-28

This is what I ended up using:

0,15,30,45 8-22 * * * osascript -e "display notification \"It's `date +\"\%H:\%M\"`.\" with title \"The Bells Rang\" sound name \"Submarine\""