What problem does it solve? Redux-saga code often suffers from duplicate watchers, wildcard subscriptions, misplaced selectors, and unhandled retry or stream failures. This Skill enforces a single canonical ownership model and typed-redux-saga conventions so saga side effects stay predictable, cancellable, and testable. ## Core Features & Use Cases - Watcher and worker conventions: Enforces yield* with typed-redux-saga effects, passing action creators (not .type) to takeEvery/takeLatest/takeLeading, and reading state only through named selectors imported from [slice]-selectors.ts via .effect(...). - Debounce, retry, and streaming patterns: Provides canonical recipes for trailing debounce with takeLatest + delay, leading/windowed debounce with takeLeading, branching on all retryWithTimeout outcomes, and consuming async generators with wrapStreamingGenerator. - Lifecycle and crash routing: Requires explicit store.runSaga(sagaFn) startup, attached fork instead of spawn, finally channel cleanup, and routes crash/restart questions to the core/saga-manager skill. - Use Case: When adding a search feature, you register one takeLatest watcher on searchInputChanged, delay 300ms in the worker, call the API, and put results—avoiding duplicate watchers and wildcard take('*') subscriptions that would fire on every streaming chunk action. ## Quick Start Ask the agent to write a typed-redux-saga watcher that debounces search input by 300ms and loads results through a named selector effect.