From Voice to Action, Beyond English:Building a Custom Meeting Agent for Code-Switched Arabic and English
How a pocket recorder, an open-source Whisper fine-tune on serverless GPUs, and a set of agent skills turn a mixed Arabic and English meeting into briefs, emails and tasks.
Meeting AI is tuned for English. Our meetings aren't.
خلينا نعمل الـ follow-up بكرة, and send the deck to the client قبل الاجتماع
"Let's do the follow-up tomorrow, and send the deck to the client before the meeting." One sentence, three switches.
Off-the-shelf meeting assistants are built English-first. Mix Gulf Arabic and English mid-sentence (code-switching) and the Arabic gets dropped or guessed phonetically, and speakers get merged. If the transcript is wrong, no summary prompt can fix what comes after.
Keep the hardware. Replace the brain.
The PLAUD recorder is great hardware: small, always with me, good capture. Its bundled AI just wasn't built for how we talk. So I kept the device and its sync, pulled only the raw audio, and ran my own transcription and agent on top.
Four stages, from a pocket recorder to your inbox.
Record
PLAUD / any audio
Only the raw audio is pulled. Any folder of audio files works too.
Transcribe
Modal GPU: code-switching Whisper + speaker diarization
Who said what, in both languages. Scales to zero when idle.
Agent
Claude Code + skill files
Runs headless with a tight tool allowlist. The skill file is the product logic.
Actions
brief, tasks, email, Slack, wiki
Re-runs update instead of duplicate. A human checks anything outbound.
Above it all, my personal agent orchestrates the pipeline as one of its skills.
One recording in. Six things out.
Drop a recording and the agent runs the /meeting skill end to end. Here is what a single 50-second, code-switched meeting turns into.
Launch AR + EN together; pilot pricing still open.
Brief · Task Manager · @team
3-line summary, brief link, top action items.
projects/<project> → dated sync
drive: meetings/…/brief.html
Illustrative Fictional sample meeting. Writes are additive and re-runs update in place.
Fast and cheap enough to forget about.
Observed in production Single runs and my own usage, not guarantees.
What I'd tell myself before starting.
- 01Own the STT. For non-English meetings, the transcriber matters more than the LLM.
- 02Skills over giant prompts. Versionable, testable, swappable across agents.
- 03Spawn + poll on serverless. Return a job id instantly, then poll; no request nears the 150 s web limit.
- 04Deploy, never demo on a dev URL.
modal serveURLs vanish;modal deployis stable.
Install it with your agent
Paste this into Claude Code, Codex, OpenCode or Hermes. It clones, installs, runs an offline demo, installs the skill, and asks you before any login, token or GPU spend.
Read AGENT_SETUP.md in github.com/Chris-C3A/multilingual-meeting-agent and follow it step by step. Stop and ask me before any login, terms acceptance, token, or anything that costs money.
Or by hand. The offline demo uses a synthetic Arabic + English meeting, so it needs no GPU:
# 1 · clone + install + check
git clone https://github.com/Chris-C3A/multilingual-meeting-agent.git
cd multilingual-meeting-agent && uv sync && uv run mma doctor
# 2 · offline demo: transcript → skill → brief
uv run mma transcript examples/sample-meeting/demo.json --names "SPEAKER_00=Layla,SPEAKER_01=Omar"
uv run mma skill install --target claude
claude "/process-meeting demo"
# 3 · real audio: deploy the Modal STT app (see AGENT_SETUP.md)
modal run modal_app/app.py::convert_model && modal deploy modal_app/app.py
uv run mma run meeting.m4a --language ar
Full guide, CLI and skills: AGENT_SETUP.md.