cron-requests.json (массив jobs) — интерфейс отрисует.
Простые джобы (runner: direct) исполняет cr_dispatcher.py (systemd timer раз в минуту, TZ Europe/Moscow) — сам делает HTTP-вызовы и шлёт Telegram-отчёт.
Сложные (runner: codex) диспетчер отдаёт Codex. Исход каждого запуска — в cron-runs.json. Мы фиксируем «что хотим», не «как».