Skip to main content

Meeting Proxy

V2 only — invite-only edition. This is part of AI Partner V2 and is not in the open-source V1 you self-host from the Quick Start. V2 is available now, by invite. See V1 vs V2.

How meeting attendance works

When you give AI Partner a meeting URL, it:

  1. Boots a containerized Linux desktop (Xvfb + PulseAudio virtual audio)
  2. Opens Chromium, navigates to the URL, and joins the meeting
  3. Verifies the join was successful by probing platform-specific UI selectors
  4. Starts MeetingAudioLoop — captures participants' audio in real time
  5. Filters silence using voice activity detection (RMS energy threshold)
  6. Transcribes speech with Whisper STT
  7. Generates contextual responses using your goals, USER.md, and SOUL.md
  8. Speaks via your configured voice clone provider
  9. After the meeting ends: saves transcript + summary, extracts action items, asks for approval

The container has full access to all 160+ AI Partner tools via an internal bridge — so in a meeting, the agent can search the web, query your knowledge base, look up a contact in HubSpot, or check a Sentry issue in real time before responding.


Prerequisites

  • Docker Desktop running
  • T3 container tier enabled (it's on by default)
  • A live meeting URL
  • At least one LLM provider configured

Recommended for the full experience:

  • USER.md with your name, role, and context
  • GOALS.md with the objective you want the agent to advance
  • A voice clone configured in USER.md

Joining a meeting

Method 1: Paste URL in chat

Paste any supported meeting URL directly into the chat input:

https://meet.google.com/abc-defg-hij

AI Partner detects the URL and starts the meeting pipeline automatically. To add context:

https://meet.google.com/abc-defg-hij

Join as "Alex Chen". This is a client call with Acme Inc.
Goal: get their sign-off on the Q2 timeline.
If they raise the budget concern, reference the ROI numbers in our proposal.

Method 2: Use the Meetings panel

Go to sidebar → Meetings → + New Meeting:

  • Paste the meeting URL
  • Set a display name (what participants will see)
  • Set the meeting objective (overrides GOALS.md for this session)
  • Click Join

Configuring your voice

The agent speaks using a Text-to-Speech voice. Set it in workspace/USER.md:

voice_profile: elevenlabs:your-voice-id

Supported TTS providers:

ProviderConfigQuality
ElevenLabselevenlabs:<voice_id>Best — realistic voice cloning
MiniMaxminimax:<voice_id>Good — fast, cost-effective
OpenAI TTSopenai:<voice_name> (e.g., openai:nova)Good — no clone, preset voices
Browser fallbackbrowserBasic — uses system TTS, no cloning

To get a voice ID from ElevenLabs:

  1. Sign up at elevenlabs.io
  2. Create a voice clone from a ~1-minute audio sample of your voice
  3. Go to Voices → click your voice → copy the Voice ID
  4. Add to .env: ELEVENLABS_API_KEY=your_key

AI disclosure

On the first response in any meeting, the agent prepends:

"Just to be transparent — I'm an AI assistant joining on [Your Name]'s behalf. [Your Name] will review this conversation. Please continue as you normally would."

This is standard behavior. You can configure it in AUTHORITY.md:

## Auto
- action: skip_ai_disclosure + counterparty: colleague # don't disclose with colleagues

Or disable it entirely in Settings → Meeting Proxy → AI Disclosure.


How the agent decides what to say

In each speaking turn, the agent reasons using:

InputHow it's used
Live transcript (last 10 turns)Immediate conversation context
USER.mdYour name, role, company, background context
GOALS.mdWhat you're trying to achieve in this meeting
SOUL.mdYour communication style (direct/diplomatic, formal/casual)
Counterparty recordsWho these participants are, relationship class, past interactions
Tool callsWeb search, knowledge base, CRM lookup — in real time if needed

Example: if the client raises a concern about integration timeline, and your GOALS.md says "get timeline sign-off by end of meeting", the agent recognizes this as an obstacle to the goal and constructs a response that addresses the concern while pushing toward commitment.


Real-time controls

While a meeting is active, the Meeting Status panel shows live status and provides controls:

ControlWhat it does
Leave meetingGracefully exits; triggers post-meeting pipeline
MuteStops speaking but continues listening and transcribing
Force respondTriggers an immediate response from the agent
Add instructionSend a real-time instruction to the agent: "Don't mention pricing"
View transcriptScrollable live transcript panel

Post-meeting pipeline

When the meeting ends (via Leave button or silence detection after ~60s of silence):

  1. Transcript savedworkspace/meetings/<sessionId>/transcript.md
  2. Summary generated — LLM creates workspace/meetings/<sessionId>/summary.md with:
    • Key decisions made
    • Open questions
    • Progress against your meeting objective
    • Action items with assigned parties
  3. Action items extracted — each item gets an AuthorityPolicy evaluation:
    • reply_email to follow up? → draft_and_ask via Telegram
    • schedule_event for follow-up call? → auto or draft_and_ask per your rules
  4. Telegram notifications — approval requests for each action item
  5. Files panel — transcript and summary available for download

Supported platforms

PlatformBrowser joinAudioNotes
Google MeetMost reliable; Meet allows browser guests cleanly
Microsoft Teamsteams.live.com (browser) — use the Meet Now link
Zoomzoom.us/j/ — web client, no app install
Webex⚠️May show CAPTCHA on first join per IP

The agent joins as a browser participant. Participants will see a browser join (no native app indicator). In Teams, it shows as a Guest. In Meet, it shows as the display name you configured. In Zoom, it shows as the name set in the join flow.


Limitations

Known limitations:

  • If the platform requires download of a native app (some Zoom configurations), the browser join fails. Use a "Meet Now" or "Join from browser" link.
  • Breakout rooms are not supported — the agent can only participate in the main room.
  • Very long meetings (3+ hours) may hit the container's resource limits — the agent exits gracefully and saves the transcript up to that point.
  • Background noise in the recorded audio affects Whisper transcription quality. Meetings with clean audio (headsets, quiet rooms) transcribe better.

Testing without a real meeting

Use Google Meet's "instant meeting" feature:

  1. Go to meet.google.comNew meeting → Start an instant meeting
  2. Copy the meeting URL
  3. Paste it into AI Partner chat
  4. Speak something in the meeting → watch it appear in the transcript panel
  5. Click Leave meeting → receive the post-meeting summary