Bump Version
arindamxd/camerax-android
Increments versionCodeOffset for another Play upload of the same versionName, updates RELEASE.md shipping numbers, and prints Play Console release notes from git log since the previous upload.
A skill your agent uses when writing, reviewing, or debugging coroutine code in Kotlin — including dispatcher selection, scope management, structured concurrency, cancellation, exception handling…
$ npx skills add rcosteira79/android-skills --skill kotlin-coroutines -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install rcosteira79/android-skills kotlin-coroutines --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/rcosteira79/android-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/plugins/android-skills/skills/kotlin-coroutines .claude/skills/kotlin-coroutines && rm -rf skills-srcUse ~/.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/
Install the "kotlin-coroutines" agent skill from https://github.com/rcosteira79/android-skills/tree/main/plugins/android-skills/skills/kotlin-coroutines into .claude/skills/kotlin-coroutines/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "kotlin-coroutines", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/rcosteira79/android-skills/tree/main/plugins/android-skills/skills/kotlin-coroutinesType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add rcosteira79/android-skills --skill kotlin-coroutines -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install rcosteira79/android-skills kotlin-coroutines --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/rcosteira79/android-skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/plugins/android-skills/skills/kotlin-coroutines .agents/skills/kotlin-coroutines && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "kotlin-coroutines" agent skill from https://github.com/rcosteira79/android-skills/tree/main/plugins/android-skills/skills/kotlin-coroutines into .agents/skills/kotlin-coroutines/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "kotlin-coroutines", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add rcosteira79/android-skills --skill kotlin-coroutines -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install rcosteira79/android-skills kotlin-coroutines --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/rcosteira79/android-skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/plugins/android-skills/skills/kotlin-coroutines .cursor/skills/kotlin-coroutines && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "kotlin-coroutines" agent skill from https://github.com/rcosteira79/android-skills/tree/main/plugins/android-skills/skills/kotlin-coroutines into .cursor/skills/kotlin-coroutines/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "kotlin-coroutines", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/rcosteira79/android-skills.git --path plugins/android-skills/skills/kotlin-coroutines--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add rcosteira79/android-skills --skill kotlin-coroutines -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install rcosteira79/android-skills kotlin-coroutines --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/rcosteira79/android-skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/plugins/android-skills/skills/kotlin-coroutines .gemini/skills/kotlin-coroutines && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "kotlin-coroutines" agent skill from https://github.com/rcosteira79/android-skills/tree/main/plugins/android-skills/skills/kotlin-coroutines into .gemini/skills/kotlin-coroutines/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "kotlin-coroutines", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install rcosteira79/android-skills kotlin-coroutinesInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add rcosteira79/android-skills --skill kotlin-coroutines -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/rcosteira79/android-skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/plugins/android-skills/skills/kotlin-coroutines .github/skills/kotlin-coroutines && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "kotlin-coroutines" agent skill from https://github.com/rcosteira79/android-skills/tree/main/plugins/android-skills/skills/kotlin-coroutines into .github/skills/kotlin-coroutines/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "kotlin-coroutines", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add rcosteira79/android-skills --skill kotlin-coroutines -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install rcosteira79/android-skills kotlin-coroutines --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/rcosteira79/android-skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/plugins/android-skills/skills/kotlin-coroutines .opencode/skills/kotlin-coroutines && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "kotlin-coroutines" agent skill from https://github.com/rcosteira79/android-skills/tree/main/plugins/android-skills/skills/kotlin-coroutines into .opencode/skills/kotlin-coroutines/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "kotlin-coroutines", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
kotlin-coroutinesA skill your agent uses when writing, reviewing, or debugging coroutine code in Kotlin — including dispatcher selection, scope management, structured concurrency, cancellation, exception handling…
Kotlin Coroutines is an agent skill from rcosteira79/android-skills. Use when writing, reviewing, or debugging coroutine code in Kotlin — including dispatcher selection, scope management, structured concurrency, cancellation, exception handling, or async patterns in Android or KMP projects.
Its SKILL.md is about 1.5k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Development, covering Error handling and Android development. It works with Kotlin and Android. The repository describes itself as: Claude Code skills for Android & KMP development. The licence is MIT.
Read from SKILL.md and the folder at commit 0f9af5a. It shows what the files ask for, not the result of running them.
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.
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.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Kotlin Coroutines loads about 1.5k tokens when it runs. Until then it costs about 60 tokens; SKILL.md has 619 words of instructions outside code blocks.
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.
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.
The full file from rcosteira79/android-skills at commit 0f9af5a, republished under its MIT licence (© rcosteira79). 619 words, ~1,541 tokens.
.claude/skills/kotlin-coroutines/SKILL.md (or your agent's skills folder).Built on structured concurrency: every coroutine runs in a scope; cancellation and errors propagate through the parent–child hierarchy. This reference focuses on the two disciplines most often gotten wrong: who owns the scope, and exception handling that doesn't break cancellation.
Main-safety: the function doing blocking work owns the withContext(ioDispatcher); callers never switch dispatchers before calling a suspend function.
suspend fun, let the caller own the scopeA stored CoroutineScope on a non-UI class (repository, manager, use case, data source) is a strong review signal: the class would have to prove it owns cancellation, error reporting, restart, and lifecycle — most can't. The fix is almost always make the API suspend and let the caller own the scope.
// DO — suspend fun; the caller owns the scope, cancellation propagates, exceptions surface
class ArticlesRepository(private val dataSource: ArticlesDataSource, private val io: CoroutineDispatcher) {
suspend fun bookmark(article: Article) = withContext(io) { dataSource.bookmark(article) }
}
class BookmarkViewModel(private val repo: ArticlesRepository) : ViewModel() {
fun onBookmark(a: Article) { viewModelScope.launch { repo.bookmark(a) } }
}
// DO NOT — store a scope and launch inside the repository
class ArticlesRepository(private val externalScope: CoroutineScope, /* ... */) {
suspend fun bookmark(a: Article) { externalScope.launch { dataSource.bookmark(a) }.join() }
}Why stored scopes are dangerous: once that scope is cancelled, every future launch on it completes silently as cancelled — no exception, no log. If the cancellation came from process death or a misconfigured DI graph, the class keeps accepting calls and silently does nothing.
A write that must survive the user navigating away doesn't belong to the repository — it belongs to a WorkManager job, or a named application-scoped class that deliberately owns its scope (an OfflineBookmarkQueue with an injected applicationScope, cancelled only on process death). The named class makes the lifetime explicit, testable, and observable — unlike a buried externalScope.launch.
launch from a non-suspending method is OKA UI state holder may launch from a non-suspending event callback only under all three: (1) it actually owns UI state the view layer collects; (2) it uses a lifecycle-bound scope (viewModelScope / rememberCoroutineScope); (3) the trigger is a UI event (click, swipe, lifecycle) — not a repository call, background timer, or DI hook. If any fails, expose a suspend fun and let the real state holder own the scope.
init { launch } and DI-singleton launchinit { viewModelScope.launch { while (isActive) { … } } } makes the work invisible — no named trigger, no restart path, and a nav back/forward silently re-launches it. Expose a StateFlow via stateIn instead. Likewise a @Singleton (or a Hilt Initializer) that launches from its constructor starts coroutines "wherever DI realizes me," observable by no one — use WorkManager.enqueueUniquePeriodicWork, invert the work into the consumer, or put it in a named class with an explicit startX() method.
Diagnostic for any DI-bound or stored-scope launch: where is the start moment defined? who can observe whether it's running? can it be restarted without restarting the process? Answers of "wherever / no one / no" mean refactor.
Cooperative: ensureActive() at the top of long loops (throws if cancelled), isActive to check without throwing, yield() to also yield the thread. delay / withContext are already cancellable. Cleanup that must run after cancellation goes in finally { withContext(NonCancellable) { … } } — NonCancellable only there, never as a general escape hatch. TimeoutCancellationException (from withTimeout) is a CancellationException — never catch it without rethrowing. (Don't reach for withTimeout for network timeouts — OkHttp/Retrofit/Ktor own those.)
// DO — specific types
try { repo.login(u, p) } catch (e: IOException) { _state.value = Error("Network") }
// DO NOT — catch (e: Exception) / Throwable swallows CancellationException and breaks structured cancellationIOException, HttpException), never Exception / Throwable.CancellationException without rethrowing it.runCatching in a suspend function — it catches CancellationException. Use a suspendRunCatching that rethrows it:suspend inline fun <R> suspendRunCatching(block: () -> R): Result<R> = try {
Result.success(block())
} catch (e: CancellationException) { throw e } catch (e: Throwable) { Result.failure(e) }try/catch doesn't wrap launch {} — put it inside the coroutine body.async {} in a supervisorScope swallows its exception — use launch if you don't need the result.viewModelScope already uses SupervisorJob — don't add another alongside it.Don't use MainScope() — it's unstructured (Dispatchers.Main + SupervisorJob()), with the same problems as GlobalScope. Inject a lifecycle-bound CoroutineScope from the platform layer (viewModelScope on Android; a view-controller-bound scope on iOS). Inject CoroutineDispatcher for platform implementations; expect/actual Dispatchers.Main.immediate if a target lacks it.
Coroutine and dispatcher testing lives in android-skills:android-testing — notably the two-schedulers trap (runTest + MainDispatcherRule must share one scheduler) and the StandardTestDispatcher default in Compose tests.
© rcosteira79, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in plugins/android-skills/skills/kotlin-coroutines of rcosteira79/android-skills.
Open the folder on GitHubat commit 0f9af5a
Kotlin Coroutines 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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Kotlin Coroutines this skillrcosteira79/android-skills | 153 | — | ~1.5k | Automated safety check: Pass | MIT | |
| Bump Versionarindamxd/camerax-android | 132 | — | ~603 | Automated safety check: Pass | Apache-2.0 | |
| Android Clean Architectureaffaan-m/ECC | 277k | 4 repos | ~2.2k | Automated safety check: Pass | MIT | |
| Kotlin SpecialistJeffallan/claude-skills | 12k | — | ~1.5k | Automated safety check: Pass | MIT | |
| Quality Test Pilotnekomangaorg/Neko | 2.8k | — | ~1.1k | Automated safety check: Pass | Apache-2.0 | |
| Architecture Overclocknekomangaorg/Neko | 2.8k | — | ~1.4k | Automated safety check: Pass | Apache-2.0 |
arindamxd/camerax-android
Increments versionCodeOffset for another Play upload of the same versionName, updates RELEASE.md shipping numbers, and prints Play Console release notes from git log since the previous upload.
affaan-m/ECC
Applies Clean Architecture to Android and Kotlin Multiplatform projects: module layout, dependency rules, UseCases, Repositories and data layer patterns.
Jeffallan/claude-skills
Applies idiomatic Kotlin 1.9+ patterns for coroutines and Flow, multiplatform code, Jetpack Compose on Android and Ktor servers, checked with detekt and ktlint.
nekomangaorg/Neko
Writes high-quality unit tests for Kotlin Android codebases to increase meaningful test coverage.
nekomangaorg/Neko
Resolves deep, structural performance bottlenecks in the Kotlin Android codebase.
nekomangaorg/Neko
Resolves deep architectural debt in the Kotlin Android codebase through macro-level refactoring.
rcosteira79/android-skills
Guides writing correct, performant Compose and Compose Multiplatform UI across Android, desktop, iOS and web, from state and animation to design-to-code and crash fixes.
rcosteira79/android-skills
Helps choose how common Kotlin Multiplatform code reaches platform APIs: expect/actual, a common interface with platform bindings, or separate platform screens.
rcosteira79/android-skills
Sets out the repository pattern's error-propagation model for Android and Kotlin Multiplatform, plus the Room setup for commonMain.
rcosteira79/android-skills
Android and KMP debugging techniques for crashes, ANRs, memory leaks, R8 traces, Gradle failures and Compose recomposition, built on finding the root cause first.
rcosteira79/android-skills
Sets house defaults for Android and Kotlin Multiplatform work and routes to the right specialized skill for Compose, networking, testing or build tooling.
rcosteira79/android-skills
Sets up Android Gradle convention plugins in a build-logic composite build, including the version catalog wiring and shared configuration that are easy to get wrong.
Categories
A skill your agent uses when writing, reviewing, or debugging coroutine code in Kotlin — including dispatcher selection, scope management, structured concurrency, cancellation, exception handling…. Kotlin Coroutines is an agent skill from rcosteira79/android-skills. Use when writing, reviewing, or debugging coroutine code in Kotlin — including dispatcher selection, scope management, structured concurrency, cancellation, exception handling, or async patterns in Android or KMP projects.
Kotlin Coroutines fits situations like: debugging coroutine code in Kotlin — including dispatcher selection; scope management; structured concurrency; exception handling.
Run `npx skills add rcosteira79/android-skills --skill kotlin-coroutines -a claude-code`. Or copy the skill folder (plugins/android-skills/skills/kotlin-coroutines in rcosteira79/android-skills) into .claude/skills/kotlin-coroutines in your project. Claude Code loads it when a task matches its description.
Run `npx skills add rcosteira79/android-skills --skill kotlin-coroutines -a codex`. Or copy the skill folder (plugins/android-skills/skills/kotlin-coroutines in rcosteira79/android-skills) into .agents/skills/kotlin-coroutines in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add rcosteira79/android-skills --skill kotlin-coroutines -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, .gemini/skills/kotlin-coroutines, .github/skills/kotlin-coroutines and .opencode/skills/kotlin-coroutines in your project.
SKILL.md names no scripts, command-line tools or credentials: Kotlin Coroutines is instructions for the agent only.
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.
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.
Kotlin Coroutines is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 1.5k tokens (SKILL.md is roughly 6.2k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Kotlin Coroutines: Bump Version (arindamxd/camerax-android, 132 stars), Android Clean Architecture (affaan-m/ECC, 277k stars), Kotlin Specialist (Jeffallan/claude-skills, 12k stars) and Quality Test Pilot (nekomangaorg/Neko, 2.8k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
rcosteira79 (a GitHub user) maintains it in rcosteira79/android-skills, which has 153 GitHub stars. The repository holds 21 skills in this directory. The repository was last updated on September 19, 2026.
Source: rcosteira79/android-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.