agentleFS
ryanschueryanschue/automated-product-engineer/skills/kotlin-multiplatform-app/SKILL.md

kotlin-multiplatform-app

Skill0 starsChanged 26 days agoMITView on GitHub

Design, build, audit, and deliver Kotlin Multiplatform applications with shared product logic and slim native Android and iOS shells. Use for KMP monorepos, commonMain, Android/iOS source sets, shared state and sync, Swift interoperability, cross-platform tokens, native UI projections, or parallel mobile CI.

The file

We split this skill into the rules it gives an agent

3 rules. About 0 are common, 3 are distinctive, and 0 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈3

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 0

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Read architecture-and-module-boundaries.md before creating or changing modules.

    line 21
  2. Distinctive:

    Read tokens-components-and-shared-ui.md before changing tokens, component contracts, code generation, or the shared/native UI boundary.

    line 33
  3. Distinctive:

    Read testing-ci-and-release.md for matrices, compatibility windows, performance, evidence, and rollout.

    line 39

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Kotlin Multiplatform Application

Share product truth, not platform accidents. Put behavior that must remain identical in a product kernel and keep lifecycle, UI, capabilities, secure storage, and distribution in native edges. Do not pursue a shared-code percentage; minimize the number of places where a product rule can disagree.

Establish the contract

Inspect product docs, Gradle settings and wrapper, version catalog, KMP and Android plugins, source sets and targets, modules, iOS integration, public framework API, platform shells, token sources, component contracts, code generation, tests, CI, and release paths. Run pnpm dlx automated-product-engineer doctor when installed.

Classify each concern before moving code:

  • Shared source: requirements, domain vocabulary, state machines, policy, validation, protocol schemas, error taxonomy, sync and conflict rules, analytics semantics, feature flags, semantic tokens, and test scenarios.
  • Shared implementation: pure domain logic, application use cases, serialization, repositories, feature stores, offline orchestration, and capability interfaces.
  • Generated projection: Kotlin, Swift, CSS, API clients, event catalogs, and documentation derived deterministically from a canonical source.
  • Native implementation: platform composition, UI, navigation, lifecycle, credential UI and secure storage, capabilities, accessibility, performance integration, signing, and store delivery.

Read architecture-and-module-boundaries.md before creating or changing modules. Read adoption-and-migration.md when introducing KMP to an existing repository.

Build the shared product kernel

Keep the invariant kernel platform-free and deterministic. Model commands, states, failures, revisions, operation IDs, and time explicitly. The portable runtime may use coroutines and serialization, but receives clock, identifier, transport, persistence, identity, telemetry, scheduler, and capability ports from the composition root. Prefer injected interfaces to expect/actual; use expect/actual for narrow construction or platform facts.

Expose each feature through a small facade: immutable state, typed intent, subscription, and close/cancel. Keep most Kotlin declarations internal so the Swift API stays intentional. Map expected failures to values; do not let undeclared Kotlin exceptions cross into Swift. Read state-sync-and-auth.md for feature stores, concurrency, offline work, identity, and server authority. Read swift-interop-and-native-shells.md for the exported boundary and native adapters.

Share the design system correctly

Keep semantic token and component behavior sources platform-neutral. Compile tokens into native names with a recorded source digest; map them to platform types at the edge. Component contracts define meaning, variants, states, interaction, accessibility, adaptation, and examples. Jetpack Compose and SwiftUI components remain free to honor their platforms. Share UI with Compose Multiplatform only after a feature-level decision records native capability, UX, performance, ownership, and escape-hatch tradeoffs.

Read tokens-components-and-shared-ui.md before changing tokens, component contracts, code generation, or the shared/native UI boundary.

Deliver in parallel

Land contracts and a shared-kernel commit first. Android and iOS work then proceed in parallel against that immutable interface. CI fans out into contract drift, common tests, Android, iOS, server compatibility, performance, and release evidence. Use additive API and schema evolution so one platform can lag safely. Every native journey reports its contract version and shared commit.

Read testing-ci-and-release.md for matrices, compatibility windows, performance, evidence, and rollout. Production signing, store publication, and credential changes remain human-authorized delivery actions.

For large parallel programs, read parallel-delivery-operating-model.md. Use one versioned contract capsule and completion ledger per feature so shared, server, Android, iOS, design-system, quality, and documentation lanes can progress against the same immutable product meaning without sharing implementation ownership.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.