{ "id": "google-meet", "name": "Google Meet", "description": "Join Google Meet calls through Chrome or Twilio transports.", "enabledByDefault": false, "commandAliases": [{ "name": "googlemeet" }], "activation": { "onStartup": true, "onCommands": ["googlemeet"], "onCapabilities": ["tool"] }, "contracts": { "tools": ["google_meet"] }, "uiHints": { "defaults.meeting": { "label": "Default Meeting", "help": "Meet URL, meeting code, or spaces/{id} used when commands omit a meeting." }, "preview.enrollmentAcknowledged": { "label": "Preview Acknowledged", "help": "Confirms you understand the Google Meet Media API is still Developer Preview.", "advanced": true }, "defaultTransport": { "label": "Default Transport", "help": "Chrome uses a signed-in browser profile. Chrome-node runs Chrome on a paired node. Twilio uses Meet dial-in numbers." }, "defaultMode": { "label": "Default Mode", "help": "Realtime voice is the default." }, "chrome.audioBackend": { "label": "Chrome Audio Backend", "help": "BlackHole 2ch is required for local duplex audio routing." }, "chrome.launch": { "label": "Launch Chrome" }, "chrome.browserProfile": { "label": "Chrome Profile", "advanced": true }, "chrome.guestName": { "label": "Guest Name", "help": "Used when Chrome lands on the signed-out Meet guest-name screen." }, "chrome.reuseExistingTab": { "label": "Reuse Existing Meet Tab", "help": "Avoids opening duplicate tabs for the same Meet URL." }, "chrome.autoJoin": { "label": "Auto Join Guest Screen", "help": "Best-effort guest-name fill and Join Now click through OpenClaw browser automation." }, "chrome.waitForInCallMs": { "label": "Wait For In-Call (ms)", "help": "Waits for Chrome to report that the Meet tab is in-call before the realtime intro speaks.", "advanced": true }, "chrome.audioInputCommand": { "label": "Audio Input Command", "help": "Command that writes meeting audio to stdout in chrome.audioFormat.", "advanced": true }, "chrome.audioOutputCommand": { "label": "Audio Output Command", "help": "Command that reads assistant audio from stdin in chrome.audioFormat.", "advanced": true }, "chrome.bargeInInputCommand": { "label": "Barge-In Input Command", "help": "Optional Gateway-hosted microphone command that writes signed 16-bit little-endian mono PCM for human interruption detection while assistant playback is active.", "advanced": true }, "chrome.bargeInRmsThreshold": { "label": "Barge-In RMS Threshold", "help": "RMS level on chrome.bargeInInputCommand that counts as a human interruption.", "advanced": true }, "chrome.bargeInPeakThreshold": { "label": "Barge-In Peak Threshold", "help": "Peak level on chrome.bargeInInputCommand that counts as a human interruption.", "advanced": true }, "chrome.bargeInCooldownMs": { "label": "Barge-In Cooldown (ms)", "help": "Minimum delay between repeated barge-in clears.", "advanced": true }, "chrome.audioFormat": { "label": "Audio Format", "help": "Command-pair audio format. PCM16 24 kHz is the default Chrome/Meet path; G.711 mu-law 8 kHz remains available for legacy command pairs.", "advanced": true }, "chrome.audioBridgeCommand": { "label": "Audio Bridge Command", "advanced": true }, "chrome.audioBridgeHealthCommand": { "label": "Audio Bridge Health Command", "advanced": true }, "chromeNode.node": { "label": "Chrome Node", "help": "Node id/name/IP that owns Chrome, BlackHole, and SoX for chrome-node transport.", "advanced": true }, "twilio.defaultDialInNumber": { "label": "Default Dial-In Number", "placeholder": "+15551234567" }, "twilio.defaultPin": { "label": "Default PIN", "advanced": true }, "twilio.defaultDtmfSequence": { "label": "Default DTMF Sequence", "advanced": true }, "voiceCall.enabled": { "label": "Delegate To Voice Call" }, "voiceCall.gatewayUrl": { "label": "Voice Call Gateway URL", "advanced": true }, "voiceCall.token": { "label": "Voice Call Gateway Token", "sensitive": true, "advanced": true }, "voiceCall.requestTimeoutMs": { "label": "Voice Call Request Timeout (ms)", "advanced": true }, "voiceCall.dtmfDelayMs": { "label": "Legacy DTMF Delay (ms)", "help": "Compatibility setting from the old post-connect DTMF flow. Twilio Meet joins now play DTMF before realtime connect.", "advanced": true }, "voiceCall.introMessage": { "label": "Voice Call Intro Message", "advanced": true }, "realtime.provider": { "label": "Realtime Provider", "help": "Defaults to OpenAI; uses OPENAI_API_KEY when no provider config is set." }, "realtime.model": { "label": "Realtime Model", "advanced": true }, "realtime.instructions": { "label": "Realtime Instructions", "advanced": true }, "realtime.introMessage": { "label": "Realtime Intro Message", "help": "Spoken once when the realtime bridge is ready. Set to an empty string to join silently." }, "realtime.agentId": { "label": "Realtime Consult Agent", "help": "OpenClaw agent id used by openclaw_agent_consult. Defaults to \"main\".", "advanced": true }, "realtime.toolPolicy": { "label": "Realtime Tool Policy", "help": "Safe read-only tools are available by default; owner requests can unlock broader tools.", "advanced": true }, "oauth.clientId": { "label": "OAuth Client ID" }, "oauth.clientSecret": { "label": "OAuth Client Secret", "sensitive": true }, "oauth.refreshToken": { "label": "OAuth Refresh Token", "sensitive": true }, "oauth.accessToken": { "label": "Cached Access Token", "sensitive": true, "advanced": true }, "oauth.expiresAt": { "label": "Cached Access Token Expiry", "help": "Unix epoch milliseconds used only for the cached access-token fast path.", "advanced": true } }, "configSchema": { "type": "object", "additionalProperties": false, "properties": { "enabled": { "type": "boolean" }, "defaults": { "type": "object", "additionalProperties": false, "properties": { "meeting": { "type": "string" } } }, "preview": { "type": "object", "additionalProperties": false, "properties": { "enrollmentAcknowledged": { "type": "boolean" } } }, "defaultTransport": { "type": "string", "enum": ["chrome", "chrome-node", "twilio"], "default": "chrome" }, "defaultMode": { "type": "string", "enum": ["realtime", "transcribe"], "default": "realtime" }, "chrome": { "type": "object", "additionalProperties": false, "properties": { "audioBackend": { "type": "string", "enum": ["blackhole-2ch"], "default": "blackhole-2ch" }, "launch": { "type": "boolean", "default": true }, "browserProfile": { "type": "string" }, "guestName": { "type": "string", "default": "OpenClaw Agent" }, "reuseExistingTab": { "type": "boolean", "default": true }, "autoJoin": { "type": "boolean", "default": true }, "joinTimeoutMs": { "type": "number", "default": 30000 }, "waitForInCallMs": { "type": "number", "default": 20000 }, "audioFormat": { "type": "string", "enum": ["pcm16-24khz", "g711-ulaw-8khz"], "default": "pcm16-24khz" }, "audioInputCommand": { "type": "array", "default": [ "sox", "-q", "-t", "coreaudio", "BlackHole 2ch", "-t", "raw", "-r", "24000", "-c", "1", "-e", "signed-integer", "-b", "16", "-L", "-" ], "items": { "type": "string" } }, "audioOutputCommand": { "type": "array", "default": [ "sox", "-q", "-t", "raw", "-r", "24000", "-c", "1", "-e", "signed-integer", "-b", "16", "-L", "-", "-t", "coreaudio", "BlackHole 2ch" ], "items": { "type": "string" } }, "bargeInInputCommand": { "type": "array", "items": { "type": "string" } }, "bargeInRmsThreshold": { "type": "number", "default": 650 }, "bargeInPeakThreshold": { "type": "number", "default": 2500 }, "bargeInCooldownMs": { "type": "number", "default": 900 }, "audioBridgeCommand": { "type": "array", "items": { "type": "string" } }, "audioBridgeHealthCommand": { "type": "array", "items": { "type": "string" } } } }, "chromeNode": { "type": "object", "additionalProperties": false, "properties": { "node": { "type": "string" } } }, "twilio": { "type": "object", "additionalProperties": false, "properties": { "defaultDialInNumber": { "type": "string" }, "defaultPin": { "type": "string" }, "defaultDtmfSequence": { "type": "string" } } }, "voiceCall": { "type": "object", "additionalProperties": false, "properties": { "enabled": { "type": "boolean", "default": true }, "gatewayUrl": { "type": "string" }, "token": { "type": "string" }, "requestTimeoutMs": { "type": "number", "default": 30000 }, "dtmfDelayMs": { "type": "number", "default": 2500 }, "introMessage": { "type": "string" } } }, "realtime": { "type": "object", "additionalProperties": false, "properties": { "provider": { "type": "string", "default": "openai" }, "model": { "type": "string" }, "instructions": { "type": "string", "default": "You are joining a private Google Meet as an OpenClaw agent. Keep spoken replies brief and natural. When a question needs deeper reasoning, current information, or tools, call openclaw_agent_consult before answering." }, "introMessage": { "type": "string", "default": "Say exactly: I'm here and listening." }, "agentId": { "type": "string", "description": "OpenClaw agent id used by openclaw_agent_consult. Defaults to \"main\"." }, "toolPolicy": { "type": "string", "enum": ["safe-read-only", "owner", "none"], "default": "safe-read-only" }, "providers": { "type": "object", "additionalProperties": { "type": "object", "additionalProperties": true } } } }, "oauth": { "type": "object", "additionalProperties": false, "properties": { "clientId": { "type": "string" }, "clientSecret": { "type": "string" }, "refreshToken": { "type": "string" }, "accessToken": { "type": "string" }, "expiresAt": { "type": "number" } } }, "auth": { "type": "object", "additionalProperties": false, "properties": { "provider": { "type": "string", "enum": ["google-oauth"] }, "clientId": { "type": "string" }, "clientSecret": { "type": "string" }, "tokenPath": { "type": "string" } } } } } }