How to schedule Claude Code to run every day.
A scheduled task runs a Claude Code prompt on Anthropic's cloud at the times you set, so it works when your laptop is closed. This guide covers the schedule itself: the cron line, the UTC trap, the limits, and how to keep a daily run safe. It is the basis of most Claude Code automation.
Schedule a Claude Code job in five steps
New to the idea? What are Claude routines explains the feature first.
- Write the job and make the first run report-onlyDescribe one recurring job in a prompt. Tell Claude the first run only reads and reports. Look at the output before you let it send, post or delete anything.
- Choose the schedule in UTCA five-field cron line is read as UTC.
0 9 * * 1-5means 9:00 UTC on weekdays. Runs must be at least an hour apart. See the next section for a local-time example. - Create the scheduled taskIn Claude Code, run
/schedule. You can also manage tasks atclaude.ai/code/routines. The older name "routines" still appears there. - Remove connectors the job does not needWhen you create a task, every connector on your account is included by default, and an included connector can write. Take out what the job does not use.
- Run it once and read the resultRun it now, read the run log, and only then leave it on its schedule. A run that is scheduled is not a run that is checked.
Claude cron is UTC, so convert your local time
This is the mistake most people make. If you write your local morning hour in the cron line, the job runs at the wrong time.
A run scheduled exactly on the hour can start several minutes late. The docs suggest a few minutes past the hour.
| You want | Cron line (UTC) | Why |
|---|---|---|
| 9:00 UTC on weekdays | 0 9 * * 1-5 | The docs example. Five fields are UTC. |
| 9:00 in Melbourne in summer time (UTC+11), weekdays | 5 22 * * 0-4 | 9:00 there is 22:00 UTC the day before, so Sunday to Thursday in UTC. The 5 is a few minutes past the hour. |
| 9:00 in Melbourne in winter time (UTC+10), weekdays | 5 23 * * 0-4 | The offset changes with daylight saving, so recheck the line twice a year. |
How often can Claude Code run on a schedule
At most once an hour. A faster schedule is rejected. Other limits to know, all docs-stated and all subject to change, because scheduled tasks are a research preview.
| Limit | Value | How we know |
|---|---|---|
| Shortest gap between scheduled runs | One hour | docs-stated |
| Scheduled runs per hour | 100 per account | docs-stated |
| Run now, API fires and re-running a one-off task | 30 per hour for each task | docs-stated |
| Plans | Pro, Max, Team and Enterprise | docs-stated |
| Each run | Starts on a fresh machine, so files from the last run are gone | pilot-verified |
| Maximum run time | Not known | unverified |
What RoutineOS adds to a scheduled Claude Code run
A bare schedule runs a prompt. It does not give the run a memory, a way to ask permission, or a check on the schedule itself.
RoutineOS is a Claude Code plugin, free (MIT), and needs a paid Claude plan. It scaffolds a routine with typed settings, and its linter fails a schedule faster than hourly or a prompt without the untrusted-data clause. Sends, posts and deletes wait behind an approval gate. The plugin does not run inside the cloud run, so the files that matter are committed to your repo (see Claude Code plugins).
/plugin install routineos --marketplace devkindhq/routineosBefore you leave it running
- The prompt forbids sends, posts and deletes on the first run.
- Lint fails a schedule faster than one hour.
- A secret never goes in the prompt or in chat. If you paste one by accident, rotate it.
Scaffold a watch routine
Install the plugin, then start from the Watch template.