What problem does it solve? Choosing the wrong Compose effect API wastes coroutine scopes, leaks listeners, or silently drops updated callbacks. This Skill provides a decision tree for picking between LaunchedEffect, DisposableEffect, SideEffect, rememberUpdatedState, and skydoves/compose-effects' RememberedEffect and ViewModelStoreScope. ## Core Features & Use Cases - Effect API decision tree: Maps each scenario (coroutine work, setup/teardown, synchronous key reaction, per-commit publishing) to the cheapest correct API. - Stale callback fixes: Shows how rememberUpdatedState keeps long-lived LaunchedEffect blocks reading the latest callback without restarting. - Per-row ViewModels: Uses ViewModelStoreScope with a stable key so each LazyColumn row gets its own ViewModel instead of sharing the parent store. - Use Case: A chat screen where each row needs its own ViewModel and a timer callback keeps firing a stale lambda — apply ViewModelStoreScope(key = row.id) and rememberUpdatedState to fix both. ## Quick Start Ask the assistant to review your composable and recommend the correct effect API for a listener that leaks or a LaunchedEffect that restarts unexpectedly.