Scheduled Jobs

{{ total }} job{{ 's' if total != 1 else '' }} · {{ active_count }} active {% if paused_count %}· {{ paused_count }} paused{% endif %}

{% for job in jobs %} {% endfor %}
Job Schedule Status Last Run Result Next Actions
{{ job.name }} {% if job.description %}
{{ job.description }} {% endif %}
{{ job.schedule_human }}
{{ job.schedule }}
{% if job.status == 'active' %} active {% else %} paused {% endif %} {% if job.has_output %} {{ job.last_run }} {% else %} no data {% endif %} {% if job.has_output %} {{ job.last_pass }} pass {% if job.last_warn %} · {{ job.last_warn }} warn {% endif %} {% if job.last_fail %} · {{ job.last_fail }} fail {% endif %} {% else %} {% endif %} {% if job.status == 'active' and job.next_run %} {{ job.next_run }} {% elif job.status == 'paused' %} paused {% else %} {% endif %} {% if job.status == 'active' %} {% else %} {% endif %}
{% if not jobs %}

No jobs in cron registry. Create .context/cron-registry.yaml or run fw cron generate.

{% endif %}

Confirm Action

How this works

This page reads from .context/cron-registry.yaml — the structured source of truth for scheduled jobs. Pause comments out the job in the crontab. Resume re-enables it. Run Now triggers the job immediately. Changes are written to the registry and synced to /etc/cron.d/.

CLI: fw cron generate regenerates crontab from registry. fw audit schedule install copies the crontab to /etc/cron.d/.