{
  "markdown": "![Abstract illustration of a modular Kotlin and Jetpack Compose toolkit](docs/assets/skills-header.webp)\n\n# Skills\n\nA set of skills for Kotlin, Jetpack Compose, Android development, and grounded\nwriting.\n\nThe repository is also a portable [Agent Plugins](https://agent-plugins.org/)\nv1.0.0 package. Conforming clients discover the root [`plugin.json`](plugin.json)\nand the immediate skill directories under [`skills/`](skills/).\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### External skill providers\n\nMost skills in this repository are self-contained. The workflows below compose\nwith skills from other repositories; installing `chrisbanes/skills` does not\ninstall them, and the workflows never install them implicitly.\n\n| Consumer | Requirement | Provider | Source and install |\n|---|---|---|---|\n| [`implement-with-subagents`](skills/implement-with-subagents/SKILL.md) implementation mode | Required | `implement`, with its current `tdd` and `code-review` companions | [Matt Pocock's skills](https://github.com/mattpocock/skills): run `npx skills add mattpocock/skills` and select all three skills |\n| [`run-github-project`](skills/run-github-project/SKILL.md) execution lane | Required | `tdd` | [Matt Pocock's skills](https://github.com/mattpocock/skills): `npx skills add mattpocock/skills --skill tdd` |\n| `run-github-project` Backlog triage | Conditional | `triage` | [Matt Pocock's skills](https://github.com/mattpocock/skills): `npx skills add mattpocock/skills --skill triage` |\n| `run-github-project` Wayfinder lane | Conditional | `wayfinder`, `research` | [Matt Pocock's skills](https://github.com/mattpocock/skills): use `--skill wayfinder` or `--skill research`; see the [workflow provider matrix](skills/run-github-project/references/workflow-providers.md) |\n| `run-github-project` correctness review | Optional | `code-review` | [Matt Pocock's skills](https://github.com/mattpocock/skills): `npx skills add mattpocock/skills --skill code-review` |\n| `run-github-project` reuse and clarity review | Optional | `review-and-simplify-changes` | [Dimillian/Skills](https://github.com/Dimillian/Skills): `npx skills add Dimillian/Skills --skill review-and-simplify-changes` |\n| `run-github-project` over-engineering review | Optional | `ponytail-review` | [DietrichGebert/ponytail](https://github.com/DietrichGebert/ponytail): `npx skills add DietrichGebert/ponytail --skill ponytail-review` |\n\nReview mode in `implement-with-subagents`, and review or setup mode in\n`run-github-project`, do not require these external skills. See the\n[`run-github-project` provider matrix](skills/run-github-project/references/workflow-providers.md)\nfor its lane-specific fallback and blocking behavior.\n\n## Skills\n\n### Start here\n\n- Working on Compose state or effects? Start with [`compose-state-and-effects`](skills/compose-state-and-effects/SKILL.md).\n- Investigating recomposition, stability, or jank? Start with [`compose-performance`](skills/compose-performance/SKILL.md).\n- Reviewing Flow or coroutine architecture? Start with [`kotlin-concurrency-and-flow`](skills/kotlin-concurrency-and-flow/SKILL.md).\n\n### Routing\n\n- [`using-chrisbanes-skills`](skills/using-chrisbanes-skills/SKILL.md) — route Kotlin and Jetpack Compose work to the focused skills.\n\n### Jetpack Compose\n\n#### State and side effects\n\n- [`compose-state-and-effects`](skills/compose-state-and-effects/SKILL.md) — decide state ownership and effect lifecycle for local UI state, screen state holders, Flow collection, callbacks, cleanup, navigation, snackbar, analytics, and focus requests.\n\n#### Performance\n\n- [`compose-performance`](skills/compose-performance/SKILL.md) — diagnose stability, deferred reads, composition contracts, and cross-phase back-writing from concrete runtime evidence.\n\n#### UI API design and layout\n\n- [`compose-component-design`](skills/compose-component-design/SKILL.md) — design caller-placeable Compose APIs 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-concurrency-and-flow`](skills/kotlin-concurrency-and-flow/SKILL.md) — review coroutine, raw `Thread`, and `Executor` ownership, cancellation, Flow state/event modeling, sharing, replay, and one-shot delivery.\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-api-design`](skills/kotlin-api-design/SKILL.md) — choose function owners, semantic domain types, and Kotlin Multiplatform platform boundaries.\n\n### Writing\n\n- [`grounded-writing`](skills/grounded-writing/SKILL.md) — draft or revise clear, evidence-led writing of any length, including review comments and replies, without inventing personal claims.\n\n### Workflows\n\n- [`release-kotlin-library`](skills/release-kotlin-library/SKILL.md) — prepare and verify Kotlin library releases using `gradle-maven-publish-plugin`, with changelog reconciliation, Metalava API snapshots, repository checks, safe credentials, and an adapted Haze release helper.\n- [`gradle-run`](skills/gradle-run/SKILL.md) — run every agent-initiated Gradle command through a compact-output wrapper; Gradle-centered workflows use one read-only diagnostic owner while parents retain edits.\n- [`implement-with-subagents`](skills/implement-with-subagents/SKILL.md) — implement or review supplied-task orchestration through separate implementation owners, preserving atomic work, task-scoped acceptance, and repair ownership; implementation mode requires Matt Pocock's external `implement` skill.\n- [`to-plan`](skills/to-plan/SKILL.md) — create a repository-aware implementation plan from one ready GitHub issue or an in-chat task, with a provider-neutral implementation handoff.\n- [`run-github-project`](skills/run-github-project/SKILL.md) — set up, review, or operate the repository's GitHub Project workflow; preserve live authority, human Planning work, unknown outcomes, epics, checkpoints, triage, and authorized execution boundaries, with mode-specific external providers disclosed above.\n- [`shepherd`](skills/shepherd/SKILL.md) — autonomously poll open PRs and MRs, triage review comments, and switch CI failures into a full local verification-and-repair cycle.\n\n### Migration from pre-cluster skills\n\nThis is a breaking taxonomy change. Replace the removed entrypoints as follows:\n\n| Removed skills | Replacement |\n|---|---|\n| `compose-state-authoring`, `compose-state-hoisting`, `compose-side-effects` | [`compose-state-and-effects`](skills/compose-state-and-effects/SKILL.md) |\n| `compose-recomposition-performance`, `compose-stability-diagnostics`, `compose-state-deferred-reads` | [`compose-performance`](skills/compose-performance/SKILL.md) |\n| `compose-modifier-and-layout-style`, `compose-slot-api-pattern` | [`compose-component-design`](skills/compose-component-design/SKILL.md) |\n| `kotlin-coroutines-structured-concurrency`, `kotlin-flow-state-event-modeling` | [`kotlin-concurrency-and-flow`](skills/kotlin-concurrency-and-flow/SKILL.md) |\n| `kotlin-functions`, `kotlin-types-value-class`, `kotlin-multiplatform-expect-actual` | [`kotlin-api-design`](skills/kotlin-api-design/SKILL.md) |\n\n## Contributing\n\nSkills live at `skills/<skill-name>/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), which\ntracks the core [Agent Skills specification](https://agentskills.io/specification)\nand permits `disable-model-invocation` for Claude Code compatibility.\n`name` and `description` are required; portable optional fields are `license`,\n`compatibility`, `metadata`, and `allowed-tools`. Explicit-only workflow skills\nalso mirror that policy in Codex's `agents/openai.yaml`.\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 root `plugin.json`, `.claude-plugin/plugin.json`,\n`.codex-plugin/plugin.json`, and new Git release tags on the same version.\nExisting zero-padded tags from before this policy map to the non-padded manifest\nversion, so `2026.06.16` maps to `2026.6.16`. Only bump versions when publishing\nan 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\nFor a taxonomy change, also run the durable\n[cluster behavior evaluation](tests/cluster-behavior.md). It checks routing,\nrequired references, safeguards, exceptions, and finish gates at the public\nagent-facing seam.\n\n## Evaluating skills\n\nThe advisory evaluator tests concrete scenarios modelled on real-world coding\nwork, with expected outcomes and no-change controls. It compares no-skill,\nforced-skill, and automatic-routing runs. **Baseline** and **automatic** use\nthe cases eligible for automatic activation; **restraint** checks that a skill\ndoes not make an unnecessary change. Scorecards also compare subject-side tokens,\ntool calls, completed turns, elapsed time, and total attempted work per\nsuccessful outcome. The\ntable reports the latest available result for each skill and correctness metric.\nThese scores were produced using\n[`gpt-5.6-terra`](https://developers.openai.com/api/docs/models/gpt-5.6-terra)\nwith medium reasoning, judged by\n[`gpt-5.6-sol`](https://developers.openai.com/api/docs/models/gpt-5.6-sol) with\nhigh reasoning. Results are model- and reasoning-specific; other configurations\nmay perform differently. These are not merge or release gates. See\n[`evals/README.md`](evals/README.md) for evaluation setup and reproducibility.\n\nSkill-revision compatibility checks compare old and revised instructions within\neach model, separately from these benchmark scores. See the\n[workflow compatibility record](evals/artifacts/2026-09-06-workflow-model-compatibility.md)\nfor Astra and 5.6 coverage and its current evidence limits.\n\n| Skill | Baseline | Automatic | Restraint |\n| --- | ---: | ---: | ---: |\n| [`compose-animations`](skills/compose-animations/SKILL.md) | 75.0% | 100.0% | 100.0% |\n| [`compose-component-design`](skills/compose-component-design/SKILL.md) | 86.7% | 100.0% | 100.0% |\n| [`compose-focus-navigation`](skills/compose-focus-navigation/SKILL.md) | 66.7% | 100.0% | 100.0% |\n| [`compose-performance`](skills/compose-performance/SKILL.md) | 91.7% | 100.0% | 100.0% |\n| [`compose-state-and-effects`](skills/compose-state-and-effects/SKILL.md) | 77.8% | 100.0% | 100.0% |\n| [`compose-ui-testing-patterns`](skills/compose-ui-testing-patterns/SKILL.md) | 55.6% | 100.0% | 100.0% |\n| [`gradle-run`](skills/gradle-run/SKILL.md) | 33.3% | 100.0% | 100.0% |\n| [`kotlin-api-design`](skills/kotlin-api-design/SKILL.md) | 66.7% | 100.0% | 100.0% |\n| [`kotlin-concurrency-and-flow`](skills/kotlin-concurrency-and-flow/SKILL.md) | 33.3% | 100.0% | 100.0% |\n| [`kotlin-control-flow`](skills/kotlin-control-flow/SKILL.md) | 27.8% | 100.0% | 100.0% |\n| [`grounded-writing`](skills/grounded-writing/SKILL.md) | — | 100.0% | 100.0% |\n| [`implement-with-subagents`](skills/implement-with-subagents/SKILL.md) | — | — | 100.0% |\n| [`release-kotlin-library`](skills/release-kotlin-library/SKILL.md) | — | — | — |\n| [`run-github-project`](skills/run-github-project/SKILL.md) | — | — | 100.0% |\n| [`shepherd`](skills/shepherd/SKILL.md) | — | — | 100.0% |\n| [`to-plan`](skills/to-plan/SKILL.md) | — | — | — |\n\n### Skill efficiency\n\nValues are per-run medians, baseline → automatic, followed by the automatic\npercentage change. These subject-only measurements use the latest complete,\nsame-run evidence available for each suite and include failed runs and negative\ncontrols. Baseline-to-automatic efficiency comparisons use only cases eligible\nfor automatic activation. Multi-skill scenarios contribute to every targeted\nskill row. A turn is one completed Codex turn; time remains environment-sensitive.\nThe source runs, selection rules, and detailed scorecards are in the\n[evaluation change record](evals/artifacts/2026-08-27-skill-eval-efficiency.md).\n\n| Skill | Tokens / run | Tool calls / run | Turns / run | Time / run |\n| --- | ---: | ---: | ---: | ---: |\n| [`compose-animations`](skills/compose-animations/SKILL.md) | 41.7k → 81.9k (+96%) | 2 → 5 (+150%) | 1 → 1 (+0%) | 26.3s → 42.3s (+60%) |\n| [`compose-component-design`](skills/compose-component-design/SKILL.md) | 56.3k → 66.9k (+19%) | 3 → 3 (+0%) | 1 → 1 (+0%) | 32.6s → 29.1s (-11%) |\n| [`compose-focus-navigation`](skills/compose-focus-navigation/SKILL.md) | 56.2k → 77.1k (+37%) | 3 → 6 (+100%) | 1 → 1 (+0%) | 32.4s → 44.1s (+36%) |\n| [`compose-performance`](skills/compose-performance/SKILL.md) | 56.2k → 83.0k (+48%) | 3 → 4 (+33%) | 1 → 1 (+0%) | 32.5s → 40.1s (+24%) |\n| [`compose-state-and-effects`](skills/compose-state-and-effects/SKILL.md) | 56.2k → 83.3k (+48%) | 3 → 5 (+67%) | 1 → 1 (+0%) | 28.5s → 41.6s (+46%) |\n| [`compose-ui-testing-patterns`](skills/compose-ui-testing-patterns/SKILL.md) | 56.7k → 69.0k (+22%) | 3 → 4 (+33%) | 1 → 1 (+0%) | 32.9s → 34.1s (+4%) |\n| [`gradle-run`](skills/gradle-run/SKILL.md) | 70.7k → 83.3k (+18%) | 4 → 3 (-25%) | 1 → 1 (+0%) | 30.2s → 32.9s (+9%) |\n| [`kotlin-api-design`](skills/kotlin-api-design/SKILL.md) | 57.4k → 145.8k (+154%) | 3 → 7 (+133%) | 1 → 1 (+0%) | 30.0s → 53.0s (+77%) |\n| [`kotlin-concurrency-and-flow`](skills/kotlin-concurrency-and-flow/SKILL.md) | 72.7k → 119.2k (+64%) | 4 → 5 (+25%) | 1 → 1 (+0%) | 46.0s → 64.2s (+40%) |\n| [`kotlin-control-flow`](skills/kotlin-control-flow/SKILL.md) | 71.8k → 109.6k (+53%) | 4 → 5 (+25%) | 1 → 1 (+0%) | 39.1s → 53.7s (+37%) |\n| [`grounded-writing`](skills/grounded-writing/SKILL.md) | 41.3k → 65.4k (+59%) | 2 → 3 (+50%) | 1 → 1 (+0%) | 16.2s → 26.9s (+66%) |\n| [`release-kotlin-library`](skills/release-kotlin-library/SKILL.md) | — | — | — | — |\n\n## License\n\n[Apache 2.0](LICENSE)\n",
  "bytes": 15335,
  "sha": "a22c35b1f84f282919771c9fec59f2723675b942691983fb6ce1b0d676dee111",
  "repo_slug": "chrisbanes/skills",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/skl_chrisbanes_skills_compose_recomposition__992d6837/readme"
}