Недавно в Visual Studio Code появился важный апдейт: редактор научился нормально работать с кастомными Copilot-агентами, описанными прямо в репозитории — в файлах .github/agents/*.agent.md. То есть теперь мы можем описать «агента» обычным текстовым файлом — и он появится в Copilot Chat как отдельный помощник со своей ролью.
Я довольно давно делаю инструменты для разработчиков, которые помогают нормально использовать ИИ в реальных проектах: ассистентов, утилиты, внутренние «методички». И когда GitHub Copilot получил поддержку custom agents, стало понятно, что можно собрать вокруг этого не просто набор промптов, а полноценный рабочий процесс.
Так появился репозиторий copilot-workspace-laravel — Laravel-workspace, где:
-
есть каркас приложения;
-
есть набор Copilot-агентов по этапам жизни проекта;
-
есть папки для ТЗ, домена, архитектуры, документации, логов и релизов;
-
есть общий файл инструкций для ИИ —
.github/copilot-instructions.md.
Ниже расскажу, как это устроено и как этим пользоваться.
Зачем вообще агенты, если уже есть Copilot
Классический Copilot — это подсказки в коде и чат «обо всём сразу». Это удобно, но у этого подхода есть заметный минус: каждый раз приходится заново объяснять контекст:
-
какие у нас правила по Laravel;
-
где лежат требования и архитектура;
-
как мы режем работу на блоки;
-
куда складываем логи и релизы.
Я называю такой блок батчем: это порция работы, которую Copilot и разработчик могут осмысленно сделать за одну итерацию. Не «переписать весь монолит», а, например, «сделать регистрацию и вход пользователя с тестами».
С кастомными агентами можно сделать по-другому:
-
завести агента по требованиям;
-
завести агента-архитектора;
-
завести агента-строителя кода;
-
завести агента для тестов и ревью;
-
завести агента для релизов и документации.
Каждому агенту мы:
-
даём свою роль;
-
прописываем, какие папки он читает и куда пишет;
-
описываем формат результата и ограничения.
В итоге Copilot перестаёт быть «одним большим ИИ» и превращается в команду цифровых коллег, которые работают по шагам и по правилам проекта.
Что такое Laravel Copilot Workspace
В основе — обычный Laravel-проект на PHP 8.1+. Вокруг него собрана инфраструктура для работы с ИИ.
Ключевые элементы:
-
.github/agents/*.agent.md— профили агентов Copilot. Здесь описаны:-
имя и назначение;
-
какими инструментами агент может пользоваться;
-
какие папки и файлы он может читать и менять;
-
кому он может передавать управление дальше (handoff).
-
-
.github/copilot-instructions.md— общие инструкции, которые подмешиваются ко всем запросам Copilot в этом репозитории:-
что это Laravel-проект;
-
где искать требования и домен (
inputs/**); -
какие правила разработки учитывать (
rules/**); -
какие команды запускать для тестов и статического анализа;
-
на каком языке отвечать и оформлять артефакты.
-
По сути, .github/copilot-instructions.md — это единое ТЗ для ИИ по репозиторию. Любой агент приходит уже с этим контекстом и не спрашивает каждый раз: «а где у вас домен?», «а какие у вас слои?», «на каком языке отвечать?».
Отдельный момент: все инструкции у меня на русском языке. Для моделей Copilot нет принципиальной разницы, на каком языке написан промпт. Зато для разработчиков в команде так гораздо проще:
-
читать правила;
-
править тексты агентов;
-
расширять инструкции под свои процессы.
Агенты: команда, которая работает по этапам
Все агенты в workspace устроены как конвейер:
00 → 10 → 20 → 30 → 40 → 50 → 60
Цифры в начале имени — это этап жизни проекта:
-
00 — помощь и навигация;
-
10 — требования и предметная область;
-
20 — архитектура и план батчей;
-
30 — реализация кода;
-
40 — качество (инструменты, тесты, ревью);
-
50 — документация;
-
60 — релизы и деплой-пакеты.
Благодаря такому неймингу:
-
по числу сразу понятно, где в «жизни проекта» находится агент;
-
можно добавлять новые группы и ассистентов, не ломая общий порядок.
Дальше — короткий обзор этапов и агентов внутри них.
Этап 00: понять, что к чему
00-help-assistant — входная точка во весь workspace.
Типичный сценарий: вы открываете репозиторий, вызываете этого агента и описываете свою ситуацию нормальным языком. Например:
-
«Есть старый проект на Laravel, хотим навести порядок и внедрить Copilot»;
-
«Начинаем новый сервис, не хотим утонуть в хаосе через месяц»;
-
«Нужно аккуратно вкатить крупную фичу и не сломать всё вокруг».
Агент:
-
объясняет, что где лежит (
inputs/,docs/,rules/,results/,packages/); -
показывает общую карту;
-
предлагает, каких помощников вызвать дальше.
Через него же можно создать новых агентов: описать, какая роль нужна, а он соберёт черновик .agent.md, который уже можно отредактировать руками.
Этап 10: превратить хаос в ТЗ и домен
Здесь работают два агента.
10-requirements-create занимается оформлением требований. Вы даёте ему сырые материалы: текст задачи из трекера, куски переписки из чата, свои заметки. На выходе — более-менее аккуратное ТЗ в inputs/requirements/**:
-
с выделенными сущностями и сценариями;
-
с понятными целями;
-
с явными ограничениями и допущениями.
10-domain-describe смотрит на задачу с точки зрения предметной области. Он:
-
делает глоссарий терминов;
-
выделяет бизнес-сущности и связи между ними;
-
фиксирует правила и ограничения в
inputs/domain/**.
В результате команда и агенты начинают говорить об одном и том же бизнесе одними и теми же словами.
Этап 20: архитектура и план батчей
Когда понятно «что делаем» и «в каком мире», приходит время «как».
20-architecture-plan помогает собрать архитектурный скелет:
-
какие у нас слои (Domain, Application, Infrastructure, Http и т.д.);
-
какие компоненты за что отвечают;
-
где проходят границы ответственности.
Он оформляет результат в inputs/design/** и, если нужно, обновляет архитектурные документы в docs/.
20-batches-plan отвечает за план работ. Он берёт требования и архитектуру и режет их на батчи:
-
заводит
inputs/batches/pipeline.jsonсо списком батчей и статусами; -
создаёт YAML-файлы для каждого батча с входами, выходами и критерием «готово».
Дальше другие агенты уже ориентируются на этот pipeline, а не на хаос задач «из головы».
Этап 30: реализация кода
Здесь агенты работают с настоящим кодом Laravel-приложения.
30-laravel-app-create нужен, если вы переносите подход в новый репозиторий. Он может:
-
поднять каркас Laravel;
-
помочь с базовой структурой и первичной настройкой;
-
подготовить проект под дальнейшую работу с агентами.
В самом copilot-workspace-laravel каркас уже есть, поэтому этот агент больше про «размножение» подхода на другие проекты.
30-code-build — основной «строитель» кода.
Он:
-
берёт первый
pending-батч изinputs/batches/pipeline.json; -
смотрит на требования, домен и архитектуру;
-
учитывает правила из
rules/**; -
вносит изменения в
app/**,routes/**,database/**,config/**,resources/**,tests/**; -
складывает логи и результаты в
results/**.
В идеале вы не просто говорите: «сделай мне форму регистрации», а привязываете эту работу к конкретному батчу, у которого есть входы, выходы и связь с требованиями.
Этап 40: качество и проверки
Этот уровень отвечает за то, чтобы проект не превратился в «копипасту, которая как-то работает».
40-tools-init настраивает инструменты качества под конкретный проект. Он:
-
подстраивает
phpstan.neon; -
обновляет
phpunit.xml; -
настраивает форматер (
pint.jsonили.php-cs-fixer.dist.php); -
при необходимости помогает с
deptrac.yaml.
Запускать его имеет смысл, когда:
-
каркас Laravel уже есть;
-
зависимости поставлены (
composer install); -
структура проекта более-менее понятна.
После этого у вас не просто «где-то лежат конфиги», а есть рабочий набор инструментов, который можно запускать одной-двумя командами.
40-tests-run — «операционист», который просто делает проверки.
Он:
-
запускает тесты;
-
запускает статический анализ;
-
прогоняет форматирование в режиме проверки;
-
складывает отчёты в
results/checks/**.
Так и люди, и агенты видят историю прогонов в одном месте.
40-code-review занимается автоматизированным ревью. Он:
-
смотрит на diff;
-
подсвечивает спорные места;
-
предлагает улучшения;
-
пишет отчёты в
results/reviews/**.
Это не замена человеческому ревью, но хороший фильтр «очевидных косяков».
Этап 50: документация
На этом этапе работает один, но очень полезный агент — 50-docs-update.
Его задача — привести docs/** в соответствие с реальностью. Для этого он:
-
читает ТЗ и домен в
inputs/**; -
смотрит на архитектуру в
inputs/design/**; -
анализирует код и результаты проверок (
results/**); -
помогает создать или обновить документы в
docs/.
На практике это означает, что документация:
-
не отстаёт от кода на полгода;
-
не живёт где-то в отдельной вики;
-
может регулярно обновляться в пару шагов через агента.
Этап 60: релизы и деплой-пакеты
Финишная часть конвейера.
60-release-build собирает релизный слепок проекта:
-
по заданному диапазону коммитов;
-
с раскладкой по файлам в
packages/releases/**; -
с README внутри, где описано, что в релиз вошло.
60-deploy-bundle-build превращает этот слепок в деплой-пакет:
-
складывает всё нужное в
packages/deploy/**; -
исключает лишнее (
vendor,node_modules,.envи т.п.); -
добавляет инструкции по развертыванию.
То есть результат работы агентов — это не только «красивый код», но и понятный, воспроизводимый пакет, который можно отнести на сервер или отдать CI/CD.
Папки: что где лежит и как с этим живут агенты
Чтобы агенты работали осмысленно, у workspace есть несколько опорных папок. Каждая отвечает за свою часть картины.
Папка inputs/: входные данные для ИИ и команды
inputs/ — это всё, что отвечает на вопрос «что мы делаем и в каком мире»:
-
ТЗ и постановки (
requirements/); -
глоссарий, сущности и бизнес-правила (
domain/); -
архитектурные решения (
design/); -
батчи и
pipeline.json(batches/); -
служебные промпты и данные (
prompts/,data/).
Здесь работают в основном агенты уровней 10 и 20. Если упростить, inputs/ — это текстовая зона аналитики и архитектуры, удобная и для людей, и для ИИ.
Папка docs/: документация по проекту
docs/ отвечает за то, что обычно живёт в Confluence или Notion: обзоры, гайды, инструкции.
Сюда попадает:
-
обзор проекта и подсистем;
-
руководства для разработчиков;
-
практические инструкции «как запускать/обновлять/поддерживать».
Эта папка тесно связана с агентом 50-docs-update. Он читает ТЗ, домен, архитектуру, код и логи и помогает держать содержимое docs/ в актуальном состоянии. Благодаря этому документация перестаёт быть «кладбищем старых описаний» и становится живой частью процесса.
Папка rules/: договорённости команды
rules/ — место для правил и стандартов:
-
как делим код по слоям;
-
где живёт бизнес-логика, а где инфраструктура;
-
какие требования к производительности считаем разумными;
-
как подходим к релизам и выкладке.
На rules/** смотрят и разработчики, и агенты 30-code-build, 40-*. Когда вы меняете эти файлы, вы фактически меняете «конституцию» проекта, и ИИ начинает работать по новым правилам вместе с командой.
Папка results/: история запусков и проверок
results/ — это дневник того, что уже происходило с проектом.
Здесь лежат:
-
отчёты тестов и статического анализа (
checks/); -
заметки по выполненным батчам (
batches/); -
отчёты автоматизированного ревью (
reviews/).
Эта папка полезна всем:
-
разработчик может быстро посмотреть, когда и почему падали проверки;
-
агенты могут опираться на эту историю и не повторять одни и те же шаги.
Папка packages/: релизы и деплой-пакеты
packages/ отвечает за поставку.
Внутри неё:
-
releases/— релизные слепки по коммитам; -
deploy/— готовые деплой-пакеты.
Здесь работает в основном 60-я группа агентов. Эти папки помогают отделить «то, над чем мы сейчас работаем» от «того, что реально уехало или уедет на сервер».
Типичный рабочий цикл в этом workspace
В реальной жизни у меня получается примерно такая дорожка:
-
Сформулировать задачу по-человечески. Просто описываю, что нужно сделать и для кого.
-
Оформить требования через
10-requirements-create. Передаю сырые тексты агенту и получаю ТЗ вinputs/requirements/**. -
Описать предметную область через
10-domain-describe. Агент собирает глоссарий, сущности и правила вinputs/domain/**. -
Спланировать архитектуру и батчи (
20-architecture-planи20-batches-plan). После этого появляется архитектурный скелет и понятный список батчей вinputs/design/**иinputs/batches/**. -
Подготовить каркас и инструменты качества. Либо использую уже готовый
copilot-workspace-laravel, либо поднимаю новый проект через30-laravel-app-create. Затем запускаю40-tools-init, чтобы привести phpstan, тесты и линтеры в рабочее состояние. -
Реализовывать фичи батчами через
30-code-build. Берём по одному батчу изpipeline.json, работаем вместе с агентом, фиксируем результаты вresults/**. -
Прогонять проверки и ревью (
40-tests-run,40-code-review). Смотрим, что падает, что можно улучшить, и не держим это только в локальных логах. -
Обновлять документацию через
50-docs-update. Когда фича или блок работ готовы, агент помогает привестиdocs/**в актуальное состояние. -
Собирать релизы и деплой-пакеты через
60-release-buildи60-deploy-bundle-build. На выходе — понятный релизный слепок и готовый деплой-пакет вpackages/**.
При этом:
-
код, требования, домен, документация и релизы живут в одном репозитории;
-
агенты знают, какие папки читать и куда писать;
-
разработчик всегда может зайти в нужную директорию и увидеть, что происходит.
Как попробовать
Если хочется потрогать всё это руками, минимальный сценарий такой:
-
Клонировать репозиторий https://github.com/zabarov/copilot-workspace-laravel.
-
Выполнить базовую настройку Laravel в корне:
composer install
cp .env.example .env
php artisan key:generate
-
Открыть проект в Visual Studio Code с включённым GitHub Copilot / Copilot Chat. IDE сама увидит
.github/copilot-instructions.mdи.github/agents/*.agent.mdи покажет агентов в интерфейсе. -
Для старта можно:
-
если вы только знакомитесь — вызвать
00-help-assistantи просто спросить «с чего нам начать в нашей ситуации?»; -
если уже есть конкретная задача — начать с
10-requirements-createи оформить ТЗ; -
если хотите сразу «навести порядок» — позвать
40-tools-init, а потом50-docs-update, чтобы привести в чувства инструменты качества и документацию.
-
Немного про эксперимент и обратную связь
Для меня этот workspace — не «готовый продукт», а живой эксперимент. Я продолжаю его развивать, менять структуру, допиливать агентов и инструкции по мере того, как он используется в реальных задачах.
Если у вас появятся идеи, что можно улучшить, чего не хватает или что можно сделать проще — буду рад обратной связи:
-
в комментариях к статье;
-
в issue или pull request’ах в репозитории.
Такие штуки лучше всего развиваются, когда в них смотрят сразу несколько команд и делятся опытом.
Автор: zabarov


