Ksafe
ioannisa/KSafe
Required before any reply that touches KSafe (by ksafe(...), ksafe.get/put, :ksafe-compose, :ksafe-biometrics), even a 'can KSafe do X?' question or a one-line change that looks like plain Kotlin.
Owns platform splits for Compose Multiplatform apps: places declarations in commonMain, chooses expect/actual vs interface plus DI, wires host adapters and ports, and validates iOS/Swift interop…
$ npx skills add Meet-Miyani/compose-skill --skill compose-platform -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install Meet-Miyani/compose-skill compose-platform --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/Meet-Miyani/compose-skill.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/compose-platform .claude/skills/compose-platform && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "compose-platform" agent skill from https://github.com/Meet-Miyani/compose-skill/tree/main/skills/compose-platform into .claude/skills/compose-platform/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "compose-platform", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/Meet-Miyani/compose-skill/tree/main/skills/compose-platformType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add Meet-Miyani/compose-skill --skill compose-platform -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install Meet-Miyani/compose-skill compose-platform --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Meet-Miyani/compose-skill.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/compose-platform .agents/skills/compose-platform && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "compose-platform" agent skill from https://github.com/Meet-Miyani/compose-skill/tree/main/skills/compose-platform into .agents/skills/compose-platform/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "compose-platform", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add Meet-Miyani/compose-skill --skill compose-platform -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install Meet-Miyani/compose-skill compose-platform --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Meet-Miyani/compose-skill.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/compose-platform .cursor/skills/compose-platform && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "compose-platform" agent skill from https://github.com/Meet-Miyani/compose-skill/tree/main/skills/compose-platform into .cursor/skills/compose-platform/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "compose-platform", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/Meet-Miyani/compose-skill.git --path skills/compose-platform--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add Meet-Miyani/compose-skill --skill compose-platform -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install Meet-Miyani/compose-skill compose-platform --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Meet-Miyani/compose-skill.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/compose-platform .gemini/skills/compose-platform && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "compose-platform" agent skill from https://github.com/Meet-Miyani/compose-skill/tree/main/skills/compose-platform into .gemini/skills/compose-platform/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "compose-platform", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install Meet-Miyani/compose-skill compose-platformInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add Meet-Miyani/compose-skill --skill compose-platform -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/Meet-Miyani/compose-skill.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/compose-platform .github/skills/compose-platform && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "compose-platform" agent skill from https://github.com/Meet-Miyani/compose-skill/tree/main/skills/compose-platform into .github/skills/compose-platform/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "compose-platform", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add Meet-Miyani/compose-skill --skill compose-platform -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install Meet-Miyani/compose-skill compose-platform --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Meet-Miyani/compose-skill.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/compose-platform .opencode/skills/compose-platform && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "compose-platform" agent skill from https://github.com/Meet-Miyani/compose-skill/tree/main/skills/compose-platform into .opencode/skills/compose-platform/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "compose-platform", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
compose-platformOwns platform splits for Compose Multiplatform apps: places declarations in commonMain, chooses expect/actual vs interface plus DI, wires host adapters and ports, and validates iOS/Swift interop…
Compose Platform is an agent skill from Meet-Miyani/compose-skill. Owns platform splits for Compose Multiplatform apps: places declarations in commonMain, chooses expect/actual vs interface plus DI, wires host adapters and ports, and validates iOS/Swift interop, desktop and web targets, and platform lifecycle. Use when touching commonMain, expect, actual, iosMain, Swift, SKIE, Flow to Swift, desktop, wasm, web target, or platform-specific code. Do NOT use for routing or architecture (compose-architecture), feature slices (compose-feature), composables or resources (compose-ui)…
Its SKILL.md is about 2.7k tokens, which your agent loads only when the skill is triggered. The skill folder holds 5 other files, including reference files (for example `references/desktop-and-web.md`, `references/ios-swift-interop.md` and `references/notifications-and-background-work.md`).
It sits in Mobile, covering iOS development. It works with Jetpack Compose, Gradle, iOS and WebAssembly. The repository describes itself as: Compose Skill (Compose Kit): agent skills for Jetpack Compose & Compose Multiplatform. Makes Claude Code, Codex, Cursor, Copilot, Gemini CLI and OpenCode write better Compose… The licence is MIT.
5 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 8770766. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md (its code samples are kotlin).
From the folder's file list and the shell code blocks in SKILL.md.
Links to these hosts (documentation or services it may open):
github.comFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Compose Platform loads about 2.7k tokens when it runs, and up to ~8.5k if it reads all its reference files. Until then it costs about 155 tokens; SKILL.md has 1,304 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from Meet-Miyani/compose-skill at commit 8770766, republished under its MIT licence (© Meet-Miyani). 1,304 words, ~2,744 tokens.
.claude/skills/compose-platform/SKILL.md (or your agent's skills folder). This skill also uses 4 other files; get the full folder from GitHub.You are acting as a senior staff mobile engineer who owns this codebase's architecture. You are accountable for how it looks in two years, not for pleasing the requester today.
Shared code is a promise to every target. Code that compiles on Android and breaks on iOS is not shared code; it is Android code in the wrong directory. Satisfying the wording of a rule while defeating its purpose is a violation.
compose-architecture skill)expect/actual, interop annotation, and platform API you name was seen in this project during this task, or in current official docs. A plausible interop name is not a verified one. The kit's own contract is known: the templates/core shapes and every file the task context names count as seen. Never call an invented platform method.compose-architecture skill, Operating stance items 7–11). Routing, case classification and verification gates stay silent there.gradle/libs.versions.toml, read the current official docs for that version, then write. "It compiles on Android" is never evidence for commonMain.| Task | Use instead |
|---|---|
| Route first: decide the task path and files to read | the compose skill, before anything below |
| Gradle target setup, convention plugins, version catalog, CI | the compose-project skill |
| ViewModels, Contracts, repositories, Ktor, Room, DataStore, Paging | the compose-feature skill and the compose-data skill |
| Composables, stability, resources, images | the compose-ui skill |
Rules 1–7 are non-negotiables. Rules 8–9 are defaults: a recorded project decision in ## Project decisions wins with no argument; waiving a non-negotiable needs a recorded reason (see the compose-architecture skill, existing-projects.md item 5).
commonMain. A ViewModel or repository contract in a platform source set is shared logic hiding from three targets. Platform source sets hold paths, bindings, and translations — never business logic. Prevents: logic that three targets cannot reach.commonMain never imports java.*, javax.*, android.*, LocalContext, or R. Time is kotlin.time.Instant; strings are CMP Res accessors; storage paths arrive through platform factories. The rule is owned by the compose-ui skill (rule 11); this skill enforces it mechanically with check-commonmain-imports.sh. Prevents: shared code that compiles on Android only.expect/actual. Anything with state, lifecycle, fakes, or runtime choice (secure storage, players, auth, analytics) is a commonMain interface bound in platform Koin modules. expect/actual is reserved for tiny stateless hooks with no domain meaning. Every platform-provided binding (e.g. the DataStore file path) is supplied for every target the project declares; the Koin compiler plugin fails the iOS link otherwise (KOIN-D002 in the Phase 9 trial). Prevents: untestable platform singletons.withTransaction in commonMain. Multiplatform transactions go through useWriterConnection with immediateTransaction. The transaction rule is owned by the compose-data skill; this skill owns the placement consequence: anything the transaction rule forbids stays out of shared source sets. Prevents: transactions that compile on Android and fail everywhere else.compose-data: Preferences with one JSON string key is the default; typed OkioSerializer/OkioStorage is valid in common code. This skill owns platform paths. Desktop uses an app folder, never shared temp. https://github.com/androidx/androidx/blob/androidx-main/datastore/datastore-core-okio/src/commonMain/kotlin/androidx/datastore/core/okio/OkioStorage.kt Prevents: competing instances and temporary desktop storage.viewModelScope and collectAsStateWithLifecycle need the multiplatform androidx.lifecycle artifacts at a version whose release notes list them (verify in the current release notes); desktop targets add kotlinx-coroutines-swing because Dispatchers.Main.immediate is unavailable there by default. If the pinned lifecycle version ships no multiplatform artifact, stop and report. Prevents: scopes that silently never run on desktop.Flow and suspend functions from commonMain signatures; never hand-write platform wrappers around them. The interop library owns the bridge (SKIE turns them into async/AsyncSequence); a hand-written collector in a platform source set is a second bridge that rots. Prevents: parallel interop layers.suspend to Swift async and Flow to AsyncSequence with no annotations in the Kotlin code. Read the Kotlin and Swift versions in libs.versions.toml and the SKIE release notes before adding it (SKIE supports a bounded Kotlin range and Swift 5.8 with Xcode 14.3 and newer). KMP-NativeCoroutines is acceptable only where the project already adopted it.Unit returns, no mutable collections at the Swift boundary; hidden internals stay out of the ObjC header. A recorded project decision for a wider surface wins; the cost (double-copied collections, KotlinUnit at call sites, non-exhaustive switches without SKIE) is stated once.sharing-and-bridges.md decision table: commonMain, interface plus DI, or expect/actual. Name the row for each placement.gradle/libs.versions.toml and the current official docs for every platform API touched, then write.| Need | Level |
|---|---|
| Same screens on every target | Fully shared UI plus ViewModel in commonMain |
| Native UI with shared logic | Shared ViewModel in commonMain, platform UI observing it |
| Fully native screens | Shared repository only; ViewModels stay per platform |
| Need | Bridge |
|---|---|
| Service with state, lifecycle, async, fakes, or runtime choice | Interface in commonMain plus platform implementations bound in DI |
| Stateless one-liner with no domain meaning (UUID, platform name) | expect/actual function |
| One differing leaf in an otherwise shared composable | Shared composable calling an expect leaf |
| Fully differing screens | Separate screens behind a common navigation contract |
The port shape (our contract; platform modules bind it):
// commonMain: semantic port, no platform types
interface NoteLockStorage {
suspend fun lock(noteId: Long, secret: String)
}
// androidMain/iosMain: adapter named after the implementation,
// bound as the port interface in a platform Koin modulescripts/composekit/run-checks.sh (or the skill's scripts/run-checks.sh <project-root>) exits 0, including check-commonmain-imports.sh.^import (java|javax|android)\. and no LocalContext or Android R imports in any src/commonMain/ file (guard check-commonmain-imports.sh).expect has its actuals on every target the project ships.expect/actual; every platform service has a hand-written fake in tests.withTransaction in commonMain; typed DataStore uses the common Okio APIs when chosen (yes/no).libs.versions.toml: yes or no.Load only the references this task needs. One level deep.
Also read dependency-injection.md only when changing platform service bindings.
Also read coroutines-flow.md only when changing asynchronous platform services.
sharing-and-bridges.md — commonMain decision table, interface plus DI vs expect/actual, ports and adapters, lifecycle mapping.
ios-swift-interop.md — SKIE choice and limits, Flow and suspend exposure, sealed classes in Swift, embedding rules.
desktop-and-web.md — window lifecycle, wasm limits, web resources, Hot Reload, input and layout edges.
notifications — permissions, reminders, durable work.
© Meet-Miyani, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 4 other files (references) in skills/compose-platform of Meet-Miyani/compose-skill.
Open the folder on GitHubat commit 8770766
Compose Platform next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Compose Platform this skillMeet-Miyani/compose-skill | 301 | — | ~2.7k | Automated safety check: Pass | MIT | |
| Ksafeioannisa/KSafe | 332 | — | ~17k | Automated safety check: Pass | Apache-2.0 | |
| Composewebview Developmentparkwoocheol/compose-webview | 103 | — | ~1.3k | Automated safety check: Pass | MIT | |
| Expo Brownfield Integrationmweinbach/agent-coworker | 156 | 2 repos | ~900 | Automated safety check: Notes | Custom licence | |
| Expo UIarcboxlabs/linkcode | 156 | — | ~1.2k | Automated safety check: Pass | MIT | |
| KtormonitorCosminMihuMDC/KtorMonitor | 254 | — | ~2.5k | Automated safety check: Pass | Apache-2.0 |
ioannisa/KSafe
Required before any reply that touches KSafe (by ksafe(...), ksafe.get/put, :ksafe-compose, :ksafe-biometrics), even a 'can KSafe do X?' question or a one-line change that looks like plain Kotlin.
parkwoocheol/compose-webview
Builds, tests, and formats ComposeWebView multiplatform library.
mweinbach/agent-coworker
Helps add Expo and React Native to an existing native iOS or Android app, and choose between a prebuilt AAR or XCFramework and a fully integrated build.
arcboxlabs/linkcode
Framework (OSS). An agent skill from arcboxlabs/linkcode.
CosminMihuMDC/KtorMonitor
KtorMonitor is a Kotlin Multiplatform library for real-time HTTP traffic monitoring.
NativeScript/SimDeck
A skill your agent uses for simulator lifecycle, app install/launch, live viewing, UI inspection, touch/keyboard automation, screenshots, recordings, logs, pasteboard, hardware controls, and…
Meet-Miyani/compose-skill
Adds, changes, or reviews a screen, sheet, dialog, or destination slice (endpoint to repository to ViewModel to UI to navigation to DI to tests) in a Compose or CMP project.
Meet-Miyani/compose-skill
A skill your agent uses when writing, changing or reviewing code that touches the house contract for Jetpack Compose and Compose Multiplatform apps: module graph, MVI/BaseViewModel, error tiers…
Meet-Miyani/compose-skill
Owns project and build-level work for Compose and Compose Multiplatform apps: bootstrapping a new project, adopting the kit in an existing project, adding or extracting a module, convention plugins…
Meet-Miyani/compose-skill
Owns repositories, data sources and mapping for Compose and Compose Multiplatform apps: DTO to domain to UiModel boundaries, Ktor clients and bearer auth, WebSocket and SSE, Room, DataStore, Paging…
Meet-Miyani/compose-skill
Writes and reviews composables for Compose and CMP: the Route/Screen/leaf split, state-read placement and stability, loading/empty/error UX states, LazyColumn lists and grids, animation choice…
Meet-Miyani/compose-skill
Use this skill first for any Jetpack Compose or Compose Multiplatform task: a new feature or screen, a change to existing code, a bug fix, a review, making code follow the kit, project or build…
Categories
Owns platform splits for Compose Multiplatform apps: places declarations in commonMain, chooses expect/actual vs interface plus DI, wires host adapters and ports, and validates iOS/Swift interop…. Compose Platform is an agent skill from Meet-Miyani/compose-skill. Owns platform splits for Compose Multiplatform apps: places declarations in commonMain, chooses expect/actual vs interface plus DI, wires host adapters and ports, and validates iOS/Swift interop, desktop and web targets, and platform lifecycle.
Compose Platform fits situations like: touching commonMain; platform-specific code; architecture (compose-architecture); feature slices (compose-feature).
Run `npx skills add Meet-Miyani/compose-skill --skill compose-platform -a claude-code`. Or copy the skill folder (skills/compose-platform in Meet-Miyani/compose-skill) into .claude/skills/compose-platform in your project. Claude Code loads it when a task matches its description.
Run `npx skills add Meet-Miyani/compose-skill --skill compose-platform -a codex`. Or copy the skill folder (skills/compose-platform in Meet-Miyani/compose-skill) into .agents/skills/compose-platform in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add Meet-Miyani/compose-skill --skill compose-platform -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/compose-platform, .gemini/skills/compose-platform, .github/skills/compose-platform and .opencode/skills/compose-platform in your project.
SKILL.md names no scripts, command-line tools or credentials: Compose Platform is instructions for the agent only.
SKILL.md names 1 domain. As links in the text: github.com. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Compose Platform is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.7k tokens (SKILL.md is roughly 11k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 5.7k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Compose Platform: Ksafe (ioannisa/KSafe, 332 stars), Composewebview Development (parkwoocheol/compose-webview, 103 stars), Expo Brownfield Integration (mweinbach/agent-coworker, 156 stars) and Expo UI (arcboxlabs/linkcode, 156 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
Meet-Miyani (a GitHub user) maintains it in Meet-Miyani/compose-skill, which has 301 GitHub stars. The repository holds 7 skills in this directory. The repository was last updated on October 6, 2026.
Source: Meet-Miyani/compose-skill on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.