{"version":"2.1.280","anchor":"usage-limit-retry-now-surfaces-a-heartbeat-system-message-du","canonical_anchor":"usage-limit-retry-now-surfaces-a-heartbeat-system-message-du","heading":"New api_retry system message shows a live heartbeat while waiting on a rate limit","tier":"soon","area":"Rate Limits","scope":null,"heads_up":null,"url":"https:\/\/changelogs.core-directive.com\/v\/2.1.280\/e\/usage-limit-retry-now-surfaces-a-heartbeat-system-message-du","release_url":"https:\/\/changelogs.core-directive.com\/v\/2.1.280","markdown":"### New api_retry system message shows a live heartbeat while waiting on a rate limit\n\nClaude Code now shows a live heartbeat message while it waits out a rate-limit retry\n\n**Unclear.** Whether this heartbeat message is actually shown depends on the `tengu_rustling_sunset` gate, which has not been read for this account.\n\n**What**\n\n- Claude Code recognizes a new kind of system message with subtype `api_retry`.\n\n- While a request is waiting to retry after hitting a rate limit, new logic polls the pending retry on a timer and emits this synthetic `system`\/`api_retry` message, including the attempt number, max retries, retry delay in milliseconds, and the error type (`rate_limit`).\n\n- This is gated behind the `tengu_rustling_sunset` flag.\n\n**Why**\n\nThis gives a visible heartbeat in the UI so that when Claude Code is silently waiting to retry a rate-limited request, you can see that it's actually working through the wait rather than appearing stuck.\n\n- Flag `tengu_rustling_sunset`: Not enough to say (read for one account on one subscription tier against v2.1.280; this account: no value returned, anonymous baseline: no value returned, compiled default: 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.\n- Area: Rate Limits\n- Tier: Nothing to try yet\n- Useful: 2\/5\n- Signal: 2\/5\n- Present in the build but not switched on"}