Compose Multiplatform Patterns
monta-app/ocpp-emulator
Compose Multiplatform and Jetpack Compose patterns for KMP projects — state management, navigation, theming, performance, and platform-specific UI.
Audit Android Jetpack Compose repositories for performance, animation phase correctness, state management, side effects, composable API quality, and adjacent Android launch UX resource risks such as…
$ npx skills add hamen/compose_skill --skill jetpack-compose-audit -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install hamen/compose_skill jetpack-compose-audit --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/hamen/compose_skill.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/jetpack-compose-audit .claude/skills/jetpack-compose-audit && 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 "jetpack-compose-audit" agent skill from https://github.com/hamen/compose_skill/tree/main/skills/jetpack-compose-audit into .claude/skills/jetpack-compose-audit/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "jetpack-compose-audit", 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/hamen/compose_skill/tree/main/skills/jetpack-compose-auditType 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 hamen/compose_skill --skill jetpack-compose-audit -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install hamen/compose_skill jetpack-compose-audit --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/hamen/compose_skill.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/jetpack-compose-audit .agents/skills/jetpack-compose-audit && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "jetpack-compose-audit" agent skill from https://github.com/hamen/compose_skill/tree/main/skills/jetpack-compose-audit into .agents/skills/jetpack-compose-audit/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "jetpack-compose-audit", 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 hamen/compose_skill --skill jetpack-compose-audit -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install hamen/compose_skill jetpack-compose-audit --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/hamen/compose_skill.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/jetpack-compose-audit .cursor/skills/jetpack-compose-audit && 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 "jetpack-compose-audit" agent skill from https://github.com/hamen/compose_skill/tree/main/skills/jetpack-compose-audit into .cursor/skills/jetpack-compose-audit/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "jetpack-compose-audit", 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/hamen/compose_skill.git --path skills/jetpack-compose-audit--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 hamen/compose_skill --skill jetpack-compose-audit -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install hamen/compose_skill jetpack-compose-audit --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/hamen/compose_skill.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/jetpack-compose-audit .gemini/skills/jetpack-compose-audit && 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 "jetpack-compose-audit" agent skill from https://github.com/hamen/compose_skill/tree/main/skills/jetpack-compose-audit into .gemini/skills/jetpack-compose-audit/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "jetpack-compose-audit", 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 hamen/compose_skill jetpack-compose-auditInstalls 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 hamen/compose_skill --skill jetpack-compose-audit -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/hamen/compose_skill.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/jetpack-compose-audit .github/skills/jetpack-compose-audit && 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 "jetpack-compose-audit" agent skill from https://github.com/hamen/compose_skill/tree/main/skills/jetpack-compose-audit into .github/skills/jetpack-compose-audit/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "jetpack-compose-audit", 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 hamen/compose_skill --skill jetpack-compose-audit -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install hamen/compose_skill jetpack-compose-audit --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/hamen/compose_skill.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/jetpack-compose-audit .opencode/skills/jetpack-compose-audit && 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 "jetpack-compose-audit" agent skill from https://github.com/hamen/compose_skill/tree/main/skills/jetpack-compose-audit into .opencode/skills/jetpack-compose-audit/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "jetpack-compose-audit", 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.
jetpack-compose-auditAudit Android Jetpack Compose repositories for performance, animation phase correctness, state management, side effects, composable API quality, and adjacent Android launch UX resource risks such as…
Jetpack Compose Audit is an agent skill from hamen/compose_skill. Audit Android Jetpack Compose repositories for performance, animation phase correctness, state management, side effects, composable API quality, and adjacent Android launch UX resource risks such as blurry Android 12+ splash icons. Scans source code, scores each category from 0-10, writes a strict markdown report, and summarizes the most important fixes. Use when reviewing a Compose codebase, rating repository quality, inspecting recomposition/state issues, animation issues, or running a Compose audit.
Its SKILL.md is about 6k tokens, which your agent loads only when the skill is triggered. The skill folder holds 14 other files, including scripts and reference files (for example `.claude-plugin/plugin.json`, `.cursor-plugin/plugin.json` and `evals/evals.json`).
It sits in Mobile, covering Android development and State management. It works with Jetpack Compose and Android. The repository describes itself as: A strict, evidence-based audit skill for Android Jetpack Compose repositories. The licence is MIT.
9 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit f815c31. It shows what the files ask for, not the result of running them.
Pre-approves these tools, so the agent can use them without asking each time:
ReadGlobGrepWriteBashAgentFrom allowed-tools in the SKILL.md frontmatter.
Ships 1 file in scripts/, which the agent can run.
Shell commands in SKILL.md call:
rgFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
issuetracker.google.comAlso links to:
github.comFrom 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.
Jetpack Compose Audit loads about 6k tokens when it runs, and up to ~41k if it reads all its reference files. Until then it costs about 132 tokens; SKILL.md has 2,975 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 noted patterns worth knowing about, such as sudo or a known installer.
allowed-tools: Read, Glob, Grep, Write, Bash, AgentAutomated 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); the scripts in this folder are not scanned.
The full file from hamen/compose_skill at commit f815c31, republished under its MIT licence (© hamen). 2,975 words, ~6,000 tokens.
.claude/skills/jetpack-compose-audit/SKILL.md (or your agent's skills folder). This skill also uses 9 other files; get the full folder from GitHub.This skill audits Android Jetpack Compose repositories with a strict, evidence-based report.
Skill version: 4.3.2 — released 2026-07-07. Compose track: Kotlin 2.0.20+ / Compose Compiler 1.5.4+ (Strong Skipping Mode default). See the README changelog for what changed.
It is intentionally focused on four categories:
This skill does not score design or Material 3 compliance in v1. If the audit surfaces likely design-system problems, recommend a follow-up audit with the material-3 skill (reference implementation: https://github.com/hamen/material-3-skill).
Testing, focus/keyboard navigation, and Compose Multiplatform are coverage notes, not score categories. Map those surfaces when present, flag obvious risk, and recommend the focused compose-agent references (testing, focus, kmp) as follow-up work. Do not fold them into the 0-100 score unless the same root cause clearly affects one of the four scored categories.
Android launch UX resources are also adjacent coverage, not a score category. Always scan splash-screen theme resources; if Android 12+ could render a static splash icon blurry, include it as an Android Launch UX finding and allow it into Critical Findings / Prioritized Fixes when the evidence is concrete.
Owned and deliberate scope choices — call out the limitation in the report rather than silently producing thin coverage:
material-3 skill.semantics, content descriptions, touch-target sizing) — flag obvious gaps as a note, do not score.compose-agent focus on testing for deeper review.expect/actual, target-specific code paths) — note surface area and obvious platform-boundary risk; recommend compose-agent focus on kmp for deeper review.compose-agent focus on focus for deeper review.If the user explicitly asks for any of these, narrow the scope and state it in the report.
Use this skill when the user asks to:
Typical trigger phrases:
Produce both:
COMPOSE-AUDIT-REPORT.mdreferences/canonical-sources.md. The report template requires a References: line per finding.0-3 scores for repeated or systemic problems, not isolated mistakes.9-10 unless the repo is consistently strong across the category.Identify the target path:
[repo path or module path]), use it.Before mapping modules, confirm Compose is actually present (fast-fail):
androidx.compose in any build.gradle* or libs.versions.tomlsetContent { or @Composable under src/If neither shows up, stop and report that the target is out of scope. Do not run a full module map first.
If Compose is present only in samples/, demos/, or test sources (no production usage), narrow the scope to those directories, set confidence to Low, and state in the report that the audit is over sample code rather than production paths. Do not score production-quality categories against demo code.
Before scoring, identify:
commonMain, androidMain, iosMain, desktopMain, wasmJsMain) if presentres/values*/themes.xml, styles.xml, drawable-v31) if presentLook for:
@Composable functionsViewModel usageremember, rememberSaveable, mutableStateOfcollectAsStateWithLifecycle, collectAsStateLaunchedEffect, DisposableEffect, SideEffect, rememberUpdatedState, produceStateLazyColumn, LazyRow, items, itemsIndexedanimate*AsState, Animatable, updateTransition, rememberInfiniteTransition, AnimatedVisibility, AnimatedContent, CrossfadeFocusRequester, focusRequester, focusProperties, focusable, onFocusChanged, onPreviewKeyEvent, onKeyEventcreateComposeRule, createAndroidComposeRule, onNodeWithText, assertIsDisplayed, assertIsFocused, screenshot test rulescommonMain, expect, actual, AndroidView, UIKitView, platform services passed into common UIwindowSplashScreenAnimatedIcon, android:windowSplashScreenAnimatedIcon, drawable-v31, animated-vectorIf the repo is large, audit by category or by module. If subagents are available, parallelize category scans by spawning Explore-type subagents (no write tools) and merge the findings.
This is non-scored adjacent coverage, but it should run on every normal audit because the failure is user-visible and cheap to miss in Kotlin-only scans.
Look for:
windowSplashScreenAnimatedIcon and android:windowSplashScreenAnimatedIcon in res/values*/themes.xml and res/values*/styles.xml@drawable/ic_splashres/drawable-v31/<animated-vector>, <vector>, <adaptive-icon>, <bitmap>, <layer-list>An AnimatedVectorDrawable is Animatable, so the platform draws it on a SurfaceView at full size; a static icon instead falls onto the internal ImmobileIconDrawable path (pre-rendered at 108 dp, upscaled into the 160/192 dp icon), which is what looks blurry on XHDPI+ devices. Flag a finding when all of these are true:
windowSplashScreenAnimatedIcon for an Android app.<vector>, <adaptive-icon>, bitmap, or a layer-list around those), or there is no drawable-v31 override for the referenced splash icon.<animated-vector> on API 31+.Report it as Android Launch UX: Android 12+ static splash icon may render blurry, not as a Compose score deduction. Evidence should include the theme item, the resolved drawable file, and whether the res/drawable-v31 animated-vector override is missing. The fix direction is to keep the theme's @drawable/<name> stable and have it resolve to an <animated-vector> on API 31+ that wraps the real vector — no animators are required; an empty <animated-vector> is enough, because being an AVD is what changes the render path. One correctness caveat worth carrying into the report: the wrapper must reference a separately-named vector (a wrapper that references its own theme name re-resolves to itself on API 31+ and loops). Cite the Android splash-screen docs, the AndroidX SplashScreen reference, and the platform issue https://issuetracker.google.com/issues/520672537 (which quotes the AOSP source). The bug dates to Android 12 (API 31) on XHDPI+ devices and was open when this skill shipped; confirm the live status against the issue rather than asserting it open-endedly.
Do not ask the user to edit build.gradle or run commands themselves. The skill runs the build with a bundled Gradle init script that injects reportsDestination / metricsDestination into every Compose module without modifying any file in the target repo. Before scoring, attempt this:
Locate the init script shipped with the skill: scripts/compose-reports.init.gradle. The absolute path is the skill's install location — in most installs that's ~/.claude/skills/jetpack-compose-audit/scripts/compose-reports.init.gradle. If you cannot resolve the path, fall back to writing the script to <target>/.compose-audit-reports.init.gradle and delete it after the run.
Check for a Gradle wrapper in the target: test -x <target>/gradlew. If missing, skip to the fallback in step 6.
Pick a compile target. Prefer the cheapest task that still triggers Kotlin compilation for a Compose module:
rg -l 'com\.android\.application' -g '*.gradle*':<app-module>:compileReleaseKotlinAndroid, :<app-module>:compileReleaseKotlin, assembleRelease, assembleDebugcom.android.library), use that module instead.Run the build. Inform the user the build is starting (it may take several minutes).
cd <target> && ./gradlew <task> \
--init-script <path-to>/compose-reports.init.gradle \
--no-daemon --quietUse a 600-second timeout. If the task fails, try the next fallback task in step 3 once. Do not loop indefinitely.
Collect the reports.
find <target> -path '*/build/compose_audit/*' \
\( -name '*-classes.txt' -o -name '*-composables.txt' -o -name '*-composables.csv' -o -name '*-module.json' \)From these files, extract:
unstable class in *-classes.txt) used as composable parameters*-composables.txt or *-composables.csv where isLambda == "0")*-module.json, AND compute the named-only skippability from *-composables.csv (by filtering out rows where isLambda == "1" and calculating sum(skippable) / sum(restartable)). Cite both in the Performance section, noting that zero-argument lambdas can artificially anchor the module-wide metric.Fallback if the build fails or Gradle is unavailable. Proceed with source-inferred stability findings, but:
Compiler diagnostics used: no in the report's Notes And Limits and explain the failure reason briefly (wrapper missing, compile error, timeout)Stability deductions from step 5 are measured evidence and should be weighted normally. Fallback deductions from step 6 are inferred and must be flagged as such in the report.
Use the scoring rubric in references/scoring.md and the heuristics in references/search-playbook.md.
Navigation 3: if the repo uses
rememberNavBackStack,NavDisplay, orNavKey, run playbook section 2b (Nav3 Detection & Audit) before scoring. Nav3 findings map to State Management and Side Effects — see the scoring note in section 2b.
Focus on:
LazyPagingItems misuse when collectAsLazyPagingItems is presentAnimatable held in remember, rememberInfiniteTransition scoped so it stops offscreen)Focus on:
remember vs rememberSaveableLoadState handling (loading / empty / error / append) when LazyPagingItems is presentFocus on:
LaunchedEffect(target) for target-driven state changes (not from the composition body; rememberCoroutineScope().launch { animateTo(...) } is usually for event- or gesture-driven animation)LazyPagingItems.refresh() / retry() called from composition or LaunchedEffect(Unit) to "load on enter" — initial load is PagingData's job; these are user-initiated onlyFocus on reusable internal components, not every leaf screen.
Check:
modifier presence and placementMutableState<T> or State<T> parameters in reusable APIs where a better shape existsanimationSpec: AnimationSpec<T> where callers may reasonably need timing control, and using meaningful label values on shared/tooling-visible animationsBefore deducting points:
app/build/compose_audit/app_release-classes.txt:42) as evidence. Only fall back to source-inferred stability claims if Step 4 failed, and label them as such.Assign each category a 0-10 score and a status:
0-3: fail4-6: needs work7-8: solid9-10: excellentUse the weights in references/scoring.md to compute the overall score.
Measured ceilings are mandatory, not suggestive. When Step 4 produced compiler reports, the Performance rubric in references/scoring.md defines a ceiling. First determine whether Strong Skipping is active (Kotlin 2.0.20+ / Compose Compiler 1.5.4+, or an explicit opt-in flag) and pick the matching table — the SSM-off table is driven by skippable% + unstable-class count, the SSM-on table by skippable% + instance-recreation churn + equals() quality on unstable params. After arriving at a qualitative Performance score, you MUST apply the ceiling and lower the score if it exceeds the cap. Show the math in the report, and name which table was applied:
Performance ceiling check:
Strong Skipping: OFF (Kotlin 1.9.x, no opt-in) → applying SSM-off table
skippable% = 186/273 = 68.1% → falls in 50-70% band → cap at 4
qualitative score: 7
applied score: 4 (ceiling lowered from 7)Under Strong Skipping, skippable% will typically sit near 100% and stop being the binding constraint; the cap is usually driven by observed churn (listOf(...) / mapOf(...) / fresh literals passed into composables) or by expensive / broken equals() on unstable params. Name those findings explicitly in the ceiling-check block so the reader can audit the pick.
Do not round skippable% up into a higher band. 68.1% is not ≥70%. If a qualitative score lands at or below the ceiling, no adjustment is needed — but the check itself must appear in the report so the reader can audit it.
If a category genuinely has too little auditable surface area, mark it N/A, explain why, and renormalize the remaining weights.
Use references/report-template.md.
The report must include:
material-3 if design issues are suspectedWrite the report to:
COMPOSE-AUDIT-REPORT.md inside the audited target (the path the user passed), not the current working directory.If COMPOSE-AUDIT-REPORT.md already exists at that path, do not overwrite it silently. Either confirm overwrite with the user, or write to COMPOSE-AUDIT-REPORT-<YYYY-MM-DD>.md alongside it.
In chat, produce a summary that mirrors the report's Prioritized Fixes section — not a generic recap. The developer should be able to act on the summary alone without opening the report file.
Include:
COMPOSE-AUDIT-REPORT*.md at the same path, if present)FeedItemUiModel params")offset reads recompose DrawerContent every frame")scope.launch { animateTo(...) } in composition on SettingsScreen")LaunchedEffect(Unit) { feed.refresh() } on FeedScreen loads from composition")skippable%, named-only skippable%, which metric actually bound the cap, count of unstable shared types, and any module that failed to buildkey = { it.id } to items(...) in feed/FeedList.kt:42")references/canonical-sources.mdskippable% / unstable-param reductions; on SSM-on, frame it in terms of removing instance-recreation churn, fixing expensive / broken equals(), or clearing the binding capmaterial-3 audit is worth running nextcompose-agent focus on testing, compose-agent focus on focus, compose-agent focus on kmp, compose-agent focus on animation, or compose-agent focus on pagingThe top-three fixes in the chat summary MUST be the same items as the report's Prioritized Fixes list (same file paths, same doc links). Do not add generic advice in chat that isn't in the written report.
For medium or large repositories:
LaunchedEffect(Unit) or LaunchedEffect(true) on its own — the "run once" pattern is idiomatic. Only flag it when the body captures a value that may change without rememberUpdatedState. Paging carve-out: LaunchedEffect(Unit) { lazyPagingItems.refresh() } (or retry()) is a Side Effects defect — initial paged load is PagingData's job, and refresh()/retry() are user-initiated. Flag it.collectAsStateWithLifecycle, lifecycle-runtime-compose). Note the platform constraint as a tradeoff instead.references/scoring.md — per-rule rubric with inline citationsreferences/search-playbook.md — search patterns and red-flag heuristicsreferences/report-template.md — required structure for COMPOSE-AUDIT-REPORT.mdreferences/canonical-sources.md — the official URLs every deduction must citereferences/diagnostics.md — copy-pasteable Gradle/code snippets for Compose Compiler reports, stability config, baseline profiles, and R8 checksscripts/compose-reports.init.gradle — Gradle init script the skill injects via --init-script in Step 4 to generate compiler reports automaticallyevals/evals.json holds acceptance cases that grade an audit of existing code — each {prompt, expected_output, expectations} is a snippet plus the findings the audit must produce. Cases 12–14 (cross-phase back-write, Strong Skipping false lead, snapshot self-invalidation) are mirrored, in the opposite direction, by compose-agent's write-mode evals, so the scoring path and the authoring path stay in lockstep. Run a model against each prompt and check every expectation.
© hamen, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 9 other files (scripts, references) in skills/jetpack-compose-audit of hamen/compose_skill.
Open the folder on GitHubat commit f815c31
Jetpack Compose Audit 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 |
|---|---|---|---|---|---|---|
| Jetpack Compose Audit this skillhamen/compose_skill | 373 | — | ~6k | Automated safety check: Notes | MIT | |
| Compose Multiplatform Patternsmonta-app/ocpp-emulator | 180 | 5 repos | ~2k | Automated safety check: Pass | Apache-2.0 | |
| Jetpack Compose and Multiplatform Expertrcosteira79/android-skills | 151 | — | ~2.6k | Automated safety check: Pass | MIT | |
| Android Jetpack Compose Expertaiskillstore/marketplace | 430 | 3 repos | ~1.4k | Automated safety check: Pass | None | |
| Android Developmentdpconde/claude-android-skill | 336 | — | ~1.7k | Automated safety check: Pass | MIT | |
| Stylesarindamxd/camerax-android | 132 | 4 repos | ~2.3k | Automated safety check: Pass | Apache-2.0 |
monta-app/ocpp-emulator
Compose Multiplatform and Jetpack Compose patterns for KMP projects — state management, navigation, theming, performance, and platform-specific UI.
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.
aiskillstore/marketplace
Expert guidance for building modern Android UIs with Jetpack Compose, covering state management, navigation, performance, and Material Design 3.
dpconde/claude-android-skill
Create production-quality Android applications following Google's official architecture guidance and NowInAndroid best practices.
arindamxd/camerax-android
A skill your agent uses to integrate the Jetpack Compose Styles API into an Android project.
androidx/androidx
Benchmarking and improving the performance of Jetpack Compose.
hamen/compose_skill
Helps AI coding assistants write modern Jetpack Compose: correct state, side effects, performance-aware modifiers, Navigation 3, Paging 3 in Compose, coroutines on lifecycle, animations, UI tests…
Works with
Categories
Audit Android Jetpack Compose repositories for performance, animation phase correctness, state management, side effects, composable API quality, and adjacent Android launch UX resource risks such as…. Jetpack Compose Audit is an agent skill from hamen/compose_skill. Audit Android Jetpack Compose repositories for performance, animation phase correctness, state management, side effects, composable API quality, and adjacent Android launch UX resource risks such as blurry Android 12+ splash icons.
Jetpack Compose Audit fits situations like: reviewing a Compose codebase; rating repository quality; inspecting recomposition/state issues; animation issues.
Run `npx skills add hamen/compose_skill --skill jetpack-compose-audit -a claude-code`. Or copy the skill folder (skills/jetpack-compose-audit in hamen/compose_skill) into .claude/skills/jetpack-compose-audit in your project. Claude Code loads it when a task matches its description.
Run `npx skills add hamen/compose_skill --skill jetpack-compose-audit -a codex`. Or copy the skill folder (skills/jetpack-compose-audit in hamen/compose_skill) into .agents/skills/jetpack-compose-audit 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 hamen/compose_skill --skill jetpack-compose-audit -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/jetpack-compose-audit, .gemini/skills/jetpack-compose-audit, .github/skills/jetpack-compose-audit and .opencode/skills/jetpack-compose-audit in your project.
Going by SKILL.md and its folder, Jetpack Compose Audit needs the command-line tools its instructions call (rg). Its frontmatter pre-approves these tools: Read, Glob, Grep, Write, Bash, Agent.
SKILL.md names 2 domains. In commands or code: issuetracker.google.com; the agent is likely to contact it when it follows the instructions. As links in the text: github.com. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found notes only (pre-approves every shell command (allowed-tools: bash)), nothing it rates as a warning. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Jetpack Compose Audit is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 6k tokens (SKILL.md is roughly 24k 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 35k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Jetpack Compose Audit: Compose Multiplatform Patterns (monta-app/ocpp-emulator, 180 stars), Jetpack Compose and Multiplatform Expert (rcosteira79/android-skills, 151 stars), Android Jetpack Compose Expert (aiskillstore/marketplace, 430 stars) and Android Development (dpconde/claude-android-skill, 336 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
hamen (a GitHub user) maintains it in hamen/compose_skill, which has 373 GitHub stars. The repository holds 2 skills in this directory. The repository was last updated on July 15, 2026.
Source: hamen/compose_skill on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.