Skip to content

Desktop scheduled tasks

Have the Claude desktop app start a session on a timer, with full access to your local files, for daily reviews, dependency checks and briefings.

A desktop scheduled task is a saved prompt that the desktop app runs for you on a schedule. When it is due, the app opens a fresh session on your machine, in the folder you chose, and Claude gets on with it. Because it runs locally, it can use your files, your tools and your MCP servers, which cloud jobs cannot.

The catch is that your computer must be awake and the app must be open. For anything that has to happen whether or not your laptop is on, use a cloud routine instead.

Which scheduler should I use?

Cloud routineDesktop scheduled task/loop
Executes onCloud (Anthropic-managed by default)Your machineYour machine
Machine must be onNoYesYes
Needs an open sessionNoNoYes
Survives restartsYesYesRestored with --resume, with caveats
Sees local filesNo, fresh cloneYesYes
MCPConnectors chosen per routineConfig files and connectorsWhatever the session has
Permission promptsNone, autonomousSet per taskSame as the session
Custom schedulesVia /schedule in the CLIYesYes
Shortest interval1 hour1 minute1 minute

My rule: cloud for things that must happen reliably, desktop for things that need my machine, and /loop for "keep an eye on this while I work".

Note: Tasks run against your working directory as it is, uncommitted changes and all. Turn on the worktree option when creating the task to give each run its own isolated git worktree.

Creating a task

You need Claude Desktop 1.1.5368 or later.

  1. In the Code tab, open Routines from the sidebar (or the sidebar's More menu).
  2. Click New routine and choose Local. (Choosing Cloud creates a routine instead.)
  3. Fill in the form:
FieldNotes
NameConverted to lowercase kebab-case and used as the folder name on disk; must be unique
DescriptionShown in the task list
InstructionsThe prompt, written as you would in the chat box. Pickers here set the permission mode and model; below it you choose the folder and whether to use a worktree
ScheduleSee below

A folder is mandatory, and if you have not trusted it yet you are asked to before saving.

You can also just ask in any session:

Every weekday at 08:30, check this repo for dependency updates with known security advisories and write a summary to notes/deps.md
Tomorrow at 16:00, remind me to check whether the staging deploy finished

The second creates a one-time task that disables itself after firing.

Schedule options

PresetRuns
ManualOnly when you click Run now. Useful for saved prompts
HourlyEvery hour
DailyEvery day at a time you pick
WeekdaysDaily, minus Saturday and Sunday
WeeklyA chosen day and time

For anything else (every 20 minutes, the first of the month, a single future time), ask Claude in a desktop session, for example "run the full test suite every 4 hours".

What happens at run time

While the app is open it checks schedules every minute. When a task is due it starts a new session, separate from anything you are doing. Each task has a small, fixed offset of a few minutes after its scheduled time to spread out API load; the same task always uses the same offset.

You get a desktop notification and the run appears under Scheduled in the sidebar. Claude can edit files, run commands, commit and open PRs as normal, but it cannot send or receive messages to your other desktop sessions through the app's cross-session surface.

If the machine is asleep at the scheduled time, the run is skipped. Keep computer awake in Settings > This computer > System prevents idle sleep (closing the lid still sleeps the machine).

Catch-up after sleep

On launch or wake, the app looks back seven days for missed runs. If a task missed any, it starts one catch-up run for the most recent missed slot and drops the rest, with a notification. So a daily task asleep for a week runs once.

That means a 09:00 task might actually run at 22:00. Build that into the prompt:

Review commits merged to main since yesterday 09:00. If the current time is after 18:00,
skip the review and just list the commits so I can look tomorrow.

Permissions

Each task has its own permission mode, and allow rules from ~/.claude/settings.json apply as well. If a task in Manual mode hits a tool it is not allowed to use, the run stalls and waits in the sidebar for you to approve.

The trick to avoiding stalls: after creating a task, click Run now, watch it, and choose "always allow" on each prompt. Later runs of that task approve the same tools automatically. You can review and revoke these from the Always allowed panel on the task's page.

MCP tools flagged requiresUserInteraction prompt every single time and have no always-allow, so tasks using them will stall on every run. See MCP.

Managing tasks

Click a task in Routines to open its page:

  • Run now to run immediately.
  • Status toggles Active and Paused.
  • Edit changes prompt, schedule, folder and other settings.
  • History lists every run, including skipped ones; hover a skipped entry to see why (asleep, previous run still going, or other tasks already running). Show more loads older entries.
  • Always allowed shows saved tool approvals.
  • Delete removes the task and archives its sessions. Tick Also delete files on disk to remove its files from ~/.claude/scheduled-tasks/ too.

You can list, create, edit and pause tasks by asking Claude ("pause the dependency-audit task"), but deleting needs the button.

A running task can change its own schedule or prompt using the update_scheduled_task MCP tool. I use this for a release checklist that tightens itself to hourly once a release/* branch appears.

The prompt on disk

Each task's prompt lives at ~/.claude/scheduled-tasks/<task-name>/SKILL.md (under CLAUDE_CONFIG_DIR if you set it). It has YAML frontmatter with name and description, and the prompt as the body:

---
name: morning-triage
description: Summarise overnight CI failures and new issues
---

Look at CI runs on main since 18:00 yesterday and any issues opened overnight.
Write a five-bullet summary to notes/triage.md, most urgent first.

Edits apply from the next run. Schedule, folder, model and enabled state are not in this file; change those through Edit or by asking Claude.