{"version":"2.1.304","anchor":"startup-marks-streamed-as-keep-alive-lines","canonical_anchor":"startup-marks-streamed-as-keep-alive-lines","heading":"Headless startup progress is now reported to SDK hosts through keep_alive messages","tier":"notice","area":"Headless Mode","scope":"individual","heads_up":false,"url":"https:\/\/changelogs.core-directive.com\/v\/2.1.304\/e\/startup-marks-streamed-as-keep-alive-lines","release_url":"https:\/\/changelogs.core-directive.com\/v\/2.1.304","markdown":"### Headless startup progress is now reported to SDK hosts through keep_alive messages\n\nHeadless Claude Code now streams startup checkpoints as keep_alive lines with a startup_mark, and the SDK records them with a timestamp\n\n**What**\n\nWhen Claude Code runs headless (without its interactive screen, driven by another program through the SDK, the toolkit for building on Claude Code), it now reports how far startup has got:\n\n- Each startup checkpoint is sent once as a `keep_alive` line carrying a `startup_mark` field, provided something is registered to receive it. Marks include `before_runHeadlessStreaming` and `stdin_listen_started`.\n\n- On the receiving side, the SDK's query reader now reads that text field from `keep_alive` messages, up to a size limit, and stores it as `startupMark` together with a timestamp. Before, `keep_alive` messages were simply ignored.\n\n**Why**\n\nPrograms that host Claude Code can now see startup progress and how long each step takes, which helps when working out why a headless session is slow to start.\n\n- Area: Headless Mode\n- Tier: You'll notice\n- Useful: 3\/5\n- Signal: 3\/5\n- Scope: individual\n- Heads-up: no"}