Приведу простой пример как можно организовать агентный процесс и использовать возможность СС запускать процессы параллельно.
Исходная задача: проект на TypeScript. Для него мы делаем typecheck и lint. Typecheck - это запусе typescript компилятора в режиме проверки кода (без генерации js бандла), lint - это запуск линтера, который используется в проекте. Часто это ESLint, для next.js это next lint, я последнее время для ts настраиваю biome.
➡️ Рассмотрим как тут можно кое-что ускорить за счёт параллельных задач. Первое: получить результаты компилирования и линтинга. Очевидно, что утилиты можно запустить параллельно, это мы пропишем "ручную".
Для запуска будем использовать специализированного агента, назовём "qa-agent". В контексте агента указываем:
- соберём из меморибанка сведения о тех стеке проекта, чтобы агент умел запускать утилиты,
- знал про конфиги и в случае чего мог поправить конфиг.
- знал какие папки нужно игнорировать (для ts это dist папки со сгенерированным компилятором js)
- определитесь - lint для тестов в проекте вы делаете? а компиляцию? и пропишем это в агенте;
- (на самом деле главная компетенция агента - умение запускать тесты, но чтобы не разводить слишком большую стаю агентов мы его и для компиляции с линтингом задействуем)
Итак, запуск агентов параллельно нужно сопроводить фразой: "запускай агенты
qa-agent для выполнения Typecheck и lint проекта параллельно, для этого вызывай команду запуска двух агента в ОДНОМ своём сообщении."Суть магии этой фразы - добиться чтобы модель сделала "параллельный вызов" tools. Технически это происходит когда модель в одном своём ответе запрашивает вызов нескольких инструментов. СС поддерживает такую штуку и запустит агентов параллельно.
➡️ Дальше интереснее: получив результаты компилятора и линтера можно поручить модели спланировать параллельную обработку результатов - мы будем фиксить проблемы параллельными агентами.
❓ Какие есть возможности параллельной обработки проекта? принципиально их всего две:
- развести "области работы" и параллельно обрабатывать непересекающиеся части проекта; это самый простой и беспроблемный способ - если задача с понятной "зоной изменения", и мы знаем какие файлы будут изменяться, то можем поручить исправление разных файлов разным агентам. Этот способ позволяет избежать стадии решения конфликтов при "вливании" результатов работы в репозиторий.
- если зоны работы агентов пересекаются - необходимо использовать изоляцию на уровне Git: локально мы можем использовать worktree для каждого агента, или классические branch. Детали зависят от схемы работы с git в вашем проекте. Это может быть стандартные бранчи main -> develop -> (feature branch). По завершении работы мы мержим worktree/branch обратно в develop - конечно, все это делают агенты.
Для нашей задачи с исправлением ошибок компилятора / lint подходит первый вариант: ведь мы знаем списки проблемных файлов.
Мы инcтруктируем оркестратора сгруппировать проблемы с компиляцией и линтом по файлам, и распределить их между 5-7 агентами таким образом, чтобы файлы не пересекались и агенты не мешали друг другу.
Запускать агенты мы будем также, параллельно. Агент нужен будет для написания кода, "code-writer":
- знает структуру кода в проекте
- знает стандарты кодпирования
- знает как оформлять jsdoc, какие кросс-ссылки проставлять
Запускаем аналогично: даём инструкцию вызывать всех агентов в ОДНОМ сообщении оркестратора.
➡️ Итак - на верхнем уровне у оркестратора одна задача - запускать агентов, получать списки файлов и провести планирование работы так, чтобы разделить "зоны" между агентами, а в конце отчитаться о результатах. Все детали о запуске компилятора/линтера и требованиях к написанию кода будут внутри промптов субагентов.
🟢 Такая штука работает вполне надёжно и может быть запущена как отдельное агентское воркфлоу через claude code sdk/cli, можно даже по крону (ночью?).
#post
@deksden_notes

