AI agents as real participants in your video calls — the open-source desktop client (Electron + MCP). Bots join Google Meet / Slack, hear, speak, show an avatar, and share a whiteboard.
JavaScript
10
1,603 commits
updated Oct 6, 2026
Vibeconferencing is a desktop app that lets an AI agent (the one you already use: Claude Code, Codex, Grokbot, Meta's Muse, or any agent that speaks MCP) join your Google Meet calls as a real participant. It hears the conversation and talks back out loud. And because it's your actual agent, not a notetaker, it builds, researches, and acts on what's said while you're still in the call, and can share its screen to show the work.
Status: early and experimental. We built this for ourselves and are sharing it as is. It runs on macOS (the steps below), Linux, including an always-on cloud box (docs/cloud-box.md), and Windows. Builds for all three are in every release. It joins Google Meet and Slack huddles; Zoom support is in progress (want to help?). See Known rough edges before your first call.
Or grab a build for macOS, Linux or Windows from the latest release, then follow the 5-minute setup below.

A real call, Sept 24, 2026: two humans and six agents from four model families (Claude, Codex, Grok, Meta's Muse) in one Meet.
Most meeting AI sends a summary after everyone leaves. This one works in the call. Because the bot is your Claude Code / Codex / Cursor session, it can research a question, draft the email, write the code, or build the thing you're discussing, live, while everyone's still in the room. It shares its screen to show the work as it evolves, and you take the result with you the moment you hang up.
Everyone else: a transcript, later. Yours: the first version, now.

A real call, Aug 11, 2026: asked for something visually compelling, one bot put a clay "Better Call Jimmy" on the board while the other was still thinking.
You drive it from your agent (just say "join my call"); the app is the "body" that gets it into the meeting.
You'll need:
.deb or installer from the same release; for an always-on Linux box in the cloud, see docs/cloud-box.md.)Download the .dmg from the latest release, open it, and drag Vibeconferencing into your Applications folder. Open it once.
The app is your bot's window: its name, its face, and one button to bring it into a call.
The app needs no microphone, camera, or screen-recording permission: the bot's mic and camera are virtual. One optional prompt may appear, Browser Automation, which lets the app find your open Meet by itself. Skip it and just paste the Meet link into the app.
Signing in gets you access to the shared whiteboard. It's optional and not automatic; sign in anytime from App Settings (⌘,).
Installing the app teaches Claude Code a new /join-call command. Quit and reopen Claude Code once so it shows up.
Open any Google Meet in your browser: a new meeting, a calendar event, whatever.
In Claude Code, type:
/join-call
The bot finds your open Meet, joins it, and asks to be let in. (No need to copy any link; it detects the meeting automatically.)
Prefer a click? Press Join call in the app instead. It opens a terminal with a fresh Claude Code session that joins the call for you.
Click Admit in your Meet window when it asks. Your bot appears as a participant. Now just talk. After a short pause it answers out loud, like anyone else in the call. Say "we're done" (or close Claude Code) when you want it to leave.
That's it. You're in a call with your bot. 🎉
Out of the box the bot uses the basic built-in Mac voice: fine for testing, but robotic.

Turn on a bot's realtimeVoice preference before it joins to try OpenAI's speech-to-speech model in the voice seat. Your agent stays in the call as the "slow half", feeding the voice model facts instead of speaking itself. It needs an OpenAI API key in App Settings (⌘,), and call audio goes to OpenAI for as long as the realtime session is running, so expect per-minute charges. Details: docs/realtime-voice-in-app.md.
Talk in plain language, no commands needed:
Any MCP-capable agent can drive the bot. Claude Code is wired up automatically when you install the app. For other agents you point them at the app's bundled MCP server once. See docs/codex.md (Codex CLI) and the Quickstart.

A real call, Sept 23, 2026: two Claude Code sessions, a Codex session and a Grok bot, taking turns in one Meet.
Worth knowing before your first call:
read_whiteboard.If a call goes wrong, the bot's panel has a 📤 Share this call's log button. Clicking it sends that call's log so far and keeps sending it until the call ends; logs can contain transcript text. (Continuous remote logging is a separate setting and is off by default.)
Found a bug? Open an issue with what you said, what the bot did, and your app version. Want to help? Issues labelled good-for-bot have been vetted by a human as safe for an autonomous coding agent to attempt, so you can point your own agent at one.
Install · Quickstart · Multi-bot setups · Preferences · What you can ask (MCP tools) · Modes & states · Troubleshooting
What's in here
| Dir | What it is |
|---|---|
electron-app/ | The Electron app: audio pipeline, virtual camera, Meet/Slack automation, turn-taking, the local control server, and the settings UI. |
mcp-server/ | The MCP server the agent talks to (tools like join_call, wait_for_speech, speak, update_whiteboard, set_voice). Bundled into the app. |
extension/ | Injected page scripts (Runway avatar bridge, LiveKit client). Bundled into the app. |
scripts/, tests/, docs/ | Test harness (fleet + nightly), unit/e2e tests, and user docs. |
How it works
AI agent (Claude Code) ──MCP──▶ mcp-server ──HTTP──▶ Electron app ──▶ Google Meet / Slack
(speak, listen, (bundled) (audio in/out, (as a real
whiteboard, …) virtual camera) participant)
The agent never touches WebRTC. It calls MCP tools; the app does the real-time media work (plays synthesized speech into a virtual mic, renders the avatar/whiteboard into a virtual camera) and drives the Meet/Slack UI.
Build (Node ≥ 18 and pnpm):
cd electron-app
pnpm install
pnpm dev # run from source
pnpm dist # signed/notarized .dmg (Apple Developer creds needed; dist:fast skips notarization)
pnpm dist reads its Apple credentials from the environment — all three are
required, and electron-builder fails the build naming the one that's missing:
export APPLE_ID=... # Apple Developer account email
export APPLE_APP_SPECIFIC_PASSWORD=... # appleid.apple.com → App-Specific Passwords
export APPLE_TEAM_ID=PNPVJ6J7X2
With none of them set, notarization is skipped with a warning rather than
failing — you get a signed but un-notarized app. Use dist:fast when that's
what you actually want.
The build bundles ../mcp-server and ../extension, so keep the repo layout intact.
Tests. Unit tests need no build or install (just Node ≥ 18):
npm test # 196 unit tests: config scoping, profile resolution, turn-taking gating, whiteboard layout, updates, …
tests/e2e/ drives real Meet/Slack calls via the fleet harness (scripts/); the nightly runner is scripts/scheduled-meet-test.sh (see scripts/SCHEDULING.md).
By default the app talks to the hosted vibeconferencing.com service (room sync, shared whiteboard, sign-in). The websiteUrl and syncBaseUrl preferences let you point it elsewhere if you run your own backend. The hosted backend and web frontend are not part of this repository.
MIT © 2026 Stan James
AI agents as real participants in your video calls — the open-source desktop client (Electron + MCP). Bots join Google Meet / Slack, hear, speak, show an avatar, and share a whiteboard.
JavaScript
10
1,603 commits
updated Oct 6, 2026
Vibeconferencing is a desktop app that lets an AI agent (the one you already use: Claude Code, Codex, Grokbot, Meta's Muse, or any agent that speaks MCP) join your Google Meet calls as a real participant. It hears the conversation and talks back out loud. And because it's your actual agent, not a notetaker, it builds, researches, and acts on what's said while you're still in the call, and can share its screen to show the work.
Status: early and experimental. We built this for ourselves and are sharing it as is. It runs on macOS (the steps below), Linux, including an always-on cloud box (docs/cloud-box.md), and Windows. Builds for all three are in every release. It joins Google Meet and Slack huddles; Zoom support is in progress (want to help?). See Known rough edges before your first call.
Or grab a build for macOS, Linux or Windows from the latest release, then follow the 5-minute setup below.

A real call, Sept 24, 2026: two humans and six agents from four model families (Claude, Codex, Grok, Meta's Muse) in one Meet.
Most meeting AI sends a summary after everyone leaves. This one works in the call. Because the bot is your Claude Code / Codex / Cursor session, it can research a question, draft the email, write the code, or build the thing you're discussing, live, while everyone's still in the room. It shares its screen to show the work as it evolves, and you take the result with you the moment you hang up.
Everyone else: a transcript, later. Yours: the first version, now.

A real call, Aug 11, 2026: asked for something visually compelling, one bot put a clay "Better Call Jimmy" on the board while the other was still thinking.
You drive it from your agent (just say "join my call"); the app is the "body" that gets it into the meeting.
You'll need:
.deb or installer from the same release; for an always-on Linux box in the cloud, see docs/cloud-box.md.)Download the .dmg from the latest release, open it, and drag Vibeconferencing into your Applications folder. Open it once.
The app is your bot's window: its name, its face, and one button to bring it into a call.
The app needs no microphone, camera, or screen-recording permission: the bot's mic and camera are virtual. One optional prompt may appear, Browser Automation, which lets the app find your open Meet by itself. Skip it and just paste the Meet link into the app.
Signing in gets you access to the shared whiteboard. It's optional and not automatic; sign in anytime from App Settings (⌘,).
Installing the app teaches Claude Code a new /join-call command. Quit and reopen Claude Code once so it shows up.
Open any Google Meet in your browser: a new meeting, a calendar event, whatever.
In Claude Code, type:
/join-call
The bot finds your open Meet, joins it, and asks to be let in. (No need to copy any link; it detects the meeting automatically.)
Prefer a click? Press Join call in the app instead. It opens a terminal with a fresh Claude Code session that joins the call for you.
Click Admit in your Meet window when it asks. Your bot appears as a participant. Now just talk. After a short pause it answers out loud, like anyone else in the call. Say "we're done" (or close Claude Code) when you want it to leave.
That's it. You're in a call with your bot. 🎉
Out of the box the bot uses the basic built-in Mac voice: fine for testing, but robotic.

Turn on a bot's realtimeVoice preference before it joins to try OpenAI's speech-to-speech model in the voice seat. Your agent stays in the call as the "slow half", feeding the voice model facts instead of speaking itself. It needs an OpenAI API key in App Settings (⌘,), and call audio goes to OpenAI for as long as the realtime session is running, so expect per-minute charges. Details: docs/realtime-voice-in-app.md.
Talk in plain language, no commands needed:
Any MCP-capable agent can drive the bot. Claude Code is wired up automatically when you install the app. For other agents you point them at the app's bundled MCP server once. See docs/codex.md (Codex CLI) and the Quickstart.

A real call, Sept 23, 2026: two Claude Code sessions, a Codex session and a Grok bot, taking turns in one Meet.
Worth knowing before your first call:
read_whiteboard.If a call goes wrong, the bot's panel has a 📤 Share this call's log button. Clicking it sends that call's log so far and keeps sending it until the call ends; logs can contain transcript text. (Continuous remote logging is a separate setting and is off by default.)
Found a bug? Open an issue with what you said, what the bot did, and your app version. Want to help? Issues labelled good-for-bot have been vetted by a human as safe for an autonomous coding agent to attempt, so you can point your own agent at one.
Install · Quickstart · Multi-bot setups · Preferences · What you can ask (MCP tools) · Modes & states · Troubleshooting
What's in here
| Dir | What it is |
|---|---|
electron-app/ | The Electron app: audio pipeline, virtual camera, Meet/Slack automation, turn-taking, the local control server, and the settings UI. |
mcp-server/ | The MCP server the agent talks to (tools like join_call, wait_for_speech, speak, update_whiteboard, set_voice). Bundled into the app. |
extension/ | Injected page scripts (Runway avatar bridge, LiveKit client). Bundled into the app. |
scripts/, tests/, docs/ | Test harness (fleet + nightly), unit/e2e tests, and user docs. |
How it works
AI agent (Claude Code) ──MCP──▶ mcp-server ──HTTP──▶ Electron app ──▶ Google Meet / Slack
(speak, listen, (bundled) (audio in/out, (as a real
whiteboard, …) virtual camera) participant)
The agent never touches WebRTC. It calls MCP tools; the app does the real-time media work (plays synthesized speech into a virtual mic, renders the avatar/whiteboard into a virtual camera) and drives the Meet/Slack UI.
Build (Node ≥ 18 and pnpm):
cd electron-app
pnpm install
pnpm dev # run from source
pnpm dist # signed/notarized .dmg (Apple Developer creds needed; dist:fast skips notarization)
pnpm dist reads its Apple credentials from the environment — all three are
required, and electron-builder fails the build naming the one that's missing:
export APPLE_ID=... # Apple Developer account email
export APPLE_APP_SPECIFIC_PASSWORD=... # appleid.apple.com → App-Specific Passwords
export APPLE_TEAM_ID=PNPVJ6J7X2
With none of them set, notarization is skipped with a warning rather than
failing — you get a signed but un-notarized app. Use dist:fast when that's
what you actually want.
The build bundles ../mcp-server and ../extension, so keep the repo layout intact.
Tests. Unit tests need no build or install (just Node ≥ 18):
npm test # 196 unit tests: config scoping, profile resolution, turn-taking gating, whiteboard layout, updates, …
tests/e2e/ drives real Meet/Slack calls via the fleet harness (scripts/); the nightly runner is scripts/scheduled-meet-test.sh (see scripts/SCHEDULING.md).
By default the app talks to the hosted vibeconferencing.com service (room sync, shared whiteboard, sign-in). The websiteUrl and syncBaseUrl preferences let you point it elsewhere if you run your own backend. The hosted backend and web frontend are not part of this repository.
MIT © 2026 Stan James