Дата публикации
ai_products

GitHub Copilot Custom Skills: как превратить рутины разработчика в исполняемые сценарии ИИ

Что нового

GitHub добавил в Copilot новый уровень кастомизации — Custom Skills. Это не просто подсказки в редакторе, а полноценные сценарии, которые Copilot может запускать сам по себе по одному текстовому запросу.

Что именно появилось:

  • Навык как папка в репозитории: каждый skill — это каталог с файлом SKILL.md и дополнительными скриптами, шаблонами, конфигами.
  • Единый формат SKILL.md: YAML-фронтматтер + подробная инструкция, когда и как запускать процедуру.
  • Автоматический запуск по фразе: Copilot читает описание навыка и подгружает его, когда запрос в чате совпадает с триггерными фразами.
  • Автономное выполнение пайплайнов: Copilot сам переходит в нужную папку, запускает скрипты, подставляет аргументы и собирает результат.
  • Открытый стандарт Agent Skills: один и тот же навык работает в:
    • GitHub Copilot в VS Code (чат и Agent mode),
    • GitHub Copilot CLI,
    • GitHub Copilot coding agent,
    • совместимых агентах вроде Claude Code и Gemini CLI через .claude/skills/ и .agents/skills/.
  • Интеграция со слэш-командами: все навыки автоматически появляются как команды /skill-name в Copilot Chat.
  • Быстрое создание навыков: команда /create-skill в чате генерирует структуру папок и SKILL.md по текстовому описанию.
  • Гранулярный контроль загрузки: параметры user-invocable и disable-model-invocation в фронтматтере управляют, когда навык доступен и как его можно вызвать.
  • Поддержка нескольких мест хранения: навыки могут быть проектными (в репозитории) или персональными (в домашней директории), плюс настраиваемые пути через chat.skillsLocations в VS Code.

Цифр по скорости или цене Microsoft не приводит, но в примере типичная рутина на 15–30 минут превращается в один запрос к Copilot с выполнением за пару минут.


Как это работает

Базовая идея: SKILL.md — это контракт между вами и Copilot. Вы описываете процедуру, Copilot orchestration берёт на себя.

Структура навыка

Навык — это папка, например:

.github/skills/my-skill/
├── SKILL.md                          # Инструкции (обязательно)
└── references/
    ├── resources/
    │   ├── run.py                    # Скрипт автоматизации
    │   ├── query-template.sql        # Шаблон запроса
    │   └── config.yaml               # Конфиг
    └── reports/
        └── report_template.html      # Шаблон отчёта
``

Ключевой файл — `SKILL.md`. У него фиксированная структура:

```markdown
---
name: my-skill
description: 'What this does and when to use it. Include trigger
  phrases so Copilot knows when to load it. USE FOR: specific
  task A, task B. Trigger phrases: "keyword1", "keyword2".'
argument-hint: 'What inputs the user should provide.'
---

# My Skill

## When to Use
- Situation A
- Situation B

## Quick Start

```powershell
cd .github/skills/my-skill/references/resources
py run.py <arg1> <arg2>

What It Does

| Step | Action | Purpose | |------|--------|---------| | 1 | Fetch data from source | Gather raw input | | 2 | Process and transform | Apply business logic | | 3 | Generate report | Produce actionable output |

Output

Description of what the user gets back.


### Как Copilot находит и загружает навыки

Загрузка идёт по шагам:

1. **Сканирование навыков**. Copilot просматривает только `name` и `description` у всех доступных `SKILL.md`. Это примерно 100 токенов на навык.
2. **Описание = поиск**. Поле `description` — единственный источник, по которому Copilot решает, подходит ли навык под запрос. Поэтому туда нужно упаковать ключевые слова и триггерные фразы.
3. **Прогрессивная загрузка**:
   - сначала — только `name` и `description`;
   - если навык подходит — Copilot загружает полный текст `SKILL.md`;
   - файлы из `references/` он читает только тогда, когда процедура явно их использует.
4. **Исполнение**. Copilot в Agent mode запускает команды, описанные в `SKILL.md`: заходит в нужную директорию, вызывает Python/Node/.NET/CLI, читает конфиги и шаблоны, формирует результат.

Copilot не «угадывает» команды. Он следует инструкции в `SKILL.md`. Скрипты выполняют тяжёлую работу, ИИ управляет последовательностью действий.

### Технические требования

Чтобы всё это работало, нужно:

- **VS Code** — актуальная стабильная версия.
- **GitHub Copilot** — активная подписка (Individual, Business или Enterprise).
- **Agent mode** — в панели Copilot Chat нужно выбрать режим Agent (в новых версиях он по умолчанию).
- **Рантайм-инструменты** — всё, что используют ваши скрипты: Python, Node.js, .NET CLI, `az` CLI и т.д.

Сами навыки не требуют дополнительных расширений или облачных сервисов — это просто файлы в репозитории или в пользовательской директории.

---

## Что это значит для вас

### Какие задачи закрывает

Custom Skills полезны везде, где вы повторяете одни и те же многошаговые сценарии:

- **CLI-рутина**: последовательность команд, чтение вывода, ручной разбор JSON, формирование отчёта.
- **Интеграции с API**: запросы к нескольким сервисам, склейка данных, сводка результатов.
- **Тестирование**: запуск тестов, анализ падений, сравнение с предыдущим прогоном, отчёт с приоритизацией.
- **DevOps и SRE-процедуры**: health-check после деплоя, валидация конфигураций, поиск дрейфа инфраструктуры.
- **Отчётность**: релиз-ноты, отчёты по безопасности, анализ затрат в облаке.

Раньше вы хранили это в wiki или runbook и каждый раз копировали команды вручную. Теперь вы описываете процедуру один раз в `SKILL.md`, и Copilot запускает её по фразе в духе: «проверь здоровье деплоя staging».

### Когда это особенно полезно

- У вас **команда**, и вы хотите, чтобы все делали сложные операции одинаково. Навык живёт в `.github/skills` и версионируется вместе с кодом.
- У вас **много рутинных проверок**: регрессия, безопасность, перфоманс, инфраструктура. Каждую можно упаковать в отдельный skill.
- Вы **часто обучаете новичков**: вместо устных инструкций даёте им набор навыков, которые Copilot может выполнять и объяснять по ходу.

### Когда не стоит заморачиваться

- Задача разовая и вряд ли повторится.
- Процедура постоянно меняется, и вы не готовы поддерживать `SKILL.md` и скрипты в актуальном состоянии.
- Вы почти не пользуетесь Copilot Chat или Agent mode и не планируете менять процесс.

### Доступность из России

GitHub Copilot официально недоступен для аккаунтов из России. Для работы с Custom Skills нужен активный Copilot, так что без обходных путей (VPN, аккаунты в других регионах, корпоративные подписки через зарубежные юрлица) вы их не запустите.

---

## Место на рынке

Custom Skills — это часть экосистемы «агентов» вокруг GitHub Copilot.

На уровне рынка это конкурирует с:

- **Claude Code** (Anthropic) — поддерживает тот же формат навыков через `.claude/skills/`.
- **Gemini CLI** (Google) — совместим через `.agents/skills/`.
- **GitHub Copilot CLI и coding agent** — используют тот же стандарт.

Чётких цифр по скорости или стоимости относительно GPT-4o, Claude 3.5 или Gemini 1.5 Microsoft не приводит. Главное отличие — не в качестве модели, а в **стандарте описания процедур**, который работает сразу в нескольких инструментах.

Если вы уже живёте в экосистеме GitHub и VS Code, Custom Skills логично использовать как «формат runbook’ов», который умеет выполнять Copilot. Если вы строите процессы вокруг других ассистентов, плюс в том, что формат открытый и поддерживается не только Copilot.

---

## Как запустить: пример навыка для health-check деплоя

Разберём полноценный пример из Microsoft: навык, который проверяет здоровье деплоя, опрашивает health-эндпоинты, сравнивает задержки с базовыми значениями и генерирует HTML-отчёт.

### Шаг 1 — структура папок

```text
.github/skills/deployment-health/
├── SKILL.md
└── references/
    └── resources/
        ├── check_health.py
        └── endpoints.yaml

Шаг 2 — содержимое SKILL.md

---
name: deployment-health
description: 'Check deployment health across environments. Queries
  health endpoints, compares response times against baselines, and
  flags degraded services. USE FOR: deployment validation, health
  check, post-deploy verification, service status. Trigger phrases:
  "check deployment health", "is the deployment healthy",
  "post-deploy check", "service health".'
argument-hint: 'Provide the environment name (e.g., staging, production).'
---

# Deployment Health Check

## When to Use
- After deploying to any environment
- During incident triage to check service status
- Scheduled spot checks

## Quick Start

```bash
cd .github/skills/deployment-health/references/resources
python check_health.py <environment>

What It Does

  1. Loads endpoint definitions from endpoints.yaml
  2. Calls each endpoint, records response time and status code
  3. Compares against baseline thresholds
  4. Generates an HTML report with pass/fail status

Output

HTML report at references/reports/health_<environment>_<date>.html


Здесь видно несколько важных моментов:

- В `description` зашиты **конкретные триггерные фразы**: `"check deployment health"`, `"post-deploy check"`, `"service health"`.
- `argument-hint` подсказывает, что от пользователя нужен один аргумент — имя окружения.
- В разделе **Quick Start** есть точная команда, которую Copilot будет повторять.

### Шаг 3 — скрипт `check_health.py`

```python
# check_health.py
import sys, yaml, requests, time, json
from datetime import datetime

def main():
    env = sys.argv[1]
    with open("endpoints.yaml") as f:
        config = yaml.safe_load(f)

    results = []
    for ep in config["endpoints"]:
        url = ep["url"].replace("{env}", env)
        start = time.time()
        resp = requests.get(url, timeout=10)
        elapsed = time.time() - start
        results.append({
            "service": ep["name"],
            "status": resp.status_code,
            "latency_ms": round(elapsed * 1000),
            "threshold_ms": ep["threshold_ms"],
            "healthy": resp.status_code == 200 and elapsed * 1000 < ep["threshold_ms"]
        })

    healthy = sum(1 for r in results if r["healthy"])
    print(f"Health check: {healthy}/{len(results)} services healthy")
    # ... generate HTML report ...

if __name__ == "__main__":
    main()

Copilot не переписывает этот код. Он просто запускает его с нужным аргументом, считывает вывод и может на основе него сформировать резюме в чате.

Шаг 4 — запуск навыка через Copilot

Дальше всё выглядит так:

  1. Вы открываете VS Code, включаете Agent mode.
  2. В Copilot Chat пишете: Check deployment health for staging.
  3. Copilot:
    • сопоставляет запрос с описанием deployment-health;
    • загружает SKILL.md;
    • выполняет команды из раздела Quick Start: python check_health.py staging в нужной папке;
    • открывает сгенерированный отчёт;
    • резюмирует результат в чате.

Примеры полезных навыков

Custom Skills не привязаны к конкретной доменной области. Microsoft приводит несколько типовых паттернов:

| Skill | Что автоматизирует | |-------|---------------------| | Test Regression Analyzer | Запускает тесты, парсит падения, сравнивает с последним успешным прогоном, генерирует diff-отчёт | | API Contract Checker | Сравнивает OpenAPI-спеки между ветками, подсвечивает ломающие изменения | | Security Scan Reporter | Запускает SAST/DAST, объединяет результаты, формирует приоритизированный отчёт | | Cost Analysis | Запрашивает биллинг-API облака, сравнивает затраты по периодам, ищет аномалии | | Release Notes Generator | Парсит git log между тегами, классифицирует изменения, генерирует changelog | | Infrastructure Drift Detector | Сравнивает живое состояние инфраструктуры с IaC-шаблонами, ищет дрейф | | Log Pattern Analyzer | Ходит в систему логов, находит аномальные паттерны, делает сводку | | Performance Benchmarker | Запускает бенчмарки, сравнивает с базовыми значениями, отмечает деградации | | Dependency Auditor | Сканирует зависимости, ищет уязвимости и устаревшие пакеты |

Общий шаблон: инструкции в SKILL.md + скрипты автоматизации + шаблон отчёта.


Где хранить навыки

Навыки могут быть общими для проекта или личными.

Проектные навыки (делятся с командой)

Хранятся в репозитории и попадают в Git:

.github/skills/<name>/
.agents/skills/<name>/
.claude/skills/<name>/

Они доступны всем, кто работает с этим репо.

Персональные навыки

Живут в домашней директории разработчика и не шарятся с командой:

~/.copilot/skills/<name>/
~/.agents/skills/<name>/
~/.claude/skills/<name>/

VS Code позволяет добавить дополнительные пути к навыкам через настройку chat.skillsLocations.


Как правильно писать SKILL.md

Делайте

  • Набивайте description ключевыми словами. Это единственное поле, по которому Copilot решает, какой навык ему нужен.
  • Пишите точные команды: cd path/to/dir && python script.py <args>.
  • Чётко описывайте вход и выход: какие аргументы нужны, какие файлы или отчёты появятся.
  • Используйте таблицы для многошаговых процедур — ИИ проще следовать структурированному плану.
  • Добавляйте заметки по таймзонам, если работаете со временем.
  • Кладите HTML-шаблоны отчётов в references/reports — визуальный вывод лучше сухого текста.

Не делайте

  • Не пишите расплывчатые описания вроде A useful skill — Copilot не поймёт, когда его вызывать.
  • Не полагайтесь на «контекст» — указывайте все пути, переменные окружения, prereqs.
  • Не тащите большие файлы в SKILL.md — складывайте их в references/.
  • Не хардкодьте секреты — используйте переменные окружения или, например, Azure Key Vault.
  • Не забывайте про ошибки — опишите типичные фейлы и что с ними делать.

Управление загрузкой навыков

Через фронтматтер в SKILL.md можно тонко настроить поведение навыка:

  • По умолчанию (оба флага отсутствуют):
    • навык доступен как слэш-команда;
    • Copilot может подгружать его автоматически, когда запрос подходит по смыслу.
  • user-invocable: false:
    • навык не доступен как /команда;
    • Copilot может использовать его как фоновое знание.
  • disable-model-invocation: true:
    • навык можно вызвать только явно пользователем;
    • Copilot сам его не подгрузит по смыслу запроса.
  • Оба флага включены:
    • навык по сути выключен.

Это полезно, если вы хотите, чтобы какие-то навыки работали только по прямой команде или наоборот — тихо помогали модели в фоне.


Быстрое создание и слэш-команды

Каждый навык автоматически превращается в слэш-команду в Copilot Chat:

  • deployment-health/deployment-health.

Можно сразу передавать аргументы:

  • /deployment-health staging
  • /webapp-testing for the login page

Для быстрого старта есть команда /create-skill. Вы описываете задачу словами, Copilot задаёт уточняющие вопросы и генерирует:

  • SKILL.md с корректным фронтматтером;
  • структуру папок;
  • при желании — наброски скриптов.

Ещё один сценарий — вы только что прошли сложный путь отладки в чате и говорите Copilot: create a skill from how we just debugged that. Он упакует весь разговор в многошаговую процедуру, которую потом можно запускать по запросу.


Как Custom Skills вписываются в настройку Copilot

Custom Skills — один из нескольких механизмов кастомизации поведения Copilot.

  • Workspace Instructions (.github/copilot-instructions.md) — общие правила для репозитория: кодстайл, архитектурные принципы.
  • File Instructions (.github/instructions/*.instructions.md) — правила для конкретных типов файлов, например для всех *.test.ts.
  • Prompts (.github/prompts/*.prompt.md) — одноразовые шаблоны задач с параметрами.
  • Skills (.github/skills/<name>/SKILL.md) — многошаговые сценарии с кодом и шаблонами.
  • Custom Agents (.github/agents/*.agent.md) — отдельные «саб-агенты» с ограниченным доступом к инструментам или многостадийными пайплайнами.
  • Hooks (.github/hooks/*.json) — гарантированные shell-команды на события жизненного цикла агента (например, автоформатирование или блокировка определённых действий).
  • Plugins — отдельные пакеты навыков из сообщества (например, awesome-copilot).

Custom Skills занимают нишу между простыми промптами и полноценными кастомными агентами: это именно исполняемые runbook’и.


Как начать

  1. Создайте папку для навыка в репозитории:

    .github/skills/<your-skill>/SKILL.md
    
  2. Напишите насыщенное ключевыми словами description в YAML-фронтматтере.

  3. Опишите процедуру и добавьте скрипты в references/resources и шаблоны отчётов в references/reports.

  4. Откройте репозиторий в VS Code, включите Agent mode.

  5. В Copilot Chat сформулируйте задачу обычным языком.

  6. Посмотрите, как Copilot находит ваш навык, загружает инструкции и выполняет сценарий.

Если не хочется руками возиться со структурой, начните с /create-skill в чате и дайте Copilot текстовое описание задачи.

Custom Skills превращают документацию и runbook’и в исполняемые сценарии. Начните с самой болезненной рутины в вашем процессе, упакуйте её в SKILL.md и отдайте её Copilot.


Читайте также