Некоторое время назад у меня на домашнем Proxmox завелась ещё одна ВМ, и на ней теперь живёт целый выводок ИИ-агентов на базе Claude Code. Их там с десяток, и у каждого своё узкое дело: один гоняет ML-ноды, другой следит за VPN, третий возится с WordPress (да, вот прямо эта статья написана и опубликована таким агентом), четвёртый отвечает за домашнюю инфраструктуру и Mikrotik, и так далее. Расскажу, как это всё устроено изнутри…
Одна ВМ, куча агентов
Схема простая: на ВМ поднят Claude Code, и под каждую задачу заводится отдельный агент со своей рабочей директорией, своим tmux и своим файлом с ролью. Агент живёт в отдельной tmux-сессии и подключается через remote control. Можно зайти с телефона или ноутбука и «дописать» задачу, а можно просто кинуть агенту сообщение и уйти пить чай.
За то, чтобы всё это не разваливалось, отвечает systemd-watchdog. Пока всё в порядке, он агентов не трогает, но реагирует на две вещи:
- у агента упал tmux-процесс: перезапускает сразу;
- отвалился интернет: тогда все агенты одновременно виснут на разорванном соединении к API. Watchdog ждёт, пока API снова станет доступен (несколько неудачных проверок подряд он считает аварией), и перезапускает разом всех, включая главного.
До watchdog’а любой глюк с интернетом означал, что мне нужно руками идти и перезапускать десяток сессий. Теперь всё поднимается само, а мне ещё и прилетает отчёт.
Как агенты ведут заметки
Вот это оказалось самым интересным. У каждого агента есть два слоя памяти, и устроены они по-разному.
Memory — рабочая память конкретного агента между сессиями: как он должен себя вести, что ему уже говорили, какие грабли уже собраны в его домене. Другим агентам её читать незачем, это его личный опыт.
Notes пишутся уже для всех. Агенты ведут заметки в формате Obsidian по единому стандарту: markdown с фронтматтером, обязательный тег agent/имя, одинаковые правила именования файлов (у индекса префикс, обычные заметки в Title Case, у логов дата впереди). Раз в 10 минут systemd-таймер собирает notes/ каждого агента на NAS в один общий Obsidian-вольт, который я потом читаю с телефона или мака через Synology Drive.
Синхронизация идёт строго в одну сторону. Источник правды — папка агента, сводный вольт только зеркало. Если я поправлю что-то прямо в вольте на NAS, следующий же прогон таймера это затрёт. Так сделано специально: у каждой заметки один хозяин, и путаницы «кто последний правил» не возникает.
Ещё одна приятная мелочь: при каждой синхронизации гоняется линтер битых [[вики-ссылок]] и складывает отчёт прямо в вольт. Obsidian ищет ссылку по имени файла, а в какой папке он лежит, ему всё равно. Поэтому ссылки между заметками разных агентов в общем вольте работают, хотя каждый агент пишет только в свою песочницу.
А что делает «креатор»
Самого первого агента на ВМ я зову «креатором». Бизнес-задач у него нет, он следит за самой ВМ: поднимает новых агентов, настраивает им сеть и доступы, чинит инфраструктуру.
Есть у него и вторая функция, поинтереснее. Креатор единственный читает общий вольт целиком, по всем агентам сразу. Именно читает: править чужие заметки ему запрещено. Он ищет связи между доменами. Например, домашний роутер, которым занимается один агент, и облачный VPN-сервер, которым занимается другой, на деле одна и та же инфраструктура, просто с двух концов. Такую находку он либо пишет текстом хозяину домена, либо заносит в собственную заметку, что-то вроде карты пересечений. Она есть только у него.
Эту работу креатор делает по запросу или время от времени. Тут нужно думать, а не копировать файлы, поэтому в таймер, как синхронизацию заметок, её никто не засовывал.
В остальном у креатора те же правила, что и у всех: свои заметки пишет в свою папку, чужие данные только читает.
