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 times you choose (default 07:05, 12:10 and 17:15), anchoring fresh windows across 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
  • One or many times — schedule a single ping or several through the day (default 07:05, 12:10, 17:15)
  • 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 with uv:

uv tool install goodmorning-claude

Install it persistently — don't schedule it with uvx. A uvx run's executable lives in uv's cache, which uv cache prune is free to delete, and the schedule bakes that path into the LaunchAgent. install detects this and refuses, rather than handing you a schedule that quietly stops firing months later.

Quick Start

# Install the schedule — defaults to 07:05, 12:10 and 17:15 daily
goodmorning-claude install

# ...or pick your own times (space-separated)
goodmorning-claude install --time 07:05 12:10 17:15

# 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 a StartCalendarInterval entry for each chosen time, 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.2.0-py3-none-any.whl (16.9 kB view details)

Uploaded Python 3

File details

Details for the file goodmorning_claude-1.2.0-py3-none-any.whl.

File metadata

File hashes

Hashes for goodmorning_claude-1.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 916ace7561927e39cdd0efa753d99d8d4099ffd9efe381b6b5393d7c9e01e85b
MD5 74c14ca2dec06c4be3362ff0faf0d9f0
BLAKE2b-256 9d1022d86a75bb66abe44f7fa140bc847562fe080fa8ff8d9b0e48aabdace3a2

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