Самохостный AI-агент на почте, systemd и LLM
В основе 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 с лимитами.
Читайте также
Как AI-агент и локальные модели помогли за вечер разобрать 36 000 фотографий и почту с 2005 года
Сколько железа нужно ИИ-агенту: как считали ресурсы для on-premise LLM и почему калькуляторы ошиблись в 5 раз
Стоит ли использовать Qwen: качество и цена
Telegram Bot API 10.1: революция форматирования
Как подключить Obsidian к LLM через MCP и перестать копировать заметки вручную
- Maildir как event store для AI-агента: AI-агента можно строить так, чтобы каждое событие было обычным RFC 5322-письмом, а переход между состояниями — доставкой письма в другой Maildir. Такой подход даёт файловую очередь, долговременный архив, простую отладку через grep/mutt/notmuch и отказоустойчивость без отдельного брокера сообщений.
[AI-агенты / Архитектура]
Зарегистрированные пользователи видят только два тезиса.
Зарегистрироваться
Threlium — самохостный AI-агент, собранный из почты, systemd, Maildir, notmuch и LLM. Он принимает запросы из Email, Telegram или Matrix, хранит ход рассуждений как письма и может работать с памятью, инструментами и shell-командами.