Just want a bot in a meeting?
Use the hosted service — no install. Sign in at vexa.ai/signin with a Google account, copy your API key from your account page, and send a bot:native_meeting_id is the id inside the join URL — abc-defg-hij in
https://meet.google.com/abc-defg-hij. New accounts get **0.30/hr (pricing). More
calls: Send a bot.
The rest of this page self-hosts the whole stack, which is how you get the agent plane as well.
This walkthrough takes you from a clean machine to two first wins: a bot capturing a live meeting transcript, and an agent answering from your workspace. You’ll self-host the whole stack with one command.
Prerequisites
- A Linux host (Ubuntu 24.04 recommended for production),
git,make, and Docker engine ≥ v26 (make allchecks and refuses older engines). A Mac with Docker Desktop works for a local evaluation — everything runs in containers either way. make allpulls the published, release-validated images — no build, any modest machine works;make litepulls the single-container all-in-one image and is lighter still. Building from source (make dev) is for contributors and wants 8 vCPUs / 16 GB RAM.- On Apple Silicon: arm64 images are published best-effort (not yet CI-validated) — see Deployment for details.
- A transcription (STT) token — get one free at
vexa.ai/account, or self-host transcription on a GPU. Default spawns require STT and answer503when it is unset; capture-only is{"transcribe_enabled": false}onPOST /bots(orTRANSCRIBE_ENABLED=falsefor the whole deployment). See Configuration.
1. Install and start
make all brings up the whole stack and prints an API key + your URLs when it finishes:
make all seeds .env from .env.example on first run and mints a self-host API key for you
(via deploy/compose/bin/provision-token). The seeded .env ships with every credential empty
— make all prints a warning box (and ⚠ lines in the banner) until you fill them: the STT pair for
win 1 (transcripts), one model credential for win 2 (agent chat) — either in .env or under
Settings → Models in the Terminal. To mint additional scoped keys yourself, see
Authentication.2. First win — capture a meeting (UI)
1
Open the terminal
Go to
http://localhost:13000. You’re already signed in to a self-host account.2
Send a bot to a meeting
Start a Google Meet, Zoom, or Teams call, copy the join URL, and add it from the UI. A bot joins
the call as a participant — no plugin, no host setup.
3
Watch the transcript stream
Speak. Speaker-attributed segments appear live, draft-then-confirmed, as the meeting runs.
2′. Same thing over the API
Use the keymake all printed, then send a bot and read the transcript:
3. Second win — ask your workspace a question
Every captured meeting compiles into your workspace — a Markdown knowledge base an agent reads and writes like a developer in a repo. Chat with it:message-delta frames carry the reply, commit
frames mark anything the agent recorded. See the Agent API.
4. Third win — connect your calendar
Stop pasting links: give Vexa your calendar’s secret ICS address (Google Calendar → Settings → your calendar → Integrate calendar → Secret address in iCal format, the…/private-…/basic.ics
one — not the public address above it). Every upcoming event imports; Meet/Zoom/Teams events are
armed for auto-join and link-less events remain visible until you add a link. On a Google
Workspace domain the secret-address field may need a one-time admin unlock
(how).
POST /user/calendars/{calendar_id}/sync for an immediate result, or wait for the background
cycle. Full walkthrough: Calendar sync. Complete endpoint reference:
Calendar API.
Next steps
Plan and share a meeting
Prepare a shared knowledge space and invite the people you’re meeting.
Get a report after every meeting
A routine that writes notes, decisions, and follow-ups when a call ends.
Brief me every morning
An unattended agent on a cron schedule.
Authentication
Mint, scope, and rotate API keys for the full stack.
Deploy to production
Docker Compose self-host, configuration, and no-egress transcription.