I don’t run recurring AI tasks by hand anymore. Each one is a scheduled job on my desktop, in cron, a systemd timer or GitHub Actions. Cron Manager is the local dashboard I built to watch them. Today it lists 250 jobs, and 40 of them call a model.

My time goes into improving jobs, not running them. A recurring task I still run by hand is a defect. It becomes a job with a log, a lock, a timeout and a STOP file, and after that I open it only when the dashboard shows it failing or I want better output from it.
Plan the AI budget
I pay for Claude, Codex and Grok subscriptions and keep a prepaid DeepSeek balance. The AI usage page shows each weekly meter, how many days the DeepSeek balance lasts at the current burn, and where the usage went by site. This morning Codex was at 100% of its weekly limit with five days left. Claude had just reset to 0%.

The forecast is per job. email-responder costs at most $0.30 a run on DeepSeek and runs 720 times in 30 days, so the forecast shows up to $216.

Pick the model per job
25 of the 40 read their provider order from one file when they start. It’s the only thing the dashboard writes. The default is Grok, DeepSeek, Codex, then Claude, and 11 jobs have their own order. email-responder tries DeepSeek first. coffee-unslop uses Codex, then Claude.

A job asks for its order like this:
$ llm-precedence resolve --format env \
--job 'systemd-user:email-responder.timer'
LLM_PRECEDENCE=deepseek,codex
LLM_PRIMARY=deepseek
LLM_FALLBACKS=codex
LLM_PRECEDENCE_SOURCE=job
LLM_PRECEDENCE_FILE=present
LLM_PRECEDENCE_GATE='claude dropped: projected 827% at reset (cap 90%)'The last line is a gate. When my Claude weekly meter reaches 85%, or is projected to reach 90% by the reset, scheduled jobs skip Claude and take the next provider. Here it has dropped Claude. I’d used it heavily that morning, right after the reset, and the projection ran far past the cap. Claude stays available for the work I do myself.
Jobs that repair and improve the other jobs

A few jobs only work on the other jobs:
- Repair runs every 15 minutes. It takes one failed job, gives an agent the failure record and a clean worktree, and records a fix or a follow-up task. Last week it ran 29 times and fixed 6. Most of the rest ended as a recorded diagnosis.
- Review reads yesterday’s commits in 8 repos every night. A defect with a file and line becomes a task.
- Due runs agent-owned tasks when their due date arrives.
- Burner spends leftover Claude quota on backlog tasks in the 60 hours before the weekly reset.

The Broken page lists 105 problems as I write this. Agents are handling 104 and one needs me.
Why not Hermes or Grok Bot
I’ve used both. Hermes expects the work to fit its working model, and I’d rather keep plain cron and call whichever CLI suits the job. Grok Bot spends a lot of tokens on agents messaging each other. Its own breakdown for one of my sites put about a quarter of the usage on scheduled work and the rest on bots messaging and reviewing each other. For simple tasks I don’t think that beats a hardcoded rule.