Skip to content

PiotrMackowski/auto-joiner

Repository files navigation

zoom-autojoiner

Automatically joins your Zoom meetings on macOS. Reads your local macOS Calendar (works with Google Calendar synced via System Settings > Internet Accounts), watches for upcoming meetings with Zoom links, and opens them at the right time.

No Google Cloud API keys needed. No browser extensions. Just a Python script and a menu bar app that starts on login and restarts on crash.

Install

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/PiotrMackowski/auto-joiner/main/setup.sh)"

On first run, macOS will ask you to grant Calendar access — say yes.

What it does

  • Lives in your menu bar with a live countdown to your next meeting
  • Polls your macOS Calendar every minute
  • When a meeting with a Zoom link is about to start, opens it via zoommtg:// deep link
  • Joins 1 minute early so you're always on time
  • Looks back 30 minutes for late invites — if someone sends an invite after the meeting started, it still joins
  • Skips meetings matching configurable keywords (e.g. "focus time", "lunch")
  • Won't interrupt an ongoing meeting — if you're already in a call, it waits
  • Tracks which meetings it already joined today so it doesn't rejoin
  • Sends a macOS notification before joining
  • Starts on login, restarts on crash (launchd)

Menu Bar

The menu bar shows a static icon — no distracting timers:

  • 📅 — you have upcoming meetings
  • 🔴 — a meeting is starting now
  • ☁️ — no upcoming meetings

Click the icon for:

  • Next meeting with countdown
  • Toggle auto-join on/off
  • Skip meetings individually
  • Upcoming meetings list with times
  • Refresh to re-poll your calendar
  • Edit Config to open config.yaml in your default text editor
  • Open Logs to view the log file

Usage

# See upcoming meetings
~/zoom-autojoiner/venv/bin/python3 ~/zoom-autojoiner/autojoiner.py check

# Join the next Zoom meeting right now
~/zoom-autojoiner/venv/bin/python3 ~/zoom-autojoiner/autojoiner.py join-next

# View logs
tail -f ~/.zoom-autojoiner/autojoiner.log

Config

Edit ~/zoom-autojoiner/config.yaml (or use Edit Config in the menu bar):

join_early_minutes: 1        # join 1 minute before start
poll_interval_minutes: 1     # how often to check calendar
lookahead_minutes: 30        # how far ahead to look
lookback_minutes: 30         # how far back to look (late invites)
skip_keywords:               # skip meetings with these words
  - "focus time"
  - "lunch"
  - "blocked"
  - "OOO"
notify_before_join: true     # macOS notification before joining
zoom_only: true              # only auto-join meetings with Zoom links
log_file: "~/.zoom-autojoiner/autojoiner.log"  # log file path

Uninstall

launchctl unload ~/Library/LaunchAgents/com.autojoiner.zoom.plist
rm ~/Library/LaunchAgents/com.autojoiner.zoom.plist
rm -rf ~/zoom-autojoiner ~/.zoom-autojoiner

Requirements

  • macOS (uses EventKit for calendar access)
  • Python 3.9+
  • Zoom desktop app installed
  • Calendar synced via System Settings > Internet Accounts

Limitations

  • macOS syncs calendars every 5–15 minutes (hardcoded by Apple, not configurable). If someone sends a last-minute invite, it may take up to 15 minutes before macOS pulls it down. The 30-minute lookback window compensates for this. You can force a sync in Calendar.app with Cmd+Shift+R.

About

Automatically joins your Zoom meetings on macOS

Topics

Resources

License

Stars

Watchers

Forks

Contributors