Agent skill

Compose Agent

by hamen in 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…

MITAuto-check: notesMobile

Install Compose Agent

skills CLI
$ npx skills add hamen/compose_skill --skill compose-agent -a claude-code

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

GitHub CLI
$ gh skill install hamen/compose_skill compose-agent --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/hamen/compose_skill.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/compose-agent .claude/skills/compose-agent && 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-agent
GitHub stars
373
Token cost
~4k tokens
SKILL.md length
1,634 words
Files
19 (incl. references)
Skills in repo
2
Repo updated
First seen
Licence
MIT

At a glance

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 in 12 steps: Check for deprecated or soft-deprecated… → Validate state and data flow using… → Validate side-effect choice… → …
  • Reviewing Compose projects
  • SKILL.md covers Review Process, Core Instructions, Output Format (review mode) and Authoring Mode, plus 4 more sections
  • Reaches developer.android.com and android.googlesource.com

What it does

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.

When your agent uses it

  • Reviewing Compose projects
  • Tasks that involve Android development
  • Tasks that involve Accessibility

Example prompts

  • “Use the compose-agent skill to help AI coding assistants write modern Jetpack Compose: correct state, side effects, performance-aware modifiers…”
  • “/compose-agent”

Requirements

  • Pre-approved tools (allowed-tools): Read, Glob, Grep, Edit, Write, Bash

Workflow steps

12 steps, taken from the first numbered list in SKILL.md.

  1. Check for deprecated or soft-deprecated API using references/api.md.
  2. Validate state and data flow using references/state.md.
  3. Validate side-effect choice (LaunchedEffect, DisposableEffect, produceState, snapshotFlow, rememberUpdatedState) using…
  4. Review composable performance — stability, lambda modifiers, lazy list keys, deferred reads, cross-phase back-writes — using…
  5. Review modifier usage — ordering, lambda-form, Modifier.Node over composed { } — using references/modifiers.md.
  6. Review navigation using references/navigation.md — start from its decision table (Nav3 vs Nav2 type-safe vs plain state) before touching…
  7. Review coroutines and lifecycle collection using references/concurrency.md.
  8. Review Flow operators and StateFlow / SharedFlow shape (stateIn, shareIn, flatMap variants, combine, error handling, backpressure…
  9. Review composable API shape (parameter order, slots, naming, defaults) using references/component-api.md.
  10. Review UI testing patterns using references/testing.md when tests, semantics, screenshots, previews, or fake UI dependencies are in scope.
  11. Review focus and keyboard / D-pad navigation using references/focus.md when the UI uses focus APIs, keyboard input, TV, desktop, ChromeOS…
  12. Review Compose Multiplatform / KMP boundaries using references/kmp.md when common code, expect / actual, platform services, native views…

What it can do on your machine

Read from SKILL.md and the folder at commit f815c31. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves these tools, so the agent can use them without asking each time:

    • Read
    • Glob
    • Grep
    • Edit
    • Write
    • Bash

    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

    Hosts in commands or code, which the agent is likely to contact:

    • developer.android.com
    • android.googlesource.com
    • kotlinlang.org
    • jetbrains.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 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.

Always · name and description, kept in context so the agent knows when to use it
~109
When it runs · the whole SKILL.md, loaded when a task matches
~4k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~50k

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: notes

The automated check noted patterns worth knowing about, such as sudo or a known installer.

  • NotePre-approves every shell command (allowed-tools: Bash)SKILL.md
    allowed-tools: Read, Glob, Grep, Edit, Write, Bash

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 hamen/compose_skill at commit f815c31, republished under its MIT licence (© hamen). 1,634 words, ~4,042 tokens.

Download SKILL.mdSave it as .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.
name
compose-agent
description
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.
allowed-tools
Read, Glob, Grep, Edit, Write, Bash
license
MIT
argument-hint
[focus area, e.g. 'state', 'effects', 'navigation', 'paging', 'lifecycle', 'animation', 'testing', 'focus', 'kmp']
metadata.author
Ivan Morgillo
metadata.version
4.4.0

Compose Agent

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):

  • Kotlin 2.0.20+ with Compose Compiler 1.5.4+ (Strong Skipping Mode on by default).
  • Jetpack Compose BOM current, Material 3, androidx.lifecycle with collectAsStateWithLifecycle().
  • Navigation 3 (androidx.navigation3) when the project can adopt it; otherwise Navigation 2.8+.
  • Coroutines + Flow as the async primitives. Do not reach for RxJava or blocking I/O.

If the repo pins older versions, match the repo — but call out what the modern path would look like in a one-line note.

Review Process

  1. Check for deprecated or soft-deprecated API using references/api.md.
  2. Validate state and data flow using references/state.md.
  3. Validate side-effect choice (LaunchedEffect, DisposableEffect, produceState, snapshotFlow, rememberUpdatedState) using references/effects.md.
  4. Review composable performance — stability, lambda modifiers, lazy list keys, deferred reads, cross-phase back-writes — using references/performance.md.
  5. Review modifier usage — ordering, lambda-form, Modifier.Node over composed { } — using references/modifiers.md.
  6. Review navigation using references/navigation.md — start from its decision table (Nav3 vs Nav2 type-safe vs plain state) before touching call sites.
  7. Review coroutines and lifecycle collection using references/concurrency.md.
  8. Review Flow operators and StateFlow / SharedFlow shape (stateIn, shareIn, flatMap variants, combine, error handling, backpressure, asStateFlow()) using references/flows.md.
  9. Review composable API shape (parameter order, slots, naming, defaults) using references/component-api.md.
  10. Review UI testing patterns using references/testing.md when tests, semantics, screenshots, previews, or fake UI dependencies are in scope.
  11. Review focus and keyboard / D-pad navigation using references/focus.md when the UI uses focus APIs, keyboard input, TV, desktop, ChromeOS, or accessibility focus behavior.
  12. Review Compose Multiplatform / KMP boundaries using references/kmp.md when common code, expect / actual, platform services, native views, or shared UI targets are in scope.
  13. Review animation API choice and lifecycle — declarative vs imperative, 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.
  14. Review Paging 3 in Compose — 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.
  15. Final Kotlin style pass using references/kotlin.md.

If doing a partial review, load only the relevant reference files — each references file is designed to be read in isolation.

Core Instructions

  • Keep composables side-effect free in composition. All I/O, state mutation outside remembered objects, analytics, etc. belong in 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.
  • Every composable that takes a 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.
  • Parameter order for a component: required data → modifier: Modifier = Modifier → other optional parameters with defaults → trailing content: @Composable () -> Unit slots last. One modifier parameter per component.
  • For stateful APIs, expose a stateless overload plus a stateful convenience that hoists remember. See references/component-api.md.
  • Collect Flows with 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.
  • Prefer rememberSaveable over remember for UI state that should survive configuration change or process death, unless the value is unserializable or derivable.
  • Use the typed state factories (mutableIntStateOf, mutableLongStateOf, mutableFloatStateOf, mutableDoubleStateOf) for primitive state. Raw mutableStateOf<Int>(...) boxes.
  • Never write state a phase has already read. A layout callback (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.
  • Don't ship no-op "optimizations": 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.
  • Never put a lambda in a CompositionLocal. Use explicit parameters.
  • Do not introduce third-party libraries without asking first. The Accompanist libraries covering pager, swipe-refresh, flow layout, and system UI controller are deprecated — the functionality is in AndroidX now (HorizontalPager, PullToRefreshBox, FlowRow/FlowColumn, enableEdgeToEdge()).
  • When an element's background reads from 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 declaratively first. Use 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.
  • For paged feeds, use 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.

Output Format (review mode)

Organize findings by file. For each issue:

  1. State the file and relevant line(s).
  2. Name the rule being violated (e.g., "Use collectAsStateWithLifecycle() instead of collectAsState()").
  3. Show a brief before/after code fix.
  4. Link the official source (developer.android.com/... or AndroidX component guidelines).

Skip files with no issues. End with a prioritized summary — three items max, highest impact first.

Example Output
feature/profile/ProfileScreen.kt

Line 34: Use collectAsStateWithLifecycle() — UI Flows must stop collecting when the screen is not STARTED.

kotlin
// 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.

kotlin
// 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.

kotlin
// 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) })

https://developer.android.com/develop/ui/compose/performance/bestpractices#defer-reads-as-long-as-possible

Show full SKILL.md (643 more words)Show less
Summary
  1. Performance (high): Non-deferred animated reads on ProfileScreen.kt:72, HomeScreen.kt:110, DetailScreen.kt:88 recompose every frame. Switch to lambda-form modifiers.
  2. Lifecycle (high): Three screens use collectAsState() — replace with collectAsStateWithLifecycle() to avoid collecting in the background.
  3. API shape (medium): UserCard swallows its modifier parameter. Forward it to the outermost layout.

End of example.

Authoring Mode

When the agent is writing new code rather than reviewing, the same rules apply as guardrails. Before generating a composable, silently check:

  • Does it take modifier: Modifier = Modifier?
  • Is state hoisted, or is there a clear reason to own it here?
  • If it renders a list, does it use a stable key =?
  • If it launches work, is that work in a LaunchedEffect, produceState, or the ViewModel — not in the composition body?
  • If it collects a Flow, is it collectAsStateWithLifecycle()? (A Flow<PagingData<T>> is the exception — it uses collectAsLazyPagingItems().)
  • Is the parameter order: data → modifier → other → content slot last?
  • If it animates, is the API declarative first, remembered where needed, lifecycle-aware, and phase-correct?
  • Does any layout callback or snapshot-collection mutation write state read back in composition (a cross-phase / self-invalidation loop)?
  • If it pages, are keys stable, LoadState handled, and refresh/retry user-driven?
  • If it needs focus, testing, or platform-specific behavior, did you load the focused reference before judging?

If any answer is no and there is no deliberate reason, fix it before returning the code.

What This Skill Does Not Cover

Out of scope in v1 — delegate elsewhere or scope down explicitly:

  • Material 3 compliance, theming, and design tokens — use the material-3 skill.
  • Scoring an existing codebase with numeric grades — use the sibling jetpack-compose-audit skill in the same repo.
  • Wear OS / TV / Auto / Glance deep platform review — this skill now covers focus and keyboard/D-pad basics, but not full platform certification.
  • Accessibility deep review — we flag obvious gaps (missing 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

  • 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.

Acceptance Evals

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.

Primary Sources

Every rule in this skill traces back to one of:

  • https://developer.android.com/develop/ui/compose and its subpages
  • https://developer.android.com/kotlin/style-guide
  • https://kotlinlang.org/docs/coding-conventions.html
  • https://www.jetbrains.com/help/kotlin-multiplatform-dev/
  • https://android.googlesource.com/platform/frameworks/support/+/androidx-main/compose/docs/compose-api-guidelines.md
  • https://android.googlesource.com/platform/frameworks/support/+/androidx-main/compose/docs/compose-component-api-guidelines.md

When 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

Files

SKILL.md and 18 other files (references) in skills/compose-agent of hamen/compose_skill.

  • SKILL.md
  • .claude-plugin/plugin.json
  • .cursor-plugin/plugin.json
  • evals/evals.json
  • references/animation.md
  • references/api.md
  • references/component-api.md
  • references/concurrency.md
  • references/effects.md
  • references/flows.md
  • references/focus.md
  • references/kmp.md
  • references/kotlin.md
  • references/modifiers.md
  • references/navigation.md
  • references/paging.md
  • references/performance.md
  • … and 2 more

Open the folder on GitHubat commit f815c31

Compare with similar skills

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.

Compose Agent compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Compose Agent this skillhamen/compose_skill373—~4kAutomated safety check: NotesMIT
Android App FactoryJasonColapietro/suede-creator-skills127—~2.6kAutomated safety check: PassMIT
Compose Multiplatform Patternsmonta-app/ocpp-emulator1795 repos~2kAutomated safety check: PassApache-2.0
Android Developmentdpconde/claude-android-skill336—~1.7kAutomated safety check: PassMIT
Claude Android NinjaDrjacky/claude-android-ninja124—~5.2kAutomated safety check: PassApache-2.0
Jetpack Composedarriousliu/PiPixiv262—~1.5kAutomated safety check: PassApache-2.0

Similar skills

  • 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.

    127 GitHub stars~2.6k tokensUpdated 3 days 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.

    179 GitHub starsUsed in 5 repos~2k 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
  • Claude Android Ninja

    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.

    124 GitHub stars~5.2k tokensUpdated 8 days ago
    MobileAuto-check passed
  • Jetpack Compose

    darriousliu/PiPixiv

    Jetpack Compose expert skill for Android UI development. An agent skill from darriousliu/PiPixiv.

    262 GitHub stars~1.5k tokensUpdated yesterday
    MobileAuto-check passed
  • Coding Style

    sk2andy/candy-browser

    Apply Candy Browser's project-specific Kotlin, Jetpack Compose, Android/WebView, testing, and generator conventions.

    485 GitHub stars~548 tokensUpdated yesterday
    MobileAuto-check passed

More from hamen/compose_skill

  • Jetpack Compose Audit

    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…

    373 GitHub stars~6k tokensUpdated 2 mo ago
    Auto-check: notes

Categories

Questions about Compose Agent

What does Compose Agent do?

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.

When should I use Compose Agent?

Compose Agent fits situations like: reviewing Compose projects; tasks that involve Android development; tasks that involve Accessibility.

How do I install Compose Agent in Claude Code?

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.

How do I install Compose Agent in Codex?

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.

Can I use Compose Agent 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 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.

What does Compose Agent need to run?

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.

Does Compose Agent access the network?

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.

Is Compose Agent safe to install?

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.

What licence does Compose Agent use?

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.

How many tokens does Compose Agent use?

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.

What are the alternatives to Compose Agent?

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.

Who maintains Compose Agent?

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.