Your 5-hour window runs out.
Your session shouldn't die with it.
MoveIt keeps your Claude Code usage window in the menu bar. At a percentage you choose it
freezes every running claude process rather than let the limit
kill a turn mid-tool-call — then resumes them all when the window resets. It also keeps your
Mac awake, which is the thing it did first.
v0.3.1 · macOS 13.0+ · Apple-notarized · Universal · free
Never spend a turn you can't finishNew
The claude.ai 5-hour window is per account, and MoveIt is the only thing on the machine watching it. Off by default — you turn it on.
One window, every session
The 5-hour window belongs to the account, not the session. Every terminal, every IDE, every model on the machine spends from the same budget — including the run you left going in another tab.
Frozen, not killed
At your threshold MoveIt sends SIGSTOP to every interactive claude process. The turn stops where it is, with its context intact. Nothing is cancelled, nothing is retried, nothing in flight is thrown away.
Resumed at the reset
When the window rolls over, SIGCONT. Each session picks up the turn it was in the middle of and finishes it. You get a macOS notification on both events.
Requires Claude Code. The threshold is a slider from 85% to 99%, default 90.
The menu bar tells you where you stand
Five states. These are rendered by the same drawing code the app uses in the menu bar, at the size you see them.
-
Idle
The number alone — the percent of your 5-hour window already spent.
-
Keeping awake
The same number with motion lines trailing it. A keep-awake timer or schedule is running.
-
Running low
From 80% the number turns red. Your pause threshold is a separate number, and you set it.
-
Sessions paused
Two red bars and no number: every session is frozen, waiting for the window to reset. A frozen terminal looks exactly like a hung one, so the icon says which it is.
-
No session data
Back to the cursor arrow. Nothing has reported usage yet, or the window just reset. Common, and not an error.
Stopping someone else's processes is a serious thing to do
So every rule below is enforced in the code, and each of them exists because of a specific way this can go wrong.
Never a process group
Signals go to individual pids and killpg is never called. Your build, your dev server, your test runner — anything claude spawned keeps running while the session itself is stopped.
Intent is written before any signal
The pause record hits the disk first, naming every pid it is about to stop. If MoveIt dies between writing and signalling, the record is still there to be read and undone.
Every exit path resumes
Quit, crash, force-quit, log out, reboot. MoveIt resumes anything a pause record names at launch and again on wake, before it reads a single setting. No freeze outlives 5h10m.
Identity is checked every time
Before each signal the target is verified by command and by its recorded start time. A recycled pid fails the check, and a missing start time fails it too — the check never passes on absence.
Only sessions it tracks
A process is a target only if it has its own usage record. A claude MoveIt has never seen a usage report from is left alone, and so is anything you suspended yourself.
The app can't suspend anything
The suspend signal is compiled into the helper binary only, never into MoveIt itself. The app's single signalling power is resume. That boundary is enforced by the build, not by care.
And it still keeps your Mac awake
The original half of the app, unchanged, and it needs no Claude Code and no tracker. If a run takes minutes or hours, idle sleep is the enemy.
Local LLM inference
Ollama, llama.cpp, LM Studio, MLX — generation doesn't get throttled or cut off because the display went dark.
Agent loops and coding agents
Claude Code, autonomous runs, overnight batches. The machine stays up for the whole run instead of the first twenty minutes of it.
Model pulls and fine-tuning
A 40 GB download or a training run finishes while you sleep, rather than stalling at the point your Mac decided it was idle.
Turn the session tracker off and this is all MoveIt does. That is a supported way to run it.
Everything included. Nothing locked.
Every feature is free. No tiers, no accounts, no in-app purchases.
⏸️ Pause threshold
Choose the percentage that triggers the freeze, anywhere from 85 to 99. The helper re-reads it on its next tick, so a change takes effect without a restart.
🔢 Live usage in the menu bar
The percent of the 5-hour window already spent, updated as your sessions report it. Red from 80% so you see the wall before you hit it.
🔌 Status-line passthrough
MoveIt's recorder becomes your Claude Code status line and re-runs the one you already had, passing its output through untouched. Turn the tracker off and yours goes back exactly as it was.
⏱️ Timer keep-awake
Pick a duration from 5 minutes to a full day, or run infinite.
⏰ Schedule mode
Keep-awake between a start and an end time, every day. Your working hours, or the window your nightly batch runs in.
🛡️ Real sleep prevention
Holds a system power assertion (IOPMAssertionCreateWithName) so macOS idle-sleeps neither the display nor the system.
🖱️ Synthetic activity
An optional cursor nudge, for tools that watch the pointer for "activity" rather than asking the system whether you are idle.
🎨 Custom menu-bar icons
Swap in your own images for the active and inactive states. A custom icon takes precedence over the usage number.
🚀 Launch at login
Starts quietly with your Mac via SMAppService. Native SwiftUI, small footprint, no CPU drain.
How it works
- 1
Download and drag to Applications
Signed with an Apple Developer ID and notarized. Accessibility permission is asked for once, and only the optional cursor nudge needs it.
- 2
Turn on session pausing, if you want it
Settings → General, one checkbox, then set the threshold. It is off until you do this, and enabling it is the only thing that touches your Claude Code configuration.
- 3
Pick a timer, a schedule, or infinite
Click the icon and say how long to stay awake. This half works whether or not Claude Code is installed.
- 4
Walk away
The number in the menu bar tracks the window. If it reaches your threshold your sessions freeze, you get a notification, and they start again on their own when the window resets.
FAQ
Do I need Claude Code to use MoveIt?
No. The session tracker is off until you switch it on, and with it off MoveIt is the keep-awake app it has always been. Nothing in the timer, the schedule, sleep prevention or the custom icons involves Claude Code.
Does it change my Claude Code setup?
One key, and only after you enable it. MoveIt sets statusLine in ~/.claude/settings.json to its own recorder, writes a backup of that file, and keeps its own state under ~/.claude/usage-state/. Turning the feature off puts your statusLine back exactly as it was — and if you never had one, the key is removed rather than left behind.
What happens to my existing status line?
It keeps running. MoveIt's recorder stores your original command verbatim, runs it on every update, and prints its output unchanged. What you see in Claude Code does not change. If you had no status line, you still have none.
Does it kill my sessions?
No. It suspends them with SIGSTOP and resumes them with SIGCONT — the same signals as Ctrl-Z and fg. The process is never terminated, the turn is never cancelled, and the context is still there when it starts again.
Will it stop my build or my dev server too?
No. MoveIt signals individual pids and never a process group, so child processes of a session keep running while the session itself is stopped.
What if I quit MoveIt while sessions are frozen?
They get resumed. MoveIt writes down what it froze before it freezes anything, and resuming that list is the first thing it does at launch and again after your Mac wakes — before it reads any setting. Force-quit, crash, log out or reboot and the next launch heals it. No freeze is allowed to last longer than 5 hours 10 minutes.
Could it suspend the wrong process?
Before every signal the target is checked against the command it was recorded as and the start time it was recorded with. A pid that was recycled into some other program fails that check, and so does a target with no recorded start time. Only a session MoveIt has a usage record for is ever a candidate.
What does it send anywhere?
Nothing. There is no account, no server, no telemetry and no network call. The usage numbers come from data Claude Code already prints on your own machine, and they stay in a folder in your home directory.
Why does the icon show a cursor arrow instead of a number?
Because there is no usage to show yet. Claude Code reports the window only after a session's first API response, and the figure disappears again once the window resets. Showing a stale number would be a lie, so the icon falls back to the original arrow. This is a normal state, not a failure.
Why does it need Accessibility permission?
Only for the optional cursor nudge. Decline it and sleep prevention, the schedule, and the whole session tracker still work.
What are the requirements?
macOS 13.0 or later, Apple Silicon or Intel. Distributed directly as a notarized build, not through the Mac App Store. The session tracker additionally needs Claude Code installed with a subscription plan, since that is what reports the 5-hour window.
Will it drain my CPU?
No. Native SwiftUI on a 1 Hz timer, and the session helper wakes twice a second to read a few small files. Neither shows up in Activity Monitor.
Stop losing turns to the limit.
Free, notarized, no account. Freeze at the percentage you choose, resume at the reset, and keep the machine awake in between.
Download for macOS