CLAUDE LABJP
FORK — Claude Code 2.1.212 changes what /fork does: it copies your conversation into a new background session with its own row in claude agents, so you can keep working. The old in-session subagent is now /subtaskLIMITS — WebSearch calls are now capped at 200 per session by default, and subagent spawns get the same 200 ceiling, so a runaway search or delegation loop stops on its ownMCPBG — MCP tool calls running past two minutes now move to the background automatically, keeping the session usable. Tune the threshold with CLAUDE_CODE_MCP_AUTO_BACKGROUND_MSPLANFIX — Fixed plan mode auto-running file-modifying Bash commands such as touch and rm without a permission prompt or an SDK canUseTool callbackSONNET5 — Claude Sonnet 5 is running on introductory pricing of $2 per million input tokens and $10 per million output. After August 31 it moves to $3 and $15IPO — Bankers are reportedly lining up investor meetings for Anthropic ahead of a possible public listing as soon as OctoberFORK — Claude Code 2.1.212 changes what /fork does: it copies your conversation into a new background session with its own row in claude agents, so you can keep working. The old in-session subagent is now /subtaskLIMITS — WebSearch calls are now capped at 200 per session by default, and subagent spawns get the same 200 ceiling, so a runaway search or delegation loop stops on its ownMCPBG — MCP tool calls running past two minutes now move to the background automatically, keeping the session usable. Tune the threshold with CLAUDE_CODE_MCP_AUTO_BACKGROUND_MSPLANFIX — Fixed plan mode auto-running file-modifying Bash commands such as touch and rm without a permission prompt or an SDK canUseTool callbackSONNET5 — Claude Sonnet 5 is running on introductory pricing of $2 per million input tokens and $10 per million output. After August 31 it moves to $3 and $15IPO — Bankers are reportedly lining up investor meetings for Anthropic ahead of a possible public listing as soon as October
Articles/Cowork
Cowork/2026-05-04Advanced

Why Cowork Scheduled Tasks Stop Mid-Run and How to Recover

Diagnose Cowork scheduled task failures using measured exit codes and real error output — why safe.directory delays failure instead of fixing it, how to pick a writable root before cloning, and how to structure logs with reason codes.

cowork13scheduled-task2automation95troubleshooting87skill2

Premium Article

You set up an automation, and one morning you notice it stopped somewhere in the middle. If you have run Cowork scheduled tasks for any length of time, you know the feeling — and the harder part is that you often cannot tell why it stopped.

I run article generation tasks across several sites as a solo developer, and over time a few clear patterns emerged. Here is how I organize them.

The second half of this article is not a tidy summary of theory. On the very day I wrote it, a scheduled run hit a working repository that had been left owned by another user and could not be written to. The exit codes and error strings below are the ones I captured in that session.

Why Scheduled Tasks "Disappear" Silently

The awkward part about scheduled tasks is that a failure does not always announce itself. A manual run shows you the problem on screen immediately. A scheduled run happens in the background, so a mid-run exit can go unnoticed for days.

The causes fall into three broad patterns.

Permission dialog lockups are the most common. Cowork scheduled tasks run when nobody is at the keyboard, so any confirmation dialog leaves the run waiting for an answer that never comes. AskUserQuestion, the Read / Write / Edit file tools, and request_cowork_directory all trigger dialogs. Use them in a scheduled context and the run stalls with nobody there to click "Allow."

Disk exhaustion (ENOSPC) shows up regularly in real operation. Anything that runs Claude Code or git clone on a schedule gradually eats /tmp. If npm package installation is in the loop, a single run can consume hundreds of megabytes.

Git lock conflicts happen when a previous run ended halfway. A leftover .git/index.lock makes the next run fail with fatal: Unable to create ... .git/index.lock.

These three are the manageable kind, because they surface as errors. The genuinely hard ones are the failures that produce no error at all and simply pretend to succeed. Those come later in the article.

Diagnosis: Identifying Which Pattern Hit You

Start with the run log. Cowork keeps a session log for scheduled tasks, so read the last message it emitted.

# Free space in /tmp (the ENOSPC signal)
df /tmp --output=avail -m | tail -1
 
# Leftover git lock files
find /tmp/repos -name "*.lock" 2>/dev/null
 
# Who owns the working root — and who are we?
stat -c '%U:%G %a %n' /tmp/repos/* 2>/dev/null
id -u

If the last log line lands right after an AskUserQuestion call or a Read tool invocation, it is a permission dialog. If you see ENOSPC or No space left on device, it is disk. If you see index.lock or fatal: Unable to create, it is a lock conflict.

The stat and id -u pairing at the end is deliberate. The uid your task runs as is not guaranteed to be stable, and a directory left behind by a previous process under a different user will fail every write from that point onward. The next section shows how nastily that surfaces.

Thank you for reading this far.

Continue Reading

What follows includes implementation code, benchmarks, and practical content we hope you'll find useful. This site runs without ads — server and development costs are supported entirely by members like you. If it's been helpful, we'd be truly grateful for your support.

WHAT YOU'LL LEARN
Measured proof that safe.directory leaves git status at exit 0 while fetch alone fails with exit 255 — reads pass, so the failure surfaces minutes later than it should
A preflight that settles on a writable root before cloning (uid 65534 detection, $HOME fallback, free-space threshold), sized from measured numbers: 41MB per clone, 2.8s, 2,990MB free
Reason-coded structured logs and aggregation one-liners that tell you in seconds which morning things actually broke
Secure payment via Stripe · Cancel anytime

Unlock This Article

Get full access to the rest of this article. Buy once, read anytime. This site is ad-free — your support goes directly toward keeping it running.

or
Unlock all articles with Membership →
Share

Thank You for Reading

Claude Lab is ad-free, supported entirely by members like you. We publish practical guides daily with implementation code, benchmarks, and production-ready patterns. If you've found it useful, we'd love to have you on board.

  • Copy-paste ready implementation code
  • New advanced guides published daily
  • $5/mo or $10 for lifetime access
View Membership →

Related Articles

Cowork2026-07-17
It Worked on My Machine, but Nobody Could Trigger It — Four Assumptions I Stripped Out of a Cowork Plugin
I bundled four working automation skills into a plugin and shared it. Only one of them ever fired. Here is how I measured skill trigger rate, and the four assumptions — vocabulary, paths, connections, and naming — I had to strip out before it was portable.
Cowork2026-06-27
Logged as success, but it produced nothing — stopping silent failures in Cowork scheduled tasks with end-of-run assertions
A Cowork scheduled task exits 0, yet not a single artifact was produced. Trusting the exit code alone hides this silent failure. Here is how to turn your definition of done into end-of-run assertions that fail loudly with an evidence log.
Cowork2026-07-05
When Claude Declines a Request on Safety Grounds, What Should an Unattended Pipeline Return?
A third kind of ending that is neither an error nor a normal completion — a safety decline. Here is how to fold it into a pipeline you run unattended, with a classifier and a review-queue design drawn from indie development.
📚RECOMMENDED BOOKS
Build a Large Language Model (From Scratch)
Sebastian Raschka
LLM Dev
Prompt Engineering for LLMs
Berryman & Ziegler
Prompting
AI Engineering
Chip Huyen
AI Eng
* Contains affiliate links
See all →