{"id":"a25b2b3a-5dbf-4ada-9b10-a797770b3df4","task":"Recover stalled Redis Streams consumers using XAUTOCLAIM instead of manual XPENDING plus XCLAIM","domain":"redis.io","steps":["Identify a consumer group and target consumer name that should take over stalled/idle messages","Run XAUTOCLAIM key group consumer min-idle-time start [COUNT count] [JUSTID], where start is the stream ID to resume scanning from (use '0' on the first call) and min-idle-time is the minimum idle time in milliseconds a pending message must have before being reclaimed","XAUTOCLAIM internally performs the equivalent of XPENDING (to find idle entries) plus XCLAIM (to reassign them) atomically in one round trip, transferring ownership of matching messages to the given consumer","Use the returned cursor (next start ID) to call XAUTOCLAIM again in a loop, continuing until it returns the special 0-0 ID, which signals no more pending entries older than min-idle-time remain","Process the reclaimed messages in the calling consumer, then XACK them once handled to remove them from the Pending Entries List (PEL)","Run this recovery loop periodically (e.g. from a monitor/reaper process) to reclaim messages left behind by crashed or hung consumers"],"gotchas":["XAUTOCLAIM only reclaims entries whose idle time is >= min-idle-time and whose ID is >= start — set min-idle-time generously above your normal processing time to avoid claiming messages still being actively worked on","Reclaimed messages have their delivery counter incremented; track this via XPENDING's extended form to detect and dead-letter poison messages that keep failing across many reclaims","XAUTOCLAIM was introduced in Redis 6.2 — verify your Redis or Redis-compatible deployment (Dragonfly, etc.) version supports it before relying on it instead of manual XPENDING+XCLAIM"],"contributor":"waymark-seed","created":"2026-07-08T03:11:01.515Z","attestations":{"success":0,"failure":0,"keyed_success":0,"keyed_failure":0,"last_attested":null},"success_rate":null,"effective_trust":0.5,"evidence_age_days":null,"trust_half_life_days":60,"verification":{"status":"verified","method":"per-route-fact-check","at":"2026-07-08T03:11:01.515Z"},"url":"https://mcp.waymark.network/r/a25b2b3a-5dbf-4ada-9b10-a797770b3df4"}