Kotlin Tooling Java To Kotlin
JetBrains/skills
A skill your agent uses when converting Java source files to idiomatic Kotlin, when user mentions "java to kotlin", "j2k", "convert java", "migrate java to kotlin", or when working with .java files…
Write a new Kotlin test, or modernize an existing one, using Kotest matchers and idiomatic Kotlin test style — backticked names, apply/assertSoftly blocks, and existing object mothers and helpers.
$ npx skills add jvm-skills/jvm-skills --skill kotest -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install jvm-skills/jvm-skills kotest --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/jvm-skills/jvm-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.junie/skills/kotest .claude/skills/kotest && 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 "kotest" agent skill from https://github.com/jvm-skills/jvm-skills/tree/main/.junie/skills/kotest into .claude/skills/kotest/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "kotest", 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/jvm-skills/jvm-skills/tree/main/.junie/skills/kotestType 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 jvm-skills/jvm-skills --skill kotest -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install jvm-skills/jvm-skills kotest --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jvm-skills/jvm-skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.junie/skills/kotest .agents/skills/kotest && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "kotest" agent skill from https://github.com/jvm-skills/jvm-skills/tree/main/.junie/skills/kotest into .agents/skills/kotest/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "kotest", 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 jvm-skills/jvm-skills --skill kotest -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install jvm-skills/jvm-skills kotest --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jvm-skills/jvm-skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.junie/skills/kotest .cursor/skills/kotest && 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 "kotest" agent skill from https://github.com/jvm-skills/jvm-skills/tree/main/.junie/skills/kotest into .cursor/skills/kotest/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "kotest", 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/jvm-skills/jvm-skills.git --path .junie/skills/kotest--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 jvm-skills/jvm-skills --skill kotest -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install jvm-skills/jvm-skills kotest --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jvm-skills/jvm-skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.junie/skills/kotest .gemini/skills/kotest && 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 "kotest" agent skill from https://github.com/jvm-skills/jvm-skills/tree/main/.junie/skills/kotest into .gemini/skills/kotest/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "kotest", 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 jvm-skills/jvm-skills kotestInstalls 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 jvm-skills/jvm-skills --skill kotest -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/jvm-skills/jvm-skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/.junie/skills/kotest .github/skills/kotest && 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 "kotest" agent skill from https://github.com/jvm-skills/jvm-skills/tree/main/.junie/skills/kotest into .github/skills/kotest/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "kotest", 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 jvm-skills/jvm-skills --skill kotest -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install jvm-skills/jvm-skills kotest --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jvm-skills/jvm-skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.junie/skills/kotest .opencode/skills/kotest && 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 "kotest" agent skill from https://github.com/jvm-skills/jvm-skills/tree/main/.junie/skills/kotest into .opencode/skills/kotest/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "kotest", 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.
kotestWrite a new Kotlin test, or modernize an existing one, using Kotest matchers and idiomatic Kotlin test style — backticked names, apply/assertSoftly blocks, and existing object mothers and helpers.
Kotest is an agent skill from jvm-skills/jvm-skills. Write a new Kotlin test, or modernize an existing one, using Kotest matchers and idiomatic Kotlin test style — backticked names, apply/assertSoftly blocks, and existing object mothers and helpers. Use when adding a test for behavior that does not yet have one, or when improving a Kotlin test that still uses JUnit assertions or AssertJ chains. Assumes project test infrastructure exists; flag missing factories or helpers rather than building them here.
Its SKILL.md is about 2.6k tokens, which your agent loads only when the skill is triggered. The skill folder holds 4 other files, including reference files (for example `references/idiomatic-patterns.md`, `references/kotest-matchers.md` and `references/project.md`).
It sits in Mobile, covering Android development and Unit testing. It works with Kotlin and JUnit. The licence is Apache-2.0.
Read from SKILL.md and the folder at commit c6d477f. 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.
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From 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.
Kotest loads about 2.6k tokens when it runs, and up to ~6.9k if it reads all its reference files. Until then it costs about 115 tokens; SKILL.md has 1,210 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 jvm-skills/jvm-skills at commit c6d477f, republished under its Apache-2.0 licence (© jvm-skills). 1,210 words, ~2,575 tokens.
.claude/skills/kotest/SKILL.md (or your agent's skills folder). This skill also uses 3 other files; get the full folder from GitHub.Produce one high-quality Kotlin test in idiomatic style with Kotest matchers.
Two tracks, one skill:
Pick the track at step 1 based on inputs. The rest of the skill is the same knowledge applied to either starting point.
references/project.md) if present — it overrides
shared defaults. The overlay is where framework-specific context lives
(base classes, test annotations, single-test command, factory locations).If input is a Java test file, this skill does not port it. Suggest the user either (a) describe the behavior so we run the Create track, or (b) manually stage a skeleton Kotlin test for us to run the Modernize track on.
Once the track is picked, follow the corresponding procedure below.
Read the production code the test will exercise:
If the behavior is ambiguous, ask the user before writing the test.
Before writing, search for what to reuse:
*ObjectMother.kt, TestData.kt).toDto(), Iterable<T>.names()).references/project.md overlay).If required infra is missing, add a minimal inline fallback or stop and flag it to the user. Do not quietly grow shared infra here.
references/idiomatic-patterns.md for collaborator wiring and
naming.For each scenario:
`should reject duplicate tag names`().references/kotest-matchers.md).Assertion style:
actual shouldBe expected.value.shouldNotBeNull() (smart-casts).list shouldHaveSize n.list shouldContainInOrder listOf(...).list shouldContainAllInAnyOrder listOf(...).items.map { it.name } shouldContainInOrder listOf(...).shouldThrow<X> { ... }.message.shouldContain("...").result.apply { ... }.assertSoftly { ... }.Each assertion must add independent semantic coverage. Do not restate fields
already proven by a full-object equality. Do not wrap conditions in
assertTrue — use a matcher that describes what the condition means.
Use the single-test command defined in the project overlay. If none is specified, the project's usual test runner with a class-name filter is the right default.
If it fails: first confirm the assertion is correct for the behavior. A green test with the wrong assertion is worse than a red one. If production code is wrong, flag to the user — do not weaken the test.
Record the existing:
These must not drift during modernization. Changing them silently is a bug.
Same scan as the Create track. Existing factories / extensions / helpers are almost always underused in pre-Kotest tests — swap them in during this pass.
Work in this order — the class must compile between each step:
lateinit var for fields that a framework
mechanism requires (consult project overlay).shouldCreateTalk → `should create talk`.Apply the rewrite tables in references/kotest-matchers.md. Key rules:
assertEquals(expected, actual) → actual shouldBe expectedassertNotNull(v) → v.shouldNotBeNull()assertNull(v) → v.shouldBeNull()assertEquals(n, list.size) → list shouldHaveSize nassertTrue("x" in msg) → msg shouldContain "x"assertThrows<X> { ... } → shouldThrow<X> { ... }assertThat(x).isNotNull() → x.shouldNotBeNull()assertThat(list).containsExactly(...) → list shouldContainInOrder listOf(...)assertThat(list).containsExactlyInAnyOrder(...) → list shouldContainAllInAnyOrder listOf(...)assertThat(items).extracting("name")... → items.map { it.name } shouldContain...assertThatThrownBy { ... }.isInstanceOf(X::class.java).hasMessageContaining("y")
→ shouldThrow<X> { ... }.message.shouldContain("y")Do not translate long AssertJ chains 1:1. Prefer explicit property assertions
with apply { }.
For multiple field checks on one result, group with result.apply { ... }
(references/idiomatic-patterns.md). Wrap in assertSoftly { ... } when
all failures should be reported together. Don't wrap sequential dependent
assertions in assertSoftly — earlier failures should stop the test there.
Revisit DTO/entity construction:
createSpeakerRequest().If the test hand-constructs objects and no factory exists, leave the construction inline. Do not create factories inside this skill — flag it to the user as a follow-up.
If a full-object equality already proves a field, drop the per-field check. Keep only assertions that add independent semantic coverage (ordering, exception details, nullability, values not otherwise covered).
Remove:
org.assertj.core.api.Assertions.*org.junit.jupiter.api.Assertions.*Add the Kotest imports listed in references/kotest-matchers.md.
Use the single-test command defined in the project overlay.
Iterate until green. Common causes of failure:
create*Request,
*Dto.toEntity(), etc. before constructing manually.email = "ada@example.com", do not re-pass it named-argument-style.assertTrue(cond) wrappers: always replace with a specific matcher.assertSoftly scope: it is for "report all related failures
together", not for sequential dependent assertions.runTest: suspend functions must run inside
runTest { ... } (or the project's test-dispatcher wrapper).If references/project.md exists in this skill's directory after install, it
overrides the shared defaults. This is where framework-specific context
belongs (e.g. Spring Boot test types, base classes, single-test command,
mocking library, factory locations). The skill itself stays framework-neutral.
© jvm-skills, Apache-2.0. 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 3 other files (references) in .junie/skills/kotest of jvm-skills/jvm-skills.
Open the folder on GitHubat commit c6d477f
Kotest 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 |
|---|---|---|---|---|---|---|
| Kotest this skilljvm-skills/jvm-skills | 139 | — | ~2.6k | Automated safety check: Pass | Apache-2.0 | |
| Kotlin Tooling Java To KotlinJetBrains/skills | 366 | 3 repos | ~1.4k | Automated safety check: Pass | Apache-2.0 | |
| Mps TestsJetBrains/MPS | 1.7k | — | ~3k | Automated safety check: Pass | Apache-2.0 | |
| Writing Tests With Kotlin Testskydoves/android-testing-skills | 334 | — | ~4.2k | Automated safety check: Pass | Apache-2.0 | |
| Jvm Helpershepherdjerred/monorepo | 112 | — | ~1.9k | Automated safety check: Pass | GPL-3.0 | |
| Native Testing Strategybladeofgod/flutter-ai-harness | 116 | — | ~345 | Automated safety check: Pass | MIT |
JetBrains/skills
A skill your agent uses when converting Java source files to idiomatic Kotlin, when user mentions "java to kotlin", "j2k", "convert java", "migrate java to kotlin", or when working with .java files…
JetBrains/MPS
A skill your agent uses when writing or modifying tests inside MPS @tests models — NodesTestCase (typesystem, constraints, scopes, dataflow, generator output), EditorTestCase (intentions, actions…
skydoves/android-testing-skills
A skill your agent uses to write tests with the kotlin.test library — the multiplatform assertion + annotation API that compiles the same in commonTest and on the JVM (JUnit4 or JUnit5), Android…
shepherdjerred/monorepo
Current Java, Kotlin, Gradle, Maven, JUnit, JVM diagnostics, packaging, and performance guidance.
bladeofgod/flutter-ai-harness
适用:设计或审查 Kotlin/Swift 原生模块、Bridge Adapter、Host 编译、模拟器/设备和系统能力验证。不适用:纯 Dart/Flutter 测试或用 Fake 代替相机和权限真机验证。触发词:JUnit、XCTest、Robolectric、instrumented test、Swift Testing、Framework Fake、Gradle…
alexvanyo/composelife
Helps increment code coverage in this Kotlin Multiplatform project.
jvm-skills/jvm-skills
Bootstrap pitest via the info.solidsoft.pitest Gradle plugin with Kotlin-sane defaults, run mutation tests scoped to changed classes, interpret surviving mutants from mutations.xml, triage…
jvm-skills/jvm-skills
Run Ralph in coverage mode — iteratively write tests for untested classes until coverage targets are met.
jvm-skills/jvm-skills
Run the skill-scout loop — scan the next batch of unscanned JVM-conference rosters for speaker-created AI skills and apply results to the CSV store via the overnight Workflow.
jvm-skills/jvm-skills
Generate a feature spec with user stories directly from conversation context and codebase exploration — no interview needed.
jvm-skills/jvm-skills
Verify UI/UX by running Playwright tests and reviewing screenshots.
jvm-skills/jvm-skills
Make prose sound like Thomas, not like a generic technical writer.
Categories
Write a new Kotlin test, or modernize an existing one, using Kotest matchers and idiomatic Kotlin test style — backticked names, apply/assertSoftly blocks, and existing object mothers and helpers. Kotest is an agent skill from jvm-skills/jvm-skills. Write a new Kotlin test, or modernize an existing one, using Kotest matchers and idiomatic Kotlin test style — backticked names, apply/assertSoftly blocks, and existing object mothers and helpers.
Kotest fits situations like: adding a test for behavior that does not yet have one; improving a Kotlin test that still uses JUnit assertions.
Run `npx skills add jvm-skills/jvm-skills --skill kotest -a claude-code`. Or copy the skill folder (.junie/skills/kotest in jvm-skills/jvm-skills) into .claude/skills/kotest in your project. Claude Code loads it when a task matches its description.
Run `npx skills add jvm-skills/jvm-skills --skill kotest -a codex`. Or copy the skill folder (.junie/skills/kotest in jvm-skills/jvm-skills) into .agents/skills/kotest 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 jvm-skills/jvm-skills --skill kotest -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/kotest, .gemini/skills/kotest, .github/skills/kotest and .opencode/skills/kotest in your project.
SKILL.md names no scripts, command-line tools or credentials: Kotest is instructions for the agent only.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. 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.
Kotest is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.6k tokens (SKILL.md is roughly 10k 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 4.3k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Kotest: Kotlin Tooling Java To Kotlin (JetBrains/skills, 366 stars), Mps Tests (JetBrains/MPS, 1.7k stars), Writing Tests With Kotlin Test (skydoves/android-testing-skills, 334 stars) and Jvm Helper (shepherdjerred/monorepo, 112 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
jvm-skills (a GitHub organization) maintains it in jvm-skills/jvm-skills, which has 139 GitHub stars. The repository holds 16 skills in this directory. The repository was last updated on August 31, 2026.
Source: jvm-skills/jvm-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.