Schedules
Manage recurring tasks via launchd. View fire history, next-run times, worktree artifacts, budget ledger.
Cadence sources
The pane displays three kinds of cadence on each schedule row:
- Cron-direct — a 5-field cron string entered in the New Schedule form. Example:
0 9 * * *renders as Daily at 9:00 AM. - Prose — a natural-language phrase compiled to cron at registration time (Phase U.8). The row shows the prose; hover for the compiled cron. Compilation runs locally via Gemma 4 — when the model is not installed the prose path is unavailable and the operator must enter cron directly.
- Counter cadence — fires every Nth event ("every 10 tool_calls") rather than on a wall-clock schedule. Counter rows fire from
HookRouterpost-tool reactions and are clamped byCounterCadenceRateLimiterto ≤ 1 fire / minute, defending against amplification when a power user produces many sessions in a day.
Creating a schedule
The New Schedule form composes any of the three cadence kinds, mirroring the senkani schedule create CLI flags. A segmented toggle picks the compose mode:
- Prose — type a phrase ("every weekday at 9am"); it compiles to cron live as you type and the form shows the resolved human-readable cron. Common phrases resolve in-process with no model; a phrase that needs the MLX fallback shows an inline message when no model is available.
- Counter — type
every N event_name(e.g.every 10 tool_calls); the form confirms the parsed cadence. - Cron — pick a preset (Every hour / 6 hours / Daily / Weekly) or choose Custom and enter a 5-field cron string.
As you compose, the form surfaces a live amplification verdict banner from AmplificationGuard — green when the schedule fires above the 60-second floor, red with the reason when it would amplify — plus a next-fires preview (the upcoming five fire times from CronPreview, for cron and prose). The Create button is gated on an OK verdict: an amplifying schedule cannot be submitted unless you tick the explicit Override and create anyway checkbox.
Keyboard
Open via ⌘K → type the pane name. Close with ⌘W. Focus with ⌘+digit (the pane's position on the canvas).