Blog · October 4, 2026 · 8 min read · by Vilva Athiban P B
Building a Movement Habit at a Desk: Use the Agent Run as the Cue, One Set as the Unit, and Streaks Carefully
Every developer has tried to build a movement habit at least once. A standing desk that became a sitting desk with a tall stool. A calendar block called "stretch" that got declined by its own owner. A fitness app with a 30-day plan that lasted nine. The problem is almost never motivation on day one; it is that the habit has no reliable trigger inside the working day, so it depends on remembering, and remembering is exactly the resource a focused coding session uses up.
This post is about the mechanics of making movement stick when your job is sitting still: what a usable trigger looks like for someone who runs AI coding agents all day, why the unit of work should be one set rather than one workout, how streaks help and how they quietly hurt, and how NotchFit implements each piece. It builds on the desk exercises and micro-workouts posts, which cover what to do; this one is about doing it again tomorrow.
Habits need a cue you do not have to remember
The habit literature is more modest than the self-help version of it. The most-cited study on the subject, by Phillippa Lally and colleagues at UCL in 2010, followed people adopting a new daily behaviour and found it took anywhere from about 18 to 254 days to feel automatic, with a median around 66 days, and that missing a single day did not derail the process. Two practical lessons fall out of that. First, plan for months, not a 30-day challenge. Second, the behaviour became automatic when it was tied to a consistent cue that already happened every day, such as after lunch or on arriving at work.
For a developer, the cues that happen every day are not clock times. They are events: a build starting, a test suite running, a pull request opening, and, increasingly, an agent taking a task and going quiet for two to ten minutes. That last one is the best cue we have found, for a reason that matters: it marks a moment when you are already not typing. A timer interrupts work; an agent run marks a gap in it. If you have ever wondered why break-reminder apps feel like nagging and the kettle boiling does not, this is why; we compared the two approaches in NotchFit vs break reminder apps.
Make the unit one set, not one workout
The second reason movement habits fail at a desk is that the unit is too big. "Work out at lunch" is a 40-minute commitment that competes with eating, meetings and the thing you were in the middle of. A unit that fits inside an agent run is one set: ten squats, twelve calf raises, a 30-second wall sit. It is small enough that there is never a good reason to skip it, and small enough that skipping it is not a catastrophe either.
NotchFit is built around that unit. When Claude Code or Codex starts working, the notch expands with your next exercise on the left and the agent's live progress on the right. Nothing starts until you tap Start set; there is a rep or time countdown ring with Done, Skip and Pause, and a rest timer between sets. The exercise library has 239 animated moves, 198 of them photo animations of real athletes and the rest illustrated, so "one set" can be a different one each time without you having to think about it. If Claude finishes while you are mid-set, the notification waits until the set ends rather than yanking you back; finishing the rep you started is part of the habit, and interrupting it would train the opposite.
Streaks: the useful part and the trap
Streaks work because they turn a vague intention into a countable thing you would feel slightly bad about breaking. NotchFit keeps a streak, a history heatmap of the days you moved, and throws confetti when you finish a set or a workout. The heatmap is the piece worth looking at weekly: a wall of filled days is motivating, and a gap on every Wednesday tells you something about your Wednesdays.
The trap is all-or-nothing thinking. A streak that only counts a full workout is fragile; the first busy day breaks it and the second busy day becomes "well, it's broken anyway". Lally's data said one missed day does not matter to habit formation, so your tracking should say the same. Keep the bar for "today counts" at one set. On a bad day, do one set during one agent run and move on. On a good day, do six. The streak measures showing up, and the heatmap, which records every day rather than a binary chain, is the more honest record of the two.
Remove every decision you can
Decisions are friction, and friction kills habits more reliably than laziness does. The ones that stop a desk workout before it starts are "what exercise?", "how many?" and "is that enough for today?". A plan answers all three in advance.
NotchFit gets its plan one of two ways. You can run /notchfit:plan in Claude Code or $notchfit-plan in Codex; the agent asks your age, height, weight, fitness level, goal, equipment, days per week, minutes per day and injuries, then writes a weekly plan using only exercises the notch can animate, saved to ~/.notchfit/plan.json and picked up by the app immediately. Or you can use the offline quick-plan generator in the app's Plan tab, which needs no agent at all; a starter plan is there by default. Either way, when the notch opens you are shown the next thing, not a menu. NotchFit is a workout guide, not medical advice; the injuries question exists so the plan avoids things rather than so it treats them.
One more decision to remove: whether to do it at all on days when you really cannot. The Hide workout toggle turns the notch into a plain Claude Code and Codex status panel. Using it on a deadline day is not failure; it is better than uninstalling the app on a deadline day, which is what people do with tools that cannot be quietly paused.
A four-week ramp that survives real work
- Week 1: one set per agent run, any exercise. Do not set a plan yet. The only goal is tapping Start set when the notch opens, enough times to notice the cue. Expect to ignore it half the time; that is normal.
- Week 2: generate the plan. Run
/notchfit:planwith honest answers, especially minutes per day (pick fewer than you think). Keep the one-set rule on busy days. - Week 3: look at the heatmap, not the streak. Find the pattern in the gaps and change one thing about those days: a different kind of task in the morning, or simply accepting that meeting-heavy days are one-set days.
- Week 4 onward: forget about it. If the first three weeks went roughly to plan you should be past the point of deciding. By Lally's numbers you are a third of the way to automatic, which is exactly where most habit attempts quit because the novelty is gone. Let the notch do the remembering.
Honest limits
- It only triggers when an agent runs. A day of meetings, reading or hand-writing code produces no cue. If your work is mostly not agent-driven, NotchFit is a weaker fit and a plain interval reminder may serve you better.
- Short sets are not a training programme. Micro-sets through the day are good for breaking up sitting and for keeping strength from sliding; they do not replace deliberate exercise if performance is your goal. Treat them as the floor, not the ceiling.
- It is a Mac app, $20 once. macOS 14 or later, Apple Silicon or Intel, best on MacBooks with a notch; other Macs get a top-centre pill instead. It runs locally with no account and no telemetry, which also means there is no cloud dashboard or phone companion; the heatmap lives on the Mac.
- Streaks motivate some people and stress others. If a broken chain makes you quit rather than restart, ignore the streak number entirely and use the heatmap. The app does not punish you for doing that.
The habit you are trying to build is not "exercise more". It is "when the agent goes quiet, stand up". Attach the small action to the cue you already get a dozen times a day, count showing up rather than heroics, and let the streak be a nice side effect instead of the point. Setting up takes a few minutes; the NotchFit guide walks through the install and the Claude Code and Codex integrations.
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