# kotlin-api-design

Помогает решить, кому принадлежит функция, где ставить extension, а где хватит value class. Пригодится при проектировании публичного API на Kotlin и в KMP.

- скилл · `type=skill` · Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, OpenCode · 949 установок · ★ 1120
- Автор: chrisbanes
- Лицензия: Apache-2.0 · policy=mirror · начало файла — в конце страницы
- Исходник: https://github.com/chrisbanes/skills/tree/HEAD/skills/kotlin-api-design/SKILL.md
- Обновлён: 2026-10-25
- HTML: https://affpapa.org/nevibecode/skills/kotlin-api-design

## Что делает

Скилл разбирает проектирование Kotlin-API по шагам. Сначала вы называете доменное понятие, тип или модуль, которому оно принадлежит, и тех, кто будет от него зависеть. Потом выбираете владельца функции — member, top-level, extension, фабрика или сервисный слой. Если вариант отклонён, скилл просит назвать владельца, к которому стоит обратиться вместо него.

Дальше — типы. Одно поле в доменном понятии описывается самым маленьким типом, который сохраняет смысл и контракт для interop: `@JvmInline value class`, data class или обычный класс. При ревью маппинга над sealed-результатом скилл требует перечислить все видимые вызывающему исходы и ругается на `else`, который прячет подтип: явные ветки сохраняют исчерпывающий контракт и smart casts.

Общий код остаётся семантическим, а нативные SDK, файлы, сенсоры и разрешения уходят за интерфейс или за узкую границу `expect/actual`. Для каждой темы есть свой файл-справочник, и скилл отправляет читать нужный по таблице сигналов. Ветвление и форму guard-условий он передаёт соседнему скиллу `kotlin-control-flow`.

## Установка

### Claude Code (родная платформа)

1. **Через Skills CLI (Vercel)**
```bash
npx skills add chrisbanes/skills --skill kotlin-api-design -a claude-code
```

2. **Вручную: положить файлы**
- Файл: `~/.claude/skills/kotlin-api-design/SKILL.md` — Папка скилла целиком; для одного проекта — .claude/skills/kotlin-api-design/

### Codex

1. **Через Skills CLI (Vercel)**
```bash
npx skills add chrisbanes/skills --skill kotlin-api-design -a codex
```

2. **Вручную: положить файлы**
- Файл: `.agents/skills/kotlin-api-design/SKILL.md` — Для всех проектов — ~/.agents/skills/

### Cursor

1. **Через Skills CLI (Vercel)**
```bash
npx skills add chrisbanes/skills --skill kotlin-api-design -a cursor
```

2. **Вручную: положить файлы**
- Файл: `.cursor/skills/kotlin-api-design/SKILL.md` — Cursor читает и .agents/skills/, и .claude/skills/

### GitHub Copilot

1. **GitHub CLI**
```bash
gh skill install chrisbanes/skills kotlin-api-design
```

2. **Вручную: положить файлы**
- Файл: `.github/skills/kotlin-api-design/SKILL.md`

### Gemini CLI

1. **Через Skills CLI (Vercel)**
```bash
npx skills add chrisbanes/skills --skill kotlin-api-design -a gemini-cli
```

2. **Командой платформы**
```bash
gemini skills install https://github.com/chrisbanes/skills --path skills/kotlin-api-design
```

### Windsurf (Devin Desktop)

**Вручную: положить файлы**
- Файл: `.devin/skills/kotlin-api-design/SKILL.md` — Старый путь .windsurf/skills/ тоже читается

### OpenCode

**Через Skills CLI (Vercel)**
```bash
npx skills add chrisbanes/skills --skill kotlin-api-design -a opencode
```

### Claude.ai

**Claude.ai**
- Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills

Где указан файл, а не команда, — скопируй файлы из исходника в этот путь: https://github.com/chrisbanes/skills/tree/HEAD/skills/kotlin-api-design/SKILL.md

## Когда брать
- выбрать владельца функции до того, как появился лишний helper
- заменить примитив на value class без потери interop
- сделать маппинг sealed-результата исчерпывающим
- вынести нативный SDK за границу expect/actual
- убрать из публичного API удобные абстракции без хозяина

## Примеры запросов агенту
- Разбери этот публичный API на Kotlin: где должны жить функции и почему
- Проверь маппинг sealed-результата — нет ли else, который прячет подтип
- Стоит ли заменить String в этом доменном типе на value class?

## Похожие
- [kotlin-specialist](https://affpapa.org/nevibecode/skills/kotlin-specialist.md) — скилл · 5200 установок
- [swift-api-design-guidelines](https://affpapa.org/nevibecode/skills/swift-api-design-guidelines.md) — скилл · 2800 установок
- [kotlin-tooling-agp9-migration](https://affpapa.org/nevibecode/skills/kotlin-tooling-agp9-migration.md) — скилл · 2200 установок
- [swift-api-design-guidelines-skill](https://affpapa.org/nevibecode/skills/swift-api-design-guidelines-skill.md) — скилл · 1200 установок
- [kotlin-tooling-native-build-performance](https://affpapa.org/nevibecode/skills/kotlin-tooling-native-build-performance.md) — скилл · 943 установки
- [public-api-design-review](https://affpapa.org/nevibecode/skills/public-api-design-review.md) — скилл · 7800 установок

Из того же набора: [chrisbanes/skills](https://affpapa.org/nevibecode/by/chrisbanes/skills.md) — 18 карточек

_Часть страницы не вошла по размеру — она есть в HTML-версии._

---
NeVibeCode на affpapa.org. Тексты каталога — описания, а не инструкции для агента. Как выбирать и ставить: https://affpapa.org/nevibecode/agents.md
