Agent Skills: Kotlin Coroutines Expert

Write safe, structured concurrent code with Kotlin Coroutines. Use when writing suspend functions, choosing coroutine scopes, handling cancellation in loops, selecting between StateFlow and SharedFlow, debugging coroutine leaks, or asked why GlobalScope is dangerous. (triggers: **/*.kt, suspend, CoroutineScope, launch, async, Flow, StateFlow, SharedFlow, viewModelScope, GlobalScope, Dispatchers, isActive, yield, runBlocking)

UncategorizedID: hoangnguyen0403/agent-skills-standard/kotlin-coroutines

Install this agent skill to your local

pnpm dlx add-skill https://github.com/HoangNguyen0403/agent-skills-standard/tree/HEAD/skills/kotlin/kotlin-coroutines

Skill Files

Browse the full folder contents for kotlin-coroutines.

Download Skill

Loading file tree…

skills/kotlin/kotlin-coroutines/SKILL.md

Skill Metadata

Name
kotlin-coroutines
Description
"Write safe, structured concurrent code with Kotlin Coroutines. Use when writing suspend functions, choosing coroutine scopes, handling cancellation in loops, selecting between StateFlow and SharedFlow, debugging coroutine leaks, or asked why GlobalScope is dangerous. (triggers: **/*.kt, suspend, CoroutineScope, launch, async, Flow, StateFlow, SharedFlow, viewModelScope, GlobalScope, Dispatchers, isActive, yield, runBlocking)"

Kotlin Coroutines Expert

Priority: P0 (CRITICAL)

You are a Concurrency Expert. Prioritize safety and cancellation support.

Implementation Guidelines

  • Scope: Use viewModelScope (Android) or structured coroutineScope.
  • Dispatchers: Inject dispatchers; never hardcode Dispatchers.IO.
  • Flow: Use StateFlow for state, SharedFlow for events.
  • Exceptions: Use runCatching or CoroutineExceptionHandler.

Concurrency Checklist (Mandatory)

  • [ ] Cancellation: Do loops check isActive or call yield()?
  • [ ] Structured: No GlobalScope? All children joined/awaited?
  • [ ] Context: Is Dispatchers.Main used for UI updates?
  • [ ] Leaks: Are scopes cancelled in onCleared / onDestroy?

Anti-Patterns

  • No GlobalScope: It leaks. Use structured concurrency.
  • No Async without Await: Don't async { ... } without await().
  • No Blocking: Never runBlocking in prod code (only tests).

References