Follow Discord
Sweep 22 Oct 2026 · 21:04Z Build v2.1.309 528 read Stable v2.1.308 Latest v2.1.309 Next v2.1.309 Feeds RSS JSON llms.txt llms-full.txt Unofficial

Claude Code v2.1.104 ·

Byte-level stream idle timeout detection

Entry
JSON All of v2.1.104
EntryKind: in v2.1.104,
ImprovementsSection of the release
What

API streaming responses are now monitored at the byte level for idle connections, catching stalled streams that the existing chunk-level timeout might miss.

Details
  • A new StreamIdleTimeoutError class and TransformStream wrapper monitor the raw byte stream from the API. If no bytes arrive within the timeout window, the stream is aborted and retried.
  • The timeout is controlled by the existing CLAUDE_STREAM_IDLE_TIMEOUT_MS environment variable (default: 90 seconds, minimum: 15 seconds).
  • This is layered on top of the pre-existing chunk-level idle timeout, providing defense-in-depth: the byte-level check catches low-level TCP stalls, while the chunk-level check handles higher-level protocol issues.
  • Error reporting is now more granular — when a stream times out after receiving partial data, the error message distinguishes "Stream idle timeout - partial response received" from "Stream idle timeout - no chunks received", which should improve diagnostics.
  • Only applies to first-party and Anthropic AWS streaming connections (SSE text/event-stream responses).
Usage
# Override the default 90s idle timeout (minimum 15s)
CLAUDE_STREAM_IDLE_TIMEOUT_MS=60000 claude
Evidence

New StreamIdleTimeoutError class (search for "stream idle: no bytes for") and TransformStream wrapper in fetch middleware (search for "Streaming idle timeout (byte-level)")

Strings lifted out of the shipped bundle, so the claim above can be checked against them.

See this entry in the whole of v2.1.104 →

Feedback