kotlin-coroutines
Kotlin Coroutines Patterns
Umbrella skill for Kotlin coroutine development: structured concurrency, cancellation, Flow, StateFlow/SharedFlow, Channels, exception handling, and dispatchers. Routes to the correct reference based on the task at hand.
Reference Loading Table
| Signal | Load These Files | Why |
|---|---|---|
| Concurrency | concurrency-patterns.md |
Scopes, cancellation, dispatchers, exception handling |
| Flow | flow-patterns.md |
Flow builders, StateFlow, SharedFlow, operators |
| Channels | channel-patterns.md |
Producer-consumer, fan-in/fan-out patterns |
| Anti-patterns | preferred-patterns.md |
GlobalScope, unstructured launch, CancellationException |
Instructions
Step 1: Identify the Domain
Classify the task into one or more domains, then load the corresponding reference files. Only load what is needed -- do not load all references for every task.
| Domain | Load Reference | When |
|---|---|---|
| Concurrency | references/concurrency-patterns.md |
Scopes, cancellation, dispatchers, exception handling |
| Flow | references/flow-patterns.md |
Flow builders, StateFlow, SharedFlow, operators |
| Channels | references/channel-patterns.md |
Producer-consumer, fan-in/fan-out patterns |
| Anti-patterns | references/preferred-patterns.md |
GlobalScope, unstructured launch, CancellationException |
Multiple domains may apply. For example, reviewing code that uses both Flow and Channels
should load both flow-patterns.md and channel-patterns.md.
Step 2: Load and Follow the Reference
Read the selected reference file(s) using ${CLAUDE_SKILL_DIR}/references/<name>.md.
Each reference contains the full patterns, code examples, and decision matrices for that
domain. Follow the instructions in the reference as if they were this skill's instructions.
Step 3: Execute
Apply the loaded reference patterns to the task. Use the code examples as templates for implementation guidance.
Key Principles
- Structured concurrency is non-negotiable -- every coroutine must have a parent scope that defines its lifetime.
- Inject dispatchers -- accept
CoroutineDispatcheras a parameter so callers (and tests) can control threading. - Always rethrow CancellationException -- rethrow it immediately or use specific exception types instead of catching
Exception. - Prefer Flow over Channel -- Flow is cold, composable, and handles backpressure. Channels are lower-level; reach for them only when Flow cannot express the pattern.
- Use supervisorScope for partial failure tolerance -- when independent tasks should not cancel each other, wrap them in supervisorScope.
- Use scoped coroutines instead of GlobalScope -- it has no lifecycle, no cancellation, and no structured concurrency. Pass a scope from your application framework instead.
More from notque/claude-code-toolkit
generate-claudemd
Generate project-specific CLAUDE.md from repo analysis.
12fish-shell-config
Fish shell configuration and PATH management.
12pptx-generator
PPTX presentation generation with visual QA: slides, pitch decks.
12codebase-overview
Systematic codebase exploration and architecture mapping.
10image-to-video
FFmpeg-based video creation from image and audio.
9data-analysis
Decision-first data analysis with statistical rigor gates.
9