Серверная стойка и кабели как метафора голосовой инфраструктуры и realtime-коллаборации

2026 OpenClaw v2026.5.20 гайд:
голос Discord в реальном времени followUsers, OAuth device-code xAI и lint Policy plugin doctor (изоляция на посуточном macOS)

После апгрейда self-hosted Gateway на v2026.5.20 текст в Discord часто работает, а голос — нет; xAI login падает на VPS без localhost-callback браузера; doctor внезапно показывает lint Policy, которого раньше не было. Это тема релиза, а не три случайных инцидента. Гайд даёт три кластера боли, матрицу голос/auth/policy, семь упорядоченных шагов, таблицу triage, три метрики и план аренды 1–3 дня со ссылками на руководство по установке, сопряжение Telegram/Discord и allowlist и FAQ SSH/VNC.

01. Три кластера боли: follow голоса, headless OAuth xAI, lint Policy

1) Голос Discord «идёт не в ту комнату» или бот не заходит: v2026.5.20 добавляет voice.followUsers — бот входит, переходит и выходит вместе с настроенными Discord user ID, вместо ожидания /vc join или фиксированного autoJoin. Если вставить display name вместо snowflake или забыть guild/channel allowlists, DMs работают, голос — нет. Release notes подчёркивают проверки allowed-channel, multi-user handoff, ограниченную reconciliation и сохранение DAVE recovery — голос больше не «слушать везде». Сверьте с гайдом сопряжения и allowlist: spoken ingress проходит те же policy gates, что и текст.

2) Auth xAI ломается на VPS/SSH — OAuth ждёт браузер: До 5.20 команды копировали токены с ноутбука или делали хрупкие SSH port-forward для provider OAuth. Релиз добавляет device-code OAuth через openclaw models auth login --provider xai --device-code: URL и код в терминале, подтверждение на любом устройстве, credentials на headless хосте. Типичная ошибка смещается с «callback не доходит до localhost» на «код истёк, у терминала никого» или «неверный порядок auth-профилей после login». Device-code — действие change window с человеком у терминала, не unattended CI.

3) Lint Policy plugin после апгрейда: 5.20 включает Policy plugin для policy-backed conformance каналов, lint doctor и opt-in workspace repair. Строки WARN кажутся «Gateway сломан». На практике lint часто отмечает DM policies, дыры allowlist, plaintext secrets в openclaw.json или каналы вне security baseline. Doctor также предупреждает, если sandbox tool policy скрывает MCP tools, и про symlinked credential files (fail-closed). Запускайте doctor до прод-голоса — Policy дешевле чинить на арендном Mac, чем на live standup.

Три поверхности связаны: realtime голос по умолчанию инжектит IDENTITY.md, USER.md и SOUL.md в provider instructions — drift persona в голосе чаще проблема bootstrap-файлов, не routing. Device-code xAI даёт рабочий inference path для voice turns к моделям класса Grok. Lint Policy показывает, conformant ли канал Discord для follow-users с вашей историей pairing и allowlist.

02. Матрица: followUsers, bootstrapContextFiles, device-code, Policy plugin

Используйте таблицу в change window как acceptance sheet — не маркетинг. Архивируйте правую колонку на арендном хосте до удаления secrets.

Поверхность (5.20) Сигнал OK Доказательство аренды
voice.followUsers Бот входит, когда listed user заходит в allowed voice channel; переходит; выходит при disconnect Redacted voice-state log + JSON channels status --channel discord
voice.followUsersEnabled По умолчанию true при настроенном списке; false — пауза без удаления ID Скриншот панели голоса Control UI
voice.realtime.bootstrapContextFiles По умолчанию IDENTITY/USER/SOUL; subset или [] отключает; AGENTS.md остаётся в agent context Фрагмент transcript до/после persona grounding
xAI device-code OAuth models auth login --provider xai --device-code завершён; model list показывает xAI Redacted auth profile list; без API keys в config JSON
Policy plugin / doctor lint Conformance WARN устранён или waived с ticket; opt-in repair если выбран stdout openclaw doctor до/после fix
Voice allowlist ingress Речь non-allowlisted member отклонена до transcription Probe allowlisted vs blocked test account

Выбирайте join mode осознанно. followUsers, когда бот должен следовать за операторами между huddle rooms. autoJoin для фиксированных room assistants. /vc join для разовых сессий. Смешение всех трёх без документированного precedence даёт tickets «ghost bot в пустом канале».

bootstrapContextFiles: что меняется в realtime голосе

Realtime voice turns быстрые и lean; полный workspace context не replay автоматически. По умолчанию 5.20 инжектит IDENTITY.md, USER.md и SOUL.md, чтобы spoken replies совпадали с persona routed agent. Задайте voice.realtime.bootstrapContextFiles subset для leaner prompts или [] для нейтрального тона. Это не заменяет openclaw_agent_consult для tools, memory и актуальных фактов — только identity grounding для low latency. «Generic в голосе, нормально в тексте» — сначала bootstrap files.

Policy plugin: lint vs repair

Policy plugin добавляет doctor-visible lint для channel conformance — structured nudges при расхождении DM policy, guild allowlists или channel maps с declared security posture. Opt-in workspace repair применяет safe fixes при явном согласии; не silent auto-migrate в prod hours. Plaintext provider keys? Мигрируйте в SecretRef до голоса в customer guilds. Doctor 5.20 также снимает stale thinkingFormat compat keys на doctor --fix и предупреждает, если sandbox policy скрывает MCP tools — в том же отчёте, что Policy lint.

03. Семь шагов: апгрейд → голос → xAI → doctor → доказательства

  1. Заморозить baseline: Записать openclaw --version, блок голоса Discord, xAI auth profiles и openclaw channels status --json. Путь openclaw.json и args запуска Gateway.
  2. Backup и апгрейд: Snapshot config и workspace profile files (IDENTITY/USER/SOUL). openclaw update до v2026.5.20; stdout, exit code и npm integrity при pin tarball.
  3. Настроить followUsers Discord: Snowflake IDs (raw или discord:<id>). Подтвердить guild/channel allowlists из гайда сопряжения. Restart Gateway после изменений голоса.
  4. Настроить bootstrapContextFiles: С defaults; короткий spoken probe. Persona тяжёлая — subset; нужна нейтральность — [] и generic tone.
  5. Авторизовать xAI на headless: Device-code login по SSH/VPS; verification на phone/laptop в lifetime кода. Model list и одна completion до customer traffic.
  6. Policy plugin и doctor: openclaw doctor; resolve lint или waivers. Opt-in repair сначала на disposable host. Re-run после doctor --fix.
  7. Сверить каналы и архивировать доказательства: Discord configured/enabled vs успех voice probe. Redact logs; удалить demo tokens и temp OAuth profiles на rental machine.
# Апгрейд и baseline
openclaw --version
openclaw channels status --json | head -c 8000 | tee /tmp/oc520-channels-before.json
openclaw update

# Headless xAI OAuth (URL/code в любом браузере)
openclaw models auth login --provider xai --device-code

# Policy conformance и health каналов
openclaw doctor 2>&1 | tee /tmp/oc520-doctor.txt
openclaw channels status --probe --channel discord

Держите минимум 15 GB свободно перед parallel upgrade, voice provider warmup и doctor repair — 5.20 также bump bundled Codex harness и Baileys rc12. Bandwidth и cost аренды: FAQ SSH/VNC. Fresh installs: multiplatform guide для Node 24 (или ≥22.19).

Пример фрагмента followUsers

Voice settings под блоком Discord channel. IDs — numeric snowflakes из Developer Mode:

{
  "channels": {
    "discord": {
      "voice": {
        "enabled": true,
        "followUsers": ["123456789012345678", "discord:987654321098765432"],
        "followUsersEnabled": true,
        "realtime": {
          "bootstrapContextFiles": ["IDENTITY.md", "USER.md", "SOUL.md"]
        }
      }
    }
  }
}

После edit restart Gateway; followed user входит в allowlisted voice channel, tail logs. Bot не двигается — проверить followUsersEnabled, allowlist, Connect/Speak до смены model routes.

Device-code OAuth workflow на VPS

SSH на Gateway host, device-code login, держать session до завершения auth. URL на trusted device, code, scopes. Не paste codes в chat logs. Auth ok, completions fail — auth profile order и старый plaintext xAI key в config; doctor WARN про plaintext secrets для mixed storage bugs.

04. Triage: симптом → первое действие → ошибка

Симптом Первое действие Ошибка
Bot игнорирует operator в голосе User ID в followUsers; allowlisted channel; Connect permission Поставить groupPolicy: open на text чтобы «починить» голос
Voice persona ≠ text agent Проверить bootstrapContextFiles и profile MD в workspace Дублировать весь AGENTS.md в voice config (unsupported)
xAI device-code expired Re-run login с готовым operator; clock skew на VPS Embed long-lived API keys в git-tracked JSON
Doctor floods Policy WARN Triage: secrets, allowlists, sandbox/MCP; fix или waive с ticket Disable doctor или delete Policy plugin blindly
Random speech transcribed в голосе Tighten Discord member/channel allowlists; blocked account probe Assume voice public потому что bot joined channel
Bot stuck после DAVE disconnect Retry follow-user move; DAVE recovery notes 5.20; restart Gateway Remove allowlists чтобы force join

Text Discord ok, voice fail — split problem: app registration и OAuth shared, voice добавляет realtime provider, follow state machine и ingress allowlists. Capture channels status и voice log slice до трёх одновременных изменений — parallel re-auth xAI, rewrite SOUL.md и widen allowlists редко показывают, какой fix сработал.

05. Метрики, мифы и план аренды 1–3 дня

  • Метрика 1: GitHub release v2026.5.20 опубликован 2026-05-21 с Discord followUsers, realtime bootstrap injection, bundled Policy plugin и xAI device-code OAuth — audit anchor change ticket.
  • Метрика 2: npm integrity openclaw@2026.5.20 на release page (sha512-cgshS76CxS3Vp9NGtJR2UGtVZxVR5/4rvok8DKGGL19DugAftNabsXfYajyAEiJ3dC8QTXNqF62MdQNzUnQe8Q==); pin на rental hosts при repro customer incidents.
  • Метрика 3: Operator samples на M4 rental hardware — 3–5 часов на validate followUsers, device-code OAuth и clear Policy lint при documented Discord allowlists — дольше при pairing debt из pre-5.12 estates.

Миф A: «followUsers replaces allowlists.» Нет — ingress policy-gated. Миф B: «Device-code убирает SecretRef.» Plaintext WARNs relevant. Миф C: «Policy lint = rollback.» Чаще conformance debt, не runtime crash.

День 1 (freeze + upgrade + doctor): Утро channels status и auth profiles. День upgrade 5.20, archive doctor. Вечер followUsers для one operator ID в test guild.

День 2 (voice persona + xAI): Tune bootstrapContextFiles spoken probes; device-code login на same host shape как prod VPS; xAI completion на routed agent.

День 3 (Policy repair + handoff): Resolve/waive lint; allowlisted vs blocked voice probes; wipe rental secrets; runbook section с voice IDs, bootstrap choice, auth profile order.

Export четыре артефакта: redacted channels status JSON, doctor summary, voice probe transcript, auth profile list без secrets. Stakeholders — follow on-call engineer; auditors — allowlists и Policy lint addressed deliberately.

06. Headless Linux VPS vs посуточный Mac для голоса и auth

Linux VPS дешёв для 24/7 Gateway uptime и natural home для device-code OAuth — browser step на phone, credentials на server. Ломается, когда нужны Discord voice state debugging, Control UI voice toggles, Keychain deploy keys и чтение profile markdown под realtime audio. SSH logs, phone browser и personal Discord client скрывают wall-clock cost, часто выше короткой Apple Silicon rental.

Большая часть CLI checklist на VPS alone; prod может остаться Linux после acceptance. Rental value — rehearsal fidelity: native macOS — Gateway, Control UI, Discord desktop в одной session, followUsers evidence без log copy across machines, Policy repair на disposable workspace как Mac-centric dev habits. Containers для spike tests, плохо для voice latency tuning и follow-mode handoff UX.

Handoff-ready runbook за 1–3 дня без покупки hardware — и без prod OAuth codes на engineer personal Discord — посуточный Mac обычно smoother чем VPS SSH + phone OAuth + ad hoc audio. Пакеты: руководство по ценам M4; connectivity: FAQ SSH/VNC.