Cloud routines vs local scheduled tasks in Claude Code: how to choose

Claude Code gives you three ways to run something on a schedule, and the New routine button asks you to choose between two of them before you know what the difference is. Here is how to pick, and what each one will do to you if you pick wrong.

The short version

  • Cloud routine — runs on Anthropic’s infrastructure whether your machine is on or not. Can also fire on API calls and GitHub events. No access to your local files.
  • Local (Desktop) task — runs on your machine, with your files and your local tools. Only fires while the Desktop app is open and the computer is awake. Schedule-only.
  • /loop — polls inside an open CLI session. Dies with the session. For quick checks while you work, not for anything you rely on.

The deciding question is almost always the same one: does the work need your local files? If yes, it is a Desktop task and the machine has to stay awake. If no, put it in the cloud and stop worrying about the lid.

The comparison in full

Cloud Desktop (Local) /loop
Runs on Anthropic-managed cloud Your machine Your machine
Needs the machine on No Yes Yes
Needs an open session No No Yes
Local file access No — fresh clone each run Yes Yes
Triggers Schedule, API, GitHub events Schedule only Schedule only
Minimum interval 1 hour 1 minute 1 minute
Permission prompts None — runs autonomously Configurable per task Inherits from session
MCP / connectors Connectors, per routine Config files and connectors Inherits from session

What bites people on Desktop tasks

Sleep means skipped

Tasks only run while the app is running and the computer is awake. If the machine sleeps through the scheduled time, the run is skipped. Closing the laptop lid still puts it to sleep, even with Keep computer awake turned on in Settings. If a task genuinely must run, it belongs in the cloud — that is the entire reason cloud routines exist.

The catch-up run that lies about the date

When the app starts or the computer wakes, Desktop checks whether each task missed any runs in the last seven days. If it did, it starts exactly one catch-up run for the most recently missed time and discards everything older. A daily task that missed six days runs once.

That single catch-up is where the damage happens. A task scheduled for 9am can run at 11pm, and unless the prompt reads the clock it will write “today” about a day that is nearly over. Anthropic’s own documentation tells you to put the guardrail in the prompt. Do that — something like:

Read the current local date and time first and compare it with the intended
slot of 09:05 local.
- Within 3 hours: proceed normally.
- More than 3 hours late: begin the output with
  "LATE RUN - produced at <time> for the <date> slot", and cover the period
  the slot intended, not the last 24 hours from now.
- After 18:00: skip the forward-looking sections entirely.

Manual permission mode stalls, silently

Each task has its own permission mode. A task in Manual mode that needs a tool it hasn’t been granted will stall until you approve it — the session sits open in the sidebar waiting, which is not what you want from something that was supposed to happen at 7am. Click Run now after creating a task, watch for the prompts, and choose “always allow” for each one.

One exception you cannot design around: MCP tools marked requiresUserInteraction prompt on every call and offer no always-allow. A task that calls one will stall every single time. Don’t build an unattended routine on top of one.

Uncommitted changes come along for the ride

By default a task runs against whatever state your working directory is in, including uncommitted work in progress. Turn on the worktree toggle when creating the task to give each run its own isolated Git worktree.

What bites people on cloud routines

No permission prompts at all

Cloud routines run as full autonomous sessions. There is no permission-mode picker. The session runs shell commands and calls any connector you include without stopping to ask. Combined with the fact that every connector on your account is attached by default, a routine you accept without editing is holding more authority than it needs. Trim the connector list on the way in.

A fresh clone every run

Each repository is cloned at the start of every run from the default branch. Nothing persists between runs unless you commit it or write it somewhere external. If your routine needs history — “is this test flaky?” cannot be answered from one run — it has to store that history in the repository or a connector, not in its own head.

The GitHub connection has a 72-hour fuse

If your GitHub connection expires, runs are skipped for up to 72 hours and resume on their own if you reconnect inside that window. After 72 hours the routine switches off and you turn it back on by hand. Worth a calendar reminder if you depend on one.

A rule that applies to all three

Whichever you pick, the run list is not a report. A green status means the session started and exited without an infrastructure error — it does not mean your task succeeded. The routine has to tell you itself: an explicit OK or PARTIAL status, a named reason when a source was unreadable, and one line per run in a log you can scan.

That is covered in full here: Why your Claude Code routine reported success and did nothing.

Desktop’s run history helps a little — hover a skipped entry and it tells you why: the computer was asleep, the previous run was still going, or other tasks were already running. Cloud gives you /schedule why did my nightly review do nothing this morning? from v2.1.227. Neither is a substitute for a prompt that reports on itself.

One more useful trick

A Desktop task can change its own schedule or prompt mid-run using the update_scheduled_task MCP tool — so a code review can reschedule itself to run earlier when it notices a release branch appear. Its prompt also lives on disk at ~/.claude/scheduled-tasks/<task-name>/SKILL.md, with YAML frontmatter for name and description and the prompt as the body, so you can version-control it like anything else. Schedule, folder, model and enabled state are not in that file.

The Routines Runbook is 32 ready-made routines built this way from the start, plus hardened replacements for all eight of Anthropic’s free templates and the fourteen guardrail patterns behind them. See what is in it, or take the free 5-routine starter.


Verified against Anthropic’s Desktop scheduled tasks and Routines documentation on 5 October 2026. Not affiliated with Anthropic.