{"id":51197089,"url":"https://github.com/chrisbanes/skills","last_synced_at":"2026-07-12T05:30:50.951Z","repository":{"id":357366397,"uuid":"1236375183","full_name":"chrisbanes/skills","owner":"chrisbanes","description":"Skills for Kotlin, Jetpack Compose, and Android development","archived":false,"fork":false,"pushed_at":"2026-07-11T06:11:46.000Z","size":170,"stargazers_count":834,"open_issues_count":2,"forks_count":41,"subscribers_count":9,"default_branch":"main","last_synced_at":"2026-07-11T08:07:14.655Z","etag":null,"topics":["android","compose-multiplatform","coroutines","jetpack-compose","kotlin","kotlin-multiplatform","skills"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/chrisbanes.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null},"funding":{"github":"chrisbanes"}},"created_at":"2026-05-12T07:34:30.000Z","updated_at":"2026-07-10T19:30:22.000Z","dependencies_parsed_at":null,"dependency_job_id":"6f9df2d5-89d6-47db-a8e2-4aa0c7d3a5c1","html_url":"https://github.com/chrisbanes/skills","commit_stats":null,"previous_names":["chrisbanes/skills"],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/chrisbanes/skills","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chrisbanes%2Fskills","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chrisbanes%2Fskills/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chrisbanes%2Fskills/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chrisbanes%2Fskills/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/chrisbanes","download_url":"https://codeload.github.com/chrisbanes/skills/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chrisbanes%2Fskills/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35383520,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-12T02:00:06.386Z","response_time":87,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","compose-multiplatform","coroutines","jetpack-compose","kotlin","kotlin-multiplatform","skills"],"created_at":"2026-06-27T21:31:06.299Z","updated_at":"2026-07-12T05:30:50.945Z","avatar_url":"https://github.com/chrisbanes.png","language":"Python","funding_links":["https://github.com/sponsors/chrisbanes"],"categories":["Framework Skills","🧠 Agent Skills"],"sub_categories":[],"readme":"# Skills\n\nA set of skills for Kotlin, Jetpack Compose, and Android development.\n\n## Install\n\nWith the [skills CLI](https://skills.sh):\n\n```\nnpx skills add chrisbanes/skills\n```\n\nOr install as a Claude Code plugin:\n\n```\n/plugin marketplace add chrisbanes/skills\n/plugin install chrisbanes-skills@chrisbanes-skills\n```\n\nOr install as a Codex plugin:\n\n```\ncodex plugin marketplace add chrisbanes/skills --ref main\ncodex plugin add chrisbanes-skills@chrisbanes-skills\n```\n\nOr install as an OpenCode plugin:\n\n```json\n{\n  \"plugin\": [\"chrisbanes-skills@git+https://github.com/chrisbanes/skills.git\"]\n}\n```\n\nSee [`.opencode/INSTALL.md`](.opencode/INSTALL.md) for details.\n\n## Skills\n\n### Start here\n\n- Working on Compose state or effects? Start with [`compose-state-authoring`](skills/compose-state-authoring/SKILL.md), [`compose-state-hoisting`](skills/compose-state-hoisting/SKILL.md), [`compose-state-holder-ui-split`](skills/compose-state-holder-ui-split/SKILL.md), or [`compose-side-effects`](skills/compose-side-effects/SKILL.md).\n- Investigating recomposition, stability, or jank? Start with [`compose-recomposition-performance`](skills/compose-recomposition-performance/SKILL.md).\n- Reviewing Flow or coroutine architecture? Start with [`kotlin-flow-state-event-modeling`](skills/kotlin-flow-state-event-modeling/SKILL.md) or [`kotlin-coroutines-structured-concurrency`](skills/kotlin-coroutines-structured-concurrency/SKILL.md).\n\n### Routing\n\n- [`using-chrisbanes-skills`](skills/using-chrisbanes-skills/SKILL.md) — route broad Kotlin, Android, and Jetpack Compose tasks to the focused skills.\n\n### Jetpack Compose\n\n#### State and side effects\n\n- [`compose-state-authoring`](skills/compose-state-authoring/SKILL.md) — author Compose local mutable state and read-only composable accessors correctly.\n- [`compose-state-hoisting`](skills/compose-state-hoisting/SKILL.md) — decide whether Compose UI element state belongs in local remember state, hoisted parameters, a plain state holder class, or a screen-level state holder.\n- [`compose-state-holder-ui-split`](skills/compose-state-holder-ui-split/SKILL.md) — split Compose state-holder wiring from plain-state UI for previewable and testable screens.\n- [`compose-side-effects`](skills/compose-side-effects/SKILL.md) — choose and key Compose effect APIs for event Flow collection, callbacks, cleanup, navigation, snackbar, analytics, and other side effects.\n\n#### Performance\n\n- [`compose-recomposition-performance`](skills/compose-recomposition-performance/SKILL.md) — route stability, deferred reads, and cross-phase back-writing.\n- [`compose-stability-diagnostics`](skills/compose-stability-diagnostics/SKILL.md) — diagnose Compose compiler reports, strong skipping behavior, unstable parameters, and stability fixes.\n- [`compose-state-deferred-reads`](skills/compose-state-deferred-reads/SKILL.md) — move frame-rate reads out of composition; avoid back-writing snapshot state across phases and cross-row measurement reads in composition.\n\n#### UI API design and layout\n\n- [`compose-modifier-and-layout-style`](skills/compose-modifier-and-layout-style/SKILL.md) — keep Compose layout APIs caller-placeable and modifier chains readable.\n- [`compose-slot-api-pattern`](skills/compose-slot-api-pattern/SKILL.md) — design reusable Compose components whose variable visual regions are caller-provided slots.\n- [`compose-animations`](skills/compose-animations/SKILL.md) — choose Compose animation APIs for visibility, value targets, coordinated transitions, and content swaps; align with official quick guide and decision tree.\n- [`compose-focus-navigation`](skills/compose-focus-navigation/SKILL.md) — design and test keyboard, TV, D-pad, and focus-first Compose navigation behavior.\n\n#### Testing\n\n- [`compose-ui-testing-patterns`](skills/compose-ui-testing-patterns/SKILL.md) — choose between plain UI tests, semantics assertions, key/focus tests, interaction state tests with MutableInteractionSource, screenshot tests, and integration tests.\n\n### Kotlin\n\n- [`kotlin-coroutines-structured-concurrency`](skills/kotlin-coroutines-structured-concurrency/SKILL.md) — review coroutine scope ownership, init and fire-and-forget boundaries, cancellation handling, and blocking boundaries.\n- [`kotlin-control-flow`](skills/kotlin-control-flow/SKILL.md) — write and review Kotlin branching with subject `when`, guard conditions, sealed exhaustiveness, smart casts, nullable branching, and early returns.\n- [`kotlin-flow-state-event-modeling`](skills/kotlin-flow-state-event-modeling/SKILL.md) — model `StateFlow`, `SharedFlow`, `Channel`, `stateIn`, sharing policy, and one-shot events without lossy defaults.\n- [`kotlin-multiplatform-expect-actual`](skills/kotlin-multiplatform-expect-actual/SKILL.md) — design semantic expect/actual and interface boundaries for Kotlin Multiplatform platform interop.\n- [`kotlin-types-value-class`](skills/kotlin-types-value-class/SKILL.md) — choose `@JvmInline value class` over data class for single-field domain types, including Compose stability implications.\n\n### Workflows\n\n- [`implement-issue`](skills/implement-issue/SKILL.md) — review and implement a specific GitHub or GitLab issue through safe forge detection, planning, implementation, review, verification, and branch completion. Requires [Superpowers](https://github.com/obra/superpowers) workflow skills.\n- [`shepherd`](skills/shepherd/SKILL.md) — autonomously poll open PRs and MRs, triage review comments, detect and fix CI failures, and keep PRs moving forward.\n\n## Contributing\n\nSkills live at `skills/\u003cskill-name\u003e/SKILL.md`, flat (no language nesting). The `name:` in the SKILL.md frontmatter must match the directory name.\n\nFrontmatter is validated against [`skills.schema.json`](skills.schema.json) — `name` and `description` are required, `name` must be kebab-case.\n\n### Releases\n\nRelease versions use SemVer-compatible CalVer: `YYYY.M.D` without zero-padded month or day values, for example `2026.6.17`.\n\nKeep `.claude-plugin/plugin.json`, `.codex-plugin/plugin.json`, and new Git release tags on the same version. Existing zero-padded tags from before this policy map to the non-padded manifest version, so `2026.06.16` maps to `2026.6.16`. Only bump versions when publishing an installable release.\n\nTo publish a release, run the **Release** workflow from GitHub Actions. Leave the version input empty to use today's UTC `YYYY.M.D` version, or provide a specific non-zero-padded CalVer value. Use the dry-run option to validate without creating a commit, tag, or GitHub release.\n\nBefore pushing, lint skills (frontmatter schema + markdown):\n\n```\nnpm install\nnpm run lint\n```\n\nThis also runs on CI for all PRs.\n\n## License\n\n[Apache 2.0](LICENSE)\n\n[plugins]: https://docs.claude.com/en/docs/claude-code/plugins\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchrisbanes%2Fskills","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fchrisbanes%2Fskills","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchrisbanes%2Fskills/lists"}