What problem does it solve? Setting up a presentation layer in Kotlin Multiplatform often couples ViewModels to Compose or Android, making them untestable on plain JVM and leaking UI dependencies into business logic. This Skill scaffolds a :presenter module with pure Kotlin ViewModels, MVI contracts, and Koin wiring that compiles and tests without an emulator. ## Core Features & Use Cases - MVI Contract Scaffolding: Generates UiState and UiIntent sealed classes plus a ViewModel exposing StateFlow<UiState> with an onIntent dispatcher. - Convention Plugin & Build Setup: Provides a feature.presenter Gradle convention plugin using the KMP androidx.lifecycle.viewmodel artifact with no Compose dependency, plus a jvm() target for CI tests. - Koin Wiring: Supports both annotated mode (@KoinViewModel with the Koin compiler plugin) and manual module { viewModel { ... } } declarations. - Multi-Source State Patterns: Shows combine for merging independent flows, flatMapLatest for dependent flows, and SharingStarted.WhileSubscribed(5_000) for lifecycle-aware sharing. - Use Case: Add a :presenter module to a new auth feature, define AuthUiState/AuthUiIntent, wire AuthViewModel into Koin, and test it with runTest and Turbine on plain JVM. ## Quick Start Ask the agent to set up a presenter module with an MVI ViewModel and Koin wiring for a specific KMP feature such as authentication.