What the 20-20-20 rule is, and why an app has to help
Every twenty minutes, look at something twenty feet away for twenty seconds. That is the whole rule. It exists because the muscle that focuses your eye stays contracted the entire time you look at a screen at arm's length, and relaxing it briefly and often is what stops the ache that arrives around six in the evening.
The rule is trivially easy and almost nobody follows it, for one reason: you cannot notice you have stopped noticing. Twenty minutes of concentration is precisely the state in which no internal signal fires. Something outside your head has to do the counting.
Recess is that something on macOS. Everything below is in the shipping version.
Two timers, because eyes and body are not the same problem
Recess runs two independent cadences. Eye rest wants to be frequent and very short. Standing up and stretching wants to be occasional and longer. Put them on one clock and one of the two is always wrong - either you are stretching every twenty minutes, which is absurd, or you are resting your eyes every hour, which does nothing.

The popover shows both counting down side by side, each with a Start break button if you want to take one early, a master toggle to pause everything, and a one-line tally: Today: 4 eye · 2 body breaks.
Three presets set both cadences at once:
| Preset | Eye break | Body break |
|---|---|---|
| Light | 45 s every 30 min | 3 min every 90 min |
| Standard | 2 min every 20 min | 5 min every 50 min |
| Strict | 90 s every 15 min | 5 min every 40 min |
Every interval and duration is also editable directly, which turns the preset into a starting point rather than a cage.
What a break looks like
Ten seconds before one lands, a small countdown appears under the menu bar - long enough to finish the sentence you are typing, short enough that it is not a second thing to plan around. It needs no permission, because it is the app's own window rather than a notification. If you would rather hear about it a minute ahead and inside whatever app you are in, there is a system notification for that too, and either can be switched off.
When the break is due, an overlay covers every connected display - a second monitor you can keep working on would defeat the point - and states one instruction.

For an eye break it says Look away with a countdown in seconds. For a body break it says Stand up. with one in minutes.

There is nothing else on the screen: no animation competing for the attention you are supposed to be resting, and the overlays honor the macOS Reduce Motion setting. Chimes at the start and end are optional.
Three buttons sit at the bottom, and their labels are the design:
- Skip +90s - it prints its own penalty on itself
- Postpone 5M - available once per rolling hour
- Done - ends the break early once the countdown has run
All three are on the keyboard as well, and the keys are fixed rather than yours: Escape skips, Space or Return ends the break, and P postpones it. Settings lists them read-only, beside the two global chords it does let you rebind. An overlay that has just taken every screen should not also require you to find the pointer.
The chimes are one setting with four positions rather than two switches: Off, Start, End, or Both, which is the default. On a shared desk the sound is the part other people notice, and End alone is usually the useful answer - the overlay already told you the break started, and the chime tells you it is over without you having to watch the countdown.
The escalation, and why it is small
Skipping an eye break adds time to the next one, and the penalty escalates inside a rolling hour: 90 seconds, then 180, then 300 for the third and beyond. An hour without a skip clears it. Skip three in a row and the app bounces its icon in the Dock, which is the loudest thing it ever does.
Body-break skips are recorded but do not add to that pool, because five minutes of stretching is not a debt you can usefully accumulate.
If the whole idea grates, skip penalties can be turned off entirely in Settings. A prompt you cannot argue with is a prompt you disable at the app level, and an app disabled at the app level helps nobody. The setting says so itself when you reach for it: Without the skip penalty, Recess is just a polite reminder. That is a description rather than a warning, and it is there so the choice gets made with its consequence in view.
Strict mode is the same dial turned the other way. It hides the Skip button during a break, leaving Postpone as the only way out, and the menu bar carries a small dot the whole time it is on so the state is never a surprise. It ships off. A break app that arrives strict is a break app you are fighting by the end of the first week.
Recess can also warn you after consecutive skips, which is on by default and is the only notification it ever sends about your own behavior.
What it does when you are not there
Four checks stop Recess from asking you to rest from work you were not doing.
Time away counts as the break. Stop touching the machine for long enough and the countdown starts over rather than firing the second you sit back down. Walking to the kitchen is looking away from a screen, and an app that makes you do it twice is an app you switch off by Thursday. "Long enough" means as long as that break itself, judged per timer: three minutes away renews the eye clock, whose break is two minutes, and leaves the body one - whose break is five - where it was. A shorter absence only pauses the timers, which is the older behaviour and still there underneath.
Focus and Do Not Disturb hold breaks entirely. An overlay landing on a screen you are sharing in a meeting is the failure that gets a break app uninstalled within a week.
The apps you name hold them too. Do not interrupt me in takes a list, and a call in a window counts exactly like one in full screen - the older check looked for a full-screen app and missed every call somebody had resized.
Video playback detection delays a break during full-screen video, with a separate switch, because being interrupted twenty minutes into a film is not a health intervention.
None of it queues forever. Give up on a held break after sets the point where Recess drops a held break and waits for the next one, so a long meeting does not end in four breaks at once.
Work hours, and a pause that ends
Recess ships with no schedule, because for most people it should run whenever the Mac is on. Turn work hours on and it runs between the two times you set, on the days you tick, and stays quiet outside them - no eye break at 23:00 on the sofa. A window that crosses midnight is allowed, and the setting says so rather than leaving you to work it out.
The pause has a failure mode of its own, which is forgetting about it, so it now comes with an end on it: 30 minutes, an hour, two hours, until tomorrow morning, or until I turn it back on. The morning option names the actual time in the menu - the next work-hours start, or 09:00 if you have set none - and always the next one, so choosing it at 02:00 does not quietly mean "in seven hours". Remind me if Recess stays paused is still on by default, because one of those five options still has no end.
Two global shortcuts sit on top of all of it: Command Shift B starts a break now, and Control Command P pauses and resumes. That second one used to flip the master switch off and on; it pauses instead now, which is what people were reaching for it to do. It uses Control rather than Shift on purpose - Command Shift P is private-window in every browser.
What it records
A 60-day log, daily counters and a report, all stored locally. Nothing is written to Apple Health and nothing is uploaded. The point of the log is the shape of the week, not a score.

The report used to open only from the weekly notification, which made a week you dismissed a week you could not look at. It now has a button of its own in the menu bar panel, beside the gear, and the range is yours: weekly, monthly, or the full 60 days.
What it deliberately does not do
There is no exercise library. A body break says Stand up. and then gets out of the way. It does not count reps, name a stretch or score your posture, because every one of those needs you to look at the screen, which is the thing the break exists to interrupt.
It never locks the screen or blocks input. Even strict mode only hides the Skip button, and Postpone still works, because the one moment a break app must not win is the moment you are about to demo something. An overlay you cannot dismiss eventually costs someone a meeting, and after that it costs the app its place on the machine.
Nothing is written to Apple Health, there is no account, and two Macs running Recess know nothing about each other. The 60-day log is a local file, and syncing it would mean building the account this app otherwise has no reason to have.
There are also no streaks, points or badges. Resting your eyes is not an achievement, and a counter you can break is a counter that eventually makes skipping the more interesting option.
What it costs, and what else to look at
Recess runs on macOS 14 or later, on Apple Silicon and Intel, and takes about 30 MB. It is pay what you want with a suggested price of $3.99, which includes paying nothing. The full specification is on the Recess page.
Recess rests you on its own clock, regardless of what you are doing. If you would rather rest on your work's rhythm - a break earned at the end of a focus block - that is a Pomodoro timer, Pawodoro. The other thing a desk quietly costs you is water, which is Aqumi, covered in a water reminder app for Mac. Both are covered together in desk health apps for Mac.