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:
<gateway-host> is a LAN IP without TLS, opt in for that trusted private network:
openclaw.json setting):
googlemeet.chrome and browser capability/browser.proxy:
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 theBlackHole 2chdevice Chrome/Meet route through.pactl,pacat, andparec: Linux PulseAudio utilities used against PipeWire-Pulse to provision and stream throughOpenClaw Meeting Audio.
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.
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:openclaw.json:
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:
googlemeet setup includes twilio-voice-call-plugin, twilio-voice-call-credentials, and twilio-voice-call-webhook checks.
--dtmf-sequence for a custom sequence, with leading w or commas for a pause before the PIN: