{"version":"2.1.311","anchor":"remote-keepalive-frames-now-tracked-per-wait-with-telemetry","canonical_anchor":"remote-keepalive-frames-now-tracked-per-wait-with-telemetry","heading":"Remote sessions may send fewer keep-alive signals during background-only waits","tier":"internal","area":"Sessions","scope":"individual","heads_up":false,"url":"https:\/\/changelogs.core-directive.com\/v\/2.1.311\/e\/remote-keepalive-frames-now-tracked-per-wait-with-telemetry","release_url":"https:\/\/changelogs.core-directive.com\/v\/2.1.311","markdown":"### Remote sessions may send fewer keep-alive signals during background-only waits\n\nIn remote sessions, keep-alive signals are now tracked per wait and may be held back to an interval when only background tasks are pending\n\n**Unclear.** It is not known what decides when the signals are held back during background-only waits.\n\n**What**\n\nA keep-alive signal is a small message a session sends so the other side knows it is still running. This applies only when `CLAUDE_CODE_REMOTE` is set, meaning Claude Code is running as a remote session.\n\nKeep-alive handling while waiting at the end of a turn has been reworked:\n\n- Claude Code records what kept each wait going, such as a shell command, a monitor, a subagent (a helper agent Claude Code starts) or a scheduled wakeup.\n\n- When the wait ends, it reports how many signals it sent, how long it waited on background tasks alone, and what held the wait.\n\n- When only background tasks are pending and a further condition holds, it holds back the signals and sends one only at set intervals.\n\nBefore, the session simply sent a keep-alive signal whenever its conditions were met.\n\n**Why**\n\nThis changes when remote sessions send keep-alive signals, which could affect whether a remote session that is only waiting on background work stays alive.\n\n- Area: Sessions\n- Names: `CLAUDE_CODE_REMOTE`\n- Tier: Under the hood\n- Useful: 1\/5\n- Signal: 1\/5\n- Scope: individual\n- Heads-up: no"}