A generated photo-style image of a wall of copper pressure gauges on a grey steel panel

How I Schedule 40 AI Jobs and Budget Them Across Four Providers

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.

Cron Manager overview: 250 configured jobs, 2 needing attention, with sources listed in the sidebar (155 systemd timers, 51 crontab lines, 41 GitHub Actions workflows, 1 Hermes job, 2 Codex automations) and a job table showing source, schedule, LLMs, last result and next run

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%.

Cron Manager AI usage page: Claude weekly meter at 0%, Codex weekly meter at 100% and projected to 348% at reset, DeepSeek balance $144.47 with 15 days left at the current burn, and a donut chart of Codex usage by site

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.

Cron Manager forecast by job: each scheduled job with its provider, runs per week and per 30 days, cost per run and expected cost for the next 30 days, for example email-responder on DeepSeek at up to $0.30 per run and $216.00 over 30 days

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.

Cron Manager LLM precedence page: 40 LLM jobs, default provider order Grok, DeepSeek API, Codex, Claude, and per-job orders such as coffee-explorer-local-events on DeepSeek then Claude and coffee-unslop on 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 generated photo-style image of an open brass clock movement on a workbench with tweezers and screwdrivers beside it

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.
Cron Manager job list filtered to the headroom jobs: headroom-due, Automatic cron job repair every 15 minutes, headroom-burner, headroom-review, headroom-report, and the disabled headroom-responder and headroom-fixer

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.

Leave a Reply

Your email address will not be published. Required fields are marked *