---
read_when:
    - Налаштування Matrix в OpenClaw
    - Налаштування E2EE та верифікації Matrix
summary: Статус підтримки Matrix, налаштування та приклади конфігурації
title: Matrix
x-i18n:
    generated_at: "2026-04-27T20:27:52Z"
    model: gpt-5.4
    provider: openai
    source_hash: 42380d57ad7da25bc1fb8a1968671e91372f7dc681ea8503013729b764b74811
    source_path: channels/matrix.md
    workflow: 15
---

Matrix — це вбудований plugin каналу для OpenClaw.
Він використовує офіційний `matrix-js-sdk` і підтримує DM, кімнати, треди, медіа, реакції, опитування, геолокацію та E2EE.

## Вбудований plugin

Поточні пакетні релізи OpenClaw постачаються з plugin Matrix у комплекті. Вам не потрібно нічого встановлювати; саме налаштування `channels.matrix.*` (див. [Налаштування](#setup)) його активує.

Для старіших збірок або кастомних інсталяцій, які не містять Matrix, спочатку встановіть його вручну:

```bash
openclaw plugins install @openclaw/matrix
# або з локального checkout
openclaw plugins install ./path/to/local/matrix-plugin
```

`plugins install` реєструє та вмикає plugin, тож окремий крок `openclaw plugins enable matrix` не потрібен. Plugin усе одно нічого не робить, доки ви не налаштуєте канал нижче. Загальну поведінку plugin і правила встановлення див. у [Plugins](/uk/tools/plugin).

## Налаштування

1. Створіть обліковий запис Matrix на своєму homeserver.
2. Налаштуйте `channels.matrix`, використовуючи або `homeserver` + `accessToken`, або `homeserver` + `userId` + `password`.
3. Перезапустіть Gateway.
4. Почніть DM із ботом або запросіть його до кімнати (див. [auto-join](#auto-join) — нові запрошення спрацьовують лише тоді, коли їх дозволяє `autoJoin`).

### Інтерактивне налаштування

```bash
openclaw channels add
openclaw configure --section channels
```

Майстер запитує: URL homeserver, метод автентифікації (access token або пароль), ID користувача (лише для автентифікації паролем), необов’язкову назву пристрою, чи вмикати E2EE, а також чи налаштовувати доступ до кімнат і auto-join.

Якщо відповідні змінні середовища `MATRIX_*` уже існують і для вибраного облікового запису немає збережених даних автентифікації, майстер запропонує скористатися змінними середовища. Щоб розв’язати назви кімнат перед збереженням allowlist, виконайте `openclaw channels resolve --channel matrix "Project Room"`. Якщо E2EE увімкнено, майстер записує конфігурацію і запускає той самий bootstrap, що й [`openclaw matrix encryption setup`](#encryption-and-verification).

### Мінімальна конфігурація

На основі токена:

```json5
{
  channels: {
    matrix: {
      enabled: true,
      homeserver: "https://matrix.example.org",
      accessToken: "syt_xxx",
      dm: { policy: "pairing" },
    },
  },
}
```

На основі пароля (після першого входу токен кешується):

```json5
{
  channels: {
    matrix: {
      enabled: true,
      homeserver: "https://matrix.example.org",
      userId: "@bot:example.org",
      password: "replace-me", // pragma: allowlist secret
      deviceName: "OpenClaw Gateway",
    },
  },
}
```

### Auto-join

`channels.matrix.autoJoin` типово має значення `off`. Із цим значенням за замовчуванням бот не з’являтиметься в нових кімнатах або DM із нових запрошень, доки ви не приєднаєте його вручну.

Під час запрошення OpenClaw не може визначити, чи є запрошена кімната DM чи групою, тому всі запрошення — включно із запрошеннями у стилі DM — спочатку проходять через `autoJoin`. `dm.policy` застосовується лише пізніше, після того як бот уже приєднався, а кімнату класифіковано.

<Warning>
Установіть `autoJoin: "allowlist"` разом із `autoJoinAllowlist`, щоб обмежити, які запрошення приймає бот, або `autoJoin: "always"`, щоб приймати кожне запрошення.

`autoJoinAllowlist` приймає лише стабільні цілі: `!roomId:server`, `#alias:server` або `*`. Звичайні назви кімнат відхиляються; записи alias розв’язуються відносно homeserver, а не відносно стану, заявленого запрошеною кімнатою.
</Warning>

```json5
{
  channels: {
    matrix: {
      autoJoin: "allowlist",
      autoJoinAllowlist: ["!ops:example.org", "#support:example.org"],
      groups: {
        "!ops:example.org": { requireMention: true },
      },
    },
  },
}
```

Щоб приймати всі запрошення, використовуйте `autoJoin: "always"`.

### Формати цілей allowlist

Allowlist для DM і кімнат найкраще наповнювати стабільними ID:

- DM (`dm.allowFrom`, `groupAllowFrom`, `groups.<room>.users`): використовуйте `@user:server`. Відображувані імена розв’язуються лише тоді, коли каталог homeserver повертає рівно один збіг.
- Кімнати (`groups`, `autoJoinAllowlist`): використовуйте `!room:server` або `#alias:server`. Імена розв’язуються best-effort серед приєднаних кімнат; нерозв’язані записи ігноруються під час виконання.

### Нормалізація ID облікового запису

Майстер перетворює дружню назву на нормалізований ID облікового запису. Наприклад, `Ops Bot` стає `ops-bot`. Пунктуація екранується в іменах змінних середовища зі scope, щоб два облікові записи не конфліктували: `-` → `_X2D_`, тож `ops-prod` перетворюється на `MATRIX_OPS_X2D_PROD_*`.

### Кешовані облікові дані

Matrix зберігає кешовані облікові дані в `~/.openclaw/credentials/matrix/`:

- обліковий запис за замовчуванням: `credentials.json`
- іменовані облікові записи: `credentials-<account>.json`

Коли там існують кешовані облікові дані, OpenClaw вважає Matrix налаштованим, навіть якщо access token відсутній у файлі конфігурації — це охоплює налаштування, `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` тощо. Змінні середовища recovery key зчитуються CLI-потоками з підтримкою відновлення (`verify backup restore`, `verify device`, `verify bootstrap`), коли ви передаєте ключ через `--recovery-key-stdin`.

`MATRIX_HOMESERVER` не можна задавати через workspace `.env`; див. [Файли workspace `.env`](/uk/gateway/security).

## Приклад конфігурації

Практична базова конфігурація з pairing для DM, allowlist для кімнат і E2EE:

```json5
{
  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 є opt-in. `streaming` керує тим, як OpenClaw доставляє відповідь помічника в процесі генерації; `blockStreaming` керує тим, чи зберігається кожен завершений блок як окреме повідомлення Matrix.

```json5
{
  channels: {
    matrix: {
      streaming: "partial",
    },
  },
}
```

Щоб зберегти живий попередній перегляд відповіді, але приховати проміжні рядки tool/progress, використовуйте
об’єктну форму:

```json5
{
  channels: {
    matrix: {
      streaming: {
        mode: "partial",
        preview: {
          toolProgress: false,
        },
      },
    },
  },
}
```

| `streaming`       | Поведінка                                                                                                                                                          |
| ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `"off"` (default) | Чекає на повну відповідь, надсилає один раз. `true` ↔ `"partial"`, `false` ↔ `"off"`.                                                                             |
| `"partial"`       | Редагує одне звичайне текстове повідомлення на місці, поки модель записує поточний блок. Стандартні клієнти Matrix можуть сповіщати про перший попередній перегляд, а не про фінальне редагування. |
| `"quiet"`         | Те саме, що `"partial"`, але повідомлення є notice без сповіщення. Одержувачі отримують сповіщення лише тоді, коли правило push для користувача збігається з фіналізованим редагуванням (див. нижче). |

`blockStreaming` не залежить від `streaming`:

| `streaming`             | `blockStreaming: true`                                              | `blockStreaming: false` (default)                    |
| ----------------------- | ------------------------------------------------------------------- | ---------------------------------------------------- |
| `"partial"` / `"quiet"` | Живий чернетковий варіант для поточного блоку, завершені блоки зберігаються як повідомлення | Живий чернетковий варіант для поточного блоку, фіналізується на місці |
| `"off"`                 | Одне повідомлення Matrix зі сповіщенням для кожного завершеного блоку | Одне повідомлення Matrix зі сповіщенням для всієї відповіді      |

Примітки:

- Якщо попередній перегляд перевищує ліміт розміру на подію в Matrix, OpenClaw припиняє потокову передачу попереднього перегляду і повертається до доставки лише фінального результату.
- Відповіді з медіа завжди надсилають вкладення звичайним способом. Якщо застарілий попередній перегляд більше не можна безпечно використати повторно, OpenClaw редагує його перед надсиланням фінальної відповіді з медіа.
- Оновлення попереднього перегляду прогресу інструментів увімкнені за замовчуванням, коли активна потокова передача попереднього перегляду Matrix. Установіть `streaming.preview.toolProgress: false`, щоб зберегти редагування попереднього перегляду для тексту відповіді, але залишити прогрес інструментів у звичайному шляху доставки.
- Редагування попереднього перегляду створюють додаткові виклики API Matrix. Залишайте `streaming: "off"`, якщо вам потрібен найконсервативніший профіль обмеження частоти запитів.

## Метадані затвердження

Власні запити на затвердження Matrix — це звичайні події `m.room.message` зі специфічним для OpenClaw вмістом користувацької події в `com.openclaw.approval`. Matrix дозволяє користувацькі ключі у вмісті події, тож стандартні клієнти все одно відображають текст тіла повідомлення, а клієнти з підтримкою OpenClaw можуть зчитувати структурований ID затвердження, тип, стан, доступні рішення та подробиці exec/plugin.

Коли запит на затвердження надто довгий для однієї події Matrix, OpenClaw розбиває видимий текст на частини й додає `com.openclaw.approval` лише до першої частини. Реакції для рішень allow/deny прив’язуються до цієї першої події, тож довгі запити зберігають ту саму ціль затвердження, що й запити з однією подією.

### Власні push rules для тихих фіналізованих попередніх переглядів

`streaming: "quiet"` сповіщає одержувачів лише тоді, коли блок або хід фіналізовано — правило push для користувача має збігтися з маркером фіналізованого попереднього перегляду. Повний рецепт див. у [Правила push Matrix для тихих попередніх переглядів](/uk/channels/matrix-push-rules) (токен одержувача, перевірка pusher, встановлення rules, примітки для різних homeserver).

## Кімнати bot-to-bot

За замовчуванням повідомлення Matrix від інших налаштованих облікових записів OpenClaw Matrix ігноруються.

Використовуйте `allowBots`, якщо ви свідомо хочете дозволити міжагентний трафік Matrix:

```json5
{
  channels: {
    matrix: {
      allowBots: "mentions", // true | "mentions"
      groups: {
        "!roomid:example.org": {
          requireMention: true,
        },
      },
    },
  },
}
```

- `allowBots: true` приймає повідомлення від інших налаштованих облікових записів ботів Matrix у дозволених кімнатах і DM.
- `allowBots: "mentions"` приймає ці повідомлення лише тоді, коли вони явно згадують цього бота в кімнатах. DM усе ще дозволені.
- `groups.<room>.allowBots` перевизначає налаштування рівня облікового запису для однієї кімнати.
- OpenClaw усе одно ігнорує повідомлення від того самого ID користувача Matrix, щоб уникнути циклів самовідповідей.
- Matrix не надає тут власного прапорця бота; OpenClaw трактує “bot-authored” як “надіслано іншим налаштованим обліковим записом Matrix на цьому Gateway OpenClaw”.

Використовуйте суворі allowlist для кімнат і вимоги згадування, коли вмикаєте трафік bot-to-bot у спільних кімнатах.

## Шифрування та верифікація

У зашифрованих кімнатах (E2EE) вихідні події зображень використовують `thumbnail_file`, тож попередні перегляди зображень шифруються разом із повним вкладенням. Незашифровані кімнати й далі використовують звичайний `thumbnail_url`. Додаткова конфігурація не потрібна — plugin автоматично визначає стан E2EE.

Усі команди `openclaw matrix` приймають `--verbose` (повна діагностика), `--json` (машинозчитуваний вивід) і `--account <id>` (конфігурації з кількома обліковими записами). За замовчуванням вивід стислий, із тихим внутрішнім логуванням SDK. У прикладах нижче показано канонічну форму; за потреби додавайте прапорці.

### Увімкнення шифрування

```bash
openclaw matrix encryption setup
```

Виконує bootstrap для secret storage і cross-signing, за потреби створює backup ключів кімнати, а потім виводить статус і подальші кроки. Корисні прапорці:

- `--recovery-key <key>` застосувати recovery key перед bootstrap (краще використовувати форму через stdin, задокументовану нижче)
- `--force-reset-cross-signing` відкинути поточну ідентичність cross-signing і створити нову (використовуйте лише навмисно)

Для нового облікового запису увімкніть E2EE під час створення:

```bash
openclaw matrix account add \
  --homeserver https://matrix.example.org \
  --access-token syt_xxx \
  --enable-e2ee
```

`--encryption` — це псевдонім для `--enable-e2ee`.

Еквівалент ручної конфігурації:

```json5
{
  channels: {
    matrix: {
      enabled: true,
      homeserver: "https://matrix.example.org",
      accessToken: "syt_xxx",
      encryption: true,
      dm: { policy: "pairing" },
    },
  },
}
```

### Статус і сигнали довіри

```bash
openclaw matrix verify status
openclaw matrix verify status --include-recovery-key --json
```

`verify status` повідомляє про три незалежні сигнали довіри (`--verbose` показує всі):

- `Locally trusted`: довірений лише цим клієнтом
- `Cross-signing verified`: SDK повідомляє про верифікацію через cross-signing
- `Signed by owner`: підписаний вашим власним self-signing key (лише для діагностики)

`Verified by owner` стає `yes` лише тоді, коли `Cross-signing verified` має значення `yes`. Локальної довіри або лише підпису власника недостатньо.

`--allow-degraded-local-state` повертає best-effort діагностику без попередньої підготовки облікового запису Matrix; це корисно для офлайн- або частково налаштованих перевірок.

### Верифікація цього пристрою за допомогою recovery key

Recovery key є чутливим — передавайте його через stdin замість командного рядка. Установіть `MATRIX_RECOVERY_KEY` (або `MATRIX_<ID>_RECOVERY_KEY` для іменованого облікового запису):

```bash
printf '%s\n' "$MATRIX_RECOVERY_KEY" | openclaw matrix verify device --recovery-key-stdin
```

Команда повідомляє про три стани:

- `Recovery key accepted`: Matrix прийняв ключ для secret storage або довіри до пристрою.
- `Backup usable`: backup ключів кімнати можна завантажити за допомогою довіреного recovery material.
- `Device verified by owner`: цей пристрій має повну довіру до ідентичності cross-signing Matrix.

Команда завершується з ненульовим кодом, якщо повна довіра до ідентичності не завершена, навіть якщо recovery key розблокував backup material. У такому разі завершіть self-verification з іншого клієнта Matrix:

```bash
openclaw matrix verify self
```

`verify self` очікує на `Cross-signing verified: yes`, перш ніж успішно завершитися. Використовуйте `--timeout-ms <ms>`, щоб налаштувати очікування.

Форма з буквальним ключем `openclaw matrix verify device "<recovery-key>"` теж підтримується, але ключ потрапить до історії оболонки.

### Bootstrap або відновлення cross-signing

```bash
openclaw matrix verify bootstrap
```

`verify bootstrap` — це команда відновлення й налаштування для зашифрованих облікових записів. По черзі вона:

- виконує bootstrap для secret storage, повторно використовуючи наявний recovery key, коли це можливо
- виконує bootstrap для cross-signing і завантажує відсутні публічні ключі
- позначає поточний пристрій і виконує для нього cross-signing
- створює серверний backup ключів кімнати, якщо його ще не існує

Якщо homeserver вимагає UIA для завантаження ключів cross-signing, 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`, щоб відкинути поточну ідентичність cross-signing (лише навмисно)

### Backup ключів кімнати

```bash
openclaw matrix verify backup status
printf '%s\n' "$MATRIX_RECOVERY_KEY" | openclaw matrix verify backup restore --recovery-key-stdin
```

`backup status` показує, чи існує серверний backup і чи може цей пристрій його розшифрувати. `backup restore` імпортує збережені в backup ключі кімнати до локального crypto store; якщо recovery key уже є на диску, `--recovery-key-stdin` можна не вказувати.

Щоб замінити пошкоджений backup свіжою базовою точкою (це означає прийняття втрати невідновлюваної старої історії; також може повторно створити secret storage, якщо поточний backup secret неможливо завантажити):

```bash
openclaw matrix verify backup reset --yes
```

Додавайте `--rotate-recovery-key` лише тоді, коли ви свідомо хочете, щоб попередній recovery key більше не розблоковував нову базову точку backup.

### Перелік, запит і обробка верифікацій

```bash
openclaw matrix verify list
```

Показує список очікуваних запитів на верифікацію для вибраного облікового запису.

```bash
openclaw matrix verify request --own-user
openclaw matrix verify request --user-id @ops:example.org --device-id ABCDEF
```

Надсилає запит на верифікацію від цього облікового запису OpenClaw. `--own-user` запитує self-verification (ви приймаєте запит в іншому клієнті 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`.

<AccordionGroup>
  <Accordion title="Поведінка під час запуску">
    Якщо `encryption: true`, значення `startupVerification` за замовчуванням — `"if-unverified"`. Під час запуску неперевірений пристрій запитує self-verification в іншому клієнті Matrix, пропускаючи дублікати й застосовуючи cooldown (24 години за замовчуванням). Налаштуйте через `startupVerificationCooldownHours` або вимкніть через `startupVerification: "off"`.

    Під час запуску також виконується консервативний прохід bootstrap криптографії, який повторно використовує поточні secret storage та ідентичність cross-signing. Якщо стан bootstrap пошкоджено, OpenClaw намагається виконати захищене відновлення навіть без `channels.matrix.password`; якщо homeserver вимагає password UIA, під час запуску записується попередження, але це не є фатальною помилкою. Уже підписані власником пристрої зберігаються.

    Повний потік оновлення див. у [Міграція Matrix](/uk/channels/matrix-migration).

  </Accordion>

  <Accordion title="Сповіщення про верифікацію">
    Matrix публікує сповіщення про життєвий цикл верифікації в строгій DM-кімнаті верифікації як повідомлення `m.notice`: запит, готовність (із підказкою "Verify by emoji"), старт/завершення та подробиці SAS (emoji/десяткові числа), коли вони доступні.

    Вхідні запити з іншого клієнта Matrix відстежуються й автоматично приймаються. Для self-verification OpenClaw автоматично запускає потік SAS і підтверджує свій бік, щойно стає доступною верифікація за emoji — вам усе одно потрібно порівняти та підтвердити "They match" у своєму клієнті Matrix.

    Системні сповіщення про верифікацію не пересилаються до конвеєра чату агента.

  </Accordion>

  <Accordion title="Видалений або недійсний пристрій Matrix">
    Якщо `verify status` повідомляє, що поточний пристрій більше не вказаний на homeserver, створіть новий пристрій OpenClaw Matrix. Для входу за паролем:

```bash
openclaw matrix account add \
  --account assistant \
  --homeserver https://matrix.example.org \
  --user-id '@assistant:example.org' \
  --password '<password>' \
  --device-name OpenClaw-Gateway
```

    Для автентифікації токеном створіть новий access token у своєму клієнті Matrix або інтерфейсі адміністратора, а потім оновіть OpenClaw:

```bash
openclaw matrix account add \
  --account assistant \
  --homeserver https://matrix.example.org \
  --access-token '<token>'
```

    Замініть `assistant` на ID облікового запису з команди, яка завершилася помилкою, або не вказуйте `--account` для облікового запису за замовчуванням.

  </Accordion>

  <Accordion title="Гігієна пристроїв">
    Старі пристрої, якими керує OpenClaw, можуть накопичуватися. Перегляд і очищення:

```bash
openclaw matrix devices list
openclaw matrix devices prune-stale
```

  </Accordion>

  <Accordion title="Crypto store">
    Matrix E2EE використовує офіційний криптографічний шлях Rust у `matrix-js-sdk` з `fake-indexeddb` як shim для IndexedDB. Криптографічний стан зберігається в `crypto-idb-snapshot.json` (із суворими правами доступу до файлу).

    Зашифрований стан середовища виконання міститься в `~/.openclaw/matrix/accounts/<account>/<homeserver>__<user>/<token-hash>/` і включає sync store, crypto store, recovery key, snapshot IDB, прив’язки тредів і стан startup verification. Коли токен змінюється, але ідентичність облікового запису лишається тією самою, OpenClaw повторно використовує найкращий наявний корінь, щоб попередній стан залишався видимим.

  </Accordion>
</AccordionGroup>

## Керування профілем

Оновіть self-profile Matrix для вибраного облікового запису:

```bash
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"` (default): усі DM-кімнати з тим самим маршрутизованим співрозмовником використовують одну сесію.
- `"per-room"`: кожна DM-кімната Matrix отримує власний ключ сесії, навіть якщо співрозмовник той самий.

Явні прив’язки розмов завжди мають пріоритет над `sessionScope`, тому прив’язані кімнати й треди зберігають вибрану цільову сесію.

### Потоковість відповідей (`threadReplies`)

`threadReplies` визначає, де бот публікує свою відповідь:

- `"off"`: відповіді є верхньорівневими. Вхідні повідомлення в тредах залишаються в сесії батьківського повідомлення.
- `"inbound"`: відповідати в треді лише тоді, коли вхідне повідомлення вже було в цьому треді.
- `"always"`: відповідати в треді, коренем якого є повідомлення-тригер; така розмова маршрутизується через відповідну сесію з областю треду, починаючи з першого тригера.

`dm.threadReplies` перевизначає це лише для DM — наприклад, можна ізолювати треди в кімнатах, але залишити DM пласкими.

### Успадкування тредів і slash-команди

- Вхідні повідомлення в тредах містять кореневе повідомлення треду як додатковий контекст агента.
- Надсилання через message-tool автоматично успадковує поточний тред Matrix, коли ціллю є та сама кімната (або той самий DM-одержувач), якщо явно не вказано `threadId`.
- Повторне використання DM user-target спрацьовує лише тоді, коли метадані поточної сесії підтверджують того самого DM-співрозмовника в тому самому обліковому записі Matrix; інакше OpenClaw повертається до звичайної маршрутизації в межах користувача.
- `/focus`, `/unfocus`, `/agents`, `/session idle`, `/session max-age` і прив’язаний до треду `/acp spawn` працюють у кімнатах і DM Matrix.
- Верхньорівневий `/focus` створює новий тред Matrix і прив’язує його до цільової сесії, коли `threadBindings.spawnSubagentSessions: true`.
- Запуск `/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` у DM, кімнаті або наявному треді Matrix, яким ви хочете й далі користуватися.
- У верхньорівневому DM або кімнаті Matrix поточний DM/кімната лишається поверхнею чату, а майбутні повідомлення маршрутизуються до створеної сесії ACP.
- Усередині наявного треду Matrix `--bind here` прив’язує поточний тред на місці.
- `/new` і `/reset` скидають ту саму прив’язану сесію ACP на місці.
- `/acp close` закриває сесію ACP і видаляє прив’язку.

Примітки:

- `--bind here` не створює дочірній тред Matrix.
- `threadBindings.spawnAcpSessions` потрібен лише для `/acp spawn --thread auto|here`, коли OpenClaw має створити або прив’язати дочірній тред Matrix.

### Конфігурація прив’язки тредів

Matrix успадковує глобальні значення за замовчуванням із `session.threadBindings`, а також підтримує перевизначення для конкретного каналу:

- `threadBindings.enabled`
- `threadBindings.idleHours`
- `threadBindings.maxAgeHours`
- `threadBindings.spawnSubagentSessions`
- `threadBindings.spawnAcpSessions`

Прапорці запуску з прив’язкою до треду Matrix є opt-in:

- Установіть `threadBindings.spawnSubagentSessions: true`, щоб дозволити верхньорівневому `/focus` створювати та прив’язувати нові треди Matrix.
- Установіть `threadBindings.spawnAcpSessions: true`, щоб дозволити `/acp spawn --thread auto|here` прив’язувати сесії ACP до тредів Matrix.

## Реакції

Matrix підтримує вихідні реакції, вхідні сповіщення про реакції та реакції-підтвердження.

Інструментарій вихідних реакцій контролюється `channels.matrix.actions.reactions`:

- `react` додає реакцію до події Matrix.
- `reactions` показує поточне зведення реакцій для події Matrix.
- `emoji=""` видаляє власні реакції бота на цій події.
- `remove: true` видаляє лише вказану emoji-реакцію бота.

**Порядок розв’язання** (перемагає перше визначене значення):

| Налаштування            | Порядок                                                                          |
| ----------------------- | -------------------------------------------------------------------------------- |
| `ackReaction`           | для облікового запису → канал → `messages.ackReaction` → резервне emoji ідентичності агента |
| `ackReactionScope`      | для облікового запису → канал → `messages.ackReactionScope` → значення за замовчуванням `"group-mentions"` |
| `reactionNotifications` | для облікового запису → канал → значення за замовчуванням `"own"`                |

`reactionNotifications: "own"` пересилає додані події `m.reaction`, коли вони націлені на повідомлення Matrix, створені ботом; `"off"` вимикає системні події реакцій. Видалення реакцій не синтезуються в системні події, оскільки Matrix показує їх як redaction, а не як окреме видалення `m.reaction`.

## Контекст історії

- `channels.matrix.historyLimit` визначає, скільки нещодавніх повідомлень кімнати включаються як `InboundHistory`, коли повідомлення кімнати Matrix запускає агента. Використовується резервне значення `messages.groupChat.historyLimit`; якщо обидва не задані, ефективне значення за замовчуванням — `0`. Установіть `0`, щоб вимкнути.
- Історія кімнати Matrix обмежується кімнатою. DM і далі використовують звичайну історію сесії.
- Історія кімнати Matrix працює лише для pending-повідомлень: OpenClaw буферизує повідомлення кімнати, які ще не викликали відповідь, а потім фіксує це вікно, коли надходить згадка або інший тригер.
- Поточне тригерне повідомлення не включається до `InboundHistory`; воно лишається в основному вхідному тілі для цього ходу.
- Повторні спроби для тієї самої події Matrix повторно використовують початковий знімок історії, а не зміщуються вперед до новіших повідомлень кімнати.

## Видимість контексту

Matrix підтримує спільний параметр `contextVisibility` для додаткового контексту кімнати, такого як отриманий текст відповіді, корені тредів і очікувана історія.

- `contextVisibility: "all"` — значення за замовчуванням. Додатковий контекст зберігається як отримано.
- `contextVisibility: "allowlist"` фільтрує додатковий контекст до відправників, дозволених активними перевірками allowlist кімнати/користувача.
- `contextVisibility: "allowlist_quote"` працює як `allowlist`, але все одно зберігає одну явну цитовану відповідь.

Це налаштування впливає на видимість додаткового контексту, а не на те, чи може саме вхідне повідомлення викликати відповідь.
Авторизація тригерів, як і раніше, визначається через `groupPolicy`, `groups`, `groupAllowFrom` і налаштування політики DM.

## Політика DM і кімнат

```json5
{
  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`:

```json5
{
  channels: {
    matrix: {
      dm: { enabled: false },
      groupPolicy: "allowlist",
      groupAllowFrom: ["@admin:example.org"],
    },
  },
}
```

Поведінку gating за згадками та allowlist див. у [Groups](/uk/channels/groups).

Приклад pairing для DM Matrix:

```bash
openclaw pairing list matrix
openclaw pairing approve matrix <CODE>
```

Якщо непідтверджений користувач Matrix продовжує писати вам до схвалення, OpenClaw повторно використовує той самий pending pairing code і може надіслати відповідь-нагадування після короткого cooldown замість створення нового коду.

Спільний потік pairing для DM і схему зберігання див. у [Pairing](/uk/channels/pairing).

## Відновлення direct room

Якщо стан прямих повідомлень виходить із синхронізації, OpenClaw може отримати застарілі зіставлення `m.direct`, що вказують на старі індивідуальні кімнати замість актуального DM. Перевірте поточне зіставлення для співрозмовника:

```bash
openclaw matrix direct inspect --user-id @alice:example.org
```

Відновіть його:

```bash
openclaw matrix direct repair --user-id @alice:example.org
```

Обидві команди приймають `--account <id>` для конфігурацій із кількома обліковими записами. Потік відновлення:

- надає перевагу строгому DM 1:1, який уже зіставлено в `m.direct`
- переходить до будь-якого поточного strict DM 1:1 із цим користувачем, до якого вже виконано приєднання
- створює нову direct room і переписує `m.direct`, якщо справного DM не існує

Він не видаляє старі кімнати автоматично. Він вибирає справний DM і оновлює зіставлення так, щоб майбутні надсилання Matrix, сповіщення про верифікацію та інші потоки прямих повідомлень були спрямовані до правильної кімнати.

## Затвердження exec

Matrix може працювати як нативний клієнт затвердження. Налаштовується в `channels.matrix.execApprovals` (або `channels.matrix.accounts.<account>.execApprovals` для перевизначення на рівні облікового запису):

- `enabled`: доставляти затвердження через нативні запити Matrix. Якщо не задано або вказано `"auto"`, Matrix автоматично вмикається, щойно вдається розв’язати принаймні одного затверджувача. Установіть `false`, щоб явно вимкнути.
- `approvers`: ID користувачів Matrix (`@owner:example.org`), яким дозволено затверджувати запити exec. Необов’язково — використовує резервне значення `channels.matrix.dm.allowFrom`.
- `target`: куди надсилаються запити. `"dm"` (default) надсилає в DM затверджувачів; `"channel"` надсилає до вихідної кімнати або DM Matrix; `"both"` надсилає в обидва місця.
- `agentFilter` / `sessionFilter`: необов’язкові allowlist, які визначають, для яких агентів/сесій спрацьовує доставка через 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 approvals](/uk/tools/exec-approvals).

## Slash-команди

Slash-команди (`/new`, `/reset`, `/model`, `/focus`, `/unfocus`, `/agents`, `/session`, `/acp`, `/approve` тощо) працюють безпосередньо в DM. У кімнатах OpenClaw також розпізнає команди, перед якими стоїть власна згадка бота Matrix, тож `@bot:server /new` запускає шлях обробки команди без спеціального regex для згадки. Завдяки цьому бот коректно реагує на повідомлення у стилі кімнат `@mention /command`, які надсилають Element та подібні клієнти, коли користувач автодоповнює бота перед введенням команди.

Правила авторизації все одно застосовуються: відправники команд мають відповідати тим самим політикам allowlist/owner для DM або кімнат, що й для звичайних повідомлень.

## Кілька облікових записів

```json5
{
  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` уже вказує на нього. До підвищеного облікового запису переносяться лише ключі автентифікації/bootstrap Matrix; спільні ключі політики доставки лишаються на верхньому рівні.

Спільний шаблон для кількох облікових записів див. у [Configuration reference](/uk/gateway/config-channels#multi-account-all-channels).

## Приватні/LAN homeserver

За замовчуванням OpenClaw блокує приватні/внутрішні homeserver Matrix для захисту від SSRF, якщо ви
явно не дозволите це окремо для кожного облікового запису.

Якщо ваш homeserver працює на localhost, LAN/Tailscale IP або внутрішньому імені хоста, увімкніть
`network.dangerouslyAllowPrivateNetwork` для цього облікового запису Matrix:

```json5
{
  channels: {
    matrix: {
      homeserver: "http://matrix-synapse:8008",
      network: {
        dangerouslyAllowPrivateNetwork: true,
      },
      accessToken: "syt_internal_xxx",
    },
  },
}
```

Приклад налаштування через CLI:

```bash
openclaw matrix account add \
  --account ops \
  --homeserver http://matrix-synapse:8008 \
  --allow-private-network \
  --access-token syt_ops_xxx
```

Ця opt-in-опція дозволяє лише довірені приватні/внутрішні цілі. Публічні homeserver без шифрування, такі як
`http://matrix.example.org:8008`, як і раніше, блокуються. За можливості віддавайте перевагу `https://`.

## Проксіювання трафіку Matrix

Якщо вашому розгортанню Matrix потрібен явний вихідний HTTP(S)-проксі, установіть `channels.matrix.proxy`:

```json5
{
  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`

ID кімнат Matrix чутливі до регістру. Використовуйте точний регістр ID кімнати з Matrix
під час налаштування явних цілей доставки, завдань Cron, прив’язок або allowlist.
OpenClaw зберігає внутрішні ключі сесій у канонічному вигляді для зберігання, тому ці
ключі в нижньому регістрі не є надійним джерелом для ID доставки Matrix.

Пошук у живому каталозі використовує обліковий запис Matrix, під яким виконано вхід:

- Пошук користувачів звертається до каталогу користувачів Matrix на цьому homeserver.
- Пошук кімнат напряму приймає явні ID кімнат і псевдоніми, а потім переходить до пошуку серед назв кімнат, до яких приєднано цей обліковий запис.
- Пошук за назвою серед приєднаних кімнат працює в режимі best-effort. Якщо назву кімнати неможливо розв’язати в ID або псевдонім, вона ігнорується під час розв’язання allowlist у робочому режимі.

## Довідник конфігурації

Поля у стилі allowlist (`groupAllowFrom`, `dm.allowFrom`, `groups.<room>.users`) приймають повні ID користувачів Matrix (це найбезпечніше). Точні збіги в каталозі розв’язуються під час запуску та щоразу, коли allowlist змінюється під час роботи монітора; записи, які не вдалося розв’язати, ігноруються в робочому режимі. Allowlist для кімнат із тієї ж причини надають перевагу ID кімнат або псевдонімам.

### Обліковий запис і підключення

- `enabled`: увімкнути або вимкнути канал.
- `name`: необов’язкова мітка відображення для облікового запису.
- `defaultAccount`: бажаний ID облікового запису, коли налаштовано кілька облікових записів Matrix.
- `accounts`: іменовані перевизначення для кожного облікового запису. Значення верхнього рівня `channels.matrix` успадковуються як значення за замовчуванням.
- `homeserver`: URL homeserver, наприклад `https://matrix.example.org`.
- `network.dangerouslyAllowPrivateNetwork`: дозволити цьому обліковому запису підключатися до `localhost`, LAN/Tailscale IP або внутрішніх імен хостів.
- `proxy`: необов’язковий URL HTTP(S)-проксі для трафіку Matrix. Підтримується перевизначення для кожного облікового запису.
- `userId`: повний ID користувача Matrix (`@bot:example.org`).
- `accessToken`: access token для автентифікації на основі токена. Підтримуються звичайні текстові значення й значення SecretRef через провайдерів env/file/exec ([Керування секретами](/uk/gateway/secrets)).
- `password`: пароль для входу на основі пароля. Підтримуються звичайні текстові значення й значення SecretRef.
- `deviceId`: явний ID пристрою Matrix.
- `deviceName`: назва пристрою, що відображається, під час входу за паролем.
- `avatarUrl`: збережений URL self-avatar для синхронізації профілю та оновлень `profile set`.
- `initialSyncLimit`: максимальна кількість подій, отриманих під час стартової синхронізації.

### Шифрування

- `encryption`: увімкнути E2EE. За замовчуванням: `false`.
- `startupVerification`: `"if-unverified"` (за замовчуванням, коли E2EE увімкнено) або `"off"`. Автоматично запитує self-verification під час запуску, якщо цей пристрій не верифіковано.
- `startupVerificationCooldownHours`: cooldown перед наступним автоматичним запитом під час запуску. За замовчуванням: `24`.

### Доступ і політика

- `groupPolicy`: `"open"`, `"allowlist"` або `"disabled"`. За замовчуванням: `"allowlist"`.
- `groupAllowFrom`: allowlist ID користувачів для трафіку кімнат.
- `dm.enabled`: якщо `false`, ігнорувати всі DM. За замовчуванням: `true`.
- `dm.policy`: `"pairing"` (за замовчуванням), `"allowlist"`, `"open"` або `"disabled"`. Застосовується після того, як бот приєднався й класифікував кімнату як DM; не впливає на обробку запрошень.
- `dm.allowFrom`: allowlist ID користувачів для трафіку 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"`. Записи псевдонімів розв’язуються відносно homeserver, а не відносно стану, заявленого запрошеною кімнатою.
- `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`: мапа політик для окремих кімнат. Ідентичність сесії використовує стабільний ID кімнати після розв’язання. (`rooms` — застарілий псевдонім.)
  - `groups.<room>.account`: обмежити один успадкований запис кімнати конкретним обліковим записом.
  - `groups.<room>.allowBots`: перевизначення налаштування рівня каналу для окремої кімнати (`true` або `"mentions"`).
  - `groups.<room>.users`: allowlist відправників для окремої кімнати.
  - `groups.<room>.tools`: перевизначення дозволу/заборони інструментів для окремої кімнати.
  - `groups.<room>.autoReply`: перевизначення gating за згадками для окремої кімнати. `true` вимикає вимоги щодо згадок для цієї кімнати; `false` примусово вмикає їх знову.
  - `groups.<room>.skills`: фільтр Skills для окремої кімнати.
  - `groups.<room>.systemPrompt`: фрагмент system prompt для окремої кімнати.

### Налаштування затвердження exec

- `execApprovals.enabled`: доставляти затвердження exec через нативні запити Matrix.
- `execApprovals.approvers`: ID користувачів Matrix, яким дозволено затверджувати. Використовує резервне значення `dm.allowFrom`.
- `execApprovals.target`: `"dm"` (за замовчуванням), `"channel"` або `"both"`.
- `execApprovals.agentFilter` / `execApprovals.sessionFilter`: необов’язкові allowlist агентів/сесій для доставки.

## Пов’язане

- [Огляд каналів](/uk/channels) — усі підтримувані канали
- [Pairing](/uk/channels/pairing) — автентифікація DM і потік pairing
- [Groups](/uk/channels/groups) — поведінка групового чату та gating за згадками
- [Маршрутизація каналів](/uk/channels/channel-routing) — маршрутизація сесій для повідомлень
- [Безпека](/uk/gateway/security) — модель доступу та hardening
