Skip to main content

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 StartCalendarInterval so 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+
  • claude CLI on your PATH — 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

goodmorning_claude-1.0.0b1-py3-none-any.whl (11.8 kB view details)

Uploaded Python 3

File details

Details for the file goodmorning_claude-1.0.0b1-py3-none-any.whl.

File metadata

File hashes

Hashes for goodmorning_claude-1.0.0b1-py3-none-any.whl
Algorithm Hash digest
SHA256 bbe9d001bd9083da2b8d91fcd4d9312a8cf2f756f483ea116f33dc6652609ef0
MD5 246756ada4ce5b61632237dbd3101a5e
BLAKE2b-256 4c7c8d23e6c9755bcd88e6641f8ddc82c4a17811cc283951412fa5b3abde5715

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page