Blog · October 23, 2026 · 8 min read · by Vilva Athiban P B
The 20-20-20 Rule for Developers: Eye Strain, the Evidence, and Agent Runs as the Cue
Agent-assisted coding changed what a developer’s eyes do all day. Before, you alternated between reading, typing and thinking, and the thinking often happened looking at nothing in particular. Now a large share of the day is spent watching: a terminal scrolling tool calls, a diff filling in, a progress line that might at any second turn into a question. Watching is the worst mode for eyes, because you stare, you lean in, and you blink less. This post is about the 20-20-20 rule, what the evidence for it actually says, why agent runs are the natural moment to apply it, and how to make the break happen without a second timer app.
It belongs with our posts on sitting too long and posture and the exercise-snacks research: the same idea, that Claude Code and Codex hand you short gaps all day, applied to the one part of the body those posts skipped.
What the 20-20-20 rule says
The rule is simple enough to remember and vague enough to argue about: every 20 minutes of screen work, look at something at least 20 feet (about 6 metres) away for at least 20 seconds. The point is to let the ciliary muscle, which holds the lens focused at arm’s length, relax to its distance setting for a moment, and to give you a few normal blinks. The American Optometric Association and the American Academy of Ophthalmology both recommend it as a habit for reducing the cluster of symptoms usually called digital eye strain or computer vision syndrome: tired or aching eyes, dryness, watering, blurred or doubled vision, headaches, and the neck and shoulder pain that comes from leaning toward a screen.
Two other recommendations travel with it and are worth more than most people think. The AAO suggests placing the screen about 25 inches (64 cm) from the eyes with the gaze slightly downward, which for a laptop means a stand or an external display, and it points out that people blink noticeably less while looking at screens, which is why dryness is the symptom developers report most and why a deliberate blink during the break matters.
What the evidence actually supports
Honesty is cheaper than overclaiming, so here is the state of it. The rule is a clinical heuristic rather than a precisely tested protocol. A 2013 study of 795 university students, published in the Nepalese Journal of Ophthalmology, found that students who periodically refocused on distant objects while using computers reported fewer symptoms of computer vision syndrome. A small 2020 clinic study found that after 20 days of following the rule, self-reported strain had not changed, but tear break-up time, an objective measure of dry eye, had improved significantly. Reviews describe the mechanism, relaxed focusing muscles during short breaks, as plausible and the symptom benefit as moderate.
Read together, that means: the rule reliably helps dry eye and probably helps the rest, it is free and harmless, and the exact numbers are a mnemonic rather than a prescription. Looking 15 feet away for 15 seconds every 25 minutes is not a failure. What matters is that your eyes leave the screen at a regular cadence, which is exactly the thing a day of agent-watching fails to provide, because there is always something about to happen.
Why agent runs are the right trigger
A 20-minute timer and a developer are natural enemies. The timer fires in the middle of writing the prompt, or while you are reading the one diff you need to understand, and you dismiss it; three dismissals later the habit is dead. We made the same argument about movement breaks in Pomodoro versus agent-driven breaks, and it applies with more force to eyes, because an eye break is 20 seconds, not two minutes, and the cost of mistiming it is almost entirely the annoyance.
The agent gives you a better trigger. The moment Claude Code or Codex starts a task is the moment your attention is least needed on the screen: the prompt is written, the plan is set, the next useful thing you can do is read the result when it arrives. That moment arrives dozens of times a day, roughly every few minutes during an active session, which is more often than 20-20-20 asks for. So the rule becomes: when the agent starts, look away. Not every time, but whenever the last look-away was more than a quarter of an hour ago.
There is a second reason the agent moment is good for eyes specifically. Watching a scrolling terminal is a near-focus stare with reduced blinking, which is the precise condition the rule targets, and the end of that stare is also the best time to notice your posture, since the lean toward the screen and the stare arrive together.
The eye break, in practice
- Have a far point. A window, the far wall, the end of the corridor. If your desk faces a wall at one metre, turn your chair; the whole exercise depends on something more than six metres away being available without standing up.
- Look, blink, breathe. Twenty seconds is longer than it sounds. Count five slow blinks, then look at a detail at the far point until it is sharp. Do not look at your phone; that is a near focus with a smaller font.
- Add the shoulder drop. Let the shoulders fall, pull the chin back over the collarbone, and let the lean go. It costs nothing and undoes the posture that the stare created.
- Come back when the agent does. If the run is still going, that is a sign to do a movement set rather than return to staring; if it is done, the result is waiting and you missed nothing.
Where NotchFit fits, and where it does not
NotchFit is a MacBook notch and menu bar app for exactly this rhythm. When Claude Code or Codex starts a task, the notch expands with your next exercise on the left and the agent’s live progress on the right; when the agent is done or needs permission, it tells you, and if you are mid-set it waits until the set ends. Its library is 239 animated exercises, 198 of them photo animations of real athletes, and the plan that drives them is written by your own agent with /notchfit:plan in Claude Code or $notchfit-plan in Codex, or by the offline quick-plan generator.
The honest fit for eyes is indirect. NotchFit does not have an eye-exercise mode or a 20-20-20 timer; it is a movement coach, and we are not going to pretend that neck rolls are an ophthalmology intervention. What it does provide is the cue at the right moment and a reason to turn away from the screen for longer than 20 seconds: a set of calf raises or shoulder blade pulls, done facing the room rather than the terminal, is a distance-focus break with a movement break attached. If you want the eye break and nothing else, the Hide workout toggle turns the notch into a pure agent status panel, and the expansion itself is still your look-away cue. And because the done alert waits for the set to end and sets start only when you tap Start set, you are never dragged back to the screen mid-blink.
A simple protocol that uses it: tell /notchfit:plan you want short standing sets, no equipment, three to five per day. Each time the notch opens, look at your far point for the length of the countdown before you tap Start set, then do the set facing away from the display. Three or four of those across an afternoon satisfy 20-20-20 for the hours you are actually working with the agent, without a single timer.
The rest of the screen setup
- Distance and height. The screen at roughly 64 cm with your gaze slightly downward. A laptop on the desk fails both; a stand plus an external keyboard fixes both, cheaply.
- Brightness, not blue light. Match the display to the room: just bright enough to read comfortably, and no brighter than the wall behind it. The AAO’s position has consistently been that screen overuse, not blue light, causes the strain.
- Glare. A window behind the screen or behind you both hurt; side-on light is best. A matte screen or an anti-glare film helps if you cannot move the desk.
- Dry air and contacts. Long sessions in a heated or air-conditioned room with contact lenses are the worst case for dryness. Glasses for the long sessions and a humidifier in winter are the standard advice; artificial tears help if dryness is already a symptom, preservative-free for daily use.
- Font size. If you lean in to read the terminal, the font is too small. Increase it one step and the lean goes away.
When to stop reading blog posts and see someone
Persistent blurred or double vision, headaches that outlast the workday, or eye pain are not what 20-20-20 is for. Uncorrected or changed vision is a major cause of strain, and a routine eye exam finds it. NotchFit is a workout guide, not medical advice, and this post is a developer’s reading of the published guidance, not a substitute for an optometrist. The cheap, safe things are the ones above: distance, breaks, blinks, brightness, and an agent that reminds you to look up at the moment you can afford to.
Keep reading
Desk Exercises for Programmers: 15 Moves to Do While Your AI Agent Codes
7 min read
Exercise While Coding: Turn Claude Code Wait Time Into Micro-Workouts
7 min read
Claude Code Notch Notifications on Mac: See When Claude Is Done Without Watching the Terminal
7 min read
Claude Code Tips and Tricks: 12 Ways to Use Claude Code Effectively
8 min read
Claude Code Multiple Sessions: How to Run Agents in Parallel Without Losing Track
6 min read
A Claude Code Workflow That Doesn't Involve Watching the Terminal
5 min read
Claude Code Hooks: A Practical Guide to Automating Your Agent Workflow
7 min read
Claude Code Auto Mode: Fewer Permission Prompts Without Living Dangerously
7 min read
Claude Code Subagents: How to Delegate Work to Specialized Agents
7 min read
Claude Code Context Management: Treat the Context Window Like a Budget
6 min read
Per-Subagent Model Selection: Route the Grunt Work Down, Keep the Judgment Up Top
7 min read
Skills and Plugins: How to Teach Claude Code Your Way of Working
7 min read
Claude Code Background Tasks: Run Long Commands Without Blocking Your Session
6 min read
Codex CLI Notifications: How to Get a Ding When Codex Is Done or Needs Input
7 min read
Cursor Notification When Done: Every Way to Get Notified When Cursor Finishes
6 min read
Claude Code Notifications: How to Get Notified When Claude Code Finishes or Needs Your Input
6 min read
Want to Be Notified When Claude Responds? How Claude Notifications Work on Web, Desktop, and Mobile
5 min read
Claude Code Notification Scripts: Copy-Paste Recipes for Every Platform
6 min read
Get a Ding the Moment Codex Needs Your Response
6 min read
Get Notified the Moment Claude Code Is Waiting for Your Input
6 min read
“Notifications Are Turned Off for Claude” — Here Is the Fix
6 min read
Codex Sound When Done: Make Codex CLI Play a Sound When It Finishes
6 min read
terminal-notifier + Claude Code: Native macOS Alerts When Your Agent Finishes
6 min read
Gemini CLI Notifications: How to Get a Sound or Alert When Gemini Finishes
6 min read
Get Claude Code Notifications on Your Phone
6 min read
Claude Code Remote Control, Explained
7 min read
preferredNotifChannel: Claude Code's Built-In Notification Setting
6 min read
Claude Code Notifications in tmux and Over SSH
7 min read
Claude Code Effort Levels: Why Your Setting Keeps Getting Ignored
8 min read
Codex vs Claude Code Notifications: How Each One Tells You It Is Done
8 min read
Claude Code Notifications Not Working: A Diagnostic Checklist
10 min read
Claude Code Notifications Inside Your Editor's Terminal
7 min read
CLAUDE_CODE_DISABLE_BACKGROUND_TASKS Explained
7 min read
CLAUDE_CODE_DISABLE_BG_SHELL_PRESSURE_REAP Explained
8 min read
Cursor Alerts Explained: Every Alert Cursor Raises, and How to Control Them
7 min read
Claude Code Environment Variables: The Groups That Actually Matter
10 min read
Claude Code Notifications on WSL and Windows
9 min read
Claude Code Checkpoints and /rewind
8 min read
Claude Remote Control: How It Works, Turning It Off, and Auto Mode
7 min read
Claude Code /loop: Poll a Deploy, Babysit a PR, and Get Told When It's Done
8 min read
Setting Up NotchFit With OpenAI Codex CLI: Hooks, $notchfit-plan, and the Daily Flow
7 min read
Claude Mods Explained: What the New Plugin Layer Can Do, and How to Turn On 'You Should Know'
9 min read
NotchFit vs Mac Break Reminder Apps: A Clock or a Signal From Your Coding Agent?
8 min read
Claude Code Headless Mode: Running claude -p in Scripts and CI, and the Three Signals That It Finished
10 min read
Building a Movement Habit at a Desk: Use the Agent Run as the Cue, One Set as the Unit, and Streaks Carefully
8 min read
Claude Code MCP Servers Explained: Adding Servers, Choosing a Scope, Handling Secrets, and Why Long Tool Calls Go to the Background
10 min read
/notchfit:plan Explained: How Claude Code or Codex Writes a Weekly Workout Plan the Notch Can Actually Run
8 min read
Claude Code Spinner Verbs Explained: What “Pondering” and “Brewing” Mean, How to Change Them, and Why You Should Stop Watching the Spinner
7 min read
Why NotchFit's Done and Permission Alerts Wait Until Your Set Ends, When That Costs You, and How to Turn the Workout Off
7 min read
How to Resume a Claude Code Session: --continue vs --resume, Naming Sessions, the Session Picker, Branching, and What Comes Back
9 min read
NotchFit on a Mac Without a Notch: How Pill Mode Works on Mac mini, iMac, Mac Studio and a MacBook With the Lid Closed
6 min read
How to Run a Claude Code Session in the Background: /background, claude --bg, Agent View, and Getting Back to It
9 min read
What a Notch App Can See: NotchFit's Local-First Design, What the Claude Code and Codex Hooks Send, and What Stays on Your Mac
7 min read
Why Codex CLI Asks for Permission Every Time, and How to Tune the Sandbox and Approval Policy Without Going Full Access
8 min read
What to Do While Claude Code or Codex Works: A Simple Protocol for the Two-to-Twenty-Minute Gap in Every Agent Run
7 min read
Is It Possible to Get a Notification When Claude Code or Codex Hits a Reset? Yes for Claude Code: the quota_auto_resume Hooks, Explained
8 min read
What a MacBook Notch App Can Actually Do: The Five Kinds of Notch Utility, Their Trade-offs, and Where NotchFit Fits
7 min read
How to Make MCP Servers Not Take Up as Much Context in Claude Code: Tool Search, alwaysLoad, Scopes and Output Caps
8 min read
The notchfit Command Line: Drive Your Workout, Read Status as JSON, Validate Plans and Test the Notch Without Leaving the Terminal
7 min read
How to Audit MCP Tool Calls Made by Claude Code: A Five-Minute Hook Audit Log, OpenTelemetry Tool Events, and the Transcript for Investigations
9 min read
Exercise Snacks: What the Research Actually Says About One-Minute Vigorous Breaks, What It Does Not, and How NotchFit's Agent-Run Sets Compare
8 min read
How Long Until a Claude Code MCP Tool Call Times Out? The Four Timers (Startup, Two-Minute Backgrounding, Idle, Wall-Clock), Their Defaults, and Which One to Change
8 min read
Sitting Too Long as a Developer: The Posture Problems Coding Agents Made Worse, What the Research Says About Breaking Up Sitting, and How NotchFit Turns an Agent Run Into the Break
8 min read
Claude Code .mcp.json Explained: Where Project-Scoped MCP Servers Are Read From, What Happens in Subfolders and Monorepos, and Why a Committed Server Shows Pending Approval
8 min read
Standing Desk Exercises for Developers: Why Standing Still Is Not the Goal, Eight Movements That Fit a Thirty-Second Agent Run, and How NotchFit Cues Them From the Notch
8 min read
The claude mcp Command Reference: add Syntax by Transport, What --scope local, project and user Actually Mean, add-json and add-from-claude-desktop, list, get, remove, login and serve
9 min read
Your First Week With NotchFit: Install and Simulate, Run Real Tasks, Write a Smaller Plan Than You Want, Tune the Alerts, Survive the First Skipped Day, and Decide What Stays
8 min read
How to Stop a Running Claude Code Task: Esc vs Ctrl+C, Background Tasks, Subagents, and Disconnecting Remote Control
8 min read
Pomodoro vs Agent-Driven Breaks: Timing Movement to Claude Code and Codex Runs Instead of a Timer
7 min read
Claude Desktop MCP Configuration: claude_desktop_config.json, Logs, Extensions, and the Difference From Claude Code
9 min read