didrun · checked

Why isn't my GitHub Actions schedule running?

Four things stop a GitHub Actions schedule, and GitHub alerts you to none of them. Under load the run is delayed, or dropped outright. Or the workflow file is not on the default branch. Or the workflow was disabled, which happens on its own after 60 days without activity in a public repo. Or the cron line means a different time from the one you meant. npx --allow-git=root github:agentwares/didrun reads the repo's run history and tells you which, workflow by workflow.

The four causes, and how to check each by hand

CauseWhat GitHub documentsCheckFix
Delayed or dropped under loadScheduled runs wait when Actions is busy, and GitHub names the start of every hour as a busy time. Under enough load, queued jobs are dropped.gh run list --workflow nightly.yml --event schedule --limit 20 and compare each run's start with the cron line. A dropped run is a gap.Move the minute off :00: 17 3 * * * instead of 0 3 * * *.
Not on the default branchA schedule runs only from the workflow file on the default branch.gh repo view --json defaultBranchRef, then check that the file there has the schedule block.Merge the workflow into the default branch.
DisabledIn a public repository, scheduled workflows are turned off after 60 days without activity. Forks start with them off, and anyone can turn one off by hand.gh workflow list --all shows each workflow's state, e.g. disabled_inactivity.gh workflow enable nightly.yml. Details: disabled after 60 days.
Not the time you thinkA line runs in UTC unless it sets timezone (an IANA name). The shortest interval is every 5 minutes. In a time zone with daylight saving, a time in the skipped hour runs at the next valid time.Read the line in UTC, or add the zone you meant.timezone: "America/New_York" under the cron line.

How late is normal?

GitHub publishes no number. In its community forum, the thread on scheduled-workflow delays has 84 upvotes, with delays reported from about 20 minutes to over 10 hours. A newer thread from 27 August 2026 reports schedules that created no run at all for days.

On 9 October 2026, read without a token, both of actions/stale's own Sunday 03:00 UTC schedules had run on 4 October, but 1 h 4 min and 1 h 18 min late. didrun counts a run as late after 30 minutes; --late changes that.

What the check prints for one workflow

Nightly backup  ·  .github/workflows/backup.yml
  schedule     0 3 * * * (UTC)
  runs due     7: 6 ran, 1 late, 1 missed; 1 failed, 1 did nothing
  missed       Sun 4 Oct 03:00 UTC  no run was created
  did nothing  Mon 5 Oct 03:00 UTC  green in 6 s; its usual success takes 4 min 8 s
  late         Tue 6 Oct 03:00 UTC  the run was created 2 h 17 min late
  failed       Thu 8 Oct 03:00 UTC  the run failed after 1 min 30 s
  last run     Fri 9 Oct 03:04 UTC, success
  next due     Sat 10 Oct 03:00 UTC
  fix          GitHub delays and drops scheduled runs under high load, which includes the start of
               every hour: move the minute off :00 (e.g. 17 instead of 0)
               open the green runs that were short: usually every job or step was skipped by an
               `if:`, or the job found nothing to do and exited 0
Synthetic repo: the real output of npx --allow-git=root github:agentwares/didrun demo, which runs the check on recorded fixtures shipped with it. Not anyone's repo or runs.

A missed run, a late one, a failure, and a green run that took 6 seconds when its usual success takes 4 minutes. That last one did nothing, and GitHub shows it with the same green tick as the rest.

Check a repo

In a clone of the repo, or with its name after the command:

$ npx --allow-git=root github:agentwares/didrun

Run it in a clone, or name the repo. It reads GitHub's own record with your token (GITHUB_TOKEN, GH_TOKEN or the GitHub CLI's login), and with none it reads public repos. Its only requests are GETs to GitHub's API; the token is never printed or stored. No account, no change to your repo. Free and MIT licensed.

An hourly watch for scheduled runs is not built.

didrun tells you what happened when you ask. A watch would ask for you every hour, from outside GitHub's scheduler, and email you when a scheduled run is late, missed, or green with nothing done, with no change to your repo. It does not exist yet: agentcheck's free hourly watch covers MCP servers only today.

I would pay for an hourly watch of scheduled runs

The click is counted, and nothing else is sent: no form, no email, no cookie. There is no price yet and nothing is charged.

Sources