Evidence record / pi-coding-agent
A dated record of one change, kept so the writing that cites it can be checked. Compiled from the sources listed below by the research run, not written for reading. The judgment lives in the issues that cite it, below.
2026-08-10-pi-coding-agent-json-and-rpc-message-update-becomes-delta-only-ending-quadratic-stdout
JSON and RPC message_update becomes delta-only, ending quadratic stdout growth that OOM-killed agents.
Before this change, every message_update event in --mode json and --mode rpc carried the entire cumulative assistant message twice -- once as message, once as assistantMessageEvent.partial -- and one event was emitted per token delta. Streaming a single large tool call therefore re-serialized all of its arguments on every delta, so stdout grew with the square of the argument size. Issue #7290 documents the measurements: a 19 KB file emitted 165 MB of JSON, a 39 KB file emitted 691 MB, and around 99 KB in one write the process exceeded Node's default heap and died with FATAL ERROR: Reached heap limit. v0.84.0 removes both cumulative fields; clients must now assemble deltas between message_start and message_end, with message_end authoritative. The v0.84.0 release notes list this under Breaking Changes.
Channel: tagged-release. Ancestry: Commit a4475344fb765850ec5321efe3c67e6f364ead5c ("fix(coding-agent): make JSON streaming output linear (#7394)", authored 2026-08-03T16:33:22Z). gh api repos/earendil-works/pi/compare/v0.84.0...a4475344 returned status=behind, behind_by=139 (ancestor of the v0.84.0 tag). gh api repos/earendil-works/pi/compare/v0.83.0...a4475344 returned status=ahead, ahead_by=202 (not in v0.83.0). v0.84.0 is a stable, non-prerelease tag: releases API shows prerelease=false, draft=false, published 2026-08-06T11:07:05Z.
Operator consequence: Adapt, then upgrade. Anyone driving Pi non-interactively -- --mode json, --mode rpc, or any wrapper parsing its event stream -- must rewrite the client to accumulate deltas; code that read message_update.message or assistantMessageEvent.partial now gets nothing. In exchange, long file writes under automation stop dying at ~99 KB. If you run Pi headless and have seen unexplained heap-limit crashes on large writes, this is the cause and 0.84.0 is the fix.
Receipt
Finding metadata
Run: 2026-08-10-weekly-digest-2026-08-03_2026-08-10-frontier-v0
Finding ID: 2026-08-10-pi-coding-agent-json-and-rpc-message-update-becomes-delta-only-ending-quadratic-stdout
Source links
Primary links, including exact changelog lines when available.
Versioned source: run artifact