If you've used Claude Code, Cursor, or Copilot on a Kotlin codebase, you've seen it: the suggestions look like Java in a Kotlin trench coat. !! everywhere. lateinit on fields the model can't reason about. Thread { ... }.start() instead of coroutines. MutableList exposed as a public field. companion object turned into a XxxUtils dumping ground. Groovy build files in 2026. The fix isn't more careful prompting. It's a CLAUDE.md at the root of your project — a checked-in policy file the model reads on every turn. The rules survive across sessions, they apply equally to every contributor (human or AI), and they shift the burden from "I have to remember to ask for the Kotlin idiom" to "the assistant is told what idiomatic means in this codebase." Below are 13 rules I'd put in any Kotlin CLAUDE.md today, on Kotlin 2.0+ , Coroutines 1.9+ , and JDK 21 . They cover backend (Ktor / Spring Boot) and Android — the rules are framework-agnostic where possible, with explicit notes when a rule changes shape on either side.…