rugged-gemini: Skill for Claude Code

.gemini/skills/kotlin-idioms/SKILL.md

kotlin-idioms is a skill for Claude Code, Gemini CLI from irahardianto/rugged-gemini. It costs 0 tokens per session (695 once invoked), scanned A, original, MIT.

A guide to writing concise and safe Kotlin code. Kotlin is a programming language with built-in handling for missing values, compact data classes, restricted type hierarchies, and coroutines for concurrent work.

In plain words
What is it for?
Use it for nullable values, data-transfer objects, sealed results, exhaustive `when` expressions, and coroutine-based concurrency.
Why use it?
It helps prevent null-related errors and keeps common data and result-handling code clear and expressive.

Skill for Claude CodeGemini CLI

Written for Claude Code and Gemini CLI: paths in frontmatter, but also installed under .gemini/. Also seen: mentions Gemini CLI.

This is irahardianto/rugged-gemini's own configuration. It tells Claude Code and Gemini CLI how to work on rugged-gemini itself, so it is not a mod to install elsewhere. Copy it as a starting point and replace the rules that are about this project. Everything rugged-gemini configures →

Reuse

Borrowing it

Nothing to install: this file belongs to irahardianto/rugged-gemini. Take a copy, put it at the same path in your own repository, and replace the rules that are about this project with yours.

Copy the file
curl -O https://raw.githubusercontent.com/irahardianto/rugged-gemini/main/.gemini/skills/kotlin-idioms/SKILL.md
Clone the repo
git clone --depth 1 https://github.com/irahardianto/rugged-gemini

Made for: Claude Code, Gemini CLI.

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for kotlin-idioms

README.md
[![agentmods](https://agentmods.dev/badge/skills/irahardianto/rugged-gemini/kotlin-idioms/github.svg)](https://agentmods.dev/skills/irahardianto/rugged-gemini/kotlin-idioms)
Your own site
<a href="https://agentmods.dev/skills/irahardianto/rugged-gemini/kotlin-idioms"><img src="https://agentmods.dev/badge/skills/irahardianto/rugged-gemini/kotlin-idioms/github.svg" alt="Measured on agentmods" height="20"></a>

Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.

agentmods 80×15 button for kotlin-idioms

Your own site · 80×15
<a href="https://agentmods.dev/skills/irahardianto/rugged-gemini/kotlin-idioms"><img src="https://agentmods.dev/badge/skills/irahardianto/rugged-gemini/kotlin-idioms.svg" alt="Reviewed on agentmods" width="80" height="20"></a>
Per session 0 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 695 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. A grade says what 26 rules found in the file — not that it is safe.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5.1 $0.00000 $0.00695
Opus 5 $0.00000 $0.00347
Sonnet 5 $0.00000 $0.00139
Haiku 4.5 $0.00000 $0.00069

Measured 12d ago against content hash 08d0a5ae6224, method: parsed. Prices are Anthropic first-party input rates as of 2026-09-11, from the pricing page.

Security

Grade A, and why

kotlin-idioms scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 12d ago.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

.gemini/skills/kotlin-idioms/SKILL.md · 93 lines

How it starts

The opening of the file, as written. The whole thing — 93 lines — stays where its author put it; the contents beside it link to each section on GitHub.

Kotlin Idioms and Patterns

Kotlin rewards conciseness, null safety, and coroutine-based concurrency. Idiomatic Kotlin = safe, expressive, interop-aware.

Scope: Kotlin coding idioms. Test naming: GEMINI.md § Testing Strategy.

Null Safety

  1. ? for nullable types — never platform types without annotation:

    fun findById(id: String): Task?  // explicitly nullable
    fun getById(id: String): Task    // guaranteed non-null — throws if not found
    
  2. Prefer ?.let {} and ?: (Elvis) over null checks.

  3. Never !! in production — use requireNotNull with a message.

Data Classes and Sealed Types

  1. data class for DTOs and domain objects:

    data class CreateTaskRequest(val title: String, val priority: Priority)
    
  2. sealed class/sealed interface for restricted hierarchies:

    sealed interface TaskResult {
        data class Success(val task: Task) : TaskResult
        data class NotFound(val id: String) : TaskResult
        data class ValidationError(val errors: List<String>) : TaskResult
    }
    
  3. Exhaustive when with sealed types:

    when (result) {
        is TaskResult.Success -> ok(result.task)
        is TaskResult.NotFound -> notFound(result.id)
        is TaskResult.ValidationError -> badRequest(result.errors)
    }
    

Coroutines

  1. Structured concurrencycoroutineScope, supervisorScope.
  2. Never GlobalScope.launch — always scoped.
  3. Flow for reactive streams:
    fun observeTasks(): Flow<List<Task>> = flow {
        while (currentCoroutineContext().isActive) {
            emit(storage.getAll())
            delay(5.seconds)
        }
    }
    

Naming

  1. PascalCase for classes. camelCase for functions, properties.
  2. No get/set prefixes — use properties.
  3. Backtick function names only in tests: `should create task when valid`()

Testing

  1. kotest or JUnit 5 + MockK:
    @Test
    fun `create task returns task when valid`() {
        val result = service.create("Test", Priority.HIGH)
        assertThat(result.title).isEqualTo("Test")
    }
    

Read the full file on GitHub · 93 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 12d ago First seen · 93 lines · 0 tokens per session scan A 08d0a5ae6224

Subscribe to this mod's changes

kotlin-idioms is a skill published in the GitHub repository irahardianto/rugged-gemini (5 stars, last pushed 4mo ago), licensed MIT. It costs nothing until one of its globs matches a file; then it loads 695 tokens. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.

Related

Other skills, from other repositories

kotlin-specialist

Provides idiomatic Kotlin implementation patterns including coroutine concurrency, Flow stream handling, multiplatform architecture, Compose UI construction, Ktor server setup, and type-safe DSL design. Use when building Kotlin applications requiring coroutines, multiplatform development, or Android with Compose.…

Jeffallan/claude-skills · 86 tokens

swiftui-dev

Use this skill for SwiftUI development, architecture, structure, performance, and Apple native app profiling. It combines.

Orkas-AI/Orkas · 3 tokens

axiom-concurrency

Use when writing ANY async code, actors, threads, or seeing ANY concurrency error. Covers Swift 6 concurrency, @MainActor, Sendable, data races, async/await patterns.

CharlesWiltgen/Axiom · 43 tokens

wax

Swift framework guidance for Wax on-device memory/RAG. Use when writing Swift code with the public Memory facade, experimental PhotoMemory / VideoMemory, BuiltInMultimodalEmbeddings, embedding providers, retrieval modes, or hybrid search. For agent operators using the Wax MCP server tools, use the separate wax-mcp…

christopherkarani/Wax · 68 tokens

mobiai-kmp

Use when working on a Kotlin Multiplatform project — shared code, expect/actual declarations, platform-specific implementations, building and testing.

ArisGuimera/MobiAI-Core · 32 tokens

kotlin-concurrency-expert

Kotlin Coroutines review and remediation for Android. Use when asked to review concurrency usage, fix coroutine-related bugs, improve thread safety, or resolve lifecycle issues in Kotlin/Android code.

new-silvermoon/awesome-android-agent-skills · 44 tokens