Skip to main content
Paste this into the Claude Code session already working on your project:
Run /join-call from the session that already knows your project — not a fresh terminal. A bot with your project in context is the whole point: it can answer questions about the work and write the follow-up afterward.

Agent instructions

1

Check the MCP

Use the bundled vibeconferencing MCP. If its tools are absent, ask the operator to open the app, then run /mcp and reconnect it.
2

Join

Run /join-call (the skill accepts a full Meet URL). If you call the raw join_call tool yourself, pass the meet code (xxx-xxxx-xxx) — the tool does not parse URLs (server.js:2645-2649).
3

Wait — without self-healing

Do not pretend you joined. Wait until the tool reports that you are in the meeting; a human may need to click Admit, and Google Meet sometimes hides that button behind the ⋮ overflow menu with a “potential risks” warning. Waiting several minutes is normal. Keep polling wait_for_speech — do not conclude the app is broken.
4

Participate visibly

Listen with wait_for_speech, speak with speak, and use chat or the whiteboard when useful. Leave with leave_call.

Two guarantees, stated honestly

  • Speaker attribution is Meet’s caption label, verbatim. Transcript entries carry whatever name Meet renders beside the caption block (google-meet-provider.js:2535-2570) — scraped, not diarized. Two participants with the same display name are indistinguishable; dial-in callers appear however Meet labels them. If you are writing one person’s words into one person’s file, treat attribution as best effort and confirm anything that matters.
  • Admission state is reported, not inferred. get_room_info returns navigating, joining, waiting-to-be-admitted, and in-call; a denial is detected when the in-call UI never appears within a grace period, and the app retries with visible status (“Denied — reloading to retry join”, google-meet-provider.js:1632, :1818). So poll get_room_info for the state; don’t guess from wait_for_speech timeouts alone.

The four field rules

Learned the hard way, on real calls. Breaking any of these takes down a working call.
If a tool call fails with a connection error, the fix is never to restart the Vibeconferencing app. The app may have moved to a new local port (it walks from 7865 upward when a port is taken) — killing it makes this worse, and a kill-and-relaunch loop is how working calls die. Instead: tell the operator, and re-check the port (hover the bot name in the app panel to see it). Restarting is the operator’s decision, made in the app, not yours.The stale-teardown wedge (#254) is fixed in current builds: teardown completes directly, a 10-second watchdog catches a hang, and any unfinished teardown is repaired on the next join (main.js:750-827, :1184-1191). Quit-and-reopen is a last resort after all of that fails — an operator decision, still never the agent’s.
Whatever name the bot joins the Meet under is fixed for the whole call — routing, the tile, and wake-words all hang off it. You cannot rename mid-call. To change identity: say so plainly, leave_call, and rejoin under the new name. Until then, answer to the tile name.
If you are driving a bot from a session, the operator must not click the app’s Join/Add to call buttons for that bot — the app spawns its own session and two agents end up talking through one mouth. If you see a displacement message, stand down.
“Waiting to be admitted” for minutes, a “potential risks” flag on the host’s screen, an Admit button hidden in the ⋮ menu — all normal since Google Meet added its guest queue. Say what you are waiting for out loud in the terminal so the operator does not conclude you crashed.
You are a visible participant, not a hidden listener. Make your presence clear and follow the meeting’s consent rules.