Skip to main content
Chrome, Chrome node, and Twilio transports, the Parallels macOS VM topology, and the host audio tools they need. Part of the Google Meet plugin guide.

Local Gateway + Parallels Chrome

A full Gateway or model API key is not required inside a macOS VM just to give it Chrome. Run the Gateway and agent locally; run a node host in the VM. Install VM dependencies, reboot, verify:
Install the plugin in the VM, where it is enabled by default, and start the node host:
If <gateway-host> is a LAN IP without TLS, opt in for that trusted private network:
Use the same flag when installing as a LaunchAgent (it is process environment, stored in the LaunchAgent environment when present on the install command, not an openclaw.json setting):
Approve the node from the Gateway host, then confirm it advertises both googlemeet.chrome and browser capability/browser.proxy:
Route Meet through that node:
Now join normally from the Gateway host:
For a one-command smoke test that creates or reuses a session, speaks a known phrase, and prints session health:
During realtime join, browser automation fills the guest name, clicks Join/Ask to join, and accepts Meet’s first-run “Use microphone” prompt when it appears (or “Continue without microphone” during observe-only join and browser-only meeting creation). If the profile is signed out, Meet is waiting for host admission, Chrome needs mic/camera permission, or Meet is stuck on an unresolved prompt, the result includes manualAction: { reason, message }. Stop retrying, report that message plus browserUrl/browserTitle, and retry only after the manual action completes. If chromeNode.node is omitted, OpenClaw auto-selects only when exactly one connected node advertises both googlemeet.chrome and browser control; pin chromeNode.node (node id, display name, or remote IP) when several capable nodes are connected.

Common failure checks

Install notes

The Chrome talk-back default uses host audio tools that OpenClaw does not bundle or redistribute:
  • sox: command-line audio utility. The plugin issues explicit CoreAudio device commands for the default 24 kHz PCM16 audio bridge.
  • blackhole-2ch: macOS virtual audio driver providing the BlackHole 2ch device Chrome/Meet route through.
  • pactl, pacat, and parec: Linux PulseAudio utilities used against PipeWire-Pulse to provision and stream through OpenClaw Meeting Audio.
SoX is licensed LGPL-2.0-only AND GPL-2.0-only; BlackHole is GPL-3.0. If you build an installer or appliance that bundles BlackHole with OpenClaw, review BlackHole’s upstream licensing or get a separate license from Existential Audio.

Transports

Chrome

Opens the Meet URL through OpenClaw browser control and joins as the signed-in OpenClaw browser profile. For talk-back modes, the plugin checks or provisions the host’s native virtual-audio backend before browser work. Local Chrome also runs any configured audio bridge health command at this point; chrome-node runs that check on the node when starting its bridge. The talk-back bridge starts only after browser health confirms virtual input/output audio routing. For local Chrome, pick the profile with browser.defaultProfile; chrome.browserProfile is passed to chrome-node hosts instead.
With generated input commands, the shared browser bridge captures participant playback separately from assistant output. The native backend injects assistant audio into Meet’s virtual microphone and captures that injection for waveform verification. Remote playback is kept off the microphone bus, and the same path runs locally or on a paired node. Explicit chrome.audioInputCommand overrides retain their configured provider-input path. Live requires managed isolated capture, so remove an input override before selecting it. If the required native backend or browser capture is unavailable, the join fails with an audio-path error. If startup fails after OpenClaw acquires a command-pair audio bridge, it attempts to stop that bridge before rolling back a tab opened by the failed join. This startup cleanup leaves reused or adopted tabs, including chrome.launch: false sessions, untouched. Node cleanup targets the returned bridge ID; if node startup fails before returning an ID, the Gateway cannot guarantee remote bridge cleanup. External bridge commands manage their own process lifecycle.

Twilio

A strict dial plan delegated to the Voice call plugin. It does not parse Meet pages for phone numbers; Google Meet must expose a phone dial-in number and PIN for the meeting. Enable Voice Call on the Gateway host, not the Chrome node:
Provide Twilio credentials through environment to keep secrets out of openclaw.json:
Use realtime.provider: "openai" with OPENAI_API_KEY instead if OpenAI is the realtime voice provider. Plugin enablement and config changes apply automatically with the default hybrid reload mode (see Hot reload). If you changed the Gateway’s process environment, restart it with those variables available. Verify:
When Twilio delegation is wired, googlemeet setup includes twilio-voice-call-plugin, twilio-voice-call-credentials, and twilio-voice-call-webhook checks.
Use --dtmf-sequence for a custom sequence, with leading w or commas for a pause before the PIN: