Mainstream messaging
Matrix
Matrix — це завантажуваний канальний Plugin для OpenClaw.
Він використовує офіційний matrix-js-sdk і підтримує особисті повідомлення, кімнати, треди, медіа, реакції, опитування, локацію та E2EE.
Встановлення
Встановіть Matrix перед налаштуванням каналу:
openclaw plugins install @openclaw/matrix
З локального checkout:
openclaw plugins install ./path/to/local/matrix-plugin
plugins install реєструє та вмикає Plugin, тому окремий крок openclaw plugins enable matrix не потрібен. Plugin усе одно нічого не робить, доки ви не налаштуєте канал нижче. Див. Plugins щодо загальної поведінки Plugin і правил встановлення.
Налаштування
- Створіть обліковий запис Matrix на своєму homeserver.
- Налаштуйте
channels.matrixзhomeserver+accessTokenабо зhomeserver+userId+password. - Перезапустіть gateway.
- Почніть особисте повідомлення з ботом або запросіть його до кімнати (див. автоприєднання - нові запрошення потрапляють лише тоді, коли
autoJoinїх дозволяє).
Інтерактивне налаштування
openclaw channels add
openclaw configure --section channels
Майстер запитує: URL homeserver, метод автентифікації (токен доступу або пароль), ID користувача (лише для автентифікації паролем), необов’язкову назву пристрою, чи вмикати E2EE, і чи налаштовувати доступ до кімнат та автоприєднання.
Якщо відповідні env vars MATRIX_* уже існують, а вибраний обліковий запис не має збереженої автентифікації, майстер пропонує скорочення через env-var. Щоб розпізнати назви кімнат перед збереженням allowlist, виконайте openclaw channels resolve --channel matrix "Project Room". Коли E2EE увімкнено, майстер записує конфігурацію і запускає той самий bootstrap, що й openclaw matrix encryption setup.
Мінімальна конфігурація
На основі токена:
{
channels: {
matrix: {
enabled: true,
homeserver: "https://matrix.example.org",
accessToken: "syt_xxx",
dm: { policy: "pairing" },
},
},
}
На основі пароля (токен кешується після першого входу):
{
channels: {
matrix: {
enabled: true,
homeserver: "https://matrix.example.org",
userId: "@bot:example.org",
password: "replace-me", // pragma: allowlist secret
deviceName: "OpenClaw Gateway",
},
},
}
Автоприєднання
channels.matrix.autoJoin за замовчуванням має значення off. Із типовим значенням бот не з’являтиметься в нових кімнатах або особистих повідомленнях із нових запрошень, доки ви не приєднаєтеся вручну.
OpenClaw не може визначити під час запрошення, чи запрошена кімната є особистим повідомленням, чи групою, тому всі запрошення - включно із запрошеннями в стилі особистих повідомлень - спочатку проходять через autoJoin. dm.policy застосовується лише пізніше, після того як бот приєднався і кімнату було класифіковано.
{
channels: {
matrix: {
autoJoin: "allowlist",
autoJoinAllowlist: ["!ops:example.org", "#support:example.org"],
groups: {
"!ops:example.org": { requireMention: true },
},
},
},
}
Щоб приймати кожне запрошення, використовуйте autoJoin: "always".
Формати цілей allowlist
Allowlist для особистих повідомлень і кімнат найкраще заповнювати стабільними ID:
- Особисті повідомлення (
dm.allowFrom,groupAllowFrom,groups.<room>.users): використовуйте@user:server. Відображувані імена розпізнаються лише тоді, коли каталог homeserver повертає рівно один збіг. - Кімнати (
groups,autoJoinAllowlist): використовуйте!room:serverабо#alias:server. Назви розпізнаються best-effort серед кімнат, до яких уже приєднанося; нерозпізнані записи ігноруються під час виконання.
Нормалізація ID облікового запису
Майстер перетворює дружню назву на нормалізований ID облікового запису. Наприклад, Ops Bot стає ops-bot. Розділові знаки екрануються в scoped env-var names, щоб два облікові записи не могли збігтися: - → _X2D_, тому ops-prod зіставляється з MATRIX_OPS_X2D_PROD_*.
Кешовані облікові дані
Matrix зберігає кешовані облікові дані в ~/.openclaw/credentials/matrix/:
- типовий обліковий запис:
credentials.json - іменовані облікові записи:
credentials-<account>.json
Коли там існують кешовані облікові дані, OpenClaw вважає Matrix налаштованим, навіть якщо токена доступу немає у файлі конфігурації - це охоплює налаштування, openclaw doctor і перевірки статусу каналу.
Змінні середовища
Використовуються, коли відповідний ключ конфігурації не задано. Типовий обліковий запис використовує імена без префікса; іменовані облікові записи використовують ID облікового запису, вставлений перед суфіксом.
| Типовий обліковий запис | Іменований обліковий запис (<ID> — це нормалізований ID облікового запису) |
|---|---|
MATRIX_HOMESERVER |
MATRIX_<ID>_HOMESERVER |
MATRIX_ACCESS_TOKEN |
MATRIX_<ID>_ACCESS_TOKEN |
MATRIX_USER_ID |
MATRIX_<ID>_USER_ID |
MATRIX_PASSWORD |
MATRIX_<ID>_PASSWORD |
MATRIX_DEVICE_ID |
MATRIX_<ID>_DEVICE_ID |
MATRIX_DEVICE_NAME |
MATRIX_<ID>_DEVICE_NAME |
MATRIX_RECOVERY_KEY |
MATRIX_<ID>_RECOVERY_KEY |
Для облікового запису ops імена стають MATRIX_OPS_HOMESERVER, MATRIX_OPS_ACCESS_TOKEN тощо. Env vars ключа відновлення читаються recovery-aware потоками CLI (verify backup restore, verify device, verify bootstrap), коли ви передаєте ключ через --recovery-key-stdin.
MATRIX_HOMESERVER не можна задати з workspace .env; див. файли workspace .env.
Приклад конфігурації
Практична базова конфігурація з pairing для особистих повідомлень, allowlist кімнат і E2EE:
{
channels: {
matrix: {
enabled: true,
homeserver: "https://matrix.example.org",
accessToken: "syt_xxx",
encryption: true,
dm: {
policy: "pairing",
sessionScope: "per-room",
threadReplies: "off",
},
groupPolicy: "allowlist",
groupAllowFrom: ["@admin:example.org"],
groups: {
"!roomid:example.org": { requireMention: true },
},
autoJoin: "allowlist",
autoJoinAllowlist: ["!roomid:example.org"],
threadReplies: "inbound",
replyToMode: "off",
streaming: "partial",
},
},
}
Потокові попередні перегляди
Потокові відповіді Matrix увімкнені лише за явним вибором. streaming керує тим, як OpenClaw доставляє поточну відповідь асистента; blockStreaming керує тим, чи кожен завершений блок зберігається як окреме повідомлення Matrix.
{
channels: {
matrix: {
streaming: "partial",
},
},
}
Щоб зберегти live-попередні перегляди відповідей, але приховати проміжні рядки інструментів/прогресу, використовуйте форму об’єкта:
{
channels: {
matrix: {
streaming: {
mode: "partial",
preview: {
toolProgress: false,
},
},
},
},
}
streaming |
Поведінка |
|---|---|
"off" (за замовчуванням) |
Чекати повної відповіді, надіслати один раз. true ↔ "partial", false ↔ "off". |
"partial" |
Редагувати одне звичайне текстове повідомлення на місці, поки модель пише поточний блок. Стандартні клієнти Matrix можуть сповістити про перший попередній перегляд, а не фінальне редагування. |
"quiet" |
Те саме, що "partial", але повідомлення є notice без сповіщення. Одержувачі отримують сповіщення лише тоді, коли per-user push rule збігається з фіналізованим редагуванням (див. нижче). |
blockStreaming не залежить від streaming:
streaming |
blockStreaming: true |
blockStreaming: false (за замовчуванням) |
|---|---|---|
"partial" / "quiet" |
Live-чернетка для поточного блоку, завершені блоки зберігаються як повідомлення | Live-чернетка для поточного блоку, фіналізується на місці |
"off" |
Одне повідомлення Matrix зі сповіщенням на кожен завершений блок | Одне повідомлення Matrix зі сповіщенням для повної відповіді |
Примітки:
- Якщо попередній перегляд перевищує ліміт розміру Matrix для однієї події, OpenClaw зупиняє потоковий попередній перегляд і повертається до доставки лише фінального повідомлення.
- Медіавідповіді завжди надсилають вкладення звичайним способом. Якщо застарілий попередній перегляд більше не можна безпечно повторно використати, OpenClaw редагує його перед надсиланням фінальної медіавідповіді.
- Оновлення попереднього перегляду прогресу інструментів увімкнені за замовчуванням, коли активний потоковий попередній перегляд Matrix. Установіть
streaming.preview.toolProgress: false, щоб зберегти редагування попереднього перегляду для тексту відповіді, але залишити прогрес інструментів на звичайному шляху доставки. - Редагування попереднього перегляду коштують додаткових викликів Matrix API. Залиште
streaming: "off", якщо вам потрібен найконсервативніший профіль rate-limit.
Метадані схвалення
Нативні запити схвалення Matrix — це звичайні події m.room.message з OpenClaw-специфічним вмістом користувацької події під com.openclaw.approval. Matrix дозволяє користувацькі ключі вмісту подій, тому стандартні клієнти все ще відображають текстове тіло, а OpenClaw-aware клієнти можуть читати структурований ID схвалення, тип, стан, доступні рішення та деталі exec/plugin.
Коли запит схвалення надто довгий для однієї події Matrix, OpenClaw ділить видимий текст на частини й додає com.openclaw.approval лише до першої частини. Реакції для рішень allow/deny прив’язуються до цієї першої події, тому довгі запити зберігають ту саму ціль схвалення, що й запити з однієї події.
Самостійно розміщені push rules для тихих фіналізованих попередніх переглядів
streaming: "quiet" сповіщає одержувачів лише після фіналізації блоку або ходу - per-user push rule має збігтися з маркером фіналізованого попереднього перегляду. Див. push rules Matrix для тихих попередніх переглядів для повного рецепта (токен одержувача, перевірка pusher, встановлення правила, примітки для окремих homeserver).
Кімнати бот-до-бота
За замовчуванням повідомлення Matrix від інших налаштованих облікових записів OpenClaw Matrix ігноруються.
Використовуйте allowBots, коли ви навмисно хочете міжагентний трафік Matrix:
{
channels: {
matrix: {
allowBots: "mentions", // true | "mentions"
groups: {
"!roomid:example.org": {
requireMention: true,
},
},
},
},
}
allowBots: trueприймає повідомлення від інших налаштованих облікових записів ботів Matrix у дозволених кімнатах і особистих повідомленнях.allowBots: "mentions"приймає такі повідомлення лише тоді, коли вони помітно згадують цього бота в кімнатах. Особисті повідомлення все ще дозволені.groups.<room>.allowBotsперевизначає налаштування рівня облікового запису для однієї кімнати.- OpenClaw усе ще ігнорує повідомлення від того самого ID користувача Matrix, щоб уникнути циклів самовідповідей.
- Matrix не надає тут нативного прапорця бота; OpenClaw трактує "bot-authored" як "надіслано іншим налаштованим обліковим записом Matrix на цьому OpenClaw gateway".
Використовуйте суворі allowlist кімнат і вимоги згадування, коли вмикаєте трафік бот-до-бота в спільних кімнатах.
Шифрування та перевірка
У зашифрованих кімнатах (E2EE) вихідні події зображень використовують thumbnail_file, щоб попередні перегляди зображень були зашифровані разом із повним вкладенням. Незашифровані кімнати все ще використовують звичайний thumbnail_url. Конфігурація не потрібна - Plugin автоматично визначає стан E2EE.
Усі команди openclaw matrix приймають --verbose (повна діагностика), --json (машиночитаний вивід) і --account <id> (налаштування з кількома обліковими записами). За замовчуванням вивід стислий із тихим внутрішнім логуванням SDK. Приклади нижче показують канонічну форму; додавайте прапорці за потреби.
Увімкнення шифрування
openclaw matrix encryption setup
Завантажує сховище секретів і перехресне підписування, за потреби створює резервну копію ключів кімнат, а потім виводить статус і наступні кроки. Корисні прапорці:
--recovery-key <key>застосувати ключ відновлення перед завантаженням (надавайте перевагу формі через stdin, описаній нижче)--force-reset-cross-signingвідкинути поточну ідентичність перехресного підписування та створити нову (використовуйте лише навмисно)
Для нового облікового запису ввімкніть E2EE під час створення:
openclaw matrix account add \
--homeserver https://matrix.example.org \
--access-token syt_xxx \
--enable-e2ee
--encryption є псевдонімом для --enable-e2ee.
Еквівалент ручної конфігурації:
{
channels: {
matrix: {
enabled: true,
homeserver: "https://matrix.example.org",
accessToken: "syt_xxx",
encryption: true,
dm: { policy: "pairing" },
},
},
}
Статус і сигнали довіри
openclaw matrix verify status
openclaw matrix verify status --include-recovery-key --json
verify status повідомляє про три незалежні сигнали довіри (--verbose показує всі з них):
Locally trusted: довірений лише цим клієнтомCross-signing verified: SDK повідомляє про перевірку через перехресне підписуванняSigned by owner: підписано вашим власним ключем самопідписування (лише для діагностики)
Verified by owner стає yes лише коли Cross-signing verified має значення yes. Локальної довіри або самого лише підпису власника недостатньо.
--allow-degraded-local-state повертає діагностику за принципом найкращого зусилля без попередньої підготовки облікового запису Matrix; корисно для офлайн-перевірок або частково налаштованих перевірок.
Перевірка цього пристрою за допомогою ключа відновлення
Ключ відновлення є чутливим - передавайте його через stdin замість передавання в командному рядку. Установіть MATRIX_RECOVERY_KEY (або MATRIX_<ID>_RECOVERY_KEY для іменованого облікового запису):
printf '%s\n' "$MATRIX_RECOVERY_KEY" | openclaw matrix verify device --recovery-key-stdin
Команда повідомляє про три стани:
Recovery key accepted: Matrix прийняв ключ для сховища секретів або довіри пристрою.Backup usable: резервну копію ключів кімнат можна завантажити за допомогою довіреного матеріалу відновлення.Device verified by owner: цей пристрій має повну довіру до ідентичності перехресного підписування Matrix.
Вона завершується з ненульовим кодом, коли повна довіра до ідентичності неповна, навіть якщо ключ відновлення розблокував матеріал резервної копії. У такому разі завершіть самоперевірку з іншого клієнта Matrix:
openclaw matrix verify self
verify self чекає на Cross-signing verified: yes, перш ніж успішно завершитися. Використовуйте --timeout-ms <ms>, щоб налаштувати очікування.
Форма з буквальним ключем openclaw matrix verify device "<recovery-key>" також приймається, але ключ потрапить до історії вашої оболонки.
Завантаження або відновлення перехресного підписування
openclaw matrix verify bootstrap
verify bootstrap - це команда відновлення та налаштування для зашифрованих облікових записів. Послідовно вона:
- завантажує сховище секретів, повторно використовуючи наявний ключ відновлення, коли це можливо
- завантажує перехресне підписування та надсилає відсутні публічні ключі
- позначає та перехресно підписує поточний пристрій
- створює серверну резервну копію ключів кімнат, якщо її ще не існує
Якщо домашній сервер вимагає UIA для надсилання ключів перехресного підписування, OpenClaw спочатку пробує без автентифікації, потім m.login.dummy, а потім m.login.password (потрібно channels.matrix.password).
Корисні прапорці:
--recovery-key-stdin(поєднуйте зprintf '%s\n' "$MATRIX_RECOVERY_KEY" | …) або--recovery-key <key>--force-reset-cross-signing, щоб відкинути поточну ідентичність перехресного підписування (лише навмисно)
Резервна копія ключів кімнат
openclaw matrix verify backup status
printf '%s\n' "$MATRIX_RECOVERY_KEY" | openclaw matrix verify backup restore --recovery-key-stdin
backup status показує, чи існує серверна резервна копія та чи може цей пристрій її розшифрувати. backup restore імпортує резервні копії ключів кімнат до локального криптосховища; якщо ключ відновлення вже є на диску, можна пропустити --recovery-key-stdin.
Щоб замінити пошкоджену резервну копію новою базовою версією (приймає втрату невідновлюваної старої історії; також може повторно створити сховище секретів, якщо секрет поточної резервної копії неможливо завантажити):
openclaw matrix verify backup reset --yes
Додавайте --rotate-recovery-key лише тоді, коли навмисно хочете, щоб попередній ключ відновлення перестав розблоковувати нову базову резервну копію.
Перелік, запит і відповідь на перевірки
openclaw matrix verify list
Показує очікувані запити на перевірку для вибраного облікового запису.
openclaw matrix verify request --own-user
openclaw matrix verify request --user-id @ops:example.org --device-id ABCDEF
Надсилає запит на перевірку з цього облікового запису OpenClaw. --own-user запитує самоперевірку (ви приймаєте запит в іншому клієнті Matrix того самого користувача); --user-id/--device-id/--room-id спрямовують запит до когось іншого. --own-user не можна поєднувати з іншими прапорцями націлювання.
Для нижчорівневої обробки життєвого циклу - зазвичай під час відстеження вхідних запитів з іншого клієнта - ці команди діють на конкретний запит <id> (виводиться verify list і verify request):
| Команда | Призначення |
|---|---|
openclaw matrix verify accept <id> |
Прийняти вхідний запит |
openclaw matrix verify start <id> |
Запустити потік SAS |
openclaw matrix verify sas <id> |
Вивести emoji SAS або десяткові числа |
openclaw matrix verify confirm-sas <id> |
Підтвердити, що SAS збігається з тим, що показує інший клієнт |
openclaw matrix verify mismatch-sas <id> |
Відхилити SAS, коли emoji або десяткові числа не збігаються |
openclaw matrix verify cancel <id> |
Скасувати; приймає необов’язкові --reason <text> і --code <matrix-code> |
accept, start, sas, confirm-sas, mismatch-sas і cancel усі приймають --user-id і --room-id як підказки подальших дій у DM, коли перевірку прив’язано до конкретної кімнати прямих повідомлень.
Нотатки щодо кількох облікових записів
Без --account <id> команди Matrix CLI використовують неявний обліковий запис за замовчуванням. Якщо у вас є кілька іменованих облікових записів і не встановлено channels.matrix.defaultAccount, вони відмовляться вгадувати та попросять вас вибрати. Коли E2EE вимкнено або недоступне для іменованого облікового запису, помилки вказують на ключ конфігурації цього облікового запису, наприклад channels.matrix.accounts.assistant.encryption.
Поведінка під час запуску
З encryption: true значення startupVerification за замовчуванням дорівнює "if-unverified". Під час запуску неперевірений пристрій запитує самоперевірку в іншому клієнті Matrix, пропускаючи дублікати та застосовуючи період охолодження (24 години за замовчуванням). Налаштуйте за допомогою startupVerificationCooldownHours або вимкніть через startupVerification: "off".
Під час запуску також виконується консервативний прохід криптографічного завантаження, який повторно використовує поточне сховище секретів і ідентичність перехресного підписування. Якщо стан завантаження пошкоджений, OpenClaw намагається виконати захищене відновлення навіть без channels.matrix.password; якщо домашній сервер вимагає парольну UIA, запуск записує попередження в журнал і залишається нефатальним. Пристрої, уже підписані власником, зберігаються.
Див. міграцію Matrix для повного процесу оновлення.
Сповіщення про перевірку
Matrix надсилає сповіщення життєвого циклу перевірки до суворої DM-кімнати перевірки як повідомлення m.notice: запит, готовність (із вказівкою "Перевірити за emoji"), запуск/завершення та деталі SAS (emoji/десяткові), коли доступні.
Вхідні запити від іншого клієнта Matrix відстежуються та автоматично приймаються. Для самоперевірки OpenClaw автоматично запускає потік SAS і підтверджує свій бік, щойно перевірка emoji стає доступною - вам усе одно потрібно порівняти та підтвердити "Вони збігаються" у вашому клієнті Matrix.
Системні сповіщення перевірки не пересилаються до конвеєра чату агента.
Видалений або недійсний пристрій Matrix
Якщо verify status повідомляє, що поточний пристрій більше не зазначено на домашньому сервері, створіть новий пристрій Matrix OpenClaw. Для входу за паролем:
openclaw matrix account add \
--account assistant \
--homeserver https://matrix.example.org \
--user-id '@assistant:example.org' \
--password '<password>' \
--device-name OpenClaw-Gateway
Для автентифікації токеном створіть новий токен доступу у вашому клієнті Matrix або UI адміністратора, а потім оновіть OpenClaw:
openclaw matrix account add \
--account assistant \
--homeserver https://matrix.example.org \
--access-token '<token>'
Замініть assistant на ID облікового запису з невдалої команди або пропустіть --account для облікового запису за замовчуванням.
Гігієна пристроїв
Старі пристрої, керовані OpenClaw, можуть накопичуватися. Перегляньте список і очистьте застарілі:
openclaw matrix devices list
openclaw matrix devices prune-stale
Криптосховище
Matrix E2EE використовує офіційний шлях Rust crypto з matrix-js-sdk і fake-indexeddb як shim IndexedDB. Криптографічний стан зберігається в crypto-idb-snapshot.json (обмежувальні дозволи файлу).
Зашифрований стан виконання розміщується в ~/.openclaw/matrix/accounts/<account>/<homeserver>__<user>/<token-hash>/ і містить сховище синхронізації, криптосховище, ключ відновлення, знімок IDB, прив’язки потоків і стан перевірки під час запуску. Коли токен змінюється, але ідентичність облікового запису залишається тією самою, OpenClaw повторно використовує найкращий наявний корінь, тому попередній стан залишається видимим.
Керування профілем
Оновіть самопрофіль Matrix для вибраного облікового запису:
openclaw matrix profile set --name "OpenClaw Assistant"
openclaw matrix profile set --avatar-url https://cdn.example.org/avatar.png
Ви можете передати обидва параметри в одному виклику. Matrix приймає URL-адреси аватарів mxc:// безпосередньо; коли ви передаєте http:// або https://, OpenClaw спочатку завантажує файл і зберігає розв’язану URL-адресу mxc:// у channels.matrix.avatarUrl (або в перевизначенні для окремого облікового запису).
Потоки
Matrix підтримує нативні потоки Matrix як для автоматичних відповідей, так і для надсилань через message-tool. Дві незалежні ручки керують поведінкою:
Маршрутизація сеансів (sessionScope)
dm.sessionScope визначає, як DM-кімнати Matrix зіставляються із сеансами OpenClaw:
"per-user"(за замовчуванням): усі DM-кімнати з одним і тим самим маршрутизованим співрозмовником спільно використовують один сеанс."per-room": кожна DM-кімната Matrix отримує власний ключ сеансу, навіть коли співрозмовник той самий.
Явні прив’язки розмов завжди мають пріоритет над sessionScope, тому прив’язані кімнати й потоки зберігають вибраний цільовий сеанс.
Потокові відповіді (threadReplies)
threadReplies визначає, де бот публікує свою відповідь:
"off": відповіді є верхньорівневими. Вхідні повідомлення в потоках залишаються в батьківському сеансі."inbound": відповідати всередині потоку лише тоді, коли вхідне повідомлення вже було в цьому потоці."always": відповідати всередині потоку, коренем якого є повідомлення-тригер; ця розмова маршрутизується через відповідний сеанс з областю потоку, починаючи з першого тригера.
dm.threadReplies перевизначає це лише для DM - наприклад, щоб ізолювати кімнатні потоки, залишаючи DM пласкими.
Наслідування потоків і slash commands
- Вхідні повідомлення в тредах містять кореневе повідомлення треду як додатковий контекст агента.
- Надсилання через інструмент повідомлень автоматично успадковують поточний тред Matrix, коли цільовою є та сама кімната (або той самий користувач DM), якщо явно не вказано
threadId. - Повторне використання цільового користувача DM вмикається лише тоді, коли метадані поточної сесії підтверджують того самого співрозмовника DM у тому самому обліковому записі Matrix; інакше OpenClaw повертається до звичайної маршрутизації в межах користувача.
/focus,/unfocus,/agents,/session idle,/session max-ageі прив’язаний до треду/acp spawnпрацюють у кімнатах Matrix і DM./focusна верхньому рівні створює новий тред Matrix і прив’язує його до цільової сесії, коли ввімкненоthreadBindings.spawnSessions.- Запуск
/focusабо/acp spawn --thread hereусередині наявного треду Matrix прив’язує цей тред на місці.
Коли OpenClaw виявляє, що кімната DM Matrix конфліктує з іншою кімнатою DM у тій самій спільній сесії, він публікує одноразове m.notice у цій кімнаті з посиланням на запасний вихід /focus і пропозицією змінити dm.sessionScope. Сповіщення з’являється лише тоді, коли прив’язки тредів увімкнено.
Прив’язки розмов ACP
Кімнати Matrix, DM і наявні треди Matrix можна перетворити на сталі робочі простори ACP без зміни поверхні чату.
Швидкий операторський потік:
- Запустіть
/acp spawn codex --bind hereусередині Matrix DM, кімнати або наявного треду, яким хочете й надалі користуватися. - У Matrix DM або кімнаті верхнього рівня поточний DM/кімната лишається поверхнею чату, а майбутні повідомлення маршрутизуються до породженої сесії ACP.
- Усередині наявного треду Matrix
--bind hereприв’язує цей поточний тред на місці. /newі/resetскидають ту саму прив’язану сесію ACP на місці./acp closeзакриває сесію ACP і видаляє прив’язку.
Примітки:
--bind hereне створює дочірній тред Matrix.threadBindings.spawnSessionsкерує/acp spawn --thread auto|here, де OpenClaw має створити або прив’язати дочірній тред Matrix.
Конфігурація прив’язки тредів
Matrix успадковує глобальні типові значення з session.threadBindings, а також підтримує перевизначення для окремих каналів:
threadBindings.enabledthreadBindings.idleHoursthreadBindings.maxAgeHoursthreadBindings.spawnSessionsthreadBindings.defaultSpawnContext
Породження сесій, прив’язаних до тредів Matrix, типово ввімкнено:
- Установіть
threadBindings.spawnSessions: false, щоб заблокувати створення/прив’язування тредів Matrix командами/focusверхнього рівня та/acp spawn --thread auto|here. - Установіть
threadBindings.defaultSpawnContext: "isolated", коли власні породження тредів підлеглих агентів не мають відгалужувати батьківську стенограму.
Реакції
Matrix підтримує вихідні реакції, вхідні сповіщення про реакції та реакції підтвердження.
Інструменти вихідних реакцій керуються channels.matrix.actions.reactions:
reactдодає реакцію до події Matrix.reactionsпоказує поточний підсумок реакцій для події Matrix.emoji=""видаляє власні реакції бота на цю подію.remove: trueвидаляє лише вказану реакцію емодзі від бота.
Порядок розв’язання (перемагає перше визначене значення):
| Налаштування | Порядок |
|---|---|
ackReaction |
для облікового запису → канал → messages.ackReaction → резервний емодзі ідентичності агента |
ackReactionScope |
для облікового запису → канал → messages.ackReactionScope → типове "group-mentions" |
reactionNotifications |
для облікового запису → канал → типове "own" |
reactionNotifications: "own" пересилає додані події m.reaction, коли вони націлені на повідомлення Matrix, створені ботом; "off" вимикає системні події реакцій. Видалення реакцій не синтезуються в системні події, оскільки Matrix показує їх як редагування, а не як окремі видалення m.reaction.
Контекст історії
channels.matrix.historyLimitкерує тим, скільки нещодавніх повідомлень кімнати включається якInboundHistory, коли повідомлення в кімнаті Matrix запускає агента. Якщо не задано, використовуєтьсяmessages.groupChat.historyLimit; якщо обидва не задані, ефективне типове значення дорівнює0. Установіть0, щоб вимкнути.- Історія кімнати Matrix стосується лише кімнати. DM і далі використовують звичайну історію сесії.
- Історія кімнати Matrix є лише очікуваною: OpenClaw буферизує повідомлення кімнати, які ще не спричинили відповідь, а потім робить знімок цього вікна, коли надходить згадка або інший тригер.
- Поточне повідомлення-тригер не включається в
InboundHistory; воно лишається в основному вхідному тілі для цього ходу. - Повторні спроби тієї самої події Matrix повторно використовують початковий знімок історії, а не зміщуються вперед до новіших повідомлень кімнати.
Видимість контексту
Matrix підтримує спільний контроль contextVisibility для додаткового контексту кімнати, такого як отриманий текст відповіді, корені тредів і очікувана історія.
contextVisibility: "all"є типовим. Додатковий контекст зберігається як отримано.contextVisibility: "allowlist"фільтрує додатковий контекст до відправників, дозволених активними перевірками списку дозволених кімнати/користувача.contextVisibility: "allowlist_quote"поводиться якallowlist, але все одно зберігає одну явну цитовану відповідь.
Це налаштування впливає на видимість додаткового контексту, а не на те, чи саме вхідне повідомлення може спричинити відповідь.
Авторизація тригера й далі походить із groupPolicy, groups, groupAllowFrom і налаштувань політики DM.
Політика DM і кімнат
{
channels: {
matrix: {
dm: {
policy: "allowlist",
allowFrom: ["@admin:example.org"],
threadReplies: "off",
},
groupPolicy: "allowlist",
groupAllowFrom: ["@admin:example.org"],
groups: {
"!roomid:example.org": { requireMention: true },
},
},
},
}
Щоб повністю приглушити DM, залишивши кімнати працездатними, установіть dm.enabled: false:
{
channels: {
matrix: {
dm: { enabled: false },
groupPolicy: "allowlist",
groupAllowFrom: ["@admin:example.org"],
},
},
}
Див. Групи щодо поведінки шлюзу згадок і списку дозволених.
Приклад сполучення для Matrix DM:
openclaw pairing list matrix
openclaw pairing approve matrix <CODE>
Якщо несхвалений користувач Matrix продовжує надсилати вам повідомлення до схвалення, OpenClaw повторно використовує той самий очікуваний код сполучення і може надіслати відповідь-нагадування після короткого періоду очікування замість створення нового коду.
Див. Сполучення щодо спільного потоку сполучення DM і структури зберігання.
Відновлення прямих кімнат
Якщо стан прямих повідомлень розсинхронізувався, OpenClaw може опинитися зі застарілими зіставленнями m.direct, які вказують на старі одноосібні кімнати замість активного DM. Перегляньте поточне зіставлення для співрозмовника:
openclaw matrix direct inspect --user-id @alice:example.org
Відновіть його:
openclaw matrix direct repair --user-id @alice:example.org
Обидві команди приймають --account <id> для налаштувань із кількома обліковими записами. Потік відновлення:
- надає перевагу строгому DM 1:1, який уже зіставлено в
m.direct - повертається до будь-якого поточно приєднаного строгого DM 1:1 із цим користувачем
- створює нову пряму кімнату й переписує
m.direct, якщо справного DM немає
Він не видаляє старі кімнати автоматично. Він вибирає справний DM і оновлює зіставлення, щоб майбутні надсилання Matrix, сповіщення перевірки та інші потоки прямих повідомлень були націлені на правильну кімнату.
Схвалення exec
Matrix може діяти як власний клієнт схвалення. Налаштуйте в channels.matrix.execApprovals (або channels.matrix.accounts.<account>.execApprovals для перевизначення на рівні облікового запису):
enabled: доставляти схвалення через власні підказки Matrix. Якщо не задано або дорівнює"auto", Matrix автоматично вмикається, щойно можна визначити принаймні одного схвалювача. Установітьfalse, щоб явно вимкнути.approvers: ідентифікатори користувачів Matrix (@owner:example.org), яким дозволено схвалювати запити exec. Необов’язково - повертається доchannels.matrix.dm.allowFrom.target: куди надходять підказки."dm"(типово) надсилає в DM схвалювачів;"channel"надсилає в початкову кімнату Matrix або DM;"both"надсилає в обидва місця.agentFilter/sessionFilter: необов’язкові списки дозволених для того, які агенти/сесії запускають доставку Matrix.
Авторизація трохи відрізняється між типами схвалень:
- Схвалення exec використовують
execApprovals.approvers, повертаючись доdm.allowFrom. - Схвалення Plugin авторизуються лише через
dm.allowFrom.
Обидва типи спільно використовують скорочення реакцій Matrix і оновлення повідомлень. Схвалювачі бачать скорочення реакцій у первинному повідомленні схвалення:
✅дозволити один раз❌відхилити♾️завжди дозволяти (коли ефективна політика exec це дозволяє)
Запасні slash-команди: /approve <id> allow-once, /approve <id> allow-always, /approve <id> deny.
Лише визначені схвалювачі можуть схвалити або відхилити. Доставка каналом для схвалень exec містить текст команди - вмикайте channel або both лише в довірених кімнатах.
Пов’язано: Схвалення exec.
Slash-команди
Slash-команди (/new, /reset, /model, /focus, /unfocus, /agents, /session, /acp, /approve тощо) працюють безпосередньо в DM. У кімнатах OpenClaw також розпізнає команди з префіксом власної згадки бота в Matrix, тому @bot:server /new запускає шлях команди без користувацького регулярного виразу для згадок. Це зберігає чутливість бота до кімнатного стилю дописів @mention /command, які Element і подібні клієнти надсилають, коли користувач завершує ім’я бота клавішею Tab перед введенням команди.
Правила авторизації й далі застосовуються: відправники команд мають відповідати тим самим політикам списку дозволених/власника для DM або кімнат, що й звичайні повідомлення.
Кілька облікових записів
{
channels: {
matrix: {
enabled: true,
defaultAccount: "assistant",
dm: { policy: "pairing" },
accounts: {
assistant: {
homeserver: "https://matrix.example.org",
accessToken: "syt_assistant_xxx",
encryption: true,
},
alerts: {
homeserver: "https://matrix.example.org",
accessToken: "syt_alerts_xxx",
dm: {
policy: "allowlist",
allowFrom: ["@ops:example.org"],
threadReplies: "off",
},
},
},
},
},
}
Успадкування:
- Значення верхнього рівня
channels.matrixдіють як типові для іменованих облікових записів, якщо обліковий запис їх не перевизначає. - Обмежте успадкований запис кімнати конкретним обліковим записом через
groups.<room>.account. Записи безaccountспільні для облікових записів;account: "default"і далі працює, коли типовий обліковий запис налаштовано на верхньому рівні.
Вибір типового облікового запису:
- Установіть
defaultAccount, щоб вибрати іменований обліковий запис, якому надають перевагу неявна маршрутизація, зондування та CLI-команди. - Якщо у вас кілька облікових записів і один буквально названо
default, OpenClaw використовує його неявно, навіть колиdefaultAccountне задано. - Якщо у вас кілька іменованих облікових записів і типовий не вибрано, CLI-команди відмовляються вгадувати - установіть
defaultAccountабо передайте--account <id>. - Блок верхнього рівня
channels.matrix.*розглядається як неявний обліковий записdefaultлише тоді, коли його автентифікація повна (homeserver+accessToken, абоhomeserver+userId+password). Іменовані облікові записи лишаються доступними для виявлення зhomeserver+userId, щойно кешовані облікові дані покривають автентифікацію.
Просування:
- Коли OpenClaw просуває конфігурацію з одним обліковим записом до конфігурації з кількома обліковими записами під час відновлення або налаштування, він зберігає наявний іменований обліковий запис, якщо такий існує або
defaultAccountуже вказує на нього. До просунутого облікового запису переміщуються лише ключі автентифікації/початкового налаштування Matrix; спільні ключі політики доставки лишаються на верхньому рівні.
Див. Довідник конфігурації щодо спільного шаблону кількох облікових записів.
Приватні/LAN homeserver-и
Типово OpenClaw блокує приватні/внутрішні homeserver-и Matrix для захисту від SSRF, якщо ви явно не погодитеся на це для окремого облікового запису.
Якщо ваш homeserver працює на localhost, IP LAN/Tailscale або внутрішньому імені хоста, увімкніть
network.dangerouslyAllowPrivateNetwork для цього облікового запису Matrix:
{
channels: {
matrix: {
homeserver: "http://matrix-synapse:8008",
network: {
dangerouslyAllowPrivateNetwork: true,
},
accessToken: "syt_internal_xxx",
},
},
}
Приклад налаштування CLI:
openclaw matrix account add \
--account ops \
--homeserver http://matrix-synapse:8008 \
--allow-private-network \
--access-token syt_ops_xxx
Це явне ввімкнення дозволяє лише довірені приватні/внутрішні цілі. Публічні незашифровані домашні сервери, такі як
http://matrix.example.org:8008, залишаються заблокованими. За можливості віддавайте перевагу https://.
Проксіювання трафіку Matrix
Якщо вашому розгортанню Matrix потрібен явний вихідний HTTP(S)-проксі, задайте channels.matrix.proxy:
{
channels: {
matrix: {
homeserver: "https://matrix.example.org",
accessToken: "syt_bot_xxx",
proxy: "http://127.0.0.1:7890",
},
},
}
Іменовані облікові записи можуть перевизначати типовий параметр верхнього рівня за допомогою channels.matrix.accounts.<id>.proxy.
OpenClaw використовує той самий параметр проксі для трафіку Matrix під час виконання та перевірок стану облікового запису.
Визначення цілі
Matrix приймає такі форми цілей усюди, де OpenClaw запитує ціль кімнати або користувача:
- Користувачі:
@user:server,user:@user:serverабоmatrix:user:@user:server - Кімнати:
!room:server,room:!room:serverабоmatrix:room:!room:server - Псевдоніми:
#alias:server,channel:#alias:serverабоmatrix:channel:#alias:server
Ідентифікатори кімнат Matrix чутливі до регістру. Використовуйте точний регістр ідентифікатора кімнати з Matrix під час налаштування явних цілей доставки, завдань cron, прив’язок або списків дозволених. OpenClaw зберігає внутрішні ключі сеансів у канонічному вигляді для сховища, тому ці ключі в нижньому регістрі не є надійним джерелом для ідентифікаторів доставки Matrix.
Живий пошук у каталозі використовує обліковий запис Matrix, у який виконано вхід:
- Пошуки користувачів запитують каталог користувачів Matrix на цьому домашньому сервері.
- Пошуки кімнат напряму приймають явні ідентифікатори кімнат і псевдоніми, а потім переходять до пошуку назв приєднаних кімнат для цього облікового запису.
- Пошук за назвою приєднаної кімнати виконується за принципом найкращого зусилля. Якщо назву кімнати неможливо перетворити на ідентифікатор або псевдонім, під час визначення списку дозволених у середовищі виконання її ігнорують.
Довідник конфігурації
Поля у стилі списку дозволених (groupAllowFrom, dm.allowFrom, groups.<room>.users) приймають повні ідентифікатори користувачів Matrix (найбезпечніше). Точні збіги в каталозі визначаються під час запуску та щоразу, коли список дозволених змінюється під час роботи монітора; записи, які неможливо визначити, ігноруються під час виконання. З тієї самої причини списки дозволених кімнат віддають перевагу ідентифікаторам кімнат або псевдонімам.
Обліковий запис і підключення
enabled: увімкнути або вимкнути канал.name: необов’язкова відображувана мітка для облікового запису.defaultAccount: бажаний ідентифікатор облікового запису, коли налаштовано кілька облікових записів Matrix.accounts: іменовані перевизначення для окремих облікових записів. Значення верхнього рівняchannels.matrixуспадковуються як типові.homeserver: URL домашнього сервера, наприкладhttps://matrix.example.org.network.dangerouslyAllowPrivateNetwork: дозволити цьому обліковому запису підключатися доlocalhost, IP-адрес LAN/Tailscale або внутрішніх імен хостів.proxy: необов’язковий URL HTTP(S)-проксі для трафіку Matrix. Підтримується перевизначення для окремого облікового запису.userId: повний ідентифікатор користувача Matrix (@bot:example.org).accessToken: токен доступу для автентифікації на основі токена. Підтримуються значення у відкритому тексті та SecretRef через постачальників env/file/exec (Керування секретами).password: пароль для входу на основі пароля. Підтримуються значення у відкритому тексті та SecretRef.deviceId: явний ідентифікатор пристрою Matrix.deviceName: відображувана назва пристрою, що використовується під час входу за паролем.avatarUrl: збережений URL власного аватара для синхронізації профілю та оновленьprofile set.initialSyncLimit: максимальна кількість подій, що отримуються під час синхронізації запуску.
Шифрування
encryption: увімкнути E2EE. Типово:false.startupVerification:"if-unverified"(типово, коли E2EE увімкнено) або"off". Автоматично запитує самоперевірку під час запуску, коли цей пристрій не перевірено.startupVerificationCooldownHours: період очікування перед наступним автоматичним запитом під час запуску. Типово:24.
Доступ і політика
groupPolicy:"open","allowlist"або"disabled". Типово:"allowlist".groupAllowFrom: список дозволених ідентифікаторів користувачів для трафіку кімнат.dm.enabled: колиfalse, ігнорувати всі DM. Типово:true.dm.policy:"pairing"(типово),"allowlist","open"або"disabled". Застосовується після того, як бот приєднався та класифікував кімнату як DM; не впливає на обробку запрошень.dm.allowFrom: список дозволених ідентифікаторів користувачів для трафіку DM.dm.sessionScope:"per-user"(типово) або"per-room".dm.threadReplies: перевизначення лише для DM для відповідей у гілках ("off","inbound","always").allowBots: приймати повідомлення від інших налаштованих облікових записів ботів Matrix (trueабо"mentions").allowlistOnly: колиtrue, примусово переводить усі активні політики DM (крім"disabled") і політики груп"open"у"allowlist". Не змінює політики"disabled".autoJoin:"always","allowlist"або"off". Типово:"off". Застосовується до кожного запрошення Matrix, включно із запрошеннями у стилі DM.autoJoinAllowlist: кімнати/псевдоніми, дозволені, колиautoJoinдорівнює"allowlist". Записи псевдонімів визначаються відносно домашнього сервера, а не відносно стану, заявленого запрошеною кімнатою.contextVisibility: додаткова видимість контексту (типово"all","allowlist","allowlist_quote").
Поведінка відповідей
replyToMode:"off","first","all"або"batched".threadReplies:"off","inbound"або"always".threadBindings: перевизначення для окремих каналів для маршрутизації сеансів, прив’язаних до гілок, і життєвого циклу.streaming:"off"(типово),"partial","quiet"або форма об’єкта{ mode, preview: { toolProgress } }.true↔"partial",false↔"off".blockStreaming: колиtrue, завершені блоки асистента зберігаються як окремі повідомлення прогресу.markdown: необов’язкова конфігурація відтворення Markdown для вихідного тексту.responsePrefix: необов’язковий рядок, що додається на початок вихідних відповідей.textChunkLimit: розмір вихідного фрагмента в символах, колиchunkMode: "length". Типово:4000.chunkMode:"length"(типово, розділяє за кількістю символів) або"newline"(розділяє на межах рядків).historyLimit: кількість нещодавніх повідомлень кімнати, включених якInboundHistory, коли повідомлення кімнати запускає агента. Повертається доmessages.groupChat.historyLimit; ефективне типове значення0(вимкнено).mediaMaxMb: обмеження розміру медіа в МБ для вихідних надсилань і вхідної обробки.
Налаштування реакцій
ackReaction: перевизначення реакції підтвердження для цього каналу/облікового запису.ackReactionScope: перевизначення області ("group-mentions"типово,"group-all","direct","all","none","off").reactionNotifications: режим сповіщень про вхідні реакції ("own"типово,"off").
Інструменти та перевизначення для окремих кімнат
actions: обмеження інструментів для окремих дій (messages,reactions,pins,profile,memberInfo,channelInfo,verification).groups: карта політик для окремих кімнат. Ідентичність сеансу використовує стабільний ідентифікатор кімнати після визначення. (roomsє застарілим псевдонімом.)groups.<room>.account: обмежити один успадкований запис кімнати конкретним обліковим записом.groups.<room>.allowBots: перевизначення для окремої кімнати параметра рівня каналу (trueабо"mentions").groups.<room>.users: список дозволених відправників для окремої кімнати.groups.<room>.tools: перевизначення дозволу/заборони інструментів для окремої кімнати.groups.<room>.autoReply: перевизначення обмеження згадками для окремої кімнати.trueвимикає вимоги до згадок для цієї кімнати;falseпримусово вмикає їх знову.groups.<room>.skills: фільтр Skills для окремої кімнати.groups.<room>.systemPrompt: фрагмент системного промпта для окремої кімнати.
Налаштування схвалення exec
execApprovals.enabled: доставляти схвалення exec через нативні підказки Matrix.execApprovals.approvers: ідентифікатори користувачів Matrix, яким дозволено схвалювати. Повертається доdm.allowFrom.execApprovals.target:"dm"(типово),"channel"або"both".execApprovals.agentFilter/execApprovals.sessionFilter: необов’язкові списки дозволених агентів/сеансів для доставки.
Пов’язане
- Огляд каналів - усі підтримувані канали
- Pairing - автентифікація DM і потік спарювання
- Групи - поведінка групового чату та обмеження згадками
- Маршрутизація каналів - маршрутизація сеансів для повідомлень
- Безпека - модель доступу та посилення захисту