Source Intelligence

DisclaimerUnofficial, and not affiliated with Anthropic. Nearly all of this is read straight out of what ships: npm bundles, captured prompts, published docs. Anthropic's own notes go in verbatim, marked as theirs. The rest is my reading, and every entry carries the strings behind it. If one looks wrong, vote it down and say why.

All of v2.1.204 Home All releases olderv2.1.203 v2.1.205newer

  • Stream-json verbose mode now flushes buffered output at startup. When running with --output-format stream-json and --verbose together, any messages queued before the session writer was ready are now delivered immediately on initialization. Previously these early messages could be lost.
  • Trigger condition: xAb (the headless runHeadless entry point) evaluates l.outputFormat === "stream-json" && Boolean(l.verbose) (line ~884408) and, when true, calls Fdf(y) where y is the SDK session writer object (edn for local runs, Cgr for --sdk-url runs) created by PAb().
  • Buffer mechanics: Before the forwarder is registered, system-typed messages emitted via the internal oH() function accumulate in a per-session in-memory map (fWn). Buffering only occurs in non-interactive mode (Cn() returns !Rt.isInteractive) or when the REPL bridge is active (hx() returns Rt.replBridgeActive). The buffer is capped at 1,000 entries (PGh = 1000); when full, the oldest non-task_started/non-task_notification message is evicted first; if all remaining entries are task events, the oldest one is evicted.
  • Message types buffered: Any type: "system" event dispatched to oH() before registration — including subtypes task_started, task_updated, task_notification, task_progress, hook_started, hook_progress, hook_response, notification, and post_turn_summary.
  • Flush implementation (Fdf, line ~884227): Creates a flush callback t that calls lse() to destructively drain the current session's buffer (via Array.splice(0)), stamps each message with a fresh crypto.randomUUID() and the current session_id, then writes them one-by-one to the SDK writer via e.write(r).catch(() => {}) (write errors are silently discarded).
  • Persistent forwarding: After the initial flush, a3e(t) registers t as the global notify callback (Iqc = t). Subsequent oH() calls invoke Iqc?.() immediately after pushing to the buffer, so all future system messages are forwarded without delay for the remainder of the process lifetime. The callback is not cleaned up after startup (unlike the interactive TUI path which calls () => a3e(null) on unmount).
  • Evidence: Fdf / registerStartupSdkEventForwarder at line ~884227; call site guard at line ~884408; buffer/notify logic in oH / lse / a3e at lines ~275762–275784; buffer cap PGh = 1000 at line ~275808.

See this entry in the whole of v2.1.204 →