Usage
goodmorning-claude provides four subcommands for managing and firing the daily ping. All commands require macOS — the CLI refuses to run on any other platform.
install — Install the daily schedule
goodmorning-claude install [--time HH:MM ...]
Writes a LaunchAgent plist to ~/Library/LaunchAgents/com.waterjuice.goodmorning-claude.plist and loads it with launchctl bootstrap. The schedule fires at each specified wall-clock time every day. Default is 07:05 12:05 17:05 if --time is omitted — three pings spaced ~5 hours apart so each opens a fresh window that carries through to the next.
# Default: 07:05, 12:05 and 17:05 every day
goodmorning-claude install
# A single custom time
goodmorning-claude install --time 06:30
# Several custom times (space-separated)
goodmorning-claude install --time 07:00 13:00 18:00
Times are sorted and de-duplicated, so order does not matter and repeats are collapsed.
| Option | Description |
|---|---|
--time, -t |
One or more times in HH:MM (default: 07:05 12:05 17:05) |
Install time also resolves the absolute path to claude and prepends its directory to the plist's PATH environment variable, so the schedule keeps firing correctly even if claude is only on your shell PATH because of an init script (nvm, asdf, Homebrew path munging, etc.).
uninstall — Remove the daily schedule
goodmorning-claude uninstall
Unloads the LaunchAgent (launchctl bootout) and removes the plist. Safe to run even if nothing is installed.
status — Show the current schedule
goodmorning-claude status
Reports whether the schedule is installed and, if so, at what times it is set to fire.
Installed (launchd) — fires daily at 07:05, 12:05, 17:05.
run — Fire the ping now
goodmorning-claude run
Invokes claude -p "hi" directly with a 120-second timeout. Normally called by the scheduler; run it manually to test your setup or to open the window on demand.
When the schedule is installed, run prefers the absolute claude path that was pinned at install time (via the GOODMORNING_CLAUDE_BIN env var the LaunchAgent sets). When run from a normal shell it falls back to a PATH lookup. If claude cannot be found, run fails with a clear error.
Output:
Pinging Claude via /opt/homebrew/bin/claude...
Ping succeeded in 1.8s.
Pass -v to also print the chosen binary, the full argv, and Claude's stdout.
Global Options
| Option | Description |
|---|---|
--verbose, -v |
Show detailed logs of every action and subprocess call (stderr) |
--version |
Show version and exit |
--license |
Show licence information and exit |
--help |
Show help and exit |
-v may appear either before or after the subcommand:
goodmorning-claude -v install --time 07:05
goodmorning-claude install -v --time 07:05
File Locations
| Path | Purpose |
|---|---|
~/Library/LaunchAgents/com.waterjuice.goodmorning-claude.plist |
LaunchAgent plist |
~/Library/Logs/goodmorning-claude.log |
Ping stdout/stderr |