раздел 05 · подстраница 4

Готовые skills для копипаста

Четыре боевых skill, которыми я пользуюсь сам. Копируйте файлы в ~/.claude/skills/<name>/SKILL.md, адаптируйте под свой стек - и работает.

Зачем

Чтобы не писать с нуля. Эти четыре закрывают большую часть моих ежедневных операций: деплой, ревью PR, changelog, smoke-тесты после релиза.

1. deploy - деплой через git push

~/.claude/skills/deploy/SKILL.md:

---
name: deploy
description: Задеплоить текущий проект через git push + ssh git pull + docker compose. Использовать когда пользователь говорит "задеплой", "выкати", "пуш на прод", "обнови прод".
tools: Bash, Read
model: sonnet
---

# Deploy

## Шаги

1. Проверить ветку: `git branch --show-current`. Если не main - спросить пользователя, точно ли деплоим.
2. `git status` - если есть незакоммиченные изменения, спросить: коммитить или стэшить.
3. Прочитать `deploy.sh`, если есть - использовать его. Если нет:
   - `git push origin main`
   - Прочитать `CLAUDE.md` чтобы узнать ssh-алиас сервера и серверный путь.
   - `ssh <server> "cd <path> && git pull && docker compose up -d --build"`
4. Прогнать smoke: `bash test/smoke.sh` или `python test/smoke.py`.
5. Если smoke падает - откатить: `git revert HEAD && git push`.

## Антипаттерны

- Не деплоить из feature-ветки без явного разрешения.
- Не пропускать smoke - "и так норм" заканчивается ночным инцидентом.

2. pr-review - ревью PR через GitHub API

~/.claude/skills/pr-review/SKILL.md:

---
name: pr-review
description: Ревью pull request по номеру или URL через gh CLI. Использовать когда пользователь даёт ссылку на PR или говорит "проверь PR 123", "посмотри pull request".
tools: Bash, Read, WebFetch
---

# PR Review

## Шаги

1. Извлечь номер PR из аргумента или URL.
2. Получить диф: `gh pr diff <number>`.
3. Получить описание: `gh pr view <number> --json title,body,files`.
4. Прочитать изменённые файлы целиком (gh pr diff показывает только изменения).
5. Проверить:
   - Корректность логики (баги, edge cases, race conditions).
   - Тесты добавлены/обновлены.
   - Нет секретов в коде.
   - Нет breaking changes без объявления.
   - Стиль соответствует CLAUDE.md проекта.
6. Сформировать отчёт: критичные баги, важные замечания, мелочи.
7. Спросить пользователя: запостить как inline-comments через `gh pr review --comment` или показать в чате.

## Формат отчёта

\`\`\`
## Критично
- [файл:строка] описание

## Важно
- ...

## Мелочи
- ...
\`\`\`

3. changelog - из git-коммитов

~/.claude/skills/changelog/SKILL.md:

---
name: changelog
description: Сгенерировать раздел CHANGELOG.md из коммитов с последнего тега. Использовать перед релизом или когда пользователь просит "обнови changelog", "сделай release notes".
tools: Bash, Read, Edit
---

# Changelog

## Шаги

1. Найти последний тег: `git describe --tags --abbrev=0`. Если тегов нет - брать все коммиты от первого.
2. Получить коммиты: `git log <tag>..HEAD --pretty=format:"%h %s" --no-merges`.
3. Сгруппировать по conventional commits:
   - `feat:` -> Added
   - `fix:` -> Fixed
   - `refactor:` -> Changed
   - `docs:` -> Docs
   - `chore:`, `style:`, `test:` -> игнорировать или Misc
4. Спросить пользователя, какой semver-bump (major / minor / patch).
5. Прочитать `CHANGELOG.md`, добавить новый раздел в начало после заголовка.
6. Не трогать предыдущие разделы.

## Формат

\`\`\`
## [1.4.0] - 2026-05-27

### Added
- Поддержка webhook-подписок (#123)

### Fixed
- Race condition в очереди задач (#125)

### Changed
- Перешли с Express на Fastify (#118)
\`\`\`

## Антипаттерны

- Не дописывать changelog в существующий раздел - всегда новый.
- Не использовать %s буквально - переписывайте в осмысленный язык пользователя ("добавили", "исправили").

4. smoke-tests - запуск проверок после деплоя

~/.claude/skills/smoke-tests/SKILL.md:

---
name: smoke-tests
description: Прогнать smoke-тесты против production-окружения. Использовать после деплоя или когда пользователь говорит "проверь прод", "запусти smoke", "всё ли живо".
tools: Bash, Read
---

# Smoke Tests

## Шаги

1. Найти файл с тестами: `test/smoke.py`, `test/smoke.sh`, `scripts/smoke.*`.
2. Если нет - предложить создать (см. шаблон ниже).
3. Запустить: `python test/smoke.py` или `bash test/smoke.sh`.
4. Если exit != 0 - показать вывод и предложить откат через `git revert`.
5. Если ок - кратко доложить, какие проверки прошли.

## Шаблон test/smoke.py (если нет)

\`\`\`python
import sys
import urllib.request
import json

BASE = "https://example.com"
CHECKS = [
    ("/", "HTTP 200 на главной"),
    ("/api/health", "Health endpoint"),
    ("/api/version", "Version endpoint"),
]

failed = []
for path, label in CHECKS:
    try:
        r = urllib.request.urlopen(BASE + path, timeout=10)
        assert r.status == 200, f"status {r.status}"
        print(f"OK   {label}")
    except Exception as e:
        print(f"FAIL {label}: {e}")
        failed.append(label)

if failed:
    print(f"\nFailed: {len(failed)}")
    sys.exit(1)
print("\nAll passed")
\`\`\`

## Чек-лист проверок

- Главная возвращает 200.
- Все ключевые API-endpoint'ы отвечают.
- JSON-структуры содержат ожидаемые поля.
- Внешние ресурсы (S3, прокси) реально открываются.
- Public HTML-маршруты (events, /pricing) возвращают 200.

Как установить все четыре

mkdir -p ~/.claude/skills/{deploy,pr-review,changelog,smoke-tests}
# скопировать содержимое каждого SKILL.md в соответствующую папку
$EDITOR ~/.claude/skills/deploy/SKILL.md
$EDITOR ~/.claude/skills/pr-review/SKILL.md
$EDITOR ~/.claude/skills/changelog/SKILL.md
$EDITOR ~/.claude/skills/smoke-tests/SKILL.md

Перезапускать Claude не нужно - skills подхватываются на лету.

Антипаттерны

  • Скопировать и не адаптировать пути/команды под свой стек.
  • Не положить skill в git - забудете через месяц, что он есть.
  • Использовать deploy без smoke - быстрее, но риск выкатить сломанное.

Полезные ссылки