npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@aivibeclaw/meeting-bot

v2026.7.2

Published

AivibeClaw meeting-attendance plugin: an agent joins Zoom, Webex, Microsoft Teams, and Google Meet meetings from a meeting URL and participates with voice.

Downloads

24

Readme

@aivibeclaw/meeting-bot

An AivibeClaw plugin that lets an agent join a meeting from a meeting URL and participate with voice across Zoom, Webex, Microsoft Teams, and Google Meet.

Give it a meeting URL. It detects the platform, opens the provider's web client in a headless Chrome tab (via the gateway CDP browser.request transport), dismisses launch/consent prompts, joins under the agent's display name, and keeps the microphone muted by default. In talk-back modes it bridges audio through the same voice-call substrate the voice-call and google-meet plugins use: agent TTS is played into the meeting mic and meeting audio is captured for STT, producing a live transcript that can be written to a durable artifact bundle.

Honest per-platform readiness

This plugin is deliberately transparent about what is production-tested versus what needs live tuning. Do not treat "needs-live-tuning" as reliable for unattended joins until the selectors have been verified against the current web client.

| Platform | Status | Transport | Notes | | ------------------- | ----------------- | --------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | | Google Meet | Production | Delegated to @aivibeclaw/google-meet (Chrome/CDP) | Reuses the shipped, tested Meet join/speak/leave flow. Requires @aivibeclaw/google-meet installed. | | Zoom | Needs live tuning | Generalized Chrome web client (/wc/join/<id>) | Drives name/join/mute selectors on the Zoom browser client. Selectors are best-effort; consent gates and waiting rooms may need host action. | | Webex | Needs live tuning | Generalized Chrome web client | Drives name/join/mute selectors on the Webex web app. Some orgs force the desktop app or a lobby. | | Microsoft Teams | Needs live tuning | Generalized Chrome web client (meetup-join, msLaunch=false) | Drives name/join/mute selectors on the Teams light web client. Tenant policy may require sign-in or lobby admission. |

The Google Meet path is production-ready because it delegates to the existing, proven @aivibeclaw/google-meet plugin rather than re-implementing Meet DOM automation. Zoom, Webex, and Teams share one generalized join engine (src/transports/chrome.ts) whose per-platform DOM selectors live in src/platforms/detect.ts — that file is the single tuning surface. The selectors are written against each provider's current public web client but have not been run through a full live-join matrix, so they are honestly marked needs-live-tuning. When a provider changes its web client, update the selector profile in detect.ts; no engine changes are needed.

What the generalized engine hardens (no live account required)

The Zoom/Webex/Teams join engine is built for cross-platform reliability as far as is achievable without live meeting accounts. It does not fake success:

  • Ordered, multi-strategy selectors. Every action (nameInput, joinButton, muteMicButton, unmuteMicButton, dismissPrompt, cookieConsent, inCallMarker, lobbyMarker, loginMarker) is an ordered list of regex candidates tried most-specific-first, so one label change falls through to the next candidate instead of breaking the whole flow.
  • Cookie / consent then app-launch dismissal. Cookie/privacy banners are cleared first (they gate interactivity), then "open the app / continue in browser / audio choice" prompts, before name entry.
  • Name entry + verify. Fills INPUT and contenteditable name fields and verifies the value landed before proceeding.
  • Real mic state, not an echo. The mic policy is enforced by reading the actual observed mic control (an "unmute" affordance means currently muted), and the reported micMuted reflects that observed state — it is not the requested policy echoed back.
  • Join gated + retried with backoff. Join is clicked only when the name is ready and the page is neither in a lobby nor already in-call, capped to a bounded attempt count. The outer poll loop retries with exponential-ish backoff and tolerates transient page-navigation errors, giving up only after the wait window elapses.
  • Lobby / waiting-room aware. A detected lobby is surfaced as admission-required (not a hard failure); the engine keeps the participant muted and does not thrash the Join button.
  • Honest failures. When the client never reaches in-call, when a login wall is detected, or when browser control is genuinely unavailable, the engine returns a clear manualActionRequired reason and message — never a silent success. Talk-back speech stays blocked until the browser reports in-call.

Per-platform readiness notes:

  • Zoom — opens /wc/join/<id>; drives #input-for-name style name entry, the pre-join Join and the "Join Audio by Computer" dialog, and Mute/Unmute. Live tuning targets: the T&C "I Agree" gate, cookie banner, and waiting-room admission, which can require host action.
  • Webex — drives the web-app name field, "Join meeting"/"Join from browser", and Mute/Unmute audio; clears the OneTrust cookie banner. Live tuning targets: orgs that force the desktop app or a "wait for the host to admit you" lobby.
  • Microsoft Teams — forces the light web client (msLaunch=false), keeps the join on "Continue on this browser" / "Join on the web instead", drives "Type your name" (INPUT or contenteditable), "Join now", and Mute/Unmute. Live tuning targets: tenant sign-in policy and the "someone should let you in" lobby.

Architecture

meeting URL
   │
   ▼
platforms/detect.ts   detect platform + resolve web-client URL + selector profile
   │
   ├── google-meet ──▶ meet-delegate.ts ──▶ googlemeet.join/speak/leave (proven plugin)
   │
   └── zoom/webex/teams ──▶ transports/chrome.ts (generalized CDP join engine)
                                   │
                                   ▼
                         realtime.ts (audio bridge, reuses plugin-sdk/realtime-*)
                            • agent : mic audio → STT → AivibeClaw consult → TTS → mic
                            • bidi  : mic audio ↔ realtime voice model (duplex)
                                   │
                                   ▼
                         artifacts.ts → transcript.md / transcript.json / manifest.json
  • Audio substrate is reused, not reinvented: the default SoX/BlackHole 2ch command pair is the same duplex routing the voice-call and google-meet plugins use. Talk-back audio is currently macOS-only (BlackHole 2ch).
  • Agent consult reuses plugin-sdk/realtime-voice's consultRealtimeVoiceAgent so the meeting agent can delegate deep reasoning to an AivibeClaw agent while it speaks in the call.
  • Calendar auto-join reuses @aivibeclaw/google-meet's Google Calendar gateway as the calendar source instead of duplicating Google OAuth.

Tools

The plugin registers a single agent tool, meeting, gated by the manifest contracts.tools list so per-agent tool access and install-all-plugins discovery pick it up:

| Action | Description | | -------------------- | ------------------------------------------------------------------- | | meeting.join | Join a meeting from url (detects platform), mic muted by default. | | meeting.say | Speak message into a joined meeting (sessionId). | | meeting.leave | Leave a meeting (sessionId) and write the transcript artifact. | | meeting.status | Report session / in-call / speech-readiness state. | | meeting.transcript | Write the captured transcript to an artifact bundle. | | meeting.auto_join | Join today's calendar meeting (requires calendar.autoJoin=true). | | meeting.platforms | Return the per-platform readiness table above. |

The same actions are exposed as gateway methods meetingbot.join, meetingbot.say, meetingbot.leave, meetingbot.status, meetingbot.transcript, and meetingbot.autoJoin.

Modes

  • agent — meeting audio → STT → AivibeClaw agent consult → telephony TTS → mic.
  • bidi — meeting audio ↔ realtime voice model, direct duplex.
  • transcribe — observe-only; capture audio for the transcript without speaking.

Requirements

  • Google Meet: @aivibeclaw/google-meet plugin installed and signed in.
  • Talk-back (agent/bidi): a realtime STT/voice provider configured (e.g. OpenAI), plus BlackHole 2ch + SoX on macOS for local mic routing.
  • Calendar auto-join: @aivibeclaw/google-meet installed (calendar source).

Install

aivibeclaw plugins install @aivibeclaw/meeting-bot

deploy/install-all-plugins.sh installs it automatically as part of the core set.