Join a Google Meet call, transcribe it, and send follow-ups
When the user asks the agent to sit in on a Google Meet meeting, this recipe joins the call, transcribes the live captions into a transcript, optionally speaks in realtime, and then summarizes and sends follow-ups.
Requirements
- Realtime speaking mode costs real money (OpenAI Realtime is pay-per-audio-minute) and requires a virtual audio device set up on the machine running the bot.
How to use
By default the gateway machine runs the Playwright bot locally. For a remote node, the bot runs on a different machine that has a signed-in Chrome and, for realtime, a configured audio bridge — useful when the gateway is a headless Linux box but the user's signed-in Chrome lives on their Mac.
Run hermes meet setup to preflight local prerequisites.
All tools accept node?: pass a registered node name (or "auto" for the sole node) to operate a remote bot instead of a local one; omit it for local operation.
Windows is not supported.
On a remote node, the transcript lives on the node host's disk; use meet_transcript(node=...) to read it over RPC.
Only https://meet.google.com/... URLs pass the URL regex.
There is no calendar scanning and no auto-dial.
Remote nodes use bearer-token auth: tokens are generated on the node (32 hex chars, persisted in $HERMES_HOME/workspace/meetings/node_token.json) and must be copied to the gateway via hermes meet node approve.
Speech via meet_say is rate-limited by the OpenAI Realtime session; spam protection is the bot's job, but still don't queue hundreds of lines.
Pick realtime mode only when the user actually wants the agent to speak.
Prerequisites are a one-time setup the user must handle; the easiest path is to run the built-in installer.
The built-in installer handles pip dependencies and Chromium for transcribe mode, and the realtime extras for speaking mode, plus optional auth and preflight checks.
hermes plugins enable google_meet
hermes meet install # pip deps + Chromium (transcribe only)
hermes meet install --realtime # + pulseaudio-utils / brew blackhole+ffmpeg
hermes meet auth # optional; skips guest-lobby wait
hermes meet setup # preflight checks
hermes meet install --realtime prompts before running sudo apt-get (Linux) or brew install (macOS); pass --yes to skip the prompt. It will not touch your macOS default-input setting — you have to select BlackHole 2ch in System Settings yourself before starting a realtime meeting.
Alternatively, set everything up manually.
pip install playwright websockets && python -m playwright install chromium
# For realtime mode, additionally:
# Linux: sudo apt install pulseaudio-utils
# macOS: brew install blackhole-2ch ffmpeg
# → System Settings → Sound → Input → BlackHole 2ch
# Then set OPENAI_API_KEY or HERMES_MEET_REALTIME_KEY in ~/.hermes/.env
For a remote node, install the dependencies and enable the plugin on the machine with the signed-in Chrome, run the node server there, then approve the node from the gateway and confirm it is reachable.
# on the user's Mac (where Chrome is signed in):
pip install playwright websockets && python -m playwright install chromium
hermes plugins enable google_meet
hermes meet node run --display-name my-mac # persistent server
# copy the printed token
# on the gateway:
hermes meet node approve my-mac ws://<mac-ip>:18789 <token>
hermes meet node ping my-mac # confirm reachable
In realtime meetings, meet_say(text="...") queues text for TTS; the speech lags by about 2 seconds, so don't spam it.
Captions are only as good as Google Meet's live captions, which are English-biased and lossy on overlapping speakers.
In guest mode the bot sits in the lobby until a host admits it; warn the user, since hermes meet auth avoids this.
If the host doesn't admit the bot within 5 minutes (configurable via the HERMES_MEET_LOBBY_TIMEOUT env), the bot leaves and meet_status reports leaveReason: "lobby_timeout".
Only one active meeting is allowed per install per location; a second meet_join leaves the first.
Realtime mode needs a virtual audio device; if the audio bridge setup fails, the bot falls back to transcribe mode and flags it in meet_status().error.
meet_say requires mode='realtime' on the originating meet_join; calling it against a transcribe-mode meeting returns a clear error.
Barge-in is best-effort: when a caption attributed to a real participant arrives while the bot is generating audio, the bot sends response.cancel to OpenAI Realtime, but captions take about 500ms to show up, so the bot will talk over the first second or so of a human interruption.
The meeting transcript is written to a per-meeting file under the workspace meetings directory.
$HERMES_HOME/workspace/meetings/<meeting-id>/transcript.txt
Source: nousresearch/hermes-agent and its contributors. License: MIT.
Copyright (c) 2025 Nous Research
Translation and editorial adaptation by ClawCases.
>Resources
>Related Use Cases
1-3-1 Communication Rule Decision Brief
Writes 1-3-1 decision briefs for tasks with multiple viable approaches, producing a one-sentence problem framing, three options with pros and cons, and a single recommendation with definition of done and implementation plan.
AI-Powered Earnings Tracker
Stay on top of earnings season across dozens of tech companies without manually checking multiple sources and remembering report dates for every AI/tech earnings report.
Sketch disposable HTML design mockups for comparison
This skill sketches 2–3 interactive, disposable HTML mockups of a UI idea so you can compare design directions side-by-side before committing to one, then presents an opinionated head-to-head comparison.