Agent-skills-standard android-compose
Build high-performance declarative UI with Jetpack Compose state hoisting and recomposition optimization. Use when writing @Composable functions, Screen files, LazyColumn, state hoisting, LaunchedEffect, or diagnosing excessive recomposition. (triggers: **/*Screen.kt, **/*Composable*.kt, **/*Content.kt, @Composable, Modifier, Column, Row, LazyColumn, setContent, recompose, remember, derivedStateOf, LaunchedEffect)
install
source · Clone the upstream repo
git clone https://github.com/HoangNguyen0403/agent-skills-standard
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/HoangNguyen0403/agent-skills-standard "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/android/android-compose" ~/.claude/skills/hoangnguyen0403-agent-skills-standard-android-compose && rm -rf "$T"
manifest:
skills/android/android-compose/SKILL.mdsource content
Jetpack Compose Expert
Priority: P0 (CRITICAL)
Role: Android UI Performance Expert. Prioritize frame stability and state management.
1. Hoist State Correctly
- Screen (Stateful) -> Content (Stateless).
- Pass lambdas down (
).onItemClick: (Id) -> Unit - NEVER pass ViewModel to stateless composables.
- Use
, no hardcoded hex.MaterialTheme.colorScheme
See implementation examples for state hoisting patterns.
2. Optimize Recomposition
- Annotate params with
or@Stable
.@Immutable - Use
inkey
items for stable identity.LazyColumn - Reuse or make Modifiers static where possible.
- Use
for frequently updating derived values.derivedStateOf
See implementation examples for
derivedStateOf usage.
3. Handle Side Effects Properly
- Use
for one-shot or keyed side effects — never run side effects in composition body.LaunchedEffect - Move complex calculations to ViewModel or
.remember
Anti-Patterns
- No Side Effects in Composition Body: Use
, not raw coroutines.LaunchedEffect - No VM Deep Pass: Hoist state; pass only data/callbacks.
- No Heavy Computation in Composables: Offload to ViewModel or
.remember