Developer and self-hosted
Tlon
Tlon — децентрализованный мессенджер, построенный на Urbit. OpenClaw подключается к вашему кораблю Urbit и отвечает на личные сообщения и сообщения в групповых чатах. По умолчанию для ответов в группах требуется упоминание через @, а поверх этого действуют правила авторизации и процесс одобрения владельцем.
Статус: встроенный плагин. Поддерживаются личные сообщения, упоминания в группах, ветки, форматированный текст, загрузка и скачивание изображений, а также система одобрения владельцем. Реакции и опросы не поддерживаются.
Встроенный плагин
Tlon входит в комплект текущих выпусков OpenClaw; для пакетных сборок отдельная установка не требуется.
В старой сборке или пользовательской установке, из которой он исключён, установите его из npm:
openclaw plugins install @openclaw/tlonИспользуйте имя пакета без версии, чтобы отслеживать тег текущего выпуска. Закрепляйте версию (@openclaw/tlon@x.y.z)
только для воспроизводимых установок.
Из локального рабочего дерева:
openclaw plugins install ./path/to/local/tlon-pluginПодробнее: Плагины
Настройка
openclaw channels add --channel tlon --ship ~sampel-palnet --url https://your-ship-host --code lidlut-tabwed-pillex-ridrupЛибо измените конфигурацию напрямую:
{ channels: { tlon: { enabled: true, ship: "~sampel-palnet", url: "https://your-ship-host", code: "lidlut-tabwed-pillex-ridrup", ownerShip: "~your-main-ship", // рекомендуется: ваш корабль, всегда авторизован }, },}После прямого изменения конфигурации перезапустите Gateway. Затем отправьте боту личное сообщение или упомяните его через @ в групповом канале.
Частные корабли и корабли в локальной сети
По умолчанию OpenClaw блокирует частные и внутренние имена хостов и диапазоны IP-адресов для защиты от SSRF. Если ваш корабль работает в частной сети (localhost, IP-адрес локальной сети, внутреннее имя хоста), явно разрешите это:
{ channels: { tlon: { url: "http://localhost:8080", network: { dangerouslyAllowPrivateNetwork: true, }, }, },}Применяется к целевым адресам наподобие http://localhost:8080, http://192.168.x.x:8080 и
http://my-ship.local:8080. Включайте это только для доверенного URL корабля; данная настройка отключает защиту от SSRF
для HTTP-запросов этой учётной записи.
Групповые каналы
Закрепите каналы вручную либо включите автоматическое обнаружение:
{ channels: { tlon: { groupChannels: ["chat/~host-ship/general", "chat/~host-ship/support"], autoDiscoverChannels: true, }, },}Если autoDiscoverChannels не задан в конфигурации, его значение по умолчанию — false; в мастере настройки ответ на
этот вопрос по умолчанию положительный, и мастер явно записывает true. Когда эта настройка включена, OpenClaw при запуске запрашивает присоединённые группы через scry,
отслеживает новые каналы по мере принятия приглашений в группы и повторяет проверку каждые 2 минуты.
Управление доступом
Список разрешённых отправителей личных сообщений (пустой список = личные сообщения запрещены всем, кроме ownerShip):
{ channels: { tlon: { dmAllowlist: ["~zod", "~nec"], }, },}По умолчанию для каждого канала используется режим авторизации restricted. Задайте defaultAuthorizedShips как
базовый список и переопределяйте его для отдельных гнёзд каналов:
{ channels: { tlon: { defaultAuthorizedShips: ["~zod"], authorization: { channelRules: { "chat/~host-ship/general": { mode: "restricted", allowedShips: ["~zod", "~nec"], }, "chat/~host-ship/announcements": { mode: "open", }, }, }, }, },}После того как бот ответит в ветке, он продолжает отвечать на последующие сообщения в этой ветке, не требуя нового упоминания.
Владелец и система одобрения
{ channels: { tlon: { ownerShip: "~your-main-ship", }, },}Корабль владельца авторизован везде: приглашения в личные сообщения всегда принимаются автоматически, приглашения в группы
всегда принимаются автоматически, а сообщения в каналах всегда проходят авторизацию. Владелец не обязан
находиться в dmAllowlist, defaultAuthorizedShips или groupInviteAllowlist.
Если задан ownerShip, неавторизованные запросы не просто отбрасываются — они помещаются в очередь ожидания
одобрения, а владельцу отправляется личное сообщение:
- Запросы на личные сообщения от кораблей, отсутствующих в
dmAllowlist - Упоминания в каналах, где отправитель не проходит авторизацию
- Приглашения в группы от кораблей, отсутствующих в
groupInviteAllowlist(когда автоматическое принятие отключено либо включено, но пригласивший корабль отсутствует в списке разрешённых)
Чтобы обработать запрос, владелец отвечает в личном сообщении:
| Ответ владельца | Результат |
|---|---|
approve / deny / block |
Обрабатывает самый последний ожидающий запрос на одобрение |
approve <id> / deny <id> |
Обрабатывает конкретный запрос на одобрение по идентификатору |
block |
Также блокирует корабль средствами платформы, чтобы он не мог подключиться повторно |
unblock ~ship |
Снимает блокировку средствами платформы |
blocked |
Выводит список заблокированных в данный момент кораблей |
pending |
Выводит список ожидающих запросов на одобрение |
Если ownerShip не настроен, неавторизованные личные сообщения и упоминания в каналах просто отбрасываются и записываются в журнал;
запрос на одобрение не отправляется.
Настройки автоматического принятия
Автоматически принимать приглашения в личные сообщения от кораблей, уже находящихся в dmAllowlist (приглашения от владельца всегда принимаются автоматически
независимо от этого флага):
{ channels: { tlon: { autoAcceptDmInvites: true, }, },}Автоматически принимать приглашения в группы от кораблей из списка разрешённых (безопасный отказ: при autoAcceptGroupInvites: true и
пустом groupInviteAllowlist не принимаются приглашения ни от кого, кроме владельца):
{ channels: { tlon: { autoAcceptGroupInvites: true, groupInviteAllowlist: ["~zod"], }, },}Горячая перезагрузка через хранилище настроек Urbit
Большинство перечисленных выше настроек (dmAllowlist, groupInviteAllowlist, groupChannels,
defaultAuthorizedShips, autoDiscoverChannels, autoAcceptDmInvites,
autoAcceptGroupInvites, ownerShip, showModelSignature) при первом запуске копируются в агент
%settings корабля (desk moltbot, bucket tlon), а затем считываются оттуда в реальном времени,
поэтому изменения, внесённые через клиент Landscape или команды настройки встроенного плагина, применяются без
перезапуска Gateway. channelRules и ожидающие запросы на одобрение также сохраняются там в формате JSON. Файловая
конфигурация остаётся источником истины для значений, которые никогда не записывались в хранилище настроек.
Целевые адресаты доставки (CLI/cron)
Используйте с openclaw message send или для доставки через cron:
- Личное сообщение:
~sampel-palnetилиdm/~sampel-palnet - Группа:
chat/~host-ship/channelилиgroup:~host-ship/channel
Встроенный навык
Плагин включает @tloncorp/tlon-skill — CLI для
непосредственных операций Urbit, который автоматически становится доступен после установки плагина:
- Активность: упоминания, ответы, непрочитанные сообщения
- Каналы: просмотр списка, создание, переименование
- Контакты: просмотр списка, получение и обновление профилей
- Группы: создание, присоединение, процессы приглашения и запроса, роли
- Перехватчики: управление перехватчиками каналов
- Сообщения: история, поиск
- Личные сообщения: отправка, реакции, принятие и отклонение
- Публикации: реакции, удаление
- Блокнот: публикация в каналах дневника
- Настройки: горячая перезагрузка конфигурации плагина через описанное выше хранилище настроек
Возможности
| Функция | Статус |
|---|---|
| Личные сообщения | Поддерживаются |
| Группы/каналы | Поддерживаются (по умолчанию требуется упоминание) |
| Ветки | Поддерживаются (после присоединения продолжает отвечать) |
| Форматированный текст | Markdown преобразуется в собственный формат Tlon |
| Изображения | Входящие скачиваются, исходящие загружаются |
| Реакции | Только через встроенный навык |
| Опросы | Не поддерживаются |
| Встроенные команды | По умолчанию доступны только владельцу |
Устранение неполадок
openclaw statusopenclaw gateway statusopenclaw logs --followopenclaw doctorРаспространённые сбои:
- Личные сообщения игнорируются: отправитель отсутствует в
dmAllowlist, иownerShipне настроен для процесса одобрения. - Сообщения в группах игнорируются: канал не обнаружен и не закреплён либо отправитель не проходит авторизацию, а
ownerShipдля постановки запроса на одобрение в очередь отсутствует. - Ошибки подключения: проверьте доступность URL корабля; для локальных кораблей задайте
network.dangerouslyAllowPrivateNetwork. - Ошибки аутентификации: коды входа меняются — скопируйте текущий код со своего корабля.
Справочник по конфигурации
Полная конфигурация: Конфигурация
| Ключ | Назначение |
|---|---|
channels.tlon.enabled |
Включает или отключает запуск канала. |
channels.tlon.ship |
Имя корабля Urbit бота (например, ~sampel-palnet). |
channels.tlon.url |
URL корабля (например, https://sampel-palnet.tlon.network). |
channels.tlon.code |
Код входа на корабль. |
channels.tlon.network.dangerouslyAllowPrivateNetwork |
Разрешает URL кораблей на localhost и в локальной сети (явное отключение защиты от SSRF). |
channels.tlon.ownerShip |
Корабль владельца: всегда авторизован и получает запросы на одобрение. |
channels.tlon.dmAllowlist |
Корабли, которым разрешено отправлять личные сообщения (пустой список = никто, кроме владельца). |
channels.tlon.autoAcceptDmInvites |
Автоматически принимает личные сообщения от кораблей в dmAllowlist. |
channels.tlon.autoAcceptGroupInvites |
Автоматически принимает приглашения в группы от кораблей в groupInviteAllowlist. |
channels.tlon.groupInviteAllowlist |
Корабли, приглашения в группы от которых принимаются автоматически. |
channels.tlon.autoDiscoverChannels |
Автоматически обнаруживает присоединённые групповые каналы (по умолчанию: false). |
channels.tlon.groupChannels |
Закреплённые вручную гнёзда каналов. |
channels.tlon.defaultAuthorizedShips |
Корабли, авторизованные для всех каналов (используется, если ни одно правило не совпало). |
channels.tlon.authorization.channelRules |
Режим авторизации и список разрешённых для каждого гнезда канала. |
channels.tlon.showModelSignature |
Добавляет _[Generated by <model>]_ к ответам. |
channels.tlon.responsePrefix |
Статический префикс, добавляемый перед исходящими ответами. |
channels.tlon.accounts.<id> |
Дополнительные именованные учётные записи (конфигурации с несколькими кораблями). |
Примечания
- Для ответов в группах требуется упоминание через @ (например,
~your-bot-ship), если бот ещё не присоединился к этой ветке. - Ответы в ветках публикуются внутри ветки; бот также получает последние 10 сообщений контекста ветки, добавленные перед запросом для агента.
- Форматированный текст (полужирный, курсив, код, заголовки, списки) преобразуется в собственный формат Tlon.
- Входящее сообщение с просьбой составить сводку канала (например, «составь сводку этого канала») запускает встроенное суммирование истории вместо обычного процесса ответа.
Связанные материалы
- Обзор каналов — все поддерживаемые каналы
- Сопряжение — аутентификация в личных сообщениях и процесс сопряжения
- Группы — поведение групповых чатов и требование упоминаний
- Маршрутизация каналов — маршрутизация сеансов для сообщений
- Безопасность — модель доступа и усиление защиты