Agent skill

Compose Performance Audit

by Moustachauve in Moustachauve/WLED-Android

Audit and improve Jetpack Compose runtime performance from code review and architecture.

Apache-2.0Auto-check passedMobile

Install Compose Performance Audit

skills CLI
$ npx skills add Moustachauve/WLED-Android --skill compose-performance-audit -a claude-code

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

GitHub CLI
$ gh skill install Moustachauve/WLED-Android compose-performance-audit --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/Moustachauve/WLED-Android.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.github/skills/compose-performance-audit .claude/skills/compose-performance-audit && 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
compose-performance-audit
GitHub stars
169
Used in
3 other repos
Token cost
~1.7k tokens
SKILL.md length
502 words
Files
1
Skills in repo
17
Repo updated
First seen
Licence
Apache-2.0

At a glance

Audit and improve Jetpack Compose runtime performance from code review and architecture.

  • Works in 5 steps: Code-First Review → Guide the User to Profile → Analyze and Diagnose → …
  • Asked to diagnose slow rendering
  • SKILL.md covers Overview, Workflow Decision Tree, 1. Code-First Review and 2. Guide the User to Profile, plus 7 more sections
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

Compose Performance Audit is an agent skill from Moustachauve/WLED-Android. Audit and improve Jetpack Compose runtime performance from code review and architecture. Use when asked to diagnose slow rendering, janky scrolling, excessive recompositions, or performance issues in Compose UI.

Its SKILL.md is about 1.7k 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 Mobile, covering Android development. It works with Jetpack Compose. The repository describes itself as: Native Android application for WLED. The licence is Apache-2.0.

When your agent uses it

  • Asked to diagnose slow rendering
  • Janky scrolling
  • Excessive recompositions
  • Performance issues in Compose UI

Example prompts

  • “/compose-performance-audit”

Workflow steps

5 steps, taken from the step headings in SKILL.md.

  1. Code-First Review
  2. Guide the User to Profile
  3. Analyze and Diagnose
  4. Remediate
  5. Verify

What it can do on your machine

Read from SKILL.md and the folder at commit 7e164a8. 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

    Links to these hosts (documentation or services it may open):

    • developer.android.com

    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

Compose Performance Audit loads about 1.7k tokens when it runs. Until then it costs about 59 tokens; SKILL.md has 502 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~59
When it runs · the whole SKILL.md, loaded when a task matches
~1.7k

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 Moustachauve/WLED-Android at commit 7e164a8, republished under its Apache-2.0 licence (© Moustachauve). 502 words, ~1,697 tokens.

Download SKILL.mdSave it as .claude/skills/compose-performance-audit/SKILL.md (or your agent's skills folder).
name
compose-performance-audit
description
Audit and improve Jetpack Compose runtime performance from code review and architecture. Use when asked to diagnose slow rendering, janky scrolling, excessive recompositions, or performance issues in Compose UI.

Compose Performance Audit

Overview

Audit Jetpack Compose view performance end-to-end, from instrumentation and baselining to root-cause analysis and concrete remediation steps.

Workflow Decision Tree

  • If the user provides code, start with "Code-First Review."
  • If the user only describes symptoms, ask for minimal code/context, then do "Code-First Review."
  • If code review is inconclusive, go to "Guide the User to Profile" and ask for Layout Inspector output or Perfetto traces.

1. Code-First Review

Collect:

  • Target Composable code.
  • Data flow: state, remember, derived state, ViewModel connections.
  • Symptoms and reproduction steps.

Focus on:

  • Recomposition storms from unstable parameters or broad state changes.
  • Unstable keys in LazyColumn/LazyRow (key churn, missing keys).
  • Heavy work in composition (formatting, sorting, filtering, object allocation).
  • Unnecessary recompositions (missing remember, unstable classes, lambdas).
  • Large images without proper sizing or async loading.
  • Layout thrash (deep nesting, intrinsic measurements, SubcomposeLayout misuse).

Provide:

  • Likely root causes with code references.
  • Suggested fixes and refactors.
  • If needed, a minimal repro or instrumentation suggestion.

2. Guide the User to Profile

Explain how to collect data:

  • Use Layout Inspector in Android Studio to see recomposition counts.
  • Enable Recomposition Highlights in Compose tooling.
  • Use Perfetto or System Trace for frame timing analysis.
  • Check Macrobenchmark results for startup/scroll metrics.

Ask for:

  • Layout Inspector screenshot showing recomposition counts.
  • Perfetto trace or System Trace export.
  • Device/OS/build configuration (debug vs release).

Important: Ensure profiling is done on a release build with R8 enabled. Debug builds have significant overhead.

3. Analyze and Diagnose

Prioritize likely Compose culprits:

  • Recomposition storms from unstable parameters or broad state changes.
  • Unstable keys in lazy lists (key churn, index-based keys).
  • Heavy work in composition (formatting, sorting, object allocation).
  • Missing remember causing recreations on every recomposition.
  • Large images without Modifier.size() constraints.
  • Unnecessary state reads in wrong composition phases.

Summarize findings with evidence from traces/Layout Inspector.

Show full SKILL.md (207 more words)Show less

4. Remediate

Apply targeted fixes:

  • Stabilize parameters: Use @Stable or @Immutable annotations on data classes.
  • Stabilize keys: Use stable, unique IDs for LazyColumn/LazyRow items.
  • Defer state reads: Use derivedStateOf, lambda-based modifiers, or Modifier.drawBehind.
  • Remember expensive computations: Wrap in remember { } or remember(key) { }.
  • Skip recomposition: Extract stable composables, use key() to control identity.
  • Async image loading: Use Coil/Glide with proper sizing constraints.
  • Reduce layout complexity: Flatten hierarchies, avoid deep nesting.

Common Code Smells (and Fixes)

Unstable lambda captures
kotlin
// BAD: New lambda instance every recomposition
Button(onClick = { viewModel.doSomething(item) }) { ... }

// GOOD: Use remember or method reference
val onClick = remember(item) { { viewModel.doSomething(item) } }
Button(onClick = onClick) { ... }
Expensive work in composition
kotlin
// BAD: Sorting on every recomposition
@Composable
fun ItemList(items: List<Item>) {
    val sorted = items.sortedBy { it.name } // Runs every recomposition
    LazyColumn { items(sorted) { ... } }
}

// GOOD: Use remember with key
@Composable
fun ItemList(items: List<Item>) {
    val sorted = remember(items) { items.sortedBy { it.name } }
    LazyColumn { items(sorted) { ... } }
}
Missing keys in LazyColumn
kotlin
// BAD: Index-based identity (causes recomposition on list changes)
LazyColumn {
    items(items) { item -> ItemRow(item) }
}

// GOOD: Stable key-based identity
LazyColumn {
    items(items, key = { it.id }) { item -> ItemRow(item) }
}
Unstable data classes
kotlin
// BAD: Unstable (contains List, which is not stable)
data class UiState(
    val items: List<Item>,
    val isLoading: Boolean
)

// GOOD: Mark as Immutable if truly immutable
@Immutable
data class UiState(
    val items: ImmutableList<Item>, // kotlinx.collections.immutable
    val isLoading: Boolean
)
Reading state too early
kotlin
// BAD: State read during composition (recomposes whole tree)
@Composable
fun AnimatedBox(scrollState: ScrollState) {
    val offset = scrollState.value // Recomposes on every scroll
    Box(modifier = Modifier.offset(y = offset.dp)) { ... }
}

// GOOD: Defer state read to layout/draw phase
@Composable
fun AnimatedBox(scrollState: ScrollState) {
    Box(modifier = Modifier.offset {
        IntOffset(0, scrollState.value) // Read in layout phase
    }) { ... }
}
Object allocation in composition
kotlin
// BAD: Creates new Modifier chain every recomposition
Box(modifier = Modifier.padding(16.dp).background(Color.Red))

// GOOD for dynamic modifiers: Remember the modifier
val modifier = remember { Modifier.padding(16.dp).background(Color.Red) }
Box(modifier = modifier)

Stability Checklist

TypeStable by Default?Fix
Primitives (Int, String, Boolean)YesN/A
data class with stable fieldsYes*Ensure all fields are stable
List, Map, SetNoUse ImmutableList from kotlinx
Classes with var propertiesNoUse @Stable if externally stable
LambdasNoUse remember { }

5. Verify

Ask the user to:

  • Re-run Layout Inspector and compare recomposition counts.
  • Run Macrobenchmark and compare frame timing.
  • Test on a real device with release build.

Summarize the delta (recomposition count, frame drops, jank) if provided.

Outputs

Provide:

  • A short metrics table (before/after if available).
  • Top issues (ordered by impact).
  • Proposed fixes with estimated effort.

References

© Moustachauve, 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

Just SKILL.md in .github/skills/compose-performance-audit of Moustachauve/WLED-Android.

Open the folder on GitHubat commit 7e164a8

Used in 3 other repositories

We found 4 copies of this SKILL.md (exact, near-identical or edited) in other folders, from 3 other GitHub owners. This page covers the copy in Moustachauve/WLED-Android, which our catalogue first saw on October 7, 2026.

Compare with similar skills

Compose Performance 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.

Compose Performance Audit compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Compose Performance Audit this skillMoustachauve/WLED-Android1693 repos~1.7kAutomated safety check: PassApache-2.0
Migrating To Modifier NoderosuH/EasyWatermark1.9k1 repos~5kAutomated safety check: PassApache-2.0
Publish ReleaseAyuilos/Miffan192—~635Automated safety check: PassAGPL-3.0
Composewebview Documentationparkwoocheol/compose-webview103—~1.5kAutomated safety check: PassMIT
Compose Multiplatform Patternsmonta-app/ocpp-emulator1805 repos~2kAutomated safety check: PassApache-2.0
Deferring State ReadsrosuH/EasyWatermark1.9k1 repos~3.8kAutomated safety check: PassApache-2.0

Similar skills

  • Migrating To Modifier Node

    rosuH/EasyWatermark

    A skill your agent uses to author new custom Jetpack Compose modifiers and migrate legacy ones from Modifier.composed { } to Modifier.Node + ModifierNodeElement<T.

    1.9k GitHub starsUsed in 1 repo~5k tokens
    MobileAuto-check passed
  • Publish Release

    Ayuilos/Miffan

    Publish a GitHub release for this fork, with a bilingual changelog that separates fork-owned changes from changes introduced by upstream merges.

    192 GitHub stars~635 tokensUpdated 2 days ago
    MobileAuto-check passed
  • Composewebview Documentation

    parkwoocheol/compose-webview

    Manages MkDocs documentation site and API references for ComposeWebView.

    103 GitHub stars~1.5k tokensUpdated 1 mo ago
    MobileAuto-check passed
  • 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.

    180 GitHub starsUsed in 5 repos~2k tokens
    MobileAuto-check passed
  • Deferring State Reads

    rosuH/EasyWatermark

    A skill your agent uses to push frequently-changing Jetpack Compose state reads (scroll position, animation values, drag offsets) out of the Composition phase and down into Layout or Draw using…

    1.9k GitHub starsUsed in 1 repo~3.8k tokens
    MobileAuto-check passed
  • 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

More from Moustachauve/WLED-Android

All 17 skills in this repo
  • Compose UI

    Moustachauve/WLED-Android

    Best practices for building UI with Jetpack Compose, focusing on state hoisting, detailed performance optimizations, and theming.

    169 GitHub starsUsed in 3 repos~676 tokens
    Auto-check passed
  • Gradle Build Performance

    Moustachauve/WLED-Android

    Debug and optimize Android/Gradle build performance. An agent skill from Moustachauve/WLED-Android.

    169 GitHub starsUsed in 3 repos~2k tokens
    Auto-check passed
  • Kotlin Concurrency Expert

    Moustachauve/WLED-Android

    Kotlin Coroutines review and remediation for Android. An agent skill from Moustachauve/WLED-Android.

    169 GitHub starsUsed in 3 repos~1.4k tokens
    Auto-check passed
  • Coil Compose

    Moustachauve/WLED-Android

    Expert guidance on using Coil for image loading in Jetpack Compose.

    169 GitHub starsUsed in 2 repos~789 tokens
    Auto-check passed
  • XML To Compose Migration

    Moustachauve/WLED-Android

    Convert Android XML layouts to Jetpack Compose. An agent skill from Moustachauve/WLED-Android.

    169 GitHub starsUsed in 2 repos~2.6k tokens
    Auto-check passed
  • Android Emulator Skill

    Moustachauve/WLED-Android

    Production-ready scripts for Android app testing, building, and automation.

    169 GitHub starsUsed in 1 repo~911 tokens
    Auto-check passed

Works with

Questions about Compose Performance Audit

What does Compose Performance Audit do?

Audit and improve Jetpack Compose runtime performance from code review and architecture. Compose Performance Audit is an agent skill from Moustachauve/WLED-Android. Audit and improve Jetpack Compose runtime performance from code review and architecture.

When should I use Compose Performance Audit?

Compose Performance Audit fits situations like: asked to diagnose slow rendering; janky scrolling; excessive recompositions; performance issues in Compose UI.

How do I install Compose Performance Audit in Claude Code?

Run `npx skills add Moustachauve/WLED-Android --skill compose-performance-audit -a claude-code`. Or copy the skill folder (.github/skills/compose-performance-audit in Moustachauve/WLED-Android) into .claude/skills/compose-performance-audit in your project. Claude Code loads it when a task matches its description.

How do I install Compose Performance Audit in Codex?

Run `npx skills add Moustachauve/WLED-Android --skill compose-performance-audit -a codex`. Or copy the skill folder (.github/skills/compose-performance-audit in Moustachauve/WLED-Android) into .agents/skills/compose-performance-audit in your project. Codex loads it when a task matches its description.

Can I use Compose Performance Audit 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 Moustachauve/WLED-Android --skill compose-performance-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/compose-performance-audit, .gemini/skills/compose-performance-audit, .github/skills/compose-performance-audit and .opencode/skills/compose-performance-audit in your project.

What does Compose Performance Audit need to run?

SKILL.md names no scripts, command-line tools or credentials: Compose Performance Audit is instructions for the agent only.

Does Compose Performance Audit access the network?

SKILL.md names 1 domain. As links in the text: developer.android.com. This is read from the text; nothing was executed.

Is Compose Performance Audit 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 Compose Performance Audit use?

Compose Performance Audit is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Compose Performance Audit use?

About 1.7k tokens (SKILL.md is roughly 6.8k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Compose Performance Audit?

Skills that share tags, products or a category with Compose Performance Audit: Migrating To Modifier Node (rosuH/EasyWatermark, 1.9k stars), Publish Release (Ayuilos/Miffan, 192 stars), Composewebview Documentation (parkwoocheol/compose-webview, 103 stars) and Compose Multiplatform Patterns (monta-app/ocpp-emulator, 180 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Compose Performance Audit?

Moustachauve (a GitHub user) maintains it in Moustachauve/WLED-Android, which has 169 GitHub stars. The repository holds 17 skills in this directory. The repository was last updated on October 7, 2026.

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