Коротко
- X-плагин превращает упоминание бота в разговор по
conversation_id: агент видит исходный пост, предков и цитаты, отвечает публично в тред. - По умолчанию плагин работает в режиме allowlist: отвечать могут только числовые ID из
allowFrom, остальные авторы молча отбрасываются без приглашения на спаривание. - Гостевой режим включается отдельным переключателем
channels.x.guests.enabledи даёт незнакомцам лишьread,ls,sessions_spawn,sessions_yieldиsubagents. - DM, посты, лайки, фолловы и медиа не поддерживаются: канал годится под публичный Q&A, а не под личную переписку.
Сверено с документацией OpenClaw 2026.10.5, 19 октября 2026.
X-плагин превращает упоминание аккаунта бота в разговор. Разговор получает идентификатор conversation_id и становится групповым тредом. По умолчанию публично отвечать разрешено только авторам из allowFrom; незнакомые авторы молча отбрасываются и приглашение на спаривание не получают.
Как X-плагин устроен
Плагин входит в сборки, где есть extensions/x. Если в вашей установке его нет, подключите его из локального чекаута OpenClaw командой ниже. После установки каждое упоминание бота от допущенного автора становится групповым тредом. Агент видит исходное упоминание вместе с предками и цитатами; пользователь продолжает видеть исходный пост. Ответы уходят публичными реплаями под исходным сообщением.
Установка плагина
openclaw plugins install --link ./extensions/x
Далее нужно конфиденциальное OAuth2-приложение X (confidential client). Авторизуйте аккаунт бота со скоупами tweet.read tweet.write users.read offline.access. Сохраните clientId, clientSecret и refreshToken пользователя. Плагин обновляет токены с HTTP Basic-аутентификацией клиента. Опциональный отдельный app-only bearerToken включает Activity API. X может ротировать refreshToken при выдаче нового токена, поэтому плагин хранит свежий токен в приватном состоянии x.oauth на стороне воркера, и оно переживает перезапуски. Хранилище не обещает шифрование на диске, защищайте каталог состояния Gateway и его резервные копии как учётные данные.
Конфиг: allowFrom и groupPolicy
Задайте числовые user ID и username, пропишите хотя бы один ID мейнтейнера в allowFrom.
{
channels: {
x: {
enabled: true,
userId: "123456789",
username: "example_bot",
clientId: "example-x-client-id",
clientSecret: { source: "env", provider: "default", id: "X_CLIENT_SECRET" },
refreshToken: { source: "env", provider: "default", id: "X_REFRESH_TOKEN" },
bearerToken: { source: "env", provider: "default", id: "X_BEARER_TOKEN" },
allowFrom: ["987654321"],
groupPolicy: "allowlist",
dmPolicy: "disabled",
events: { mode: "auto", pollSeconds: 60 },
threadContext: { maxPosts: 50 },
costLimits: { dailyUsd: 100, monthlyUsd: 1000, cycleStartDay: 1 },
},
},
bindings: [{ agentId: "main", match: { channel: "x" } }],
}
Подставьте реальные числовые ID и username. Секреты читаются через SecretRef из переменных окружения, доступных Gateway. Без bearerToken остаётся опрос без Activity API. dmPolicy принимает только disabled. Для нескольких ботов создайте секции channels.x.accounts.<accountId>; корневые поля остаются общими значениями по умолчанию, дефолтный accountId — default. В allowFrom используйте только числовые ID вида 987654321 или x:987654321.
Гостевой режим и лимиты стоимости
Гостевой режим разрешает людям вне allowlist мейнтейнеров задавать вопросы по репозиторию и по умолчанию выключен. Сначала ограничьте агента, на которого указывает привязка канала X, и переведите очередь канала в followup, иначе гостей не пустят:
{
// агент, на которого указывает привязка канала x
workspace: "/srv/openclaw",
cwd: "/srv/openclaw",
skills: [],
sandbox: { mode: "off" },
tools: { fs: { workspaceOnly: true } },
}
{ messages: { queue: { byChannel: { x: "followup" } } } }
Затем включите режим переключателем на странице X replies или командой:
openclaw config set channels.x.guests.enabled true
openclaw config set channels.x.guests.enabled false
Наблюдатель за конфигом перезагружает канал X без перезапуска Gateway. Интерфейс вызывает метод x.guests.set, требует прав администратора и сохраняет ту же настройку в конфиге.
Гости получают read, ls, sessions_spawn, sessions_yield и subagents и могут запускать скрытых помощников того же агента; помощники наследуют ограниченные инструменты и корень репозитория, не становятся видимыми рабочими сессиями и не выбирают другого агента. Гости не редактируют файлы, не запускают команды, не ходят в сеть, не используют память, не пишут сообщения и не читают чужие сессии. Опциональный guests.tools.allow сужает пять дефолтных инструментов; пустой массив отключает все инструменты. guests.tools.deny имеет приоритет; ни одна из настроек не добавляет более сильных инструментов.
Дневной и месячный лимиты задаются в costLimits: dailyUsd ограничивает суточный расход, monthlyUsd — месячный, cycleStartDay — день начала биллингового цикла.
Как проверить, что заработало
- Прогоните
openclaw config validateиopenclaw channels status: ошибки конфига и статусы плагина появятся в выводе. - С авторизованного аккаунта упомяните бота в посте. Удачный ход даст публичный реплай под исходным сообщением.
- Зайдите в X replies от имени администратора: список это объединение
allowFrom, записей интерфейса и пользователей из GitHub при включённой проверке. - Упомяните бота от незнакомого аккаунта при выключенном гостевом режиме. Реплая быть не должно, приглашение на спаривание не придёт.
- Включите гостевой режим и повторите. Если реплая нет, смотрите
guestModeBlockedReasonвopenclaw channels status: гостей пускают, только когда у агента X включёнtools.fs.workspaceOnly,skills: [],sandbox: { mode: "off" }, а для канала заданоmessages.queue.byChannel.x: "followup"(илиcollect).
Где ломается и когда не применять
X-плагин обрабатывает упоминания бота и публичные ответы в тредах. DM, оригинальные посты, лайки, фолловы и загрузка медиа не поддерживаются, для личной переписки канал не подходит. groupPolicy: "disabled" отключает все входящие ходы. groupPolicy: "open" не обходит гостевой переключатель: допуск незнакомцев всё равно управляется им.
Старые хосты сохраняют дефолтные read и ls, даже когда сообщают ту же версию OpenClaw. На странице X replies есть подсказка по апгрейду, если поддержка помощников отсутствует. Меняя seed refreshToken, вы начинаете новую линейку токенов.