What probably matters to youSection of the release
What
When Claude Code fails to start (for example: the CLI is too old for the workspace/server, no usable shell tool is found on Windows, proxy configuration is invalid, or another process already holds the session) and is running with --output-format stream-json, it can now emit a structured result message on stdout carrying a machine-readable reason, in addition to (or instead of) the usual stderr text.
This reason is carried in a new startup_failure_reason field, with values seen including cli_version_too_old, shell_tool_missing, proxy_invalid, and session_held_by_background.
This behavior requires both --output-format stream-json and the environment variable CLAUDE_CODE_STARTUP_FAILURE_RESULTS to be set; the emitting function checks for the env var before doing anything.
Why
This lets SDK and other programmatic callers detect exactly why a headless Claude Code process failed to start by parsing structured output, instead of having to scrape human-readable stderr text.