The listener idles until you're in a call.
MeetPing isn't a constant background recorder. It sleeps until Core Audio reports the mic is in use AND a meeting app is foregrounded. When both conditions go true, it arms — runs Parakeet, scans for keywords. When either flips false, it disarms. The transcript only exists while you're in a meeting.
Plenty of "always-listening" Mac apps exist. None of them are on our work laptops, because IT will not approve a process that holds a microphone handle 24/7. Auto-arm is the answer: MeetPing reads two cheap signals — Core Audio's mic-in-use bit and the bundle ID of the foreground app — and only opens the audio tap when both line up.
Mic-in-use comes from the Core Audio HAL property kAudioDevicePropertyDeviceIsRunningSomewhere — Apple's own way of telling the orange-dot indicator when to light up. We poll it on a 500 ms cadence; the cost is negligible. Foreground app comes from NSWorkspace.frontmostApplication with a fallback to Chromium tab URLs (so Google Meet in a browser tab counts even though the browser is the foreground app).
What counts as a meeting app
Out of the box: Zoom, Microsoft Teams, Google Meet (Chrome, Arc, Safari, Firefox), Slack huddles, Discord, Webex, GoTo, Around, Whereby. The list is a static plist inside the .app — you can override it from Settings → Auto-arm if your team uses something exotic, or disable auto-arm entirely and just arm/disarm by clicking the menubar icon.
What "armed" actually does
Armed means: open the audio input tap, start the FluidAudio streaming session, and run the keyword scanner against confirmed Parakeet output. That's it. Nothing else changes. The menubar icon shifts to phosphor lime, the corner of the popover shows ● ARMED, and the rolling 30-second buffer starts filling. When the meeting ends, the buffer is dropped and the tap closes.
Pair auto-arm with profiles and you have a listener that picks the right keyword set, arms for the meeting, and disappears when the meeting ends — with no interaction from you at all.
The fallbacks for edge cases
Headphone-only meeting where the mic isn't in use? Toggle "arm on meeting app foreground" — drops the mic-in-use requirement. Background podcast you don't want pinged? Add the podcast app to the disarm list. Long focus session you don't want interrupted? Click the menubar icon to set a 60-minute "do not arm" window.
Keyword watch
A list of names and topics, matched live against the Parakeet stream. Pings the moment one fires.
Profiles
Per-context watchword presets. Engineering, sales, all-hands, parental. One click to switch.
Past-30s replay
Every ping comes with 30 seconds of context before the keyword and 30 seconds after.
No always-on recording. Ever.
The listener idles until you're in a call. Disarms when you leave. Pair with profiles and forget it's installed.