{"version":"2.1.321","anchor":"startup-failures-now-exit-with-a-reason-code","canonical_anchor":"startup-failures-now-exit-with-a-reason-code","heading":"More startup and resume failures now say why Claude Code quit","tier":"internal","area":"Telemetry","scope":"individual","heads_up":false,"url":"https:\/\/changelogs.core-directive.com\/v\/2.1.321\/e\/startup-failures-now-exit-with-a-reason-code","release_url":"https:\/\/changelogs.core-directive.com\/v\/2.1.321","markdown":"### More startup and resume failures now say why Claude Code quit\n\nSeveral startup and resume failures still exit with code 1 but now record a reason, such as a failed resume or a session held by a background task\n\n**What**\n\nWhen Claude Code cannot start, it stops with exit code 1. An exit code is the number a program hands back to whatever launched it. Some of these exits already recorded a reason, and more of them now do. The exit code is still 1. The reasons now recorded are:\n\n- `session_held_by_background`: the session is already held by a background task\n\n- `sandbox_worktree_protection_failed`: protection for a sandboxed worktree could not be set up\n\n- `resume_failed`: resuming an earlier session failed\n\n- `worker_state_unread`: the saved state of a worker could not be read\n\n**Why**\n\nA reason attached to each exit makes failed starts and failed resumes easier to tell apart when they are reported and counted. A plain exit code of 1 says only that something went wrong.\n\n- Area: Telemetry\n- Tier: Under the hood\n- Useful: 1\/5\n- Signal: 0\/5\n- Scope: individual\n- Heads-up: no"}