sshlab — dispatch 001v0.1 · open source · MIT
The invisible
AI meeting
assistant.
Live captions and smart summaries for any meeting — captured silently from your browser tab, transcribed locally with Whisper, summarized with Claude on demand.
Your audio never leaves your machine.
§ 01a silent demo
Press play.
It works like this.
A fully scripted re-enactment of a real session. All speakers, names, and content are fictional.
meet.generic.invalid / weekly-syncrec 00:00
4 participants · audio-onlythe meeting does not know ghostmeet is here
👻 ghostmeetside panel
idle
no captions yet. press start to watch a live session unfold.
§ 02the capabilities
Six things it does,
quietly, on your laptop.
Real-time transcription
Whisper STT runs in a loop, updating captions every 10 seconds. tiny → large models, pick your size.
AI-powered summaries
Key decisions, action items, next steps. On demand — hit Summarize when the meeting ends.
Meeting context
Attach an agenda, a design doc, or a prior transcript. The summarizer actually reads them.
100% local audio
Audio is captured, streamed, and transcribed on your machine. Nothing is sent to a server you don't own.
One-command setup
docker compose up -d. Three services, one port, ready in 30 seconds once the image pulls.
Invisible to others
Runs as a Chrome side panel. No bot joins the call. No one in the meeting knows it's there.
§ 03the pipeline
From a tab playing audio,
to a structured summary,
without leaving your machine.
Browser tab
Any tab that plays audio — Meet, Zoom, Teams, a podcast, a training video.
chrome.tabCapture
Extension captures
Chrome side panel taps the tab's audio stream directly. No microphone, no screen.
manifest v3 · chrome extension
WebSocket → local
Audio frames stream to a FastAPI backend running on localhost:8877.
binary ws
Whisper transcribes
faster-whisper processes 10-second chunks. Captions appear in the side panel as they're ready.
faster-whisper · ctranslate2
Claude summarizes
When you click Summarize, the full transcript + any attached context goes to Claude. Structured output returns.
claude api · optional
the only external call
If you enable AI summaries, your transcript text (never audio) is sent to the Claude API using your own key. That is the complete list of times your data leaves your machine.
§ 04the install
Running in under
a minute.
Clone, start the backend, load the Chrome extension. That's the whole setup.
~/projects
1$ git clone https://github.com/Higangssh/ghostmeet.git
2$ cd ghostmeet
3$ cp .env.example .env # add your Anthropic key (optional)
4$ docker compose up -d
note.
First run downloads the Whisper model (~150MB for
base). Subsequent starts are instant.
01
Start the backend
docker compose up -d. Backend binds to localhost:8877. Health check returns model info.
02
Load the extension
chrome://extensions → Developer mode → Load unpacked → pick /extension from the repo.
03
Start a meeting
Click 👻 in the toolbar to open the side panel. Hit ▶ Start. Captions stream in real time.
04
Summarize when done
Click 📋 Summarize. A structured summary — decisions, action items, next steps — appears in the panel.
§ 05who this is for
Three meetings a week
you stop taking notes for.
Standups that write themselves.
Start the panel, join the daily. Walk away with structured notes and a list of action items tagged by owner. No copy-paste into Notion.
← no bot joins · no dial-in · no seat license
Coaching you actually re-read.
Private conversations deserve private tooling. Your weekly 1:1 transcript lives on your laptop, not in a vendor's S3 bucket.
← audio stays local · summaries only if you ask
User interviews, without the compliance review.
Customer conversations often come with NDAs that forbid third-party transcription services. ghostmeet sidesteps the entire category.
← self-hosted · no data processor agreements
§ 06the questions
Fair questions,
direct answers.
Is my audio really private?
Yes. Audio is captured by the Chrome extension, streamed over WebSocket to a backend running on localhost, and transcribed by Whisper on your machine. It is never uploaded. The only external call — and only if you opt in — is a Claude API request with the transcript text when you click Summarize.
Which meeting apps are supported?
Any browser tab that plays audio. Google Meet, Zoom Web, Microsoft Teams Web, Discord, Around, Whereby, as well as recorded talks, podcasts, or training videos. Native Zoom/Teams desktop apps are not supported — use the web client.
Do I need a GPU?
No. The default `base` Whisper model runs fine on CPU for most voices. Larger models (`small`, `medium`, `large`) benefit from CUDA, but `base` is surprisingly accurate and what most people run.
Why self-host at all?
Hosted transcription services are convenient, but they require uploading audio to a vendor's servers and trusting their data-handling policies. For internal meetings, customer calls under NDA, or any conversation where privacy matters, self-hosting removes the upload entirely. You set it up once and own the stack.
Can I host the backend on a separate machine?
Yes. The backend is a FastAPI + WebSocket server. Run it on a home server, a VM, a Raspberry Pi, or anywhere you can reach over the network. Set the extension's target URL accordingly.
What about speaker diarization?
Not yet. It's on the roadmap. Current captions stream with a single speaker label per chunk. If you need 'who said what', follow the repo — it's the next major feature.
Does it work offline?
Transcription, yes — Whisper runs locally. Summarization requires the Claude API, which needs internet. You can disable summaries entirely and use ghostmeet as a pure offline captioner.
sshlab — dispatch 001 · end
Keep your meetings
on your own machine.
ghostmeet is free, open source, and runs entirely on your machine. Clone it, run it, keep it.