Claude Cowork’s scheduling feature is one of the least-documented parts of the product, but it’s the most powerful. Understanding how it actually works — what triggers tasks, what Claude has access to when running them, and what the limitations are — changes how you design automation with it.
How Cowork Tasks Are Stored
Each Cowork task is a named, persistent instruction set saved locally in your Claude Desktop environment. The task contains: a name, a prompt (the full instruction Claude follows each run), a schedule, and optionally a working directory and a set of enabled tools. Tasks are stored in JSON format under your Documents folder at ~/Documents/Claude/Scheduled/ alongside a scheduled-tasks.json index file.
What Triggers a Scheduled Task
Tasks run on cron-style schedules configured when you create the task. Common schedules include daily at a specific time, weekly on specific days, or on-demand (manual trigger only). When the scheduled time arrives, Claude Desktop wakes the Cowork runner, loads the task prompt, and executes it with the configured tools and MCP connections active.
Critical limitation: Claude Desktop must be running and your machine must be awake when the scheduled time fires. Cowork is not a cloud scheduler — it depends on the local process being live. If your machine is asleep or Claude Desktop is closed, the task is skipped for that run with no retry.
What Claude Has Access to During a Task Run
When a Cowork task runs, Claude has access to everything configured in your Claude Desktop environment at that moment: all active MCP servers (Notion, Gmail, Google Drive, etc.), the Cowork bash VM for executing scripts and filesystem operations, any skill files mounted in the VM, and the working directory specified in the task config. It does not have access to the interactive chat thread — the task runs in its own isolated context.
Task Memory: What Carries Over Between Runs
Nothing carries over automatically. Each task run is stateless — Claude starts fresh with only the task prompt as its context. If your task needs to know what happened last time (what was published, what changed, what errors occurred), you have to build that logging into the task itself. The standard pattern: at the end of each run, write a log entry to a Notion page or local file; at the start of the next run, read that log to pick up context.
This is why well-designed Cowork tasks always end with a Notion write and start with a Notion read.
How to Design a Reliable Cowork Task
Tasks that work well have four components: a clear single objective per task (do one thing, do it well), explicit context loading at the start (read the log, check what already exists), a defined success condition Claude can verify, and a logging step at the end that captures what ran and any errors. Tasks that try to do too many things in one run, or that assume Claude will remember previous runs without explicit context, fail inconsistently.
When to Move Tasks to GCP Instead
Cowork scheduling works well for tasks that need to run during your working day when your machine is on. For anything that needs to run at 3 AM, run on a strict schedule with zero missed executions, or process large amounts of data that would exhaust the local VM disk — those belong on GCP Cloud Run or a Compute Engine cron job, not Cowork. The architectural principle: Cowork for interactive-adjacent automation, GCP for always-on production pipelines.
How do I create a scheduled task in Cowork?
Open Claude Desktop, navigate to the Cowork section, create a new task, write your prompt, and set the schedule. Tasks are saved locally and run when Claude Desktop is open at the scheduled time.
Why did my Cowork task not run at the scheduled time?
Most likely Claude Desktop was closed or your machine was asleep. Cowork tasks require Claude Desktop to be running. Tasks that miss their scheduled time are skipped — there is no retry or catch-up mechanism.
Can Cowork tasks run while I am using Claude Chat?
Yes. Cowork tasks run in a separate context from the chat interface. Active Cowork task runs do not interrupt or share context with your current chat sessions.
Leave a Reply