What problem does it solve?
Kotlin developers often struggle with where to place behavior (member vs extension vs top-level), when to wrap primitives in domain types, and how to structure Kotlin Multiplatform expect/actual boundaries without leaking platform details into common code.
Core Features & Use Cases
- Function Ownership Decisions: Choose between member functions, extensions, top-level functions, factories, and injected collaborators based on semantic ownership rules.
- Value Class vs Data Class Guidance: Decide when a single-field domain concept warrants a
@JvmInline value class, a typealias, or a data class, with contract checks for serialization, equality, and Java interop.
- Multiplatform Boundary Design: Structure expect/actual declarations and common interfaces so platform SDK details stay at leaf nodes and common APIs remain semantic.
- Use Case: When reviewing a PR that adds a
String.toUserId() extension, use this Skill to relocate construction to a UserId companion factory and verify the change preserves the public contract.
Quick Start
Ask the assistant to review your Kotlin API design, for example whether a function should be a member or extension, or whether a wrapper type should be a value class or data class.