Skip to content
daniel@cosenza:~/blog
macOSHow-To September 26, 2025 3 min read

How to Manage Login Items and Launch Agents Cleanly on macOS

A complete approach to auditing and controlling what actually starts when you log in — covering both the modern Login Items UI and the launchd agents it doesn't show.

A Mac that takes longer to feel responsive after login, or has mysterious background processes running, usually has more auto-starting software than the average user realizes — because the modern Login Items UI only shows a subset of what actually starts automatically. This walks through auditing and controlling all of it properly.

Step 1: check the modern Login Items & Extensions pane first

System Settings → General → Login Items & Extensions lists applications explicitly added as login items, plus background items apps have registered themselves. Remove anything you don’t recognize or need starting automatically:

Click the button next to any entry you want removed from automatic startup.

Step 2: understand what this UI doesn’t show you

This pane surfaces user-facing login items, but plenty of auto-starting software registers itself as a LaunchAgent or LaunchDaemon instead — a lower-level mechanism, covered in more depth elsewhere on this blog, that doesn’t always appear in the Login Items list, especially for command-line tools and some third-party utilities.

Step 3: audit LaunchAgents directly

ls -la ~/Library/LaunchAgents/
ls -la /Library/LaunchAgents/
ls -la /Library/LaunchDaemons/

Anything here (excluding Apple’s own com.apple.* entries, which are core system components) is worth reviewing — a plist file in one of these locations means something is configured to start automatically, independent of what the GUI Login Items pane shows.

Step 4: inspect a specific plist before deciding what to do with it

plutil -p ~/Library/LaunchAgents/com.someapp.helper.plist

This prints the plist’s contents readably, showing exactly what program it runs and under what conditions (RunAtLoad, KeepAlive, scheduled intervals) — useful for understanding what something actually does before removing it.

Step 5: disable a launch agent properly

launchctl bootout gui/$(id -u)/com.someapp.helper

Unloading it this way stops it immediately for the current session. To prevent it from loading again at next login, either uninstall the associated application properly (which should remove its own plist) or move the plist out of the LaunchAgents directory:

mkdir -p ~/Library/LaunchAgentsDisabled
mv ~/Library/LaunchAgents/com.someapp.helper.plist ~/Library/LaunchAgentsDisabled/

Moving rather than deleting preserves the file in case you want to re-enable it later, or need to reference its configuration.

Step 6: check what’s currently loaded and running right now

launchctl list | grep -v com.apple

This lists every currently-loaded job (excluding Apple’s own), showing its PID if running and its last exit status — useful for spotting something that’s crash-looping in the background without you noticing, in addition to things that are simply auto-starting unnecessarily.

Step 7: for persistent, hard-to-remove items

Some applications reinstall their own LaunchAgent automatically if you remove it while the application itself remains installed (a “helper” component reinstalling itself on next app launch). In these cases, uninstalling the parent application fully — rather than fighting its LaunchAgent repeatedly — is the actual fix.

Why this two-layer audit matters

Relying on the Login Items pane alone gives an incomplete picture, since it was designed primarily around user-facing applications rather than every mechanism software can use to auto-start. Checking both layers — the modern GUI pane, and the underlying LaunchAgents/LaunchDaemons directories directly — is what actually tells you everything configured to run automatically on your Mac, rather than just the subset one particular settings pane happens to surface.