A Chrome/Edge extension that listens to your online meetings with you. It flags questions that need an answer and points worth clarifying in a side panel while people talk. When the meeting ends, you can ask anything about the conversation. It runs on your own LLM API key, and there is no backend.
[mm:ss] timestamps. Long meetings fall back to BM25 retrieval over the transcript.From a release: download smart-meet-<version>.zip from Releases and unzip it. Then follow steps 2–4 below, selecting the unzipped folder.
From source:
npm run icons (only needed if you change the icon; the PNGs are committed).chrome://extensions (or edge://extensions) and turn on Developer mode.Requires Chrome or Edge 116+. Firefox and Safari don’t support the side panel and tab-capture APIs this extension uses.
| Goal | AI model | Transcription | Capture mode |
|---|---|---|---|
| One key, best quality | OpenAI gpt-5-mini |
OpenAI gpt-4o-mini-transcribe |
Automatic |
| Claude | Anthropic claude-opus-5-5 (optionally a faster live model such as claude-haiku-4-5) |
Groq or OpenAI | Automatic |
| Cheapest | Groq llama-3.3-70b-versatile |
Groq whisper-large-v3-turbo |
Automatic |
| No speech-to-text bill | Any | None | Live captions (turn on CC in the meeting) |
| Fully local | Ollama | Custom → local Whisper server (e.g. speaches / faster-whisper-server) | Audio |
For Ollama, start it with OLLAMA_ORIGINS=chrome-extension://* so the extension is allowed to call it.
Meeting tab ──tabCapture──▶ offscreen document ──▶ speech-to-text API
│ (VAD-chunked webm/opus, │
│ tab audio + mic) ▼
└─ caption content script ───────────────▶ service worker ──▶ IndexedDB
│ (session, transcript,
│ insight scheduling,
▼ summary)
LLM provider
▲
Side panel (Live · Ask AI · History) ────────────┘ streaming Q&A, draft replies
src/background/service-worker.js: session lifecycle, transcript intake, debounced live analysis (it runs every N seconds or after M new characters, whichever comes first), and the summary at the end of the meeting.src/offscreen/offscreen.js and src/lib/recorder.js: record tab and mic audio, cut it into chunks at natural pauses, skip silent chunks, transcribe chunks in order, and filter out common Whisper hallucinations.src/content/captions.js: reads live captions in Meet, Teams and Zoom web, sending text once it has stopped changing and de-duplicating text that grows or gets revised (caption-diff.js).src/lib/providers.js: one complete / stream / listModels interface over every LLM provider, with retries, JSON mode and a fallback when an endpoint rejects JSON mode.src/lib/analyzer.js and src/lib/qa.js: prompts, schemas, parsing, de-duplication, retrieval and summarisation.src/sidepanel/, src/options/: the UI, written in plain ES modules with no framework and no build step.For Anthropic models, the extension calls the Messages API directly from the browser with the anthropic-dangerous-direct-browser-access header. It caches the transcript-bearing system prompt (cache_control) so follow-up questions are cheaper. Effort is set only on models that support it: low for live detection and draft replies, medium for Q&A and summaries. JSON comes from structured outputs (output_config.format).
On Claude Opus 5 / 5.5, Sonnet 5.5 and Fable 5.1, requests opt in to server-side refusal fallback (fallbacks: "default"), and a refusal stop reason produces a clear error message. To turn the fallback off, remove anthropicSupportsFallback in providers.js.
npm test # unit tests (node:test, no dependencies)
npm run check # validates manifest + every file reference
npm run build # check, then package dist/smart-meet-<version>.zip
There are no runtime or dev dependencies. CI (.github/workflows/ci.yml) runs the tests and uploads the store zip as a build artifact on every push. Pushing a v<version> tag runs .github/workflows/release.yml, which publishes the zip as a GitHub release.
app.zoom.us/wc) and Teams web in both modes.Smart Meet has no backend. Deploying it means publishing the privacy policy on GitHub Pages, tagging a release, and submitting the zip to the Chrome Web Store and Microsoft Edge Add-ons. The full step-by-step guide is in docs/DEPLOYMENT.md.
In short:
version in both manifest.json and package.json (npm run check enforces that they match), then update CHANGELOG.md.npm run verify and go through the manual test checklist above.git tag v<version> and git push origin main v<version>. The Release workflow builds smart-meet-<version>.zip and attaches it to a GitHub release.https://ammarkarimi.github.io/smart-meet/PRIVACY.html. Enable it once under Settings → Pages (main branch, root folder).src/content/captions.js.