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.

audio egress
0 bytes
accounts required
none
install command
1 line
license
MIT
§ 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.

elapsed 00:00 / 00:22
meet.generic.invalid / weekly-syncrec 00:00
Alex
Jordan
Sam
Morgan
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.

faster-whisper

Real-time transcription

Whisper STT runs in a loop, updating captions every 10 seconds. tiny → large models, pick your size.

claude api

AI-powered summaries

Key decisions, action items, next steps. On demand — hit Summarize when the meeting ends.

context input

Meeting context

Attach an agenda, a design doc, or a prior transcript. The summarizer actually reads them.

zero egress

100% local audio

Audio is captured, streamed, and transcribed on your machine. Nothing is sent to a server you don't own.

docker

One-command setup

docker compose up -d. Three services, one port, ready in 30 seconds once the image pulls.

side panel

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.

01

Browser tab

Any tab that plays audio — Meet, Zoom, Teams, a podcast, a training video.

chrome.tabCapture
02

Extension captures

Chrome side panel taps the tab's audio stream directly. No microphone, no screen.

manifest v3 · chrome extension
03

WebSocket → local

Audio frames stream to a FastAPI backend running on localhost:8877.

binary ws
04

Whisper transcribes

faster-whisper processes 10-second chunks. Captions appear in the side panel as they're ready.

faster-whisper · ctranslate2
05

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.

01
for engineering

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
02
for 1:1s

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
03
for research

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.