compose-pro/SKILL.md
Comprehensively reviews Jetpack Compose code for best practices on modern APIs, maintainability, and performance. Use when reading, writing, or reviewing Compose projects.
npx skillsauth add BreakZero/Compose-Agent-Skill compose-proInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Review Kotlin and Jetpack Compose code for correctness, modern API usage, and adherence to project conventions. Report only genuine problems - do not nitpick or invent issues.
references/api.md.references/components.md.references/state.md.references/navigation.md.references/design.md.references/accessibility.md.references/performance.md.references/kotlin.md.references/hygiene.md.If doing a partial review, load only the relevant reference files.
Organize findings by file. For each issue:
rememberSaveable() instead of remember() for state that survives configuration changes").Skip files with no issues. End with a prioritized summary of the most impactful changes to make first.
MainActivity.kt
Line 12: Use `fillMaxWidth()` instead of `Modifier.width(Int.MAX_VALUE.dp)`.
// Before
Text(
text = "Hello",
modifier = Modifier.width(Int.MAX_VALUE.dp)
)
// After
Text(
text = "Hello",
modifier = Modifier.fillMaxWidth()
)
Line 24: Icon-only button is bad for TalkBack - add a content description.
// Before
IconButton(onClick = { addUser() }) {
Icon(Icons.Default.Add, contentDescription = null)
}
// After
IconButton(onClick = { addUser() }) {
Icon(Icons.Default.Add, contentDescription = "Add User")
}
Line 31: Avoid creating derived state inline - use `derivedStateOf` instead.
// Before
val filteredItems = items.filter { it.isVisible }
// After
val filteredItems by remember(items) {
derivedStateOf { items.filter { it.isVisible } }
}
Summary
- Accessibility (high): The icon button on line 24 is invisible to TalkBack.
- Deprecated API (medium): Manual width on line 12 should use fillMaxWidth().
- State management (medium): The inline filter on line 31 causes unnecessary recompositions.
references/accessibility.md - TalkBack, font scaling, reduce motion, and other accessibility requirements.references/api.md - updating code for modern API, and the deprecated code it replaces.references/design.md - guidance for building accessible apps that meet Material Design guidelines.references/hygiene.md - making code compile cleanly and be maintainable in the long term.references/navigation.md - navigation using Compose Navigation, plus dialogs and bottom sheets.references/performance.md - optimizing Compose code for maximum performance.references/state.md - state management, ViewModel, and state holders.references/kotlin.md - tips on writing modern Kotlin code, including using coroutines effectively.references/components.md - composable structure, composition, and animation.development
Comprehensively reviews Jetpack Compose code for best practices on modern APIs, maintainability, and performance. Use when reading, writing, or reviewing Compose projects.
development
Maintainer-only workflow for handling GitHub Secret Scanning alerts on OpenClaw. Use when Codex needs to triage, redact, clean up, and resolve secret leakage found in issue comments, issue bodies, PR comments, or other GitHub content.
development
Maintainer workflow for OpenClaw releases, prereleases, changelog release notes, and publish validation. Use when Codex needs to prepare or verify stable or beta release steps, align version naming, assemble release notes, check release auth requirements, or validate publish-time commands and artifacts.
development
Run, watch, debug, and extend OpenClaw QA testing with qa-lab and qa-channel. Use when Codex needs to execute the repo-backed QA suite, inspect live QA artifacts, debug failing scenarios, add new QA scenarios, or explain the OpenClaw QA workflow. Prefer the live OpenAI lane with regular openai/gpt-5.4 in fast mode; do not use gpt-5.4-pro or gpt-5.4-mini unless the user explicitly overrides that policy.