{"version":"2.1.296","anchor":"stream-json-startup-failure-is-reported-as-a-synthetic-assis","canonical_anchor":"stream-json-startup-failure-is-reported-as-a-synthetic-assis","heading":"Programs driving Claude Code over stream-json get a message when startup fails","tier":"notice","area":"Agents","scope":"individual","heads_up":false,"url":"https:\/\/changelogs.core-directive.com\/v\/2.1.296\/e\/stream-json-startup-failure-is-reported-as-a-synthetic-assis","release_url":"https:\/\/changelogs.core-directive.com\/v\/2.1.296","markdown":"### Programs driving Claude Code over stream-json get a message when startup fails\n\nWhen Claude Code fails to start under `--input-format` stream-json, it can answer with a \"Claude Code didn't start\" message and a result\n\n**What**\n\nSome programs control Claude Code by sending it messages as JSON, using `--input-format` stream-json. When Claude Code fails to start in that setup, it can answer with an assistant message beginning \"Claude Code didn't start.\" followed by a success result whose `terminal_reason` is `turn_setup_failed`.\n\nThis happens only when all of these hold:\n\n- a verdict from the host program is available\n\n- `--input-format` is stream-json\n\n- `--no-session-persistence` is not used\n\n- `CLAUDE_BRIDGE_REATTACH_SESSION` is not set\n\n- a user message arrives within a time limit\n\n**Why**\n\nA program driving Claude Code this way gets a readable explanation that startup failed, instead of no reply at all.\n\n- Area: Agents\n- Tier: You'll notice\n- Useful: 2\/5\n- Signal: 1\/5\n- Scope: individual\n- Heads-up: no"}