What problem does it solve? Consuming app-provided EventChannels in redux-saga often leads to hand-rolled while(true) take loops that leak subscriptions when developers forget try/finally cleanup. This Skill provides correct patterns for consuming websocket, DOM, and IPC event channels with native watcher effects. ## Core Features & Use Cases - Every-event consumption: Use native takeEvery(channel, worker) to fork a new worker for each independent event. - Latest-only consumption: Use takeLatest(channel, worker) when each new event should cancel the previous worker, such as streaming progress or latest search results. - Explicit channel ownership: Wrap channel usage in try/finally and call channel.close() to prevent subscription leaks on cancellation. - Use Case: When subscribing to a websocket event stream in a saga, replace a manual take loop with takeEvery(channel, worker) and close the channel in a finally block. ## Quick Start Ask the AI to rewrite a saga that consumes an EventChannel using takeEvery or takeLatest with proper try/finally channel cleanup.