# A 20-20-20 rule app for Mac, feature by feature

A 20-20-20 rule app for Mac counts the twenty minutes for you and puts a short look-away break on the screen, because the state where you need the reminder is exactly the state where you will not notice.

- URL: https://swiftfox.studio/handbook/20-20-20-rule-app-for-mac
- About: https://swiftfox.studio/apps/recess
- Published: 2026-07-02
- Updated: 2026-09-06
- Publisher: Swiftfox Studio (https://swiftfox.studio)

## In short

- Recess runs eye rest and body stretching on two independent cadences, because one clock always gets one of the two wrong.
- Presets set both at once - Standard is 2 minutes every 20 for the eyes and 5 minutes every 50 for the body - and every value stays editable.
- Overlays cover every connected display, honor Reduce Motion, and hold entirely during Focus, Do Not Disturb, idle time and full-screen video.
- Skipping an eye break adds 90, then 180, then 300 seconds to the next one within a rolling hour, and the whole penalty system can be switched off.

## 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](https://swiftfox.studio/apps/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 Recess menu bar popover on macOS with separate Eye and Body countdowns, each with a progress bar and a Start break button, and today's break counts underneath](https://swiftfox.studio/recess/listing/shot-1.jpg "Two countdowns, two progress bars, and a one-line tally of the day underneath.")

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.

![The Recess eye break overlay filling the screen, reading Look away with a 20 second countdown and Skip, Postpone and Done buttons](https://swiftfox.studio/recess/listing/shot-2.jpg "Look away, twenty seconds, and three ways out. The Skip button prints its own penalty on itself.")

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.

![The Recess body break overlay reading Stand up with a five minute countdown and Skip, plus five minutes and Done buttons](https://swiftfox.studio/recess/listing/shot-3.jpg "The body break is the same screen with a longer clock and a different instruction.")

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 Recess weekly report window showing eye and body break counts, skip rate, average penalty and a breaks-per-day bar chart](https://swiftfox.studio/recess/listing/shot-4.jpg "Five numbers and the shape of the week. Weekly, monthly, or the full sixty days the log keeps.")

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](https://swiftfox.studio/apps/recess).

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](https://swiftfox.studio/apps/pawodoro). The other thing a desk
quietly costs you is water, which is [Aqumi](https://swiftfox.studio/apps/aqumi), covered in
[a water reminder app for Mac](https://swiftfox.studio/handbook/water-reminder-app-for-mac). Both are covered
together in [desk health apps for Mac](https://swiftfox.studio/blog/desk-health-apps-for-mac).
