Your lights know
you're in a call.
You join a call, and the Home Assistant lights you assigned come on. You leave, and they go back to exactly how they were. Nothing to press, nothing to remember.
macOS 14.4+ · Builds from source in a minute · Free & open source (GPL-3.0)
Two lights that should never be manual.
Both want switching at exactly the same moment — the moment the call starts.
On air
A call is invisible from outside the room. So either you announce it every time, or someone walks in behind you halfway through a presentation. A lamp by the door says it for you — and says it without you having to remember.
On camera
Your key light — the beauty light, if you call it that — belongs on for the call and off for the rest of the day. By hand that means one of two things: joining in the dark because you forgot, or leaving it burning at an empty desk until you notice.
Home Assistant can already switch both. What was missing was something on the Mac that knows, reliably, when you are in a call.
Two signals, one honest answer.
meet-light doesn't ask your meeting service anything. It watches what your Mac already knows.
Your browser opens the microphone
macOS keeps an audio object for every process, and it says whether that process has a live input stream. It is the same signal behind the orange dot in your menu bar — so it is exactly as accurate.
A second check confirms it's a call
The app asks your browser for its tab URLs and looks for a real meeting URL — Google Meet is the one it recognises today. Without this step, every WhatsApp Web call would count as a meeting.
Your lights come on
Every light you ticked, switched through Home Assistant. When the call ends, each trigger releases its lights the way you told it to: off, back as they were, or left on.
Fits your setup, not the other way round.
The handful of things you'd actually notice, day to day.
Just pick your lights
Straight out of Home Assistant — a list to choose from, not a field to fill in. Blink to Identify confirms you got the lamp you meant.
Anything switchable counts
Lights, switches, input booleans, fans, groups, even media players — anything Home Assistant can turn on and off. Each one can come on at its own brightness or colour.
Automatic, or on your say-so
A trigger either follows your calls or waits for you — a "do not disturb" you flip yourself. Either way you say how it ends: lights off, back as they were, or left on.
Scriptable, correctly
A URL scheme and a command-line tool, so Shortcuts, Raycast, a Stream Deck or cron can switch a light or a trigger. Those go through the running app rather than straight to Home Assistant, so it never loses track of what it switched on.
It watches the microphone. It never hears it.
An app that follows your calls has to be specific about what it reads. So:
No audio, ever
It reads a system flag that says whether other apps have the microphone open — the same signal behind the orange dot in your menu bar. meet-light never opens a stream, so it never asks for microphone permission.
Your tabs stay yours
Checking for a call happens in a short-lived helper process: it reads your browser's tab list, looks for a meeting, and exits. Your other tabs never leave it, and nothing about them is written down anywhere.
Nothing phones home
No telemetry, no analytics, no crash reporting, no update check, and no third-party dependencies. The only requests it makes are to the Home Assistant address you typed in.
Three lines, then three fields.
One command does all of it: install.sh builds the app for your Mac, installs it, registers it to start at login, and starts it.
Requirements
- macOS 14.4 or later, on Intel or Apple Silicon — 14.4 is the floor for the CoreAudio process list the detector rests on
- Home Assistant, plus a long-lived access token
- A Swift toolchain (Xcode or the Command Line Tools) — it builds from source
- A browser you take calls in — Chrome, another Chromium browser, or Safari. Calls in a native app are not detected
Build & install
from sourcegit clone https://github.com/Andreas-Menzel/meet-light.git cd meet-light ./install.sh
Builds meet-light.app, installs it to /Applications, registers it to start at login, and puts a meet-light command on your PATH. Re-run it any time to update.
Then fill in three things
Look for the bulb in the menu bar and open Settings.
Home Assistant
Its address, plus a token — in Home Assistant, click your name (bottom left) → Security → Long-lived access tokens. Test Connection tells you immediately whether it worked.
Lights
Pick them from the list Home Assistant already has — nothing to type. Blink to Identify confirms the one you picked.
Triggers
Tick which lights the Google Meet trigger should switch, and how it should let go of them.
macOS will ask whether meet-light may control your browser — that is the call-tab check, and refusing it only means detection falls back to the microphone alone.
Questions, answered.
Do I need Home Assistant?
Does it need microphone permission?
Will it switch off a lamp I turned on myself?
What about Zoom, Teams, or Slack huddles?
Worth a coffee?
Built in my spare time and given away — no accounts, no tracking, no paid tier. If it saved you one "sorry, I'm on a call", that's the idea.
Stop announcing that you're on a call.
The lamp by the door and the light on your face — both switched by the call itself.