claude-warmup 0.3: make Claude's 5-hour limit reset right at your busiest time
Set a peak time and claude-warmup works backward so a 5-hour window resets right then. A day doesn't divide into 5-hour windows, so you choose where the 4 empty hours go.
claude-warmup is a small tool that keeps a Claude Pro/Max 5-hour window always running. It opens a new window as soon as the last one ends, so whenever you sit down, your first message doesn’t start a full 5-hour wait.
Using it, I noticed one thing missing. I get up at about the same time every day, and my busiest hours are about the same too. So the best thing would be a reset right at that time. Version 0.2 added a peak time, and 0.3 lets you choose the empty hours yourself.
What a peak time is
Tell it “weekdays at 11:30 are my busiest,” and it works backward. For a reset at 11:30, that window has to start at 06:30, the one before at 01:30, and so on.
A day leaves 4 hours over
There’s a catch. A day is 24 hours and a window is 5, so four windows back to back fill 20 hours and 4 hours have no window. As long as windows line up with the peak, those 4 empty hours have to go somewhere.
In 0.2 they landed right after the peak (11:30–15:30), right after the busiest time, which is the worst place. So from 0.3 you choose where they go. Setting a peak lists the five choices and asks for a number.
$ claude-warmup config peak 11:30 weekdays
✓ peak = 11:30 weekdays
A day is 24 hours, so lining windows up with weekdays 11:30 leaves 4 hours with no window. Where should they go?
1) 11:30–15:30 (right after the peak)
2) 16:30–20:30
3) 21:30–01:30
4) 02:30–06:30
5) 07:30–11:30 (right before the peak)
Number (Enter to decide later): 4
✓ Empty hours (no window): 02:30–06:30
Pings now line up at 06:30, 11:30, 16:30, 21:30, so a window resets right at weekdays 11:30.
I left the early morning empty, while I’m asleep. On weekdays windows now run 06:30 → 11:30 (reset) → 16:30 → 21:30 → 02:30, and only 02:30–06:30 is empty.
| Command | Meaning |
|---|---|
config peak 11:30 weekdays |
Weekdays at 11:30 (mon-fri, mon,wed,fri work too; no days means every day) |
config gap |
Shows the empty-hour choices again and asks |
config gap 4 |
Picks choice 4 (or a time inside it: config gap 03:00) |
config peak off |
Off (windows chain back to back as before) |
How it behaves
- The peak applies only once you’ve chosen the empty hours. It won’t pick them for you.
- Off an aligned time, it waits. A window opened at the wrong moment would throw the peak off. While it waits it doesn’t call Claude at all, so it costs no tokens.
- A window that’s already off can’t be fixed. If your own message opened a window at another time, it can’t be moved. When it ends, claude-warmup lines up again at the next aligned time.
- With days set, the time in between works as before. Aligning starts within a day of each peak. When the next peak is far away, like over a weekend, a new window starts as soon as the last one ends.
- Change the peak and the choices change too. If the empty hours you chose no longer fit, it asks again.
You can see it all in the status screen:
Auto warm-up
Schedule 06:00–23:00 · every day
Peak time weekdays 11:30 · pings lined up at 06:30, 11:30, 16:30, 21:30
Gap 02:30–06:30
Next ping ~16:25, lined up so a window resets at tomorrow 11:30
How to update
npm install -g github:jungtaejoon/claude-warmup
claude-warmup install
claude-warmup config peak 11:30 weekdays
Run install again so the background service switches to the new version. If you already use a peak time, choose the empty hours with claude-warmup config gap. If you set it up on a server with scripts/server-setup.sh, add --prefix ~/.local to the npm command so it replaces the same copy. I forgot that at first, and my server kept running the old version.
What changed: 0.3 release notes · 0.2 release notes