Unclear Which values the variable accepts is not stated.
What
In a remote session, Claude Code runs on a cloud worker and sends the rows of the conversation up to a session service so that viewers can follow along. The set of rules deciding when rows are held back and when they are sent is called the flush policy. That policy has new options and new behaviour:
hold_across_model_calls(holdAcrossModelCalls) lets the worker keep holding rows across several model calls instead of sending at the end of each one. When it is on, the policy uses different default age and event limits and turns offflush_on_sampling_end. While the turn hold is open, user rows are no longer allowed to wait.merge_worker_reports(mergeWorkerReports) lets back-to-backworker_statusupdates be combined. The uploader now drains a pendingworker_statusevent when another one follows. When the newmergesSameRuncheck passes (it needsmergeWorkerReportsand the hold switch), it drains a moment later in a microtask instead of straight away.CLAUDE_CODE_CCR_EVENT_FLUSH_POLICYis a new environment variable, read as JSON with the raw text as a fallback, that becomeslaunchFlushPolicy. When the server sends no policy,takeUpFlushPolicyfalls back to it. The variable is added to two lists of allowed environment variables. The same options object reads the server-controlled switchestengu_ccr_event_hold_enabled(falls back to on) andtengu_ccr_upload_hold_marker(falls back to off).- Pickup barriers and a
pickupWaitMssetting now delay writes. Setting the worker to idle opens every pickup barrier and sets the turn hold back to "open". - Viewer checkpoints: a viewer can request one through
setOnCheckpointRequest, which callscheckpointForViewer("watcher"), and a reconnect callscheckpointForViewer("reconnect")when rows are held across model calls. Acheckpoint_donesystem event is sent after held rows are uploaded. - Live rows are tagged with
live_turn_idandlive_index. - Delivery reports now carry the user message's uuid, not only the event id and status.
- Event types starting with
control_are dropped fromlive_twin_types. - The check for unsent items now counts a pending item as unsent, and
close()drains the queue first. - The policy comparison checks both new fields, and both are recorded in usage reporting.
The new fields come from server config or the launch environment, not from a user setting.
Why
This changes when a remote session's transcript reaches the people watching it, how status updates are batched, and how a viewer catches up after reconnecting. Nothing here is set by an ordinary user.
tengu_ccr_event_hold_enabled Not enough to sayNothing here resolved what this flag was doing on this version, so nothing here should be read as on or off.
This account: no value returned · anonymous baseline: no value returned · compiled default in v2.1.305: on
These values were read against a different version of Claude Code, so treat them as the nearest reading available instead of one taken on this release.
tengu_ccr_upload_hold_marker Not enough to sayNothing here resolved what this flag was doing on this version, so nothing here should be read as on or off.
This account: no value returned · anonymous baseline: no value returned · compiled default in v2.1.305: off
These values were read against a different version of Claude Code, so treat them as the nearest reading available instead of one taken on this release.
Read once, for one account on one subscription tier, against v2.1.305. It isn't a statement about your account. What a flag value here can and cannot tell you
Which values the variable accepts is not stated.
New in this build: CLAUDE_CODE_CCR_EVENT_FLUSH_POLICY