Флот ИИ-агентов на домашнем Proxmox: как они ведут заметки и кто за ними следит

Некоторое время назад у меня на домашнем 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-сервер, которым занимается другой, на деле одна и та же инфраструктура, просто с двух концов. Такую находку он либо пишет текстом хозяину домена, либо заносит в собственную заметку, что-то вроде карты пересечений. Она есть только у него.

Эту работу креатор делает по запросу или время от времени. Тут нужно думать, а не копировать файлы, поэтому в таймер, как синхронизацию заметок, её никто не засовывал.

В остальном у креатора те же правила, что и у всех: свои заметки пишет в свою папку, чужие данные только читает.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *