Как я хотел одного AI-агента, а получил целую деревню

Как я хотел одного AI-агента, а получил целую деревню

Всё началось с простого желания: чтобы AI-агент мог потихоньку развивать мои проекты, пока я занят. Поставил задачу, ушёл, вернулся — и получил готовый результат. За неделю из этой идеи выросла мультиагентная система с шиной сообщений, мониторингом, делегированием задач и собственной веб-админкой. Система, которая в значительной мере построила сама себя.

Шаг первый: просто агент

Изначально я рассматривал OpenClaw, но быстро переключился на Claude Code из-за проблем с безопасностью. У него оказалась своя сложность: он запрашивал подтверждение на каждое действие — даже на чтение файла или сетевой запрос.

Я нашёл флаг --dangerously-skip-permissions, но и тогда агент не мог менять свои конфиги. Приходилось сидеть рядом и вручную подтверждать действия. Вместо «поставил задачу и ушёл» получалось «сидишь и жмёшь Enter».

Я запустил агента на боевом сервере с ограниченными правами, дал доступ к блогу и убедился, что он ведёт себя адекватно — но только при условии, что я рядом.

Шаг второй: tmux и systemd

При выходе из терминала или перезагрузке агент терял контекст. Решение нашлось быстро: tmux. Одна SSH-сессия работала бесконечно, даже если я отключаюсь.

Чтобы не вводить флаги каждый раз, я обернул агента в systemd — теперь он запускался как сервис, сам подтягивал параметры и контекст из файлов.

На этом этапе у меня уже был автономный агент, устойчивый к перезагрузкам. Но он всё ещё был один.

Шаг третий: два агента решают проблему друг друга

Ключевое открытие: если запустить два экземпляра Claude Code, они могут подтверждать действия друг друга. Один запрашивает доступ — второй входит в его терминал и нажимает Enter.

Благодаря tmux и взаимному запуску не нужен API-ключ. Достаточно одной подписки на Claude Max. Это критично: API быстро сжирает токены, а подписка — дешевле и эффективнее.

Шаг четвёртый: Telegram и первые грабли

Терминал — неудобный интерфейс. Я подключил Telegram-бота через официальный MCP-сервер, но столкнулся с ограничениями: бот не может писать первым, а два бота не могут общаться между собой.

Тогда я подключил второго агента через Telethon к юзер-аккаунту, чтобы он мог тестировать бота и заходить в чаты. Но два клиента начали конфликтовать: polling ломался, сообщения терялись.

Я потратил время на написание собственного MCP-плагина, но Claude Code плохо обрабатывал неофициальные плагины, добавляя странные флаги вроде --dangerously-что-нибудь-там.

Шаг пятый: неожиданное открытие

Решение оказалось простым: в tmux можно отправлять текст командой send-keys. А в Claude Code — просто выполнять claude {текст}.

Сначала это работало нестабильно: в терминал попадала надпись [Pasted 11 lines of text], и нужно было вручную нажимать Enter. После доработки — заработало надёжно.

Теперь не нужно было мучиться с MCP. Я мог отправлять сообщения напрямую в терминал. Для двух агентов я сделал простую шину: она принимала сообщения от бота и юзер-аккаунта и перенаправляла каждому адресату.

Шаг шестой: от шины к деревне

Когда появилась шина, стало понятно: количество агентов можно масштабировать. Если задачу передавать сразу конкретному исполнителю, основной агент остаётся свободным. Так зародилась полноценная мультиагентная система.

Шину я переписал на Bun + Hono + Redis Streams. Всего три зависимости, ноль лишнего. Redis Streams с consumer groups даёт at-least-once delivery: сообщения хранятся до подтверждения, у каждого агента своя группа — ничего не теряется.

Двухуровневая безопасность: admin-токен для управления, per-agent токены для обычных операций. Invite-токены — одноразовые, с TTL в час. Поле from подставляется автоматически по токену — агент не может выдать себя за другого.

Три режима маршрутизации: direct (конкретному агенту), broadcast (всем), role-based (по ролям). SSE-стрим для real-time, pub/sub через topic channels, файлы — через shared storage.

Шаг седьмой: нейминг

Мне надоело объяснять: «сейчас нужно передать задачу оркестратору, чтобы он отправил её мониторинговому агенту». Я решил дать агентам имена, как настоящим коллегам.

Выбрал лор Наруто. Во-первых, сериал про командную работу и яркие характеры — роли легко привязать к архетипам. Во-вторых, японские имена не спутаешь с русскими: в смешанном взаимодействии сразу ясно, кто человек, а кто — AI.

Шина стала Конохой — Скрытой Деревней Листа. Агенты получили имена:

  • Наруто — оркестратор. Глава деревни, распределяет задачи.
  • Саске — агент на юзер-аккаунте Telegram. Ходит в чужие чаты, выясняет детали. Автономный «одинокий волк».
  • Итачи — консольный Claude Code в WSL. Действует скрытно, появляется только для серьёзных задач.
  • Шикамару — персональный советник (Claude Desktop на Opus 4.6). Стратег, ленивый, но умный — как в аниме.

Шаг восьмой: инфраструктура начинает расти

Поскольку система часто падала, пришлось создать агентов для поддержки:

  • Какаши — тимлид на Sonnet. Помощник — Гай, для ускорения рутинных задач.
  • Шино — QA-лид. Управляет «жуками» — так и я передаю ему баги.
  • Хината — запускает тесты. У неё бьякуган — видит всё.
  • Ибики — аудитор безопасности. Как в сериале — начальник допросов.
  • Киба — мониторит систему и принимает решения. Акамару, простой скрипт без AI, собирает для него данные. Работают в паре.
  • Мирай — пограничница, ходит в сторонние системы за данными.
  • Дзирайя — фиксирует всё, анализирует, ведёт базу знаний. Как в лоре — подглядывает и пишет книгу.

Агенты получили доступ к корпоративным системам: базе знаний Yonote, Яндекс Трекеру, Яндекс Календарю, CRM Битрикс24.

Шаг девятый: менеджмент, как у людей

Самое неожиданное открытие: менеджмент AI-агентов работает точно так же, как и с живыми людьми.

Агенты сначала всё делали сами. Наруто не делегировал — ему проще было выполнить задачу, чем объяснить другому. Какаши повторил ту же ошибку: не отдавал задачи Гаю. Классическая проблема начинающего тимлида.

Делегирование — не естественное поведение ни для людей, ни для моделей. Чтобы оно появилось, нужно явно прописать это как правило и обучать через итерации.

Что получилось

К концу недели система почти полностью построила себя:

  • Шина сообщений на Bun + Hono + Redis Streams с at-least-once delivery, invite-токенами и role-based маршрутизацией.
  • Двенадцать агентов с чётким разделением ролей.
  • Веб-админка: видно состояние и фрагмент лога каждого агента.
  • Система алертов.
  • Летопись Дзирайи.
  • Поиск по сообщениям и напоминалки через Саске.

Всё это выросло из одного агента за неделю. 67 коммитов, релиз v0.1.0.

Что не получилось (пока)

Я хотел, чтобы агенты звонили по телефону и ходили на произвольные сайты. Но капча — не шутка. Даже stealth-браузер не проходит. Это отложено.

Мечта: агенты с аватарами ходят на созвоны за меня. Следующая итерация.

Мультиагентные системы проще вырастить, чем спроектировать. Каждый компонент Конохи появился как ответ на проблему, а не как часть заранее нарисованной схемы. Это жизнеспособнее, чем диаграммы.

tmux + send-keys оказался надёжнее MCP. Иногда самое простое решение — лучшее. Проще отправить текст в терминал, чем писать плагины.

Два агента решают human-in-the-loop. Один подтверждает действия другого — и человек не нужен.

Подписка вместо API экономит деньги. Агенты работают в рамках Claude Max, без API-ключей и доплат.

Менеджмент AI-агентов как у людей. Делегирование не приходит само — его нужно учить.

Нейминг имеет значение. Имя с характером делает общение интуитивным. «Передай Саске» понятнее, чем «отправь сообщение агенту мониторинга».

Читать оригинал