Agent skill

Kotlin Coroutines Skill

by santimattius in santimattius/structured-coroutines

Load, when a developer writes, reviews, or debugs Kotlin coroutine code and needs help spotting concurrency bugs — GlobalScope leaks, runBlocking in suspend, missing Flow catch, hardcoded or wrong…

Apache-2.0Auto-check passedMobile

Install Kotlin Coroutines Skill

skills CLI
$ npx skills add santimattius/structured-coroutines --skill kotlin-coroutines-skill -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install santimattius/structured-coroutines kotlin-coroutines-skill --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/santimattius/structured-coroutines.git skills-src && mkdir -p .claude/skills && cp -r skills-src/kotlin-coroutines-skill .claude/skills/kotlin-coroutines-skill && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
kotlin-coroutines-skill
GitHub stars
158
Token cost
~6.8k tokens
SKILL.md length
1,732 words
Files
60 (incl. references)
Skills in repo
1
Repo updated
First seen
Licence
Apache-2.0

At a glance

Load, when a developer writes, reviews, or debugs Kotlin coroutine code and needs help spotting concurrency bugs — GlobalScope leaks, runBlocking in suspend, missing Flow catch, hardcoded or wrong…

  • Works in 12 steps: Identify the practice or error from the… → Apply the strict rules below in every… → Respond in the required format: Analysis… → …
  • Tasks that involve Android development
  • SKILL.md covers Overview, Agent Behavior Contract…, Recommended Tools for Analysis and Triage-First Playbook (Topic /…, plus 4 more sections
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

Kotlin Coroutines Skill is an agent skill from santimattius/structured-coroutines. Load, when a developer writes, reviews, or debugs Kotlin coroutine code and needs help spotting concurrency bugs — GlobalScope leaks, runBlocking in suspend, missing Flow catch, hardcoded or wrong dispatchers, unhandled timeouts, cancellation and structured-concurrency mistakes — or asks how to make async Kotlin testable.

Its SKILL.md is about 6.8k tokens, which your agent loads only when the skill is triggered. The skill folder holds 60 other files, including reference files (for example `references/ref-1-1-global-scope.md`, `references/ref-1-2-async-without-await.md` and `references/ref-1-3-breaking-structured-concurrency.md`).

It sits in Mobile, covering Android development. It works with Kotlin, Android and Gradle. The repository describes itself as: The definitive toolkit for enforcing safety, predictability, and efficiency in Kotlin Coroutines. The licence is Apache-2.0.

When your agent uses it

  • Tasks that involve Android development

Example prompts

  • “/kotlin-coroutines-skill”

Workflow steps

12 steps, taken from the first numbered list in SKILL.md.

  1. Identify the practice or error from the user's code or question (e.g. GlobalScope,
  2. Apply the strict rules below in every response. Do not suggest or leave code that violates
  3. Respond in the required format: Analysis → Erroneous code → Optimized code → Explanation. If
  4. Do not recommend GlobalScope in production. Use framework scopes (viewModelScope,
  5. Use async only when a return value is needed; if await() is never called, use launch.
  6. Never use runBlocking inside suspend functions or coroutine-based code. Avoid ending a suspend
  7. Use explicit Dispatchers: Dispatchers.Default for CPU-bound work, Dispatchers.Main/
  8. Never pass Job() or SupervisorJob() directly to builders (e.g. launch(Job()) { }). Use
  9. Cancellation handling (apply all)
  10. Exception handling
  11. In tests use kotlinx-coroutines-test: runTest, virtual time, advanceTimeBy,
  12. Prefer produce { } for channels so they close when the coroutine ends. Do not share

What it can do on your machine

Read from SKILL.md and the folder at commit 1037e0c. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md (its code samples are kotlin).

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Kotlin Coroutines Skill loads about 6.8k tokens when it runs, and up to ~29k if it reads all its reference files. Until then it costs about 87 tokens; SKILL.md has 1,732 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~87
When it runs · the whole SKILL.md, loaded when a task matches
~6.8k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~29k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from santimattius/structured-coroutines at commit 1037e0c, republished under its Apache-2.0 licence (© santimattius). 1,732 words, ~6,830 tokens.

Download SKILL.mdSave it as .claude/skills/kotlin-coroutines-skill/SKILL.md (or your agent's skills folder). This skill also uses 59 other files; get the full folder from GitHub.
name
kotlin-coroutines-skill
description
Load, when a developer writes, reviews, or debugs Kotlin coroutine code and needs help spotting concurrency bugs — GlobalScope leaks, runBlocking in suspend, missing Flow catch, hardcoded or wrong dispatchers, unhandled timeouts, cancellation and structured-concurrency mistakes — or asks how to make async Kotlin testable.
license
Apache-2.0
metadata.author
github:@santimattius
metadata.version
3.0.0

Kotlin Coroutines

Overview

This skill provides expert guidance on Kotlin Coroutines, covering structured concurrency, scopes, Dispatchers (including main-safe suspend and dispatcher injection), cancellation (including withTimeout semantics), exception handling (CoroutineExceptionHandler, launch vs async), Channels, Flow (cold vs hot, collectLatest, SharedFlow configuration, blocking in flow {}), lifecycle-aware collection on Android, and testing (virtual time, setMain/resetMain). Use this skill to help developers write safe, maintainable concurrent code aligned with Kotlin 1.9+/2.0+ conventions and official best practices.

Agent Behavior Contract (Follow These Rules)

  1. Identify the practice or error from the user's code or question (e.g. GlobalScope, runBlocking in suspend, swallowing CancellationException) and open the corresponding reference from the Triage table in references/.
  2. Apply the strict rules below in every response. Do not suggest or leave code that violates them.
  3. Respond in the required format: Analysis → Erroneous code → Optimized code → Explanation. If the user only asks a conceptual question (no code), skip erroneous/optimized snippets and focus on analysis and explanation.
  4. Do not recommend GlobalScope in production. Use framework scopes (viewModelScope, lifecycleScope, rememberCoroutineScope), injected scopes, or local scopes ( coroutineScope { }, withContext { }). If an external scope is required, justify and document it.
  5. Use async only when a return value is needed; if await() is never called, use launch. Preserve structured concurrency: inside suspend functions use coroutineScope { } + async/ launch; do not launch in an external scope from suspend unless work must outlive the flow, and then document it.
  6. Never use runBlocking inside suspend functions or coroutine-based code. Avoid ending a suspend function with coroutineScope { launch { } } as the last line when the intent is fire-and-forget — coroutineScope waits for all children and blocks the caller; use an explicit external scope and document it if the work must truly run in the background beyond the caller's lifetime.
  7. Use explicit Dispatchers: Dispatchers.Default for CPU-bound work, Dispatchers.Main/ Main.immediate for UI, withContext(Dispatchers.IO) for blocking I/O. Never perform blocking I/O on Default or Main. Do not use Dispatchers.Unconfined in production unless for a rare, documented case. Make suspend functions main-safe: move blocking work into withContext(Dispatchers.IO) so callers on Main are never blocked. Inject CoroutineDispatcher as a constructor parameter (default to real dispatcher; replace with TestDispatcher in tests).
  8. Never pass Job() or SupervisorJob() directly to builders (e.g. launch(Job()) { }). Use supervisorScope { } or a scope defined with SupervisorJob() for supervisor semantics. When running independent tasks with awaitAll, use supervisorScope instead of coroutineScope so one failure does not cancel sibling deferreds.
  9. Cancellation handling (apply all):
    • Never swallow CancellationException; rethrow it in catch blocks.
    • Do not use CancellationException for domain errors; use normal exceptions instead.
    • In long loops and repeating/polling work, add yield(), ensureActive(), or while (isActive) with delay(interval) so the coroutine responds to cancellation.
    • For suspend calls in finally, use withContext(NonCancellable) { }.
    • Do not reuse a scope after scope.cancel(); use coroutineContext.job.cancelChildren() to stop only children while keeping the scope alive.
    • Prefer withTimeoutOrNull over withTimeout to avoid unintentionally cancelling the parent scope. If using withTimeout, catch TimeoutCancellationException explicitly. Always ensure resources opened inside withTimeout are cleaned up in finally.
  10. Exception handling:
    • Uncaught exceptions in launch propagate to CoroutineExceptionHandler; in async, the exception is stored in the Deferred and only thrown on await(). Always call await() on async blocks to avoid silently losing exceptions.
    • Use CoroutineExceptionHandler at scope level for launch uncaught exceptions.
  11. In tests use kotlinx-coroutines-test: runTest, virtual time, advanceTimeBy, advanceUntilIdle, and inject TestDispatcher/StandardTestDispatcher; avoid real delay() with runBlocking. Replace Dispatchers.Main using Dispatchers.setMain(TestDispatcher()) in @Before and Dispatchers.resetMain() in @After.
  12. Prefer produce { } for channels so they close when the coroutine ends. Do not share consumeEach across multiple consumers; use for (x in channel) per consumer.
  13. Flow best practices:
    • Keep flow { } builder non-blocking; use flowOn(Dispatchers.IO) or suspend APIs.
    • Use StateFlow for shared UI state (replays last value); use SharedFlow for events with explicit replay, extraBufferCapacity, and onBufferOverflow configuration.
    • Use collectLatest only when cancelling in-progress work is intentional (e.g. search); use collect when each item must be processed to completion.
    • On Android, collect flows with repeatOnLifecycle(Lifecycle.State.STARTED) or flowWithLifecycle to stop collection when the UI goes to background.
  14. When several practices apply (e.g. GlobalScope + wrong Dispatchers), use each relevant reference and combine the fixes in one optimized snippet.

When analyzing Kotlin projects for coroutine issues:

  1. Project settings
    • Use Read on build.gradle.kts / build.gradle for Kotlin version, kotlinx-coroutines-* dependencies, and kotlinx-coroutines-test.
    • Use Grep for CoroutineScope, GlobalScope, runBlocking, Dispatchers, viewModelScope, lifecycleScope to locate usage patterns.
  2. Scope and lifecycle
    • Identify whether code runs on Android (viewModelScope, lifecycleScope), KMP, or plain JVM to recommend the right scope.

Triage-First Playbook (Topic / Error → Reference)

Each references/ref-*.md file is self-contained (Bad Practice, Recommended, Why, Quick fix). Open the linked file directly — no dependency on repo docs when the skill is installed standalone.

Topic / Error / QuestionReference file
GlobalScope, scope lifetime, "where should I launch?"ref-1-1-global-scope.md
async without await, fire-and-forget with asyncref-1-2-async-without-await.md
Breaking structured concurrency, launching in external scope from suspendref-1-3-breaking-structured-concurrency.md
awaitAll exception propagation, coroutineScope vs supervisorScope for parallel tasksref-1-4-awaitall-exception-propagation.md
coroutineScope { launch { } } as last line, "wait vs don't wait"ref-2-1-launch-last-line-coroutine-scope.md
runBlocking inside suspend, blocking in coroutinesref-2-2-runblocking-in-suspend.md
Blocking I/O on Default/Main, wrong Dispatchers for I/Oref-3-1-blocking-wrong-dispatchers.md
Main-safe suspend functions, suspend blocking caller thread, ANRref-3-2-main-safe-suspend.md
Dispatchers.Unconfined in productionref-3-2-dispatchers-unconfined.md
Job() / SupervisorJob() passed to launch/async/withContextref-3-3-job-context-builders.md
Injecting Dispatchers, hardcoded dispatcher, flaky tests, testabilityref-3-5-inject-dispatchers.md
Cancellation in loops, long loops not responding to cancelref-4-1-cancellation-intensive-loops.md
Periodic / repeating work, polling, zombie coroutine, infinite loop without isActiveref-4-2-periodic-repeating-work.md
Swallowing CancellationException, catch Exception and cancelref-4-2-swallowing-cancellation-exception.md
Suspend in finally, cleanup that needs to suspendref-4-3-suspend-cleanup-noncancellable.md
Reusing scope after cancel(), cancelChildren vs cancelref-4-4-reusing-cancelled-scope.md
withTimeout scope cancellation, TimeoutCancellationException, withTimeoutOrNullref-4-6-withtimeout-scope-cancellation.md
withTimeout resource cleanup, resource leak on timeout, finally, NonCancellableref-4-7-withtimeout-resource-cleanup.md
SupervisorJob() in a single builderref-5-1-supervisor-job-single-builder.md
CancellationException for domain errors (e.g. UserNotFound)ref-5-2-cancellation-exception-domain-errors.md
CoroutineExceptionHandler vs async, exceptions in async stored in Deferred until await()ref-5-3-exception-handler-async.md
Slow tests, real delay() in testsref-6-1-slow-tests-real-delays.md
Uncontrolled fire-and-forget in tests, can't wait in testsref-6-2-uncontrolled-fire-and-forget-tests.md
Dispatchers.Main in tests, setMain/resetMain, CI flaky testsref-6-3-setmain-resetmain.md
Channel not closed, manual Channel without close()ref-7-1-channel-close.md
consumeEach with multiple consumersref-7-2-consume-each-multiple-consumers.md
Architecture, layers (Data/Domain/Presentation), suspend vs callbacksref-8-architecture-patterns.md
Lifecycle-aware Flow collection (Android), repeatOnLifecycle, flowWithLifecycleref-8-2-lifecycle-aware-flow.md
Blocking in flow { }, Thread.sleep in flow, flowOnref-9-1-flow-blocking-call.md
Cold vs hot flows, StateFlow, SharedFlow, shareIn, stateIn, collectref-9-2-cold-vs-hot-flows.md
collectLatest semantics, cancels previous block, search vs complete workref-9-3-collect-latest.md
SharedFlow configuration, replay, extraBufferCapacity, onBufferOverflow, backpressureref-9-4-shared-flow-configuration.md
suspendCoroutine without cancellation, callback bridgeref-101-interop-suspend-cancellable.md
callbackFlow without awaitClose, listener leakref-102-interop-callbackflow-awaitclose.md
channelFlow vs callbackFlow, wrong flow builderref-103-interop-channelflow-callbackflow.md
Future.get in coroutine, CompletableFuture blockingref-104-interop-future-get.md
MutableStateFlow exposed publicly, UDF violationref-95-flow-mutable-exposed.md
Flow chain missing catch, launchIn/collect without catchref-96-flow-missing-catch.md
runBlocking in tests, runTest virtual timeref-64-test-runtest.md
Dispatchers.IO in commonMain, KMP crashref-111-kmp-dispatchers-io.md
runBlocking in commonMain, KMP deadlockref-112-kmp-runblocking.md
collectAsState without lifecycle, Compose background collectionref-83-compose-collect-lifecycle.md
rememberCoroutineScope for init, LaunchedEffectref-84-compose-remember-scope-init.md
Side effect in composable body, recompositionref-85-compose-side-effect.md
Hardcoded Dispatchers in class, testabilityref-65-test-hardcoded-dispatcher.md
advanceUntilIdle missing in runTest, flaky testref-66-test-not-completed.md
flatMapLatest vs merge vs concat, Flow operator choiceref-910-flow-flatmap-choice.md
SharedFlow one-shot events, Channel for navigationref-911-flow-oneshot-events.md
synchronized in coroutine, Mutexref-121-concur-synchronized.md
Sequential async await, wasted Deferredref-15-concur-sequential-async.md
stateIn Eagerly on ViewModel, WhileSubscribedref-97-flow-statein-eagerly.md
launchIn GlobalScope, unstructured Flow collectionref-98-flow-launchin-unstructured.md
Side effect in map operator, onEach for effectsref-99-flow-sideeffect-map.md
MDC not propagated, MDCContextref-37-backend-mdc.md
Blocking JDBC in backend coroutine, Dispatchers.IOref-131-backend-blocking.md
Missing CoroutineName, debuggingref-141-debug-coroutine-name.md
Redundant nested withContext, same dispatcher twiceref-36-concur-redundant-withcontext.md
MainScope without cancel, KMP presenter leakref-113-kmp-mainscope-without-cancel.md
Shared mutable state in launch, race on ArrayListref-122-concur-shared-mutable-state.md
withTimeout cancels parent scope, use withTimeoutOrNullref-4-6-withtimeout-scope-cancellation.md
Job in builder, SupervisorJob as argumentref-3-3-job-context-builders.md
External scope launch from suspend, structured concurrency breakref-1-3-breaking-structured-concurrency.md
Inline CoroutineScope, scope(CoroutineScope(...))ref-1-3-breaking-structured-concurrency.md
Scope reuse after cancel, launch after scope.cancel()ref-4-4-reusing-cancelled-scope.md
ViewModelScope leak, collect without lifecycleref-8-2-lifecycle-aware-flow.md
Show full SKILL.md (472 more words)Show less

Core Patterns Reference

When to Use Each Coroutine Tool

launch – Fire-and-forget or UI-triggered work that does not return a value

kotlin
// Use for: Work that does not need a result; lifecycle-bound to scope
viewModelScope.launch {
    updateUI(loadData())
}

async / await – Parallel work when you need a return value

kotlin
// Use for: Deferred result; always await (or awaitAll) to preserve structure
coroutineScope {
    val a = async { fetchA() }
    val b = async { fetchB() }
    combine(a.await(), b.await())
}

coroutineScope – Structured child work inside a suspend function

kotlin
// Use for: Subtasks that must complete or cancel with the current scope
suspend fun loadAll() = coroutineScope {
    val one = async { loadOne() }
    val two = async { loadTwo() }
    Pair(one.await(), two.await())
}

withContext – Switch dispatcher or run cleanup (e.g. NonCancellable)

kotlin
// Use for: Blocking I/O off Main/Default; cleanup in finally
withContext(Dispatchers.IO) { readFile(path) }
withContext(NonCancellable) { db.close() }

supervisorScope – Children do not cancel each other on failure

kotlin
// Use for: Independent child jobs (e.g. multiple UI updates)
supervisorScope {
    launch { updateA() }
    launch { updateB() }
}

produce – Channel that closes when the coroutine ends

kotlin
// Use for: Single producer; automatic close when scope completes
fun CoroutineScope.flowFromApi() = produce {
    for (item in api.stream()) send(item)
}
Common Scenarios

Scenario: Single network request with UI update

kotlin
viewModelScope.launch {
    val data = withContext(Dispatchers.IO) { repo.fetch() }
    updateUI(data)
}

Scenario: Multiple parallel requests

kotlin
coroutineScope {
    val users = async { repo.getUsers() }
    val posts = async { repo.getPosts() }
    show(users.await(), posts.await())
}

Scenario: Cancellation-friendly loop

kotlin
for (i in list) {
    yield() // or ensureActive()
    process(i)
}

Best Practices Summary

  1. Prefer structured concurrency – Use coroutineScope + async/launch inside suspend; avoid launching in external scope from suspend unless documented. For independent tasks, use supervisorScope + awaitAll so one failure does not cancel siblings.
  2. Use the right scope – Framework scopes (viewModelScope, lifecycleScope) or injected scope; never GlobalScope in production.
  3. Use async only when you need a result – Otherwise use launch. Always call await() on every Deferred; exceptions are only thrown at await(), not caught by CoroutineExceptionHandler.
  4. Use explicit, injected Dispatchers – IO for blocking I/O, Default for CPU, Main for UI; never block on Default/Main. Make suspend functions main-safe (withContext(IO) internally). Inject dispatchers for testability.
  5. Respect cancellation – Rethrow CancellationException; use while(isActive) + delay for repeating work; use yield/ensureActive in long loops; use withContext(NonCancellable) for suspend cleanup in finally. Prefer withTimeoutOrNull; ensure resources are cleaned up on timeout.
  6. Do not misuse CancellationException – Use normal exceptions for domain errors.
  7. Test with virtual time – runTest, TestDispatcher, advanceTimeBy; avoid real delay() in tests. Replace Dispatchers.Main with setMain/resetMain for reliable CI tests.
  8. Channels – Prefer produce; if using Channel manually, document when close() is called; one consumer per channel with for (x in channel).
  9. Flow – Keep flow { } non-blocking (use flowOn); use StateFlow for state, SharedFlow for events with explicit buffer/overflow config; use collectLatest only when cancelling in-progress work is intentional.
  10. Android lifecycle – Collect flows with repeatOnLifecycle(STARTED) or flowWithLifecycle so collection stops when UI is in background.

Output Format (Required for Code Review / Refactor)

Structure every code-review or refactor response as:

  1. Problem Analysis – Short description of what is wrong (e.g. scope lifetime, dispatcher, exception handling) and the risk (leaks, ANRs, flaky tests).
  2. Erroneous Code – The original or problematic code snippet (clearly labeled).
  3. Optimized Code – Refactored code that follows the guidelines (structured concurrency, correct scopes, Dispatchers, exception/cancellation handling).
  4. Technical Explanation – Why the optimized version is safer or more correct: lifecycle, cancellation propagation, thread usage, testability.

For conceptual-only questions, skip erroneous/optimized snippets and keep analysis and explanation.

Verification Checklist (When You Change Coroutine Code)

  • Confirm which scope is in use (framework, injected, or local) and that it matches lifecycle expectations.
  • After refactors: run tests, especially those that use coroutines or virtual time (see ref-6-*).
  • If touching cancellation or cleanup: ensure CancellationException is rethrown and suspend cleanup uses NonCancellable where needed.
  • If touching Dispatchers: ensure no blocking I/O on Default or Main.

© santimattius, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 59 other files (references) in kotlin-coroutines-skill of santimattius/structured-coroutines.

  • SKILL.md
  • references/ref-1-1-global-scope.md
  • references/ref-1-2-async-without-await.md
  • references/ref-1-3-breaking-structured-concurrency.md
  • references/ref-1-4-awaitall-exception-propagation.md
  • references/ref-101-interop-suspend-cancellable.md
  • references/ref-102-interop-callbackflow-awaitclose.md
  • references/ref-103-interop-channelflow-callbackflow.md
  • references/ref-104-interop-future-get.md
  • references/ref-111-kmp-dispatchers-io.md
  • references/ref-112-kmp-runblocking.md
  • references/ref-113-kmp-mainscope-without-cancel.md
  • references/ref-121-concur-synchronized.md
  • references/ref-122-concur-shared-mutable-state.md
  • references/ref-131-backend-blocking.md
  • references/ref-141-debug-coroutine-name.md
  • references/ref-15-concur-sequential-async.md
  • references/ref-2-1-launch-last-line-coroutine-scope.md
  • references/ref-2-2-runblocking-in-suspend.md
  • references/ref-3-1-blocking-wrong-dispatchers.md
  • … and 40 more

Open the folder on GitHubat commit 1037e0c

Compare with similar skills

Kotlin Coroutines Skill next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Kotlin Coroutines Skill compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Kotlin Coroutines Skill this skillsantimattius/structured-coroutines158—~6.8kAutomated safety check: PassApache-2.0
Android Developmentdpconde/claude-android-skill336—~1.7kAutomated safety check: PassMIT
Claude Android NinjaDrjacky/claude-android-ninja124—~5.2kAutomated safety check: PassApache-2.0
Expo Brownfield Integrationmweinbach/agent-coworker1562 repos~900Automated safety check: NotesCustom licence
Jugg Android Dev Loopniki914/zafiro241—~2kAutomated safety check: PassMIT
Build Foremannekomangaorg/Neko2.8k—~807Automated safety check: PassApache-2.0

Similar skills

  • Android Development

    dpconde/claude-android-skill

    Create production-quality Android applications following Google's official architecture guidance and NowInAndroid best practices.

    336 GitHub stars~1.7k tokensUpdated 10 mo ago
    MobileAuto-check passed
  • Claude Android Ninja

    Drjacky/claude-android-ninja

    Build and migrate Android apps with Kotlin, Jetpack Compose, MVVM, Hilt, Room 3 (KSP, SQLiteDriver, Flow/suspend DAOs), Navigation3, and multi-module Gradle.

    124 GitHub stars~5.2k tokensUpdated 11 days ago
    MobileAuto-check passed
  • Expo Brownfield Integration

    mweinbach/agent-coworker

    Helps add Expo and React Native to an existing native iOS or Android app, and choose between a prebuilt AAR or XCFramework and a fully integrated build.

    156 GitHub starsUsed in 2 repos~900 tokens
    MobileAuto-check: notes
  • Jugg Android Dev Loop

    niki914/zafiro

    A skill your agent uses when editing source files (Java/Kotlin/XML/layout/AndroidManifest/Gradle) in a Android project, or when user asks to build/deploy/verify an Android app.

    241 GitHub stars~2k tokensUpdated today
    MobileAuto-check passed
  • Build Foreman

    nekomangaorg/Neko

    Optimizes Gradle build scripts, compilation times, and Android Studio sync performance.

    2.8k GitHub stars~807 tokensUpdated yesterday
    MobileAuto-check passed
  • Android Audio E2E

    hyochan/react-native-nitro-sound

    Build and run device-backed Android end-to-end checks for react-native-nitro-sound permissions, recording, playback, listeners, pause/resume, seek, speed, audio focus, lifecycle behavior, and rapid…

    961 GitHub stars~814 tokensUpdated 11 days ago
    MobileAuto-check passed

Categories

Questions about Kotlin Coroutines Skill

What does Kotlin Coroutines Skill do?

Load, when a developer writes, reviews, or debugs Kotlin coroutine code and needs help spotting concurrency bugs — GlobalScope leaks, runBlocking in suspend, missing Flow catch, hardcoded or wrong…. Kotlin Coroutines Skill is an agent skill from santimattius/structured-coroutines. Load, when a developer writes, reviews, or debugs Kotlin coroutine code and needs help spotting concurrency bugs — GlobalScope leaks, runBlocking in suspend, missing Flow catch, hardcoded or wrong dispatchers, unhandled timeouts, cancellation and structured-concurrency mistakes — or asks how to make async Kotlin testable.

When should I use Kotlin Coroutines Skill?

Kotlin Coroutines Skill fits situations like: tasks that involve Android development.

How do I install Kotlin Coroutines Skill in Claude Code?

Run `npx skills add santimattius/structured-coroutines --skill kotlin-coroutines-skill -a claude-code`. Or copy the skill folder (kotlin-coroutines-skill in santimattius/structured-coroutines) into .claude/skills/kotlin-coroutines-skill in your project. Claude Code loads it when a task matches its description.

How do I install Kotlin Coroutines Skill in Codex?

Run `npx skills add santimattius/structured-coroutines --skill kotlin-coroutines-skill -a codex`. Or copy the skill folder (kotlin-coroutines-skill in santimattius/structured-coroutines) into .agents/skills/kotlin-coroutines-skill in your project. Codex loads it when a task matches its description.

Can I use Kotlin Coroutines Skill in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add santimattius/structured-coroutines --skill kotlin-coroutines-skill -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/kotlin-coroutines-skill, .gemini/skills/kotlin-coroutines-skill, .github/skills/kotlin-coroutines-skill and .opencode/skills/kotlin-coroutines-skill in your project.

What does Kotlin Coroutines Skill need to run?

SKILL.md names no scripts, command-line tools or credentials: Kotlin Coroutines Skill is instructions for the agent only.

Does Kotlin Coroutines Skill access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Kotlin Coroutines Skill safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Kotlin Coroutines Skill use?

Kotlin Coroutines Skill is published under the Apache-2.0 licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Kotlin Coroutines Skill use?

About 6.8k tokens (SKILL.md is roughly 27k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 22k tokens, read only when the agent opens those files.

What are the alternatives to Kotlin Coroutines Skill?

Skills that share tags, products or a category with Kotlin Coroutines Skill: Android Development (dpconde/claude-android-skill, 336 stars), Claude Android Ninja (Drjacky/claude-android-ninja, 124 stars), Expo Brownfield Integration (mweinbach/agent-coworker, 156 stars) and Jugg Android Dev Loop (niki914/zafiro, 241 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Kotlin Coroutines Skill?

santimattius (a GitHub user) maintains it in santimattius/structured-coroutines, which has 158 GitHub stars. The repository was last updated on September 12, 2026.

Source: santimattius/structured-coroutines on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.