What problem does it solve? Kotlin codebases often hide dangerous coroutine bugs: classes that store a CoroutineScope silently stop doing work after cancellation, init-block launches make startup behavior invisible, and broad catch blocks swallow CancellationException so cancelled work keeps running. This Skill gives you a systematic checklist to find these anti-patterns during code review and the exact refactoring to fix each one. ## Core Features & Use Cases - Anti-pattern detection: Identifies stored CoroutineScope properties, init-block launches, fire-and-forget APIs on non-UI classes, DI-bound singletons that launch from constructors, swallowed CancellationException, and runBlocking misuse. - Concrete fixes with code examples: Each anti-pattern pairs a bad snippet with a corrected version, usually converting the API to suspend and letting the caller own the scope. - Carve-outs and boundaries: Documents legitimate exceptions such as the UI state-holder boundary (viewModelScope in ViewModels), ContentProvider's synchronous surface, and Initializer classes that only register listeners. - Use Case: While reviewing a pull request, you spot a repository with private val scope: CoroutineScope and a fun refresh() { scope.launch { ... } }. Use this Skill to confirm the anti-pattern, explain the silent-cancellation risk, and refactor it to suspend fun refresh() with the ViewModel owning the scope. ## Quick Start Review this Kotlin file for coroutine structured-concurrency anti-patterns and suggest fixes for any stored scopes, init launches, swallowed cancellation, or runBlocking usage.