Keep a Claude 5-hour window always running, so you never wait the full 5 hours
Claude Pro and Max limits reset 5 hours after the first message of a window. Usually that first message is yours, so a full 5-hour clock starts the moment you sit down. claude-warmup starts a new window the moment the last one ends, so the clock is always already running. Whenever you start, the next reset is less than 5 hours away. It also shows your session and weekly usage.
$ claude-warmup Claude Warmup v0.3.0 Usage checked 08:42 · claude /usage Current session (5h) ░░░░░░░░░░░░░░░ 23% resets 11:00 (in 2h 17m) Weekly · all models ░░░░░░░░░░░░ 41% resets Tue 10:00 Auto warm-up Status ● on (launchd, checks every 5 min) Last ping 06:00 ✓ haiku · window until 11:00 Next ping ~11:00, right after the current window resets
Why keep the Claude 5-hour window running?
Claude's session limit is counted in 5-hour windows that begin with the first message after the last window ended. If nothing is running, your own first message starts a fresh 5-hour clock: start at 9:00, hit the limit at noon, and you wait until 14:00. If a window is already running when you arrive, part of those 5 hours has already passed.
Your first message starts the full 5 hours. Hit the limit at noon and you are stuck until 14:00.
Windows run back to back. At 9:00 the current one has already run 3 hours, so the next reset is at 11:00, not 14:00. Start after lunch at 13:00 and it is at 16:00, not 18:00.
Your limits do not grow. You just stop starting from a full 5-hour wait, whenever you sit down.
What makes it different
You can warm up the window with a fixed cron job or a hosted CI runner too. claude-warmup is built to need less trust and less guessing.
| claude-warmup | Fixed-time cron or CI job | |
|---|---|---|
| Where it runs | Your own computer or server | Often a hosted runner, with your Claude token copied into its secrets |
| Your credentials | Never read or copied. The official claude CLI keeps them. | Token has to be exported and stored elsewhere |
| When it pings | Only when no window is open, checked every 5 minutes | At fixed times, even if a window is already running |
| Cost of a check | 0 tokens (local /usage) | Each run is a real message |
| Usage view | Session, weekly and per-model usage with reset times | None |
| Setup | Two commands on macOS, Linux or Windows | Fork, tokens, secrets and a cron expression |
How it works
- The OS scheduler (launchd, systemd or cron, Task Scheduler) runs a check every 5 minutes.
- If the current window is still running, the check does nothing. No Claude call at all.
- Otherwise it reads usage with Claude Code's local
/usagecommand: 0 tokens, $0. - Only when no window is active does it send
hito haiku through the officialclaudeCLI, with tools, MCP and hooks turned off. - It records when the new window ends and sleeps until then. "Every 5 hours" follows the real window, not a clock.
Never reads credentials
Sign-in stays with the official Claude Code CLI. API-key variables are stripped, so nothing is billed to an API key.
Zero dependencies
Plain Node.js 18+, small enough to read in one sitting. MIT licensed.
Working hours
Limit pings to 06:00-23:00, weekdays, or any days you choose.
Peak time
Set your busiest time, e.g. 14:00 or 11:30 weekdays, and windows line up so one resets right then.
Install
You need Node.js 18+ and the Claude Code CLI, logged in with a Pro or Max subscription.
npm install -g github:jungtaejoon/claude-warmupclaude-warmup installChoose the hours to keep windows running, for example from early morning to late night:
claude-warmup config hours 06:00-23:00Run it on a free server
Computer not on all day? Put it on any always-on Linux machine: a free cloud VM such as Oracle Cloud Always Free, a cheap VPS or a Raspberry Pi. The window belongs to your account, so any machine can send the ping.
curl -fsSLO https://raw.githubusercontent.com/jungtaejoon/claude-warmup/main/scripts/server-setup.sh && bash server-setup.sh --timezone America/New_YorkIt installs Node.js, Claude Code and claude-warmup into ~/.local, walks you through a browserless login and turns on a systemd timer. Server guide
FAQ
When does the Claude 5-hour usage limit reset?
5 hours after the first message of a window. If that first message is yours at 9:00, the reset is at 14:00. With claude-warmup a window is already running when you start, so the reset comes sooner. More in the Claude usage limit reset guide.
Can I make the reset land at my busiest time?
Yes. claude-warmup config peak 11:30 weekdays lines the windows up so one resets right at 11:30. A day is 24 hours and windows are 5, so 4 hours a day are left with no window: choose where with config gap 03:00 (here 02:30–06:30). Windows then run 06:30–11:30–16:30–21:30–02:30. A window you start yourself at another time can't be moved; things line up again after it ends.
Does this give me more Claude usage?
No. Same limits. You just rarely wait the full 5 hours.
How much usage does the warm-up cost?
Almost none. Checks use the local /usage command (0 tokens). The ping is one short haiku message per window.
Can I run it while my computer is off?
Yes, on a server. See Run it on a free server.
Does it read my Claude password or token?
No. The official claude CLI handles all sign-in.
Is this allowed?
It is a tiny request made with your own account through the official Claude Code CLI. Read Anthropic's terms and decide for yourself.