sidebar_position: 9
title: "Matrix"
description: "Set up Hermes Agent as a Matrix bot"
lang: ru
Настройка матрицы
Hermes Agent интегрируется с Matrix, открытым федеративным протоколом обмена сообщениями. Matrix позволяет вам запустить собственный домашний сервер или использовать общедоступный, такой как Matrix.org — в любом случае вы сохраняете контроль над своими коммуникациями. Бот подключается через mautrix Python SDK, обрабатывает сообщения через конвейер агента Hermes (включая использование инструментов, память и рассуждения) и отвечает в режиме реального времени. Он поддерживает текст, вложения файлов, изображения, аудио, видео и дополнительное сквозное шифрование (E2EE).
Hermes работает с любым домашним сервером Matrix — Synapse, Conduit, Dendrite или Matrix.org.
Прежде чем приступить к настройке, вот что большинство людей хотят знать: как ведет себя Hermes после подключения.
Как ведет себя Гермес
Контекст
Поведение
DM
Гермес отвечает на каждое сообщение. @mention не требуется. У каждого DM есть своя сессия. Установите MATRIX_DM_MENTION_THREADS=true, чтобы запускать тред, когда бот @mentioned находится в личном сообщении.
Номера
По умолчанию для ответа Hermes требуется @mention. Установите MATRIX_REQUIRE_MENTION=false или добавьте идентификаторы комнат к MATRIX_FREE_RESPONSE_ROOMS для комнат с бесплатным ответом. Приглашения в комнаты принимаются автоматически.
Темы
Hermes поддерживает потоки Matrix (MSC3440). Если вы отвечаете в теме, Hermes сохраняет контекст темы изолированным от основной временной шкалы комнаты. Темы, в которых уже участвовал бот, упоминания не требуют.
Автоматическая обработка
По умолчанию Hermes автоматически создает цепочку сообщений для каждого сообщения, на которое отвечает в комнате. Это делает разговоры изолированными. Установите MATRIX_AUTO_THREAD=false для отключения.
Общие комнаты с несколькими пользователями
По умолчанию Hermes изолирует историю сеансов каждого пользователя внутри комнаты. Два человека, разговаривающие в одной комнате, не будут использовать одну стенограмму, если вы явно не отключите ее.
:::совет
Бот автоматически присоединяется к комнатам по приглашению. Просто пригласите пользователя Matrix бота в любую комнату, и он присоединится и начнет отвечать.
Модель сеанса в матрице
По умолчанию:
каждый DM получает свой сеанс
каждый поток получает собственное пространство имен сеанса
каждый пользователь в общей комнате получает свой собственный сеанс внутри этой комнаты
Это контролируется config.yaml:
group_sessions_per_user:true
Установите значение false только в том случае, если вы явно хотите, чтобы один общий разговор был доступен для всей комнаты:
group_sessions_per_user:false
Общие сеансы могут быть полезны для совместной комнаты, но они также означают:
пользователи разделяют рост контекста и стоимость токенов
длительная и трудоемкая задача, выполняемая одним человеком, может раздуть контекст остальных
бег одного человека в полете может прервать наблюдение другого человека в той же комнате
Упоминание и конфигурация потоков
Вы можете настроить упоминание и поведение автоматической многопоточности с помощью переменных среды или config.yaml:
matrix:require_mention:true# Require @mention in rooms (default: true)free_response_rooms:# Rooms exempt from mention requirement-"!abc123:matrix.org"auto_thread:true# Auto-create threads for responses (default: true)dm_mention_threads:false# Create thread when @mentioned in DM (default: false)
Или через переменные среды:
MATRIX_REQUIRE_MENTION=trueMATRIX_FREE_RESPONSE_ROOMS=!abc123:matrix.org,!def456:matrix.org
MATRIX_AUTO_THREAD=trueMATRIX_DM_MENTION_THREADS=falseMATRIX_REACTIONS=true# default: true — emoji reactions during processing
💡 Tip
Отключение реакций
`MATRIX_REACTIONS=false` отключает эмодзи-реакции жизненного цикла обработки (👀/ ✅/❌), которые бот публикует на входящие сообщения. Полезно для комнат, где события реакции шумные или не поддерживаются всеми участвующими клиентами.
:::примечание
Если вы обновляетесь с версии, в которой не было MATRIX_REQUIRE_MENTION, бот ранее отвечал на все сообщения в комнатах. Чтобы сохранить это поведение, установите MATRIX_REQUIRE_MENTION=false.
Это руководство проведет вас через весь процесс настройки — от создания учетной записи бота до отправки первого сообщения.
Шаг 1: Создайте учетную запись бота
Для работы бота вам понадобится учетная запись пользователя Matrix. Есть несколько способов сделать это:
Вариант А: зарегистрируйтесь на своем домашнем сервере (рекомендуется)
Если вы используете собственный домашний сервер (Synapse, Conduit, Dendrite):
Используйте API администратора или инструмент регистрации, чтобы создать нового пользователя:
# Synapse example
register_new_matrix_user-c/etc/synapse/homeserver.yamlhttp://localhost:8008
Выберите имя пользователя, например hermes — полный идентификатор пользователя будет @hermes:your-server.org.
Вариант Б: используйте Matrix.org или другой публичный домашний сервер
Перейдите в Element Web и создайте новую учетную запись.
Выберите имя пользователя для своего бота (например, hermes-bot).
Вариант C: использовать свою учетную запись
Вы также можете запустить Hermes как свой собственный пользователь. Это означает, что бот публикует сообщения от вашего имени — полезно для личных помощников.
Шаг 2. Получите токен доступа
Гермесу нужен токен доступа для аутентификации на домашнем сервере. У вас есть два варианта:
Вариант A: токен доступа (рекомендуется)
Самый надежный способ получить токен:
Через элемент:
1. Войдите в Element под учетной записью бота.
2. Откройте Настройки → Справка и информация.
3. Прокрутите вниз и разверните Дополнительно — там отображается токен доступа.
4. Скопируйте немедленно.
:::предупреждение[Храните свой токен доступа в безопасности]
Токен доступа дает полный доступ к учетной записи бота Matrix. Никогда не делитесь им публично и не передавайте его в Git. В случае взлома отмените его, выполнив выход из всех сеансов этого пользователя.
Вариант Б: Вход с паролем
Вместо предоставления токена доступа вы можете предоставить Hermes идентификатор пользователя и пароль бота. Гермес автоматически войдет в систему при запуске. Это проще, но означает, что пароль хранится в вашем файле .env.
Шаг 3. Найдите свой идентификатор пользователя Matrix
Агент Hermes использует ваш идентификатор пользователя Matrix, чтобы контролировать, кто может взаимодействовать с ботом. Идентификаторы пользователей матрицы имеют формат @username:server.
Чтобы найти свой:
Откройте Element (или предпочитаемый вами клиент Matrix).
Нажмите на свой аватар → Настройки.
Ваш идентификатор пользователя отображается в верхней части профиля (например, @alice:matrix.org).
:::совет
Идентификаторы пользователей Matrix всегда начинаются с @ и содержат :, за которым следует имя сервера. Например: @alice:matrix.org, @bob:your-server.com.
Шаг 4. Настройка агента Hermes
Вариант A: Интерактивная настройка (рекомендуется)
Запустите команду управляемой настройки:
hermesgatewaysetup
При появлении запроса выберите Матрица, а затем укажите URL-адрес домашнего сервера, токен доступа (или идентификатор пользователя + пароль) и разрешенные идентификаторы пользователей, когда его спросят.
Вариант Б: настройка вручную
Добавьте следующее в свой файл ~/.hermes/.env:
Использование токена доступа:
# RequiredMATRIX_HOMESERVER=https://matrix.example.org
MATRIX_ACCESS_TOKEN=***
# Optional: user ID (auto-detected from token if omitted)# MATRIX_USER_ID=@hermes:matrix.example.org# Security: restrict who can interact with the botMATRIX_ALLOWED_USERS=@alice:matrix.example.org
# Multiple allowed users (comma-separated)# MATRIX_ALLOWED_USERS=@alice:matrix.example.org,@bob:matrix.example.org
Дополнительные настройки поведения в ~/.hermes/config.yaml:
group_sessions_per_user:true
group_sessions_per_user: true сохраняет контекст каждого участника изолированным внутри общих комнат.
Запуск шлюза
После настройки запустите шлюз Matrix:
hermesgateway
Бот должен подключиться к вашему домашнему серверу и начать синхронизацию в течение нескольких секунд. Отправьте ему сообщение — либо в DM, либо в комнату, к которой он присоединился — для проверки.
:::совет
Вы можете запустить hermes gateway в фоновом режиме или в качестве службы systemd для постоянной работы. Подробности см. в документации по развертыванию.
Сквозное шифрование (E2EE)
Hermes поддерживает сквозное шифрование Matrix, поэтому вы можете общаться со своим ботом в зашифрованных комнатах.
Требования
Для E2EE требуется библиотека mautrix с дополнительными функциями шифрования и библиотека libolm C:
# Install mautrix with E2EE support
pipinstall'mautrix[encryption]'# Or install with hermes extras
pipinstall'hermes-agent[matrix]'
Вам также необходимо установить libolm в вашей системе:
Хранит ключи шифрования в ~/.hermes/platforms/matrix/store/ (старые версии: ~/.hermes/matrix/store/)
Загружает ключи устройства при первом подключении
Расшифровывает входящие сообщения и автоматически шифрует исходящие сообщения.
Автоматическое присоединение к зашифрованным комнатам по приглашению
Проверка перекрестной подписи (рекомендуется)
Если в вашей учетной записи Matrix включена перекрестная подпись (по умолчанию в Element), установите ключ восстановления, чтобы бот мог самостоятельно подписывать свое устройство при запуске. Без этого другие клиенты Matrix могут отказаться делиться сеансами шифрования с ботом после смены ключа устройства.
MATRIX_RECOVERY_KEY=EsT...yourrecoverykeyhere
Где его найти: В Element выберите Настройки → Безопасность и конфиденциальность → Шифрование → ваш ключ восстановления (также называемый «Ключ безопасности»). Это ключ, который вас попросили сохранить при первой настройке перекрестной подписи.
Если при каждом запуске установлен MATRIX_RECOVERY_KEY, Hermes импортирует ключи перекрестной подписи из безопасного секретного хранилища домашнего сервера и подписывает текущее устройство. Это идемпотентно, и его можно безопасно оставить включенным навсегда.
:::предупреждение[Удаление криптохранилища]
Если вы удалите ~/.hermes/platforms/matrix/store/crypto.db, бот потеряет свою шифровальную идентификацию. Простой перезапуск с тем же идентификатором устройства не полностью восстановится — домашний сервер по-прежнему хранит одноразовые ключи, подписанные старым ключом идентификации, а одноранговые узлы не могут устанавливать новые сеансы Olm.
Hermes обнаруживает это состояние при запуске и отказывается включать E2EE, записывая в журнал: device XXXX has stale one-time keys on the server signed with a previous identity key.
Самое простое восстановление: создайте новый токен доступа (который получает новый идентификатор устройства без устаревшей истории ключей). См. раздел «Обновление предыдущей версии с помощью E2EE» ниже. Это наиболее надежный путь, позволяющий избежать вмешательства в базу данных домашнего сервера.
Восстановление вручную (расширенное — сохраняет тот же идентификатор устройства):
Остановите Synapse и удалите старое устройство из его базы данных:
bash
sudo systemctl stop matrix-synapse
sudo sqlite3 /var/lib/matrix-synapse/homeserver.db "
DELETE FROM e2e_device_keys_json WHERE device_id = 'DEVICE_ID' AND user_id = '@hermes:your-server';
DELETE FROM e2e_one_time_keys_json WHERE device_id = 'DEVICE_ID' AND user_id = '@hermes:your-server';
DELETE FROM e2e_fallback_keys_json WHERE device_id = 'DEVICE_ID' AND user_id = '@hermes:your-server';
DELETE FROM devices WHERE device_id = 'DEVICE_ID' AND user_id = '@hermes:your-server';
"
sudo systemctl start matrix-synapse
Или через API администратора Synapse (обратите внимание на идентификатор пользователя в URL-адресе):
bash
curl -X DELETE -H "Authorization: Bearer ADMIN_TOKEN" \
'https://your-server/_synapse/admin/v2/users/%40hermes%3Ayour-server/devices/DEVICE_ID'
Примечание. Удаление устройства через API администратора также может привести к аннулированию связанного токена доступа. Возможно, после этого вам придется сгенерировать новый токен.
Другие клиенты Matrix (Element, Matrix-Commander) могут кэшировать старые ключи устройства. После восстановления введите /discardsession в Element, чтобы принудительно провести новый сеанс шифрования с ботом.
:::информация
Если mautrix[encryption] не установлен или libolm отсутствует, бот автоматически переключается на простой (незашифрованный) клиент. Вы увидите предупреждение в журналах.
Домашняя комната
Вы можете назначить «домашнюю комнату», куда бот будет отправлять упреждающие сообщения (например, выходные данные заданий cron, напоминания и уведомления). Есть два способа установить его:
Использование команды косой черты
Введите /sethome в любой комнате Матрицы, где присутствует бот. Эта комната становится домашней комнатой.
Ручная настройка
Добавьте это в свой ~/.hermes/.env:
MATRIX_HOME_ROOM=!abc123def456:matrix.example.org
:::совет
Чтобы найти идентификатор комнаты: в Element перейдите в комнату → Настройки → Дополнительно → там отображается Внутренний идентификатор комнаты (начинается с !).
Устранение неполадок
Бот не отвечает на сообщения
Причина: Бот не присоединился к комнате или MATRIX_ALLOWED_USERS не содержит ваш идентификатор пользователя.
Исправление: пригласите бота в комнату — он автоматически присоединяется по приглашению. Убедитесь, что ваш идентификатор пользователя имеет формат MATRIX_ALLOWED_USERS (используйте полный формат @user:server). Перезапустите шлюз.
«Не удалось выполнить аутентификацию» / «Ошибка Whoami» при запуске
Причина: токен доступа или URL-адрес домашнего сервера неверен.
Исправление. Убедитесь, что MATRIX_HOMESERVER указывает на ваш домашний сервер (включая https://, no trailing slash). Check that MATRIX_ACCESS_TOKEN is valid — try it with curl:
If this returns your user info, the token is valid. If it returns an error, generate a new token.
"mautrix not installed" error
Cause: The mautrix Python package is not installed.
Fix: Install it:
pipinstall'mautrix[encryption]'
Or with Hermes extras:
pipinstall'hermes-agent[matrix]'
Encryption errors / "could not decrypt event"
Cause: Missing encryption keys, libolm not installed, or the bot's device isn't trusted.
Fix:
1. Verify libolm is installed on your system (see the E2EE section above).
2. Make sure MATRIX_ ENCRYPTION=true is set in your .env.
3. In your Matrix client (Element), go to the bot's profile -> Sessions -> verify/trust the bot's device.
4. If the bot just joined an encrypted room, it can only decrypt messages sent after it joined. Older messages are inaccessible.
Upgrading from a previous version with E2EE
💡 Tip
If you also manually deleted `crypto.db`, see the "Deleting the crypto store" warning in the E2EE section above — there are additional steps to clear stale one-time keys from the homeserver.
If you previously used Hermes with MATRIX_ENCRYPTION=true and are upgrading to
a version that uses the new SQLite-based crypto store, the bot's encryption
identity has changed. Your Matrix client (Element) may cache the old device keys
and refuse to share encryption sessions with the bot.
Symptoms: The bot connects and shows "E2EE enabled" in the logs, but all
messages show "could not decrypt event" and the bot never responds.
What's happening: The old encryption state (from the previous matrix -nio or
serialization-based mautrix backend) is incompatible with the new SQLite crypto
store. The bot creates a fresh encryption identity, but your Matrix client still
has the old keys cached and won't share the room's encryption session with a
device whose keys changed. This is a Matrix security feature -- clients treat
changed identity keys for the same device as suspicious.
Fix (one-time migration):
Generate a new access token to get a fresh device ID. The simplest way:
Set your recovery key (if you use cross-signing — most Element users do). Add to ~/.hermes/.env:
bash
MATRIX_RECOVERY_KEY=EsT... your recovery key here
This lets the bot self-sign with cross-signing keys on startup, so Element trusts the new device immediately. Without this, Element may see the new device as unverified and refuse to share encryption sessions. Find your recovery key in Element under Settings → Security & Privacy → Encryption.
Force your Matrix client to rotate the encryption session. In Element,
open the DM room with the bot and type /discardsession. This forces Element
to create a new encryption session and share it with the bot's new device.
Restart the gateway:
bash
hermes gateway run
If MATRIX_RECOVERY_KEY is set, you should see Matrix: перекрестная подпись проверена через восстановление key in the logs.
Send a new message. The bot should decrypt and respond normally.
📝 Note
After migration, messages sent *before* the upgrade cannot be decrypted -- the old
encryption keys are gone. This only affects the transition; new messages work
normally.
💡 Tip
**New installations are not affected.** This migration is only needed if you had
a working E2EE setup with a previous version of Hermes and are upgrading.
**Why a new access token?** Each Matrix access token is bound to a specific device
ID. Reusing the same device ID with new encryption keys causes other Matrix
clients to distrust the device (they see changed identity keys as a potential
security breach). A new access token gets a new device ID with no stale key
history, so other clients trust it immediately.
Proxy Mode (E2EE on macOS)
Matrix E2EE requires libolm, which doesn't compile on macOS ARM64 (Apple Silicon). The hermes-agent[matrix] extra is gated to Linux only. If you're on macOS, proxy mode lets you run E2EE in a Docker container on a Linux VM while the actual agent runs natively on macOS with full access to your local files, memory, and skills.
How It Works
macOS (Host):
└─ hermes gateway
├─ api_server adapter ← listens on 0.0.0.0:8642
├─ AIAgent ← single source of truth
├─ Sessions, memory, skills
└─ Local file access (Obsidian, projects, etc.)
Linux VM (Docker):
└─ hermes gateway (proxy mode)
├─ Matrix adapter ← E2EE decryption/encryption
└─ HTTP forward → macOS:8642/v1/chat/completions
(no LLM API keys, no agent, no inference)
The Docker container only handles Matrix protocol + E2EE. When a message arrives, it decrypts it and forwards the text to the host via a standard HTTP request. The host runs the agent, calls tools, generates a response, and streams it back. The container encrypts and sends the response to Matrix. All sessions are unified — CLI, Matrix, Telegram, and any other platform share the same memory and conversation history.
Step 1: Configure the Host (macOS)
Enable the API server so the host accepts incoming requests from the Docker container.
That's the entire container. No API keys for OpenRouter, Anthropic, or any inference provider.
Step 3: Start Both
Start the host gateway first:
bash
hermes gateway
Start the Docker container:
bash
docker compose up -d
Send a message in an encrypted Matrix room. The container decrypts it, forwards it to the host, and streams the response back.
Configuration Reference
Proxy mode is configured on the container side (the thin gateway):
Setting
Description
GATEWAY_PROXY_URL
URL of the remote Hermes API server (e.g., http://192.168.1.100:8642)
GATEWAY_PROXY_KEY
Токен носителя для аутентификации (должен соответствовать API_SERVER_KEY на хосте)
gateway.proxy_url
То же, что GATEWAY_PROXY_URL, но в config.yaml
Принимающей стороне необходимо:
Настройка
Описание
API_SERVER_ENABLED
Установите true
API_SERVER_KEY
Токен на предъявителя (совместно с контейнером)
API_SERVER_HOST
Установите 0.0.0.0 для доступа к сети
API_SERVER_PORT
Номер порта (по умолчанию: 8642)
Работает для любой платформы
Режим прокси не ограничивается Matrix. Его может использовать любой адаптер платформы — установите GATEWAY_PROXY_URL на любом экземпляре шлюза, и он будет пересылать данные удаленному агенту, а не запускать его локально. Это полезно для любого развертывания, когда адаптер платформы должен работать в среде, отличной от среды агента (сетевая изоляция, требования E2EE, ограничения ресурсов).
:::совет
Непрерывность сеанса поддерживается с помощью заголовка X-Hermes-Session-Id. Сервер API хоста отслеживает сеансы по этому идентификатору, поэтому диалоги сохраняются между сообщениями так же, как и с локальным агентом.
:::примечание
Ограничения (версия 1): Сообщения о ходе работы инструмента от удаленного агента не передаются обратно — пользователь видит только потоковый окончательный ответ, а не отдельные вызовы инструмента. Запросы на одобрение опасных команд обрабатываются на стороне хоста, а не передаются пользователю Matrix. Эти проблемы могут быть устранены в будущих обновлениях.
Проблемы с синхронизацией / бот отстает
Причина: длительное выполнение инструмента может задержать цикл синхронизации или домашний сервер работает медленно.
Исправление: В случае ошибки цикл синхронизации автоматически повторяется каждые 5 секунд. Проверьте журналы Hermes на наличие предупреждений, связанных с синхронизацией. Если бот постоянно отстает, убедитесь, что на вашем домашнем сервере достаточно ресурсов.
Бот не в сети
Причина: шлюз Hermes не работает или не удалось подключиться.
Исправление: убедитесь, что hermes gateway работает. Посмотрите на вывод терминала сообщения об ошибках. Распространенные проблемы: неправильный URL-адрес домашнего сервера, срок действия токена доступа истек, домашний сервер недоступен.
«Пользователь не разрешен» / Бот вас игнорирует
Причина: вашего идентификатора пользователя нет в MATRIX_ALLOWED_USERS.
Исправление: добавьте свой идентификатор пользователя в MATRIX_ALLOWED_USERS в ~/.hermes/.env и перезапустите шлюз. Используйте полный формат @user:server.
Безопасность
:::предупреждение
Всегда устанавливайте MATRIX_ALLOWED_USERS, чтобы ограничить круг лиц, которые могут взаимодействовать с ботом. Без него шлюз по умолчанию запрещает доступ всем пользователям в качестве меры безопасности. Добавляйте идентификаторы пользователей только тех людей, которым вы доверяете — авторизованные пользователи имеют полный доступ к возможностям агента, включая использование инструментов и доступ к системе.
Дополнительную информацию о защите вашего агента Hermes см. в Руководстве по безопасности.
Примечания
Любой домашний сервер: работает с Synapse, Conduit, Dendrite, Matrix.org или любым домашним сервером Matrix, соответствующим спецификации. Никакого специального программного обеспечения для домашнего сервера не требуется.
Федерация: если вы находитесь на федеративном домашнем сервере, бот может общаться с пользователями с других серверов — просто добавьте их полные идентификаторы @user:server в MATRIX_ALLOWED_USERS.
Автоматическое присоединение: бот автоматически принимает приглашения в комнаты и присоединяется. Он начинает отвечать сразу после присоединения.
Поддержка мультимедиа: Hermes может отправлять и получать изображения, аудио, видео и вложенные файлы. Медиафайлы загружаются на ваш домашний сервер с помощью API репозитория контента Matrix.
Встроенные голосовые сообщения (MSC3245): адаптер Matrix автоматически помечает исходящие голосовые сообщения флагом org.matrix.msc3245.voice. Это означает, что ответы TTS и голосовой звук отображаются как собственные голосовые пузырьки в Element и других клиентах, поддерживающих MSC3245, а не как обычные вложения аудиофайлов. Входящие голосовые сообщения с флагом MSC3245 также правильно идентифицируются и направляются на преобразование речи в текст. Никакой настройки не требуется — это работает автоматически.