# api-design

Скилл для проектирования публичных API по принципу «только расширять»: помогает не ломать совместимость при выпуске новых версий.

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

## Что делает

Скилл разбирает три вида совместимости: исходную (код компилируется против новой версии), бинарную (собранный код работает с новой версией) и wire-совместимость (сериализованные данные читаются другими версиями). Ломается любая из них — пользователям приходится подстраиваться под вас, а не наоборот.

Внутри — таблицы безопасных и опасных изменений на C#. Добавить перегрузку метода или новый тип можно в любом релизе. А вот дописать необязательный параметр в существующий метод нельзя: сигнатура в IL меняется, и вызывающий код, собранный против старой версии, упадёт с `MissingMethodException`. Правильный путь — новая перегрузка.

Ещё в скилле есть паттерн устаревания через `[Obsolete]` с указанием версии, тесты API-поверхности на `PublicApiGenerator` и `Verify.Xunit` (любое изменение публичного API валит тест, пока ревьюер не одобрит новый `*.verified.txt`), а также схема эволюции wire-форматов в три фазы: сначала чтение нового формата, потом запись по флагу, потом значение по умолчанию. Для распределённых систем это повод проверить, читает ли текущая версия данные от старой и наоборот — без этого rolling upgrade с простоем не обойдётся.

## Установка

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

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

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

### Codex

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

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

### Cursor

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

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

### GitHub Copilot

1. **GitHub CLI**
```bash
gh skill install Aaronontheweb/dotnet-skills csharp-api-design
```

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

### Gemini CLI

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

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

### Windsurf (Devin Desktop)

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

### OpenCode

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

### Claude.ai

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

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

## Когда брать
- спроектировать публичный API библиотеки, который не придётся ломать через год
- проверить пул-реквест на скрытые breaking changes до мержа
- добавить метод в существующий класс, не сломав бинарную совместимость
- устареть старый метод и подсказать пользователям замену
- выпустить новую версию wire-формата без остановки кластера

## Примеры запросов агенту
- Проверь мой новый публичный API на breaking changes по принципам extend-only
- Добавь перегрузку Process с CancellationToken, не меняя существующую сигнатуру
- Настрой тест API-поверхности через PublicApiGenerator и Verify, чтобы изменения были видны в диффе

## Похожие
- [api-breaking-change-detector](https://affpapa.org/nevibecode/skills/api-breaking-change-detector.md) — скилл · 23 установки
- [project-structure](https://affpapa.org/nevibecode/skills/project-structure.md) — скилл · 2800 установок
- [dotnet-design-pattern-review](https://affpapa.org/nevibecode/skills/dotnet-design-pattern-review.md) — скилл · 11609 установок
- [csharp-scripts](https://affpapa.org/nevibecode/skills/csharp-scripts.md) — скилл · 3800 установок
- [template-authoring](https://affpapa.org/nevibecode/skills/template-authoring.md) — скилл · 3200 установок
- [migrate](https://affpapa.org/nevibecode/skills/codewithmukesh-migrate.md) — скилл · 2800 установок

## Другие версии с тем же именем
- [api-design · affaan-m](https://affpapa.org/nevibecode/skills/api-design.md) — 5500 установок
- [api-design · akillness](https://affpapa.org/nevibecode/skills/agent-skills-team-api-design.md) — 387 установок

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

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