Android App Factory
JasonColapietro/suede-creator-skills
Takes a native Android app from product idea to Google Play release, covering Compose architecture, policy checks, privacy, billing, testing, signing and rollout.
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…
$ npx skills add hamen/compose_skill --skill compose-agent -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install hamen/compose_skill compose-agent --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/compose-agent .claude/skills/compose-agent && 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 "compose-agent" agent skill from https://github.com/hamen/compose_skill/tree/main/skills/compose-agent into .claude/skills/compose-agent/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "compose-agent", 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/compose-agentType 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 compose-agent -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install hamen/compose_skill compose-agent --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/compose-agent .agents/skills/compose-agent && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "compose-agent" agent skill from https://github.com/hamen/compose_skill/tree/main/skills/compose-agent into .agents/skills/compose-agent/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "compose-agent", 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 compose-agent -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install hamen/compose_skill compose-agent --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/compose-agent .cursor/skills/compose-agent && 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 "compose-agent" agent skill from https://github.com/hamen/compose_skill/tree/main/skills/compose-agent into .cursor/skills/compose-agent/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "compose-agent", 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/compose-agent--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 compose-agent -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install hamen/compose_skill compose-agent --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/compose-agent .gemini/skills/compose-agent && 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 "compose-agent" agent skill from https://github.com/hamen/compose_skill/tree/main/skills/compose-agent into .gemini/skills/compose-agent/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "compose-agent", 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 compose-agentInstalls 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 compose-agent -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/compose-agent .github/skills/compose-agent && 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 "compose-agent" agent skill from https://github.com/hamen/compose_skill/tree/main/skills/compose-agent into .github/skills/compose-agent/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "compose-agent", 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 compose-agent -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 compose-agent --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/compose-agent .opencode/skills/compose-agent && 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 "compose-agent" agent skill from https://github.com/hamen/compose_skill/tree/main/skills/compose-agent into .opencode/skills/compose-agent/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "compose-agent", 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.
compose-agentHelps 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…
Compose Agent is an agent skill from 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, focus/keyboard navigation, Compose Multiplatform boundaries, idiomatic Kotlin, and well-shaped composable APIs. Targets the mistakes LLMs actually make in Compose code. Use when reading, writing, or reviewing Compose projects.
Its SKILL.md is about 4k tokens, which your agent loads only when the skill is triggered. The skill folder holds 22 other files, including reference files (for example `.claude-plugin/plugin.json`, `.cursor-plugin/plugin.json` and `evals/evals.json`).
It sits in Mobile, covering Android development and Accessibility. It works with Jetpack Compose, Kotlin and Android. The repository describes itself as: A strict, evidence-based audit skill for Android Jetpack Compose repositories. The licence is MIT.
12 steps, taken from the first numbered list 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:
ReadGlobGrepEditWriteBashFrom 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.
Hosts in commands or code, which the agent is likely to contact:
developer.android.comandroid.googlesource.comkotlinlang.orgjetbrains.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.
Compose Agent loads about 4k tokens when it runs, and up to ~50k if it reads all its reference files. Until then it costs about 109 tokens; SKILL.md has 1,634 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, Edit, Write, BashAutomated 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 hamen/compose_skill at commit f815c31, republished under its MIT licence (© hamen). 1,634 words, ~4,042 tokens.
.claude/skills/compose-agent/SKILL.md (or your agent's skills folder). This skill also uses 18 other files; get the full folder from GitHub.Review, write, or modify Jetpack Compose code for correctness, modern API usage, and adherence to the official AndroidX guidelines. Report only genuine problems — do not nitpick or invent issues.
Target track (unless the repo says otherwise):
2.0.20+ with Compose Compiler 1.5.4+ (Strong Skipping Mode on by default).androidx.lifecycle with collectAsStateWithLifecycle().androidx.navigation3) when the project can adopt it; otherwise Navigation 2.8+.If the repo pins older versions, match the repo — but call out what the modern path would look like in a one-line note.
references/api.md.references/state.md.LaunchedEffect, DisposableEffect, produceState, snapshotFlow, rememberUpdatedState) using references/effects.md.references/performance.md.Modifier.Node over composed { } — using references/modifiers.md.references/navigation.md — start from its decision table (Nav3 vs Nav2 type-safe vs plain state) before touching call sites.references/concurrency.md.stateIn, shareIn, flatMap variants, combine, error handling, backpressure, asStateFlow()) using references/flows.md.references/component-api.md.references/testing.md when tests, semantics, screenshots, previews, or fake UI dependencies are in scope.references/focus.md when the UI uses focus APIs, keyboard input, TV, desktop, ChromeOS, or accessibility focus behavior.references/kmp.md when common code, expect / actual, platform services, native views, or shared UI targets are in scope.remembered Animatable, target-driven launches, spring over tween, deferred animated reads, AnimatedContent keys — using references/animation.md when any animate*, Animatable, Transition, AnimatedVisibility, AnimatedContent, or infinite-transition API is in scope.collectAsLazyPagingItems (the paging differ — not collectAsStateWithLifecycle, which does not apply to PagingData), stable itemKey, LoadState branches, user-driven refresh() / retry() — using references/paging.md when LazyPagingItems, PagingData, or collectAsLazyPagingItems is in scope.references/kotlin.md.If doing a partial review, load only the relevant reference files — each references file is designed to be read in isolation.
LaunchedEffect, DisposableEffect, produceState, the ViewModel, or — for event/gesture-driven work only — rememberCoroutineScope().launch inside a handler. Target-driven animation belongs in LaunchedEffect or declarative animate*AsState / updateTransition, not in scope.launch from the composition body. See references/animation.md and references/effects.md.Modifier names the parameter modifier, types it Modifier = Modifier, and applies it to the outermost layout only. Never create a modifier parameter you do not forward.modifier: Modifier = Modifier → other optional parameters with defaults → trailing content: @Composable () -> Unit slots last. One modifier parameter per component.remember. See references/component-api.md.collectAsStateWithLifecycle() in UI code. Plain collectAsState() keeps collecting when the screen is not visible and burns battery and bandwidth. Exception: Flow<PagingData<T>> is collected with collectAsLazyPagingItems(), never collectAsStateWithLifecycle() — see references/paging.md.rememberSaveable over remember for UI state that should survive configuration change or process death, unless the value is unserializable or derivable.mutableIntStateOf, mutableLongStateOf, mutableFloatStateOf, mutableDoubleStateOf) for primitive state. Raw mutableStateOf<Int>(...) boxes.onSizeChanged / onGloballyPositioned / onPlaced) must not write state a sibling reads in composition (a cross-phase back-write, a measure → recompose loop), and never mutate a mutableStateListOf / mutableStateMapOf inside a composable body that also reads it (composition-phase self-invalidation, a mutate → recompose loop). Consume measured values in layout/draw, or mutate snapshot state from an event / LaunchedEffect / state holder. See references/performance.md.remember(index) on a pure function, or remember-ing an already-auto-memoized callback under Strong Skipping (SSM memoizes lambdas even with unstable captures). Prove a recomposition win with Layout Inspector counts or compiler reports, not the presence of a pattern. See references/performance.md.CompositionLocal. Use explicit parameters.HorizontalPager, PullToRefreshBox, FlowRow/FlowColumn, enableEdgeToEdge()).MaterialTheme.colorScheme.* (directly or via a blend), its text and icon colors must read from the same theming source. Hard-coded Color.Black / Color.White / raw ARGB literals over theme-driven backgrounds are dark-mode regressions. See references/component-api.md.animate*AsState for single state-driven values and updateTransition for synchronized ones; reach for Animatable only when you need imperative control (gesture, fling, sequence). Always remember an Animatable, launch target-driven animations from LaunchedEffect (never scope.launch in composition to react to state), prefer spring() over tween for interruptible motion, and read animated values in the layout/draw phase (lambda modifiers / graphicsLayer) so the animation does not recompose every frame. See references/animation.md.collectAsLazyPagingItems(), render with items(count = …, key = …) and stable domain ids, branch on loadState for loading/empty/error/append, and keep refresh() / retry() on user actions — not in the composition body. See references/paging.md.Organize findings by file. For each issue:
collectAsStateWithLifecycle() instead of collectAsState()").developer.android.com/... or AndroidX component guidelines).Skip files with no issues. End with a prioritized summary — three items max, highest impact first.
feature/profile/ProfileScreen.ktLine 34: Use collectAsStateWithLifecycle() — UI Flows must stop collecting when the screen is not STARTED.
// Before
val user by viewModel.user.collectAsState()
// After
val user by viewModel.user.collectAsStateWithLifecycle()https://developer.android.com/topic/architecture/ui-layer/state-production#continuous-vs-discrete
Line 58: Pass modifier to the outermost layout, not to inner content.
// Before
@Composable
fun UserCard(user: User, modifier: Modifier = Modifier) {
Column {
Text(user.name, modifier = modifier) // modifier swallowed here
Text(user.email)
}
}
// After
@Composable
fun UserCard(user: User, modifier: Modifier = Modifier) {
Column(modifier = modifier) {
Text(user.name)
Text(user.email)
}
}https://developer.android.com/develop/ui/compose/api-guidelines#naming-modifiers
Line 72: Defer the animated offset read to the layout phase using the lambda form.
// Before
val dx by animateDpAsState(targetValue = if (expanded) 0.dp else (-200).dp, label = "drawerOffset")
Box(modifier = Modifier.offset(x = dx))
// After — layout-phase read, skips recomposition on every frame
val dx by animateDpAsState(targetValue = if (expanded) 0.dp else (-200).dp, label = "drawerOffset")
Box(modifier = Modifier.offset { IntOffset(dx.roundToPx(), 0) })ProfileScreen.kt:72, HomeScreen.kt:110, DetailScreen.kt:88 recompose every frame. Switch to lambda-form modifiers.collectAsState() — replace with collectAsStateWithLifecycle() to avoid collecting in the background.UserCard swallows its modifier parameter. Forward it to the outermost layout.End of example.
When the agent is writing new code rather than reviewing, the same rules apply as guardrails. Before generating a composable, silently check:
modifier: Modifier = Modifier?key =?LaunchedEffect, produceState, or the ViewModel — not in the composition body?collectAsStateWithLifecycle()? (A Flow<PagingData<T>> is the exception — it uses collectAsLazyPagingItems().)LoadState handled, and refresh/retry user-driven?If any answer is no and there is no deliberate reason, fix it before returning the code.
Out of scope in v1 — delegate elsewhere or scope down explicitly:
material-3 skill.jetpack-compose-audit skill in the same repo.contentDescription, icon-only buttons without labels, touch targets under 48dp) but do not grade.If the user needs any of the above, narrow the scope and say so.
references/api.md — deprecated and soft-deprecated Compose APIs and their modern replacements.references/state.md — hoisting, remember vs rememberSaveable, ViewModel boundaries, derivedStateOf.references/effects.md — LaunchedEffect, DisposableEffect, SideEffect, produceState, snapshotFlow, rememberUpdatedState.references/performance.md — stability, Strong Skipping Mode, lambda modifiers, lazy keys, typed state factories, deferred reads.references/modifiers.md — modifier ordering, lambda form, Modifier.Node over composed { }.references/navigation.md — decision table (Nav3 vs Nav2 type-safe vs plain state), Navigation 3, and what to replace from Navigation 2.references/concurrency.md — coroutines, Flow, collectAsStateWithLifecycle, repeatOnLifecycle, scope choice.references/flows.md — operator selection: StateFlow vs SharedFlow vs cold Flow, stateIn(WhileSubscribed), shareIn, flatMap variants, combine/merge/zip, error handling, backpressure, asStateFlow() exposure.references/component-api.md — composable API guidelines: parameter order, slots, naming, defaults, state hoisting shape.references/testing.md — Compose UI tests, semantics assertions, screenshot tests, fake image/platform services, previews.references/focus.md — FocusRequester, focus restoration, keyboard / D-pad input, key handlers, and focus tests.references/kmp.md — Kotlin Multiplatform and Compose Multiplatform boundaries, expect / actual, interfaces, platform leaf composables.references/animation.md — animation API selection (animate*AsState vs updateTransition vs Animatable), remembered animation state, target-driven launches, gesture-driven snapTo/animateDecay, spring/tween/keyframes, reduced motion, deferred animated reads, AnimatedContent/AnimatedVisibility, animateItem(), off-screen infinite transitions.references/paging.md — Paging 3 in Compose: when to page vs plain lists, collectAsLazyPagingItems, stable itemKey, LoadState UI, pull-to-refresh, anti-patterns for paginated lazy lists.references/kotlin.md — Kotlin coding conventions and Android Kotlin style the LLM keeps missing.evals/evals.json holds write-mode acceptance cases — prompts that ask this skill to write Compose, plus the expectations the produced code must satisfy. Cases 0–2 mirror the jetpack-compose-audit scoring rules 1:1 (cross-phase back-writes, Strong Skipping false leads, snapshot self-invalidation) — bin/ci keeps them in lockstep so the authoring path can't drift from the audit path; cases 3–4 add foundational phase-correct reads and lifecycle-aware Flow collection. Run a model with this skill loaded against each prompt and check every expectation.
Every rule in this skill traces back to one of:
https://developer.android.com/develop/ui/compose and its subpageshttps://developer.android.com/kotlin/style-guidehttps://kotlinlang.org/docs/coding-conventions.htmlhttps://www.jetbrains.com/help/kotlin-multiplatform-dev/https://android.googlesource.com/platform/frameworks/support/+/androidx-main/compose/docs/compose-api-guidelines.mdhttps://android.googlesource.com/platform/frameworks/support/+/androidx-main/compose/docs/compose-component-api-guidelines.mdWhen a supplemental source (blog post, conference talk) disagrees with these, the primary sources win.
© 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 18 other files (references) in skills/compose-agent of hamen/compose_skill.
Open the folder on GitHubat commit f815c31
Compose Agent 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 |
|---|---|---|---|---|---|---|
| Compose Agent this skillhamen/compose_skill | 373 | — | ~4k | Automated safety check: Notes | MIT | |
| Android App FactoryJasonColapietro/suede-creator-skills | 127 | — | ~2.6k | Automated safety check: Pass | MIT | |
| Compose Multiplatform Patternsmonta-app/ocpp-emulator | 179 | 5 repos | ~2k | Automated safety check: Pass | Apache-2.0 | |
| Android Developmentdpconde/claude-android-skill | 336 | — | ~1.7k | Automated safety check: Pass | MIT | |
| Claude Android NinjaDrjacky/claude-android-ninja | 124 | — | ~5.2k | Automated safety check: Pass | Apache-2.0 | |
| Jetpack Composedarriousliu/PiPixiv | 262 | — | ~1.5k | Automated safety check: Pass | Apache-2.0 |
JasonColapietro/suede-creator-skills
Takes a native Android app from product idea to Google Play release, covering Compose architecture, policy checks, privacy, billing, testing, signing and rollout.
monta-app/ocpp-emulator
Compose Multiplatform and Jetpack Compose patterns for KMP projects — state management, navigation, theming, performance, and platform-specific UI.
dpconde/claude-android-skill
Create production-quality Android applications following Google's official architecture guidance and NowInAndroid best practices.
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.
darriousliu/PiPixiv
Jetpack Compose expert skill for Android UI development. An agent skill from darriousliu/PiPixiv.
sk2andy/candy-browser
Apply Candy Browser's project-specific Kotlin, Jetpack Compose, Android/WebView, testing, and generator conventions.
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…
Works with
Categories
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…. Compose Agent is an agent skill from 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, focus/keyboard navigation, Compose Multiplatform boundaries, idiomatic Kotlin, and well-shaped composable APIs.
Compose Agent fits situations like: reviewing Compose projects; tasks that involve Android development; tasks that involve Accessibility.
Run `npx skills add hamen/compose_skill --skill compose-agent -a claude-code`. Or copy the skill folder (skills/compose-agent in hamen/compose_skill) into .claude/skills/compose-agent in your project. Claude Code loads it when a task matches its description.
Run `npx skills add hamen/compose_skill --skill compose-agent -a codex`. Or copy the skill folder (skills/compose-agent in hamen/compose_skill) into .agents/skills/compose-agent 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 compose-agent -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/compose-agent, .gemini/skills/compose-agent, .github/skills/compose-agent and .opencode/skills/compose-agent in your project.
SKILL.md names no scripts, command-line tools or credentials: Compose Agent is instructions for the agent only. Its frontmatter pre-approves these tools: Read, Glob, Grep, Edit, Write, Bash.
SKILL.md names 4 domains. In commands or code: developer.android.com, android.googlesource.com, kotlinlang.org and jetbrains.com; the agent is likely to contact these when it follows the instructions. 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. Review the folder before installing.
Compose Agent is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.
About 4k tokens (SKILL.md is roughly 16k 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 46k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Compose Agent: Android App Factory (JasonColapietro/suede-creator-skills, 127 stars), Compose Multiplatform Patterns (monta-app/ocpp-emulator, 179 stars), Android Development (dpconde/claude-android-skill, 336 stars) and Claude Android Ninja (Drjacky/claude-android-ninja, 124 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.