Bloatware, login items & agents

How to Disable Launch Agents and Daemons on Mac (launchctl + GUI, 2026)

Every Mac quietly runs dozens of background processes from the moment you log in. If you have ever wondered how to disable launch agents on Mac, you are not alone — it is one of the most effective ways to reclaim memory, cut CPU idle load, and speed up logins, especially on machines that have accumulated years of app installs. This guide covers both the launchctl command-line method and the graphical approach in System Settings, so you can choose whichever fits your comfort level.

What Are Launch Agents and Daemons?

macOS uses a service manager called launchd (PID 1) to start and supervise background tasks. Those tasks are described by property-list (.plist) files stored in a handful of well-known directories. The difference between agents and daemons comes down to who they run as:

  • Launch Agents run in the context of a logged-in user. They can interact with the GUI, show menu-bar icons, and access user data.
  • Launch Daemons run as root (or another system account), start at boot before anyone logs in, and cannot display UI.

Most of the clutter you want to remove — updater helpers, crash reporters, telemetry dials — lives in the user-level agent locations. System daemons are generally left alone unless you know exactly what you are removing.

Where Are These Files Stored?

macOS reads .plist files from five standard directories. Knowing which directory to look in tells you at a glance whether a job is system-managed, vendor-managed, or something you (or an app) added yourself.

Directory Scope Typical owner Safe to edit?
~/Library/LaunchAgents/ Current user, agents Third-party apps, developer tools Yes — this is your space
/Library/LaunchAgents/ All users, agents Third-party apps installed system-wide With care; requires admin
/Library/LaunchDaemons/ System-wide, daemons Third-party system services (VPNs, databases) With care; runs as root
/System/Library/LaunchAgents/ All users, agents Apple (SIP-protected) No — leave these alone
/System/Library/LaunchDaemons/ System-wide, daemons Apple (SIP-protected) No — leave these alone

The two /System/Library/ paths are sealed by System Integrity Protection (SIP) on every modern Mac running macOS Sequoia or Tahoe and cannot be modified even by root. Everything in ~/Library/LaunchAgents/ and /Library/Launch*/ is fair game.

How to Disable Launch Agents on Mac Using launchctl

The launchctl command is the authoritative way to load, unload, enable, and disable launchd jobs. The syntax changed in macOS 10.10 (Yosemite); on any Mac running Sequoia or Tahoe you should use the newer subcommands.

Step 1 — List what is currently loaded

Open Terminal (/Applications/Utilities/Terminal.app) and run:

launchctl list | grep -v com.apple

This prints all loaded services excluding Apple's own, giving you a clean view of third-party background work. The three columns are PID, exit status, and service label. A dash in the PID column means the job is registered but not currently running.

Step 2 — Identify the plist for a job you want to disable

Say the output shows com.google.keystone.agent. Find its plist:

find ~/Library/LaunchAgents /Library/LaunchAgents -name "*keystone*" 2>/dev/null

Step 3 — Disable the job persistently

Use launchctl disable to mark the job as disabled across reboots, then bootout to stop it immediately for the current session:

# Disable (survives reboot)
launchctl disable gui/$(id -u)/com.google.keystone.agent

# Stop the running instance right now
launchctl bootout gui/$(id -u)/com.google.keystone.agent

Replace gui/$(id -u)/ with system/ for a daemon in /Library/LaunchDaemons/, and prefix the command with sudo.

Step 4 — Verify it is gone

launchctl list | grep keystone

If the line disappears, the agent is no longer loaded. If it reappears after a reboot, the application's own updater may be re-registering it — in that case, removing or renaming the .plist file is the more permanent fix (see the section on manual removal below).

How to Disable Login Items via System Settings (GUI Method)

Apple introduced a proper Login Items manager in macOS Ventura and refined it further in Sequoia and Tahoe. It exposes both traditional Login Items and the newer Background Items that correspond to Launch Agents registered via the SMAppService API.

  1. Open System Settings (the gear icon in the Dock or Apple menu).
  2. Click General, then Login Items & Extensions.
  3. Under Open at Login you will see apps that launch at login. Toggle the switch to remove them.
  4. Under Allow in Background you will see background-only agents. Toggle any entry off to prevent it from running.

The GUI only surfaces items that the app developer registered through Apple's official APIs. Older or unsigned agents planted directly in ~/Library/LaunchAgents/ may not appear here — for those, use launchctl or the manual approach below.

Manually Removing or Archiving a plist File

Disabling a job via launchctl is clean, but some apps re-create their .plist every time they update. If you have fully uninstalled an app and its agent files are orphaned, the safest move is to delete (or archive) the file:

# Move to Desktop as a backup first
mv ~/Library/LaunchAgents/com.example.helper.plist ~/Desktop/

# Or delete outright if you are confident
rm ~/Library/LaunchAgents/com.example.helper.plist

After removing the file, launchctl has nothing to load, so the service will not start on next login. If you later decide you need it back, reinstalling the parent application will restore it. This is closely related to the broader task of completely uninstalling apps on Mac — agent plists are among the residual files most people miss.

Common Third-Party Agents Worth Reviewing

Here are some frequently seen agents in ~/Library/LaunchAgents/ and /Library/LaunchAgents/ that are safe to disable once you have removed or stopped using the parent app:

  • com.google.keystone.agent.plist — Google software updater; safe to disable if you update Chrome manually.
  • com.adobe.AdobeCreativeCloud.plist and related helpers — Adobe's suite installs several; disable if you use apps on-demand rather than keeping them always-open.
  • com.microsoft.OneDrive.FinderSync.plist — OneDrive Finder extension; disable if you do not actively sync files.
  • homebrew.mxcl.*.plist — Services started by brew services (PostgreSQL, Redis, nginx). Disable with brew services stop <name> rather than editing the plist directly.
  • Crash reporters and telemetry helpers from many apps — identifiable by labels containing words like crashreporter, telemetry, or metrics.

How Much RAM and CPU Do Background Agents Actually Use?

On a machine with a lot of accumulated installs, it is common to find 15–30 third-party agents loaded at login. Each one is typically lightweight on its own — 10–50 MB of real memory — but the aggregate effect on login time and idle CPU can be meaningful, particularly on older Intel Macs. On Apple Silicon, the efficiency cores handle idle agents well, but they still compete for memory bandwidth and can prevent low-power idle states.

A tool like Crumb can audit all of these at once and show what is safe before you delete, which is especially useful if you are not sure whether a given agent is still needed by an app you actively use. If you are also trying to recover disk space, the plist files themselves are tiny, but disabling an updater agent can prevent background downloads that silently consume gigabytes — the same pattern you will recognise from reading about what counts as System Data in Mac storage.

Re-enabling a Disabled Agent

If you disable an agent and later find something has broken, re-enabling it is straightforward:

# Re-enable the job
launchctl enable gui/$(id -u)/com.example.helper

# Load it immediately without rebooting
launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.example.helper.plist

If you deleted the plist file, reinstalling the application will put it back. Always keep a backup on your Desktop for a week or two before committing to a permanent removal — that window is almost always enough to catch any unexpected side effects.

Reclaim your disk in one click

Crumb audits your whole Mac, tells you what's safe to delete, and frees the space in seconds — private, local, and Apple-notarized.

Download Crumb for macOS

Frequently asked questions

Is it safe to disable launch agents on Mac?
Disabling agents in ~/Library/LaunchAgents/ or /Library/LaunchAgents/ is generally safe as long as you know what the agent does. Never touch anything in /System/Library/ — those are sealed by SIP and essential to macOS. When in doubt, disable rather than delete, and keep a backup of the plist for a few days.
Where are launch agent files stored on Mac?
Your personal agents live in ~/Library/LaunchAgents/. System-wide third-party agents go in /Library/LaunchAgents/, and system-wide daemons go in /Library/LaunchDaemons/. Apple's own files are in /System/Library/LaunchAgents/ and /System/Library/LaunchDaemons/, which you cannot and should not modify.
Will disabling a launch agent free up disk space?
The plist files themselves are tiny (a few kilobytes). However, disabling updater agents can stop background downloads that accumulate gigabytes over time. The direct space savings come from removing orphaned agent files left by uninstalled apps, not from the agents themselves.
How do I know if a launch agent is needed?
Search the label (for example com.google.keystone.agent) online to find out what it does. If the parent application has been uninstalled or you no longer use it, the agent is almost certainly safe to disable. If the app is still installed, disabling its updater agent means you will need to update that app manually.
Does disabling login items in System Settings do the same thing as launchctl?
For apps that use Apple's modern SMAppService API, yes — toggling the switch in System Settings > General > Login Items & Extensions is equivalent to using launchctl disable. Older agents registered by dropping a plist directly into LaunchAgents/ may not appear in System Settings at all and must be managed via launchctl or by removing the plist file manually.