I've found that I often miss desktop notifications for meetings even though I have several reminders set up. To address this, I've created meetjoiner, which watches your Google Calendar for accepted meetings and, 2 minutes after the scheduled start time, if you are not already in the meeting, opens the Meet link in Chrome, mutes mic/camera, and clicks "Join now". The 2 minute buffer provides a space in case you haven't joined due to wrapping up another meeting.
- macOS (uses AppleScript to control Chrome)
- Google Chrome with JavaScript from Apple Events enabled:
- Chrome menu bar → View → Developer → Allow JavaScript from Apple Events
- Google Calendar API OAuth 2.0 credentials (Desktop app type) from a Google Cloud project with the Google Calendar API enabled
- Only works with Google Meet
# Install the binary
go install github.com/codenaugh/meetjoiner@latest
# Place your Google Calendar or Google Workspace OAuth credentials
mkdir -p ~/.config/meetjoiner
cp /path/to/client_secret_XXXXX.json ~/.config/meetjoiner/credentials.json
# Authenticate (opens browser for Google OAuth consent)
meetjoiner auth
# Install as a background service (runs on login)
meetjoiner -calendar you@example.com installmeetjoiner auth # authenticate with Google
meetjoiner -calendar <calendar-id> # run in foreground
meetjoiner -calendar <calendar-id> install # install as LaunchAgent
meetjoiner uninstall # remove LaunchAgent
-calendar— the Google Calendar ID to watch (typically your email address, defaults toprimary)
- Polls Google Calendar every 30 seconds, looking 5 minutes ahead
- Filters for events you've accepted (or organized) that have a Google Meet link
- 2 minutes after the scheduled start time, checks if you're already in the meeting (by scanning Chrome tabs)
- If not, opens the Meet link in a new Chrome tab, waits for the pre-join screen, turns off mic and camera, and clicks "Join now"
When running as a LaunchAgent, logs go to /tmp/meetjoiner.log:
tail -f /tmp/meetjoiner.log# Stop
launchctl unload ~/Library/LaunchAgents/com.meetjoiner.plist
# Restart
launchctl kickstart -k gui/$(id -u)/com.meetjoiner
# Uninstall
meetjoiner uninstall