Мой набор трюков для работы с AI-агентами
По работе я, как и многие сейчас, довольно много пользуюсь Claude Code и Cursor - для написания кода, ревью PR’ов и расследования всяческих проблем. В какой-то момент агентских сессий развелось столько, что главным ограничением во всей этой истории оказался я сам: агенты что-то делают, а потом сидят и ждут, пока я до них доберусь.
Расскажу, как я автоматизировал работу с ними. Мой подход продолжает эволюционировать, так что в какой-то момент можно будет написать апдейт.
Bottleneck
Довольно быстро выяснилось, что больше 5-7 сессий одновременно мне трекать сложно. Где-то нужно ответить на вопрос, где-то посмотреть результат, где-то дать аппрув на следующий шаг. Если задачи сложные, то пока разбираешься с одной, успеваешь забыть, что было в остальных: зачем мы это делали, о чём договорились и почему вообще агент копает в этом направлении.
Всегда можно запустить еще агентов, но от этого очередь на мое внимание только вырастет. Нужно было как-то упростить себе жизнь: меньше перечитывать переписку и быстрее понимать, чего от меня хотят.
Самый простой приём - переключить общение с агентами на язык, на котором быстрее читаешь, и для меня это русский. У меня нет никаких проблем читать по-английски, но просматривать текст по диагонали и выхватывать главное на родном языке всё-таки немного быстрее. На одном сообщении экономия небольшая, но к разным задачам приходится постоянно возвращаться в течение дня.
Терминал, заточенный под агентов
Для организации сессий я сначала пару месяцев пользовался Herdr - терминальным мультиплексором навроде tmux, но с “лампочками” для индикации состояния агентов. Недели 3-4 назад я перешёл на Agterm от Umputun из Радио-Т, и это совсем другой уровень комфорта.
Agterm - это opinionated-терминал на базе Ghostty, нативный для macOS. Он интегрируется с разными агентскими харнессами и показывает те же “лампочки” агентских статусов, что и Herdr. Но для описанной ниже схемы важнее другая его фича, простая и одновременно очень мощная.
У Agterm есть CLI, через который можно получать список сессий, читать содержимое окон и сплитов, отправлять туда сообщения и создавать новые сессии. Это позволяет агенту полностью управлять терминалом и другими агентами, которые в нем запущены.
В комплекте к терминалу идут скиллы, которые объясняют агентам, как работать с терминалом. Через эти скиллы конфигурация терминала делается тоже полностью агентом - я не использовал Ghostty до этого и даже не пытался разобраться, как его конфигурить, а просто описывал свои хотелки в Claude Code и получал то, что хочу. Например, Agterm из коробки никак не восстанавливает агентские сессии, чего после переезда с Herdr мне не хватало. Попросил Claude Code настроить похожее поведение и за несколько итераций получил нужный результат. Так терминал можно постепенно допиливать под себя, не дожидаясь отдельной фичи от автора - главное иметь достаточно хуков, на которые можно завязаться.
Начальник начальника
Следующий шаг упрощения процесса - отделить координацию агентов от решений, которые действительно требуют моего внимания. Собрать ответы из нескольких сессий и передать исполнителю уточнение вполне может другой агент.
Я завёл отдельную сессию Claude Code и сделал её координатором. Она через CLI Agterm управляет остальными сессиями: ставит задачи, читает ответы, собирает результаты и следит за тем, кто чего ждёт. При этом я общаюсь в основном с координатором.
Получился небольшой виртуальный офис, в котором я - менеджер менеджера :)
Вместо нескольких длинных портянок текста координатор выдаёт короткое саммари текущей ситуации: что сделали, где возникли проблемы, каким сессиям нужно моё решение и в чем у них вопросы. Я отвечаю ему, а он разворачивает мой ответ в подробный промпт для исполнителя, отправляет его в нужную сессию и через некоторое время возвращается с результатом. А какие промпты он им пишет - приятно посмотреть: подробные, структурированные и на несколько параграфов там, где я бы написал пару строк.
При этом исполнители никуда не спрятаны. Если саммари недостаточно, я могу перейти в конкретную сессию терминала, посмотреть полный диалог и при желании написать агенту напрямую. Такой skip-level: обычно общаюсь через менеджера, но никто не мешает заглянуть к исполнителю. Обычно саммари хватает, но изредка проще открыть полный диалог и разобраться самому.
Feedback loop
Поскольку каждая задача живёт в своей отдельной сессии, контекст и полезные находки могут пропасть с ее закрытием. Следующий агент потом заново выясняет, как устроен проект, или может начать тупить там, где уже тупил предыдущий. Чтобы переносить опыт между сессиями, я добавил два этапа из обычной командной разработки: написание ретро-доков после выполнения задачи и периодический их разбор для улучшения процесса.
Перед закрытием сессии-исполнителя координатор просит агента провести небольшой postmortem: где он тупил или пошёл не туда, на что потратил лишние ходы, какой информации ему не хватало, и что помогло бы следующей сессии не наступить на те же грабли. Результат агент коммитит в отдельный локальный репозиторий.
Примерно раз в неделю мы с координатором проводим майнинг ретро-доков. Он просматривает накопившиеся ревью, объединяет повторяющиеся пункты и предлагает, что с ними делать. Какие-то стоит добавить в CLAUDE.md, для других - создать или обновить skill, что-то сохранить в памяти. А что-то просто выкинуть, потому что слишком нишевое и вряд ли когда-то повторится, а контекст забьет. Помимо добавления нового, во время ревью Claude смотрит и на то, что можно подчистить: старые правила, устаревшие записи в памяти, дублирующиеся или уже ненужные инструкции в CLAUDE.md.
В процессе всплывают не только советы о том, как агентам лучше работать, но и полезные знания о проектах, инфраструктуре и наших внутренних процессах, которые раньше нигде не были записаны и скорее являются tribal knowledge. За 3-4 недели у меня сложилось ощущение, что этот feedback loop действительно работает: агенты меньше тупят и путаются, реже приходится объяснять вещи заново, при этом не надо пытаться заранее подробно написать правильный CLAUDE.md.
Как пример, недавно мы с коллегой разбирали проблему нашего приложения в k8s. Агент с пары слов понял, в какой кластер / неймспейс нужно сходить и на что именно там посмотреть. Коллега заметно этому удивился, а мне было приятно увидеть, что накопленные знания действительно работают :)
Дашборд для моих решений
Когда сессий стало больше десятка, обнаружилось следующее ограничение. Координатор пишет, что по какой-то задаче в Jira нужно выбрать вариант A, B или C, а я уже не помню, что это за задача и почему там вообще возник выбор - тем более, что задачу я ему поставил в формате “посмотри на тикет ABCD-123”.
Я попросил его сделать HTML-дашборд со списком открытых сессий и всего, что ждёт моего внимания. Для каждой задачи он дополнительно генерирует отдельную страницу с полным контекстом: о чём задача, анализ ситуации, что уже сделали, какие решения приняли и что конкретно нужно от меня. Если релевантно, туда же попадают сообщения для копи-пасты в слак и джиру в моем стиле.
В недавних версиях Agterm появилась возможность отображать HTML прямо внутри терминала, так что теперь слева в сплите у меня координатор, справа - его дашборд. На дашборде и страницах с вопросами есть поля ввода и варианты выбора. Я отмечаю нужный вариант, добавляю комментарии и нажимаю кнопку отправки. Всё это уходит координатору одним структурированным сообщением: по такой-то задаче выбрал вот это, по другой - вот это, и еще вот здесь есть комментарий. В итоге я просто прохожусь по вопросам и отвечаю там же, где читаю контекст, без прыжков между сессиями и копи-пасты.
Парное программирование
Последний мой эксперимент - парное программирование между агентами. Для этого я научил координатора промптить не только Claude Code, но и Cursor, где доступны модели разных провайдеров, включая OpenAI и Google. Модели от разных провайдеров здесь - ключевой момент, потому что Sonnet и Opus натренированы примерно одинаково на примерно одинаковых данных. Хочется, чтобы модели замечали ошибки друг друга, а не повторяли одни и те же.
Для достаточно сложной задачи координатор запускает две сессии в соседних сплитах: Claude Code и Cursor с выбранной моделью. Оба получают задачу и сначала договариваются, кто будет имплементировать решение, а кто - ревьюить. Дальше исполнитель заканчивает очередной шаг и коммитит изменения, а ревьюер сразу смотрит коммит, запускает тесты и даёт фидбек. Исполнитель исправляет замечания, и они переходят к следующему шагу.
Здесь расчёт на то, чтобы замечать ошибки и лишнюю сложность по ходу работы, пока агент не успел написать поверх них всё остальное. Переделать один шаг проще, чем потом распутывать половину реализации.
В конце мы всё равно запускаем ревью через revmux, о котором ниже. И с таким подходом он находит меньше всякого - часть проблем уже успели поймать и исправить по дороге. Пока это субъективное наблюдение, но первые впечатления положительные: кажется, меньше и ошибок, и лишней сложности.
Сам этот парный workflow я собрал с Claude Code примерно за полчаса-час - объяснил, чего хочу, и немного поитерировал.
Ещё несколько инструментов
Раз уж речь зашла о стеке инструментов имени Umputun, упомяну еще три, которыми пользуюсь.
revmux - для агентского ревью-цикла в конце разработки. Несколько ревьюеров смотрят на результат с разных сторон, после чего их находки объединяются и проверяются. Исполнитель исправляет замечания, затем можно провести следующий раунд. Это другой масштаб проверки, чем в парном программировании: там ревьюер следит за очередным шагом, а здесь множество агентов смотрят на всю реализацию целиком.
revdiff - для моих собственных замечаний к планам и коду. Открываю план или diff в терминале и оставляю аннотации у конкретных строк: здесь поправить комментарии, тут упростить логику, этот кусок переписать. Замечания возвращаются агенту в структурированном виде, вместе с привязкой к месту. Не нужно описывать в чате, какой именно абзац плана или участок кода я имею в виду.
ralphex - реализация Ralph Loop для выполнения длинного пошагового плана с ревью в конце. Он проходит по задачам, запускает проверки и фиксирует результат, а каждый шаг выполняется в свежей агентской сессии. Раньше я довольно много им пользовался, но сейчас, с auto-mode в Claude, всё меньше. Но сама идея полезна: явно записанный план и отметки о выполнении позволяют продолжать работу, не удерживая всю её историю и контекст в одном разговоре.
Для всех этих инструментов, конечно же, есть скиллы к Claude Code, что сильно упрощает настройку под себя.
Что в итоге
Почти каждый из описанных трюков может работать отдельно: координатору необязательно нужен дашборд, а делать ретро законченных задач можно и без координатора. Но вместе они у меня работают особенно хорошо - меньше приходится самому следить за всем происходящим и копировать информацию туда-сюда.
Строго говоря, Agterm тут тоже не обязателен. Примерно такую же схему можно собрать на tmux, а для общения между агентами использовать файлы как своего рода message bus: один записал сообщение, другой прочитал и ответил. Просто с Agterm всё это получается удобнее, нативнее и нагляднее.
Боттлнеком я на 100% быть не перестал, но решений от меня теперь требуется чуть меньше: мелкие недеструктивные решения, такие как перезапуск упавшего пайплайна, я разрешил координатору принимать самостоятельно. А там, где всё-таки нужен я, меньше времени уходит на перечитывание чата и попытки вспомнить, что мы тут вообще делаем.
В итоге у меня в терминале свой маленький офис, с менеджером, ретро и парным программированием. Осталось только не начать проводить им митинги ради митингов :)