mex-call
Claude Code, now in your Google Meet — with the memory and context powers of mex.
A bot joins your Google Meet, listens, and turns the conversation into bounded,
structured, agent-readable memory in your repo — the decisions, action items, and
open questions that get made in calls but never make it back to the code. Say
"Mex, …" and it answers in the chat or acts in the repo (create an issue, draft
a doc), grounded in what was actually said. It never speaks; output is chat, files,
and repo actions.
It runs on your coding agent's own brain — Claude Code (claude -p) or
Codex (codex exec), auto-detected — and on mex for project memory
(bundled; optional).
Install
mex-call needs a bot transport — the service that actually joins the Meet.
Recall is the zero-setup default; Vexa is an open-source, self-hostable
second option (see Meeting transport). For the default, grab
a free Recall.ai API key and put it where mex-call finds
it in any repo:
echo "RECALL_API_KEY=your-key" > ~/.mex-call.env
# Optional but recommended — much better wake-word ("Mex") + transcription accuracy.
# When set, mex-call auto-uses AssemblyAI for speech-to-text (see "Sharper transcription" below).
echo "ASSEMBLYAI_API_KEY=your-key" >> ~/.mex-call.env
RECALL_API_KEY is required (the bot transport); ASSEMBLYAI_API_KEY is optional — set it
for the best transcription, or skip it and mex-call uses Recall's built-in STT.
Claude Code → plugin
/plugin marketplace add theDakshJaitly/mex-call
/plugin install mex-call@mex-call
Then in any repo: /mex-call:call <google-meet-link>
Codex, Cursor, or any terminal → npm
npm install -g mex-call
Then in any repo: mex-call join <google-meet-link> — the brain auto-detects
Claude Code vs. Codex.
Dev note (Recall only): Recall pushes events to a public webhook. Run
ngrok http 8080 and mex-call auto-detects it (or set MEXCALL_PUBLIC_URL to a
deployed domain). Vexa needs none of this — it uses an outbound WebSocket.
Sharper transcription + wake word (AssemblyAI)
Recall's built-in speech-to-text often mis-hears the "Mex" wake word. AssemblyAI —
with the wake word primed as a keyterm — fixes that and markedly improves general
accuracy (Recall transport only).
Just set ASSEMBLYAI_API_KEY (in your repo .env or ~/.mex-call.env) and mex-call
uses AssemblyAI automatically — no flag, no Recall dashboard. mex-call runs its own
AssemblyAI streaming client from the bot's raw audio. (Currently mixed audio, so
transcripts read speaker "Unknown" — per-participant labels are coming.) Without the key,
it falls back to Recall's recallai_streaming and nudges you to set it.
Override with --provider:
recallai_streaming — Recall's built-in STT (keeps per-speaker labels).
assembly — Recall-managed AssemblyAI; add your key in the Recall dashboard (per region). Keeps speaker labels.
native — force the env-key AssemblyAI client explicitly.
Useful flags
mex-call join <link> accepts (run mex-call join --help for the full list):
| Flag | What it does |
|---|
--provider <p> | STT: native / recallai_streaming / meeting_captions / assembly. Default: AssemblyAI when ASSEMBLYAI_API_KEY is set, else recallai_streaming. |
--keyterms <csv> | Terms to bias AssemblyAI toward (default: Mex), e.g. --keyterms "Mex,Mexcall". |
--active-model <alias> | Model for the "Mex, …" reply (default sonnet). |
--transport <kind> | recall (default) or vexa. |
--no-actions | Disable in-call repo actions (Mex can still answer + log). |
--timings | Log a per-reply latency breakdown (queue wait / brain / chat send). |
--log-transcripts | Log every finalized transcript line + whether it matched the wake word. |
Meeting transport
The bot that joins the Meet sits behind a swappable MeetingTransport interface,
so mex-call ships with two. Choose with --transport (default recall):
| Recall.ai — default | Vexa — open option |
|---|
| Model | Closed, paid SaaS | Open-source (Apache-2.0); hosted or self-hostable |
| Setup | One API key | API key (hosted) or your own server (self-host) |
| Public webhook | Required (ngrok / MEXCALL_PUBLIC_URL) | Not needed — outbound WebSocket |
| Node | 18+ | 22+ (uses the built-in WebSocket) |
| Maturity | Proven | 🧪 shipped, not yet live-tested |
Recall (default):
echo "RECALL_API_KEY=your-key" > ~/.mex-call.env
mex-call join <google-meet-link> # --transport recall is implicit
Vexa (hosted): grab a key at vexa.ai, then:
echo "VEXA_API_KEY=your-key" >> ~/.mex-call.env
mex-call join <google-meet-link> --transport vexa