Рецепт · OpenClaw

X-плагин в OpenClaw: упоминания как треды, allowlist и гостевой режим

Подключите X/Twitter плагин, разрешите публичные ответы избранным авторам и откройте гостям общение через отдельный переключатель.

· 5 мин чтения

Коротко

  • 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 — день начала биллингового цикла.

Как проверить, что заработало

  1. Прогоните openclaw config validate и openclaw channels status: ошибки конфига и статусы плагина появятся в выводе.
  2. С авторизованного аккаунта упомяните бота в посте. Удачный ход даст публичный реплай под исходным сообщением.
  3. Зайдите в X replies от имени администратора: список это объединение allowFrom, записей интерфейса и пользователей из GitHub при включённой проверке.
  4. Упомяните бота от незнакомого аккаунта при выключенном гостевом режиме. Реплая быть не должно, приглашение на спаривание не придёт.
  5. Включите гостевой режим и повторите. Если реплая нет, смотрите 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, вы начинаете новую линейку токенов.