Schedule a morning ping to the Claude CLI to trigger the 5-hour usage window (macOS only)
Project description
goodmorning-claude
A tiny macOS scheduler that pings the claude CLI each morning so the 5-hour usage window starts at a predictable wall-clock time.
Claude's usage allowance is measured over a rolling 5-hour window that begins on your first interaction of the day. If your first real prompt lands at 09:37, your window closes at 14:37 — right in the middle of the afternoon. goodmorning-claude fires a throwaway hi prompt at a time you choose (default 07:05), anchoring the window to the start of your work day.
Features
- Set-and-forget scheduling — one command installs a launchd LaunchAgent
- Wall-clock firing — uses
StartCalendarIntervalso it fires at the actual time, not relative to boot - Configurable time — pick any hour and minute
- Zero dependencies — stdlib only
Requirements
- macOS — this tool is macOS-only. The CLI refuses to run on any other platform.
- Python 3.12+
claudeCLI on yourPATH— authenticated at least once
Installation
pip install goodmorning-claude
Or run directly with uv:
uvx goodmorning-claude install --time 07:05
Quick Start
# Install the schedule — runs every morning at 07:05
goodmorning-claude install --time 07:05
# Check it's installed
goodmorning-claude status
# Trigger the morning ping manually
goodmorning-claude run
# Remove the schedule
goodmorning-claude uninstall
How It Works
When triggered, goodmorning-claude shells out to claude -p "hi" — a non-interactive print-mode invocation that opens your 5-hour usage window and exits immediately.
Scheduling is delegated to launchd. install writes a LaunchAgent plist to ~/Library/LaunchAgents/com.waterjuice.goodmorning-claude.plist with StartCalendarInterval set to your chosen hour and minute, then loads it with launchctl bootstrap gui/<uid>.
Credentials after reboot
LaunchAgents run inside your user's GUI session, so the scheduled ping has the same credential access as your interactive claude shell. Claude Code's OAuth refresh token lives in your login keychain, which unlocks automatically when you log in — no re-auth needed per reboot. If you use a separate "Login Keychain" password that doesn't match your account password, the scheduled ping will fail silently until you unlock the keychain.
What if the Mac is asleep or off at fire time?
launchd replays the most recent missed StartCalendarInterval as soon as your user session becomes active again. So a laptop that sleeps overnight fires on time in the morning; a Mac that was off at 07:05 fires when you log in.
Development
make dev # Set up development environment
make check # Run linting and type checking
make format # Auto-format code
make build # Build wheel and docs
Licence
Released under the Unlicense — public domain.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file goodmorning_claude-1.0.0b1-py3-none-any.whl.
File metadata
- Download URL: goodmorning_claude-1.0.0b1-py3-none-any.whl
- Upload date:
- Size: 11.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bbe9d001bd9083da2b8d91fcd4d9312a8cf2f756f483ea116f33dc6652609ef0
|
|
| MD5 |
246756ada4ce5b61632237dbd3101a5e
|
|
| BLAKE2b-256 |
4c7c8d23e6c9755bcd88e6641f8ddc82c4a17811cc283951412fa5b3abde5715
|