Самохостный AI-агент на почте, systemd и LLM

Threlium — самохостный AI-агент, собранный из почты, systemd, Maildir, notmuch и LLM. Он принимает запросы из Email, Telegram или Matrix, хранит ход рассуждений как письма и может работать с памятью, инструментами и shell-командами.

В основе Threlium лежит идея «событие = письмо»: любое действие системы превращается в RFC 5322-сообщение, переходы между состояниями идут через Maildir, а notmuch индексирует все события как общий архив. Очередь, event store и история работы агента получаются из обычных файлов на диске, без отдельного брокера сообщений и внешней базы.

Логика агента оформлена как конечный автомат: вход попадает в ingress, затем enrich добавляет контекст из LightRAG и истории треда, reasoning вызывает LLM, а дальше модель выбирает маршрут через tool calls. Текстовый ответ LLM не парсится как команда: намерение валидируется JSON Schema, после чего письмо отправляется в следующую стадию — egress, память, CLI-политику или субагента.

Оркестрация сделана через systemd --user: отдельный unit на стадию и thread_id работает как мьютекс, ошибки перезапускаются через Restart=on-failure, а лимиты ресурсов задаются cgroup-механизмами. Вокруг этого собраны CLI-песочница с HITL-подтверждением, трёхслойная память, Ansible-деплой, e2e-тесты через Docker/WireMock/GreenMail и read-only веб-админка на Cockpit, Roundcube, Caddy и Dovecot.

Коротко

  • Threlium хранит каждое событие как RFC 5322-письмо в Maildir, а notmuch превращает эти папки в общий индекс и архив рассуждений.
  • FSM-стадии включают ingress, enrich, reasoning, egress, память, CLI-политику, CLI-исполнение, субагентов и финальный archive.
  • LLM в reasoning не выбирает маршрут свободным текстом: она должна вернуть tool call, который затем валидируется через JSON Schema.
  • systemd --user отвечает за воркеры, перезапуски, лимиты ресурсов, последовательную обработку одного треда и параллельность разных тредов.
  • Автор описывает работающий минималистичный подход: около 6 тыс. строк Python без Kubernetes, Celery, RabbitMQ и production Docker Compose.

FAQ

Зачем автору понадобился собственный AI-агент вместо обычного облачного LLM-ассистента?

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

Как Threlium использует почту не только как канал связи, а как внутреннюю модель данных?

Каждое событие становится MIME-письмом, а переход между состояниями — доставкой письма в другой Maildir. Так Maildir работает и как очередь, и как event store.

Как в системе ограничивают выполнение shell-команд агентом и снижают риск опасных действий?

Стадия cli_intent решает, разрешить команду, запретить её или спросить человека. Исполнение вынесено в cli_exec и задумано как песочница через systemd-run с лимитами.

Читайте также

  1. Как AI-агент и локальные модели помогли за вечер разобрать 36 000 фотографий и почту с 2005 года
  2. Сколько железа нужно ИИ-агенту: как считали ресурсы для on-premise LLM и почему калькуляторы ошиблись в 5 раз
  3. Стоит ли использовать Qwen: качество и цена
  4. Telegram Bot API 10.1: революция форматирования
  5. Как подключить Obsidian к LLM через MCP и перестать копировать заметки вручную
Ключевые инсайты из новости (по версии ChatGPT)
  • Maildir как event store для AI-агента: AI-агента можно строить так, чтобы каждое событие было обычным RFC 5322-письмом, а переход между состояниями — доставкой письма в другой Maildir. Такой подход даёт файловую очередь, долговременный архив, простую отладку через grep/mutt/notmuch и отказоустойчивость без отдельного брокера сообщений.
    [AI-агенты / Архитектура]
Для получения полного доступа оформите подписку PubMag PRO.
Зарегистрированные пользователи видят только два тезиса.
Зарегистрироваться
Инсайты автоматически генерируются с помощью искусственного интеллекта на основе текста статьи.
← Назад в лентуЧитать оригинал →
✈️ Подписывайтесь на мой Telegram-канал — там еще больше интересного про AdTech, MarTech, AI и многое другое!