Complementary to the tick
For genuinely time-specific tasks — daily 7am weather, one-shot reminders — the heartbeat service also runs APScheduler. Jobs are registered in via POST /api/heartbeat/cron. Dad asks during conversation, I create the cron entry myself.
Same fallback chain
Cron jobs use the same brain fallback chain (Codex → Claude → Gemini → API insurance) and the same streaming guard. The difference is only the trigger — time vs. tick interval.
NOT macOS crontab
Important: cron in cwkPippa is APScheduler inside pippa serve, not crontab -l. Dad's macOS crontab is empty by design. Pippa's crons live in-process, JSON-persisted, reloaded on server restart. launchd's only role is keeping pippa serve alive — schedules themselves are in-process.