[BUG] Cowork scheduled tasks with high-frequency cron expressions cause unrecoverable startup freeze on Windows — standard VM recovery does not fix

Resolved 💬 2 comments Opened Mar 8, 2026 by BryceEWatson Closed Apr 5, 2026

Preflight Checklist

  • [x] I have searched existing issues and this hasn't been reported yet
  • [x] This is a single bug report (please file separate reports for different bugs)
  • [x] I am using the latest version of Claude Code

What's Wrong?

After configuring scheduled tasks in Cowork on Windows, Claude Desktop freezes on every startup — no UI renders, the app is completely unusable. The root cause is the catch-up mechanism for missed scheduled task runs.

The scheduled task config (scheduled-tasks.json in local-agent-mode-sessions) contained a task with cron expression 0 21,22,23,0,1,2,3,4,5,6 * * * (10 runs per night). On every app launch, the catch-up mechanism detects a missed run and attempts to fire a catch-up session. This initialization hangs before the UI renders, creating an unbreakable boot loop.

Critical: Standard recovery steps do NOT fix this. All of the following were attempted and failed:

  • Help → Troubleshooting → Clear cache and restart (unreachable — UI never renders)
  • Kill processes + restart CoworkVMService
  • Delete %APPDATA%\Claude\vm_bundles and %APPDATA%\Claude\claude-code-vm to force VM rebuild
  • Full PC restart
  • Disabling auto-start and rebooting to clean state

The VM rebuilt successfully each time, but the freeze recurred because none of these steps touch the scheduled task configuration.

Fix that worked: Renaming the scheduled task config file:

Rename-Item "$env:APPDATA\Claude\local-agent-mode-sessions\<session-uuid>\<task-uuid>\scheduled-tasks.json" "scheduled-tasks.json.bak"

After this, Claude Desktop booted normally.

What Should Happen?

  1. The UI should fully render before catch-up runs are attempted, so users have a recovery path if catch-up initialization hangs.
  1. Catch-up initialization should have a timeout — if it doesn't complete within a reasonable window, skip and let the user decide.
  1. The Scheduled Tasks UI should be accessible even when catch-up runs are failing, so users can disable or delete problematic tasks without manually editing JSON on disk.
  1. Cron expressions should be validated against catch-up behavior — a task running 10 times per night guarantees a catch-up trigger on every launch.

Error Messages/Logs

No error message is displayed. The app simply hangs with no UI. Process is visible in Task Manager. The freeze is silent.

Steps to Reproduce

  1. Open Cowork on Claude Desktop (Windows)
  2. Create a scheduled task with a high-frequency cron expression, e.g. 0 21,22,23,0,1,2,3,4,5,6 * * *
  3. Close Claude Desktop
  4. Wait for at least one scheduled run to be missed
  5. Relaunch Claude Desktop
  6. App freezes — no UI renders, process visible in Task Manager

Claude Model

None

Is this a regression?

I don't know

Last Working Version

_No response_

Claude Code Version

2.1.71

Platform

Other

Operating System

Windows

Terminal/Shell

PowerShell

Additional Information

Directly related issues — same scheduled-tasks.json freeze, confirmed on macOS:

  • #32167 — Claude Desktop freezes on launch when scheduled-tasks.json exists (macOS, same root cause, same fix)
  • #32125 — Claude for OSX hangs on startup (resolved by removing scheduled-tasks.json per #32167)

Related issues that describe overlapping Cowork stability problems but do NOT identify this root cause:

  • #25663 — workspace bricked after Chrome automation (VM corruption)
  • #26646 — freezing + API 500 + 12GB VM bundle (VM boot behavior)
  • #26921 — UI freezes mid-response (renderer bug)
  • #29022 — /schedule skill fails on Windows (task creation)
  • #30092 — cache clear wiped scheduled task history (data loss)
  • #31023 — CLI soft-bricked by hook on startup (closest analog — config-triggered freeze with no safe mode)

Full writeup with diagnosis walkthrough: [will add blog link after publishing]

View original on GitHub ↗

This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗