원클릭으로
android
Architecture, Jetpack Compose, Navigation3 KMP, and Koin DI rules for Android apps.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Architecture, Jetpack Compose, Navigation3 KMP, and Koin DI rules for Android apps.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Git Worktree: parallel working trees for isolated branch-level execution, debugging, and safe experimentation.
Durable project-memory rules for `.agent-memory/` plus session-memory boundaries.
Review routing, independent post-implementation review gates, multi-model escalation, and targeted optimization follow-up.
Planning-track selection, epic/feature decomposition, readiness gates, and plan-delta rules.
Practical rules for designing, evolving, and integrating APIs safely.
Concise code-quality rules for implementation and review across the stack.
| name | android |
| description | Architecture, Jetpack Compose, Navigation3 KMP, and Koin DI rules for Android apps. |
| user-invocable | false |
Use this skill for Android work built with Kotlin, Compose, and related modern app architecture patterns.
ViewState (Data Class) from the ViewModel. Do not expose multiple independent state flows unless strictly isolated.<Name>Screen: Handles DI, Navigation3 KMP routing, and connects the ViewModel to the UI.<Name>View(state, onEvent): A completely pure, stateless Composable.remember for business logic. Business logic belongs in the ViewModel.remember.modifier: Modifier = Modifier.@Preview Composables MUST be private or restricted visibility.public unless intended as an external design system component.If using Navigation3 KMP for architecture:
Unit.private.StateFlow.<Name>Screen wrapper, NOT inside the pure <Name>View.@Serializable annotations to your destination keys so they serialize correctly across non-JVM platforms (iOS/Web).If using Koin:
single and factory instead of bind with generic provider/singleton blocks for clearer syntax and safety.Prefer a clear 3-layer layout and keep boundaries strict:
data/: implementations (local DB, remote APIs, repository impls)domain/: pure business logic (models, repository interfaces, use cases)ui/: Compose screens, reusable components, themedi/: DI wiring only (no business logic)Rule: UI depends on domain, domain depends on nothing, data depends on domain (interfaces).
MutableStateFlow internally and expose StateFlow via asStateFlow().update { it.copy(...) } to keep changes atomic.Example (micro):
private val _state = MutableStateFlow(ViewState())
val state: StateFlow<ViewState> = _state.asStateFlow()
_state.update { it.copy(isLoading = true) }
flowOn(Dispatchers.IO) for data layer work.CoroutineDispatcher for testability.For operations that can be loading/success/error, prefer a sealed result type over nullable juggling.
Rule: keep it small (Loading, Success(data), Error(exception)), and map/transform explicitly.
Recommended stack (when it fits the repo):
kotlinx-coroutines-test for deterministic coroutine testsMockK for mockingTurbine for testing Flow/StateFlow emissionsRules:
Example (micro):
@Test fun emitsLoadingThenData() = runTest {
// collect state/flow and assert emissions (use Turbine if available)
}