# Schedule Claude Code

Source: https://routineos.org/learn/schedule-claude-code

> Schedule Claude Code to run daily on Anthropic's cloud. Cron is UTC and the shortest interval is one hour. Add settings, a linter and gates with RoutineOS.

Learn

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

[Get started](https://routineos.org/#start)[Jump to the steps](#steps)

docs-statedUTC cron1 hour minimum

Steps

## Schedule a Claude Code job in five steps

New to the idea? [What are Claude routines](https://routineos.org/learn/what-are-claude-routines) explains the feature first.

1. **Write the job and make the first run report-only**Describe 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.
2. **Choose the schedule in UTC**A five-field cron line is read as UTC. `0 9 * * 1-5` means 9:00 UTC on weekdays. Runs must be at least an hour apart. See the next section for a local-time example.
3. **Create the scheduled task**In Claude Code, run `/schedule`. You can also manage tasks at `claude.ai/code/routines`. The older name "routines" still appears there.
4. **Remove connectors the job does not need**When 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.
5. **Run it once and read the result**Run 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.

Source: Anthropic's [scheduled tasks documentation](https://code.claude.com/docs/en/web-scheduled-tasks), as read for the RoutineOS docs on 2026-10-30. Docs-stated, not run by us for every line. See [Scheduling and Claude cloud routines](https://docs.routineos.org/infrastructure/scheduling).

Cron and time zones

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

The two Melbourne rows are our own time arithmetic, not an Anthropic statement. The Jobs watch template uses `0 22 * * 1,4`, which is Tuesday and Friday morning in eastern Australia. See [Jobs watch](https://routineos.org/templates/jobs-watch).

Limits

## 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 |

If you need a daily ceiling of your own, RoutineOS adds `max_runs_per_day`. It is checked by a script the run calls, so it is prompt-enforced, not guaranteed. Details in [the docs](https://docs.routineos.org/infrastructure/scheduling).

What is missing

## 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](https://routineos.org/learn/claude-code-plugins)).

`/plugin install routineos --marketplace devkindhq/routineos`

Needs Claude Code 2.1.275 or later and Python 3.11 or later. Then scaffold a watch routine with `routineos.py new my-watch --type watch` and check it with `routineos.py lint my-watch`. The generic [Watch template](https://routineos.org/templates/watch) is piloted.

Check yourself

## Before 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.

**Heads up**Scheduled tasks are a research preview, so check the limits above before you rely on them. The full list is on [honest limits](https://routineos.org/honest-limits).

## Scaffold a watch routine

Install the plugin, then start from the Watch template.

[Get started](https://routineos.org/#start)[Read the scheduling docs](https://docs.routineos.org/infrastructure/scheduling)
