# What Are LaunchAgents and LaunchDaemons on Mac and Which Can You Remove

> What the launchd folders hold, how to read a plist before judging it, how to stop and remove a leftover job safely, and which folders to leave alone.

Published: 2026-11-07 | Updated: 2026-11-09

LaunchAgents and LaunchDaemons are folders of small `.plist` files that tell macOS's `launchd` what to start in the background and when. An agent runs for one signed-in user and can show things on screen; a daemon runs for the whole system with no user interface. You can usually remove the third-party items of an app you no longer have. Leave `/System/Library` alone, and stop a job before you move its file.

## The five folders

Apple's [launchd guide](https://support.apple.com/guide/terminal/apdc6c1077b-5d5d-4d35-9c19-60f2397b2369/mac) lists these locations:

| Folder | What it holds | Touch it |
| --- | --- | --- |
| `~/Library/LaunchAgents` | Third-party agents for your account only | Yes, carefully |
| `/Library/LaunchAgents` | Third-party agents for every user | Yes, with an admin password |
| `/Library/LaunchDaemons` | Third-party system daemons | Yes, with an admin password |
| `/System/Library/LaunchAgents` | Apple's agents | No |
| `/System/Library/LaunchDaemons` | Apple's daemons | No |

The `man launchd` page draws the line: a daemon is a system-wide service with one instance for all clients, and it should not display a user interface. An agent runs per user, and work that interacts with a user belongs there. In practice, a menu bar helper or updater tends to be an agent, and a VPN service, audio driver helper or backup engine tends to be a daemon.

Not every background item has a file here. Apps can keep their plist inside their own bundle, so **System Settings › General › Login Items & Extensions** can list something these folders do not. [How to stop apps opening at startup](https://mole.fit/blog/how-to-disable-startup-programs-on-mac) covers that screen.

## Read one before you judge it

```bash
ls -la ~/Library/LaunchAgents /Library/LaunchAgents /Library/LaunchDaemons
plutil -p ~/Library/LaunchAgents/com.example.helper.plist
```

Four keys tell you most of the story:

| Key | What it means |
| --- | --- |
| `Label` | The job's name, which is what `launchctl` uses |
| `Program` or `ProgramArguments` | What it runs. This is the path to check |
| `RunAtLoad` | It starts as soon as the job loads, usually at login or boot |
| `KeepAlive` | `launchd` restarts it if it stops, so quitting it does not last |

`com.example.helper` above is a placeholder, so use your own file's name. If `ProgramArguments` points at an app you removed, that file is a leftover and is safe to take out. If it points at an app you still use, removing it can break that app's updates, sync, licensing, VPN or audio.

## How to remove one

Stop the job first. Moving the file does not stop a job that is already running, and it stays loaded until logout or restart.

For an agent in your account:

```bash
launchctl bootout gui/$(id -u)/com.example.helper
mv ~/Library/LaunchAgents/com.example.helper.plist ~/.Trash/
```

For a daemon in `/Library/LaunchDaemons`:

```bash
sudo launchctl bootout system/com.example.helper
sudo mv /Library/LaunchDaemons/com.example.helper.plist ~/.Trash/
```

An agent in `/Library/LaunchAgents` loads into each user's session, so stop it with the `gui/$(id -u)/` form and move the file with `sudo mv`. Use the `Label` value in those commands, which may differ from the file name.

Confirm it is gone with `launchctl print gui/$(id -u)/com.example.helper` or `sudo launchctl print system/com.example.helper`, which should report that the service could not be found. Then use the app for a day. If something broke, put the file back and restart.

To keep the file and only stop the job from loading:

```bash
launchctl disable gui/$(id -u)/com.example.helper
launchctl print-disabled gui/$(id -u)
```

`launchctl enable` with the same target reverses it.

## What not to do

- Do not touch `/System/Library/LaunchAgents` or `/System/Library/LaunchDaemons`. They sit on the read-only system volume, and they belong to macOS.
- Do not delete by company name alone. A file named after a security product or device driver may be how that product keeps working, and on a managed Mac it may be company policy.
- Do not remove the plist of an app you still use and expect only its update nag to go. Check the app's own setting first.
- Do not use old guides that say `launchctl unload`. Apple's manual lists it as a legacy subcommand, and `bootout` is the current form.

## Where Mole fits

[Mole](https://mole.fit/)'s **Apps** tab has a **Startup** segment that lists these items, reads each plist's own `Label` and names helpers after the app that owns them. It groups them under headings such as **Login items** and **Background services**, and flags **Missing program** when a job points at something that no longer exists, which is the usual sign of a leftover. For a checked launchd plist in `~/Library/LaunchAgents`, `/Library/LaunchAgents` or `/Library/LaunchDaemons`, you can turn it off with the row's switch, turn it back on, or move it to the Trash, and Mole stops the job first. Security and management products stay locked, and items it cannot safely change open System Settings instead. When a process in **Status** looks unfamiliar, **Why is this running?** names the launchd service and its plist. Uninstalling an app through Mole also offers its launch items for review.

## FAQ

### Is it safe to delete files in LaunchAgents?

Yes for a leftover from an app you removed, and sometimes no for an app you still use. Read `ProgramArguments` with `plutil -p` first, and stop the job with `launchctl bootout` before moving the file to the Trash so you can put it back.

### What is the difference between a LaunchAgent and a LaunchDaemon?

An agent runs for each signed-in user and can interact with that user. A daemon runs system-wide with one instance, usually before anyone signs in, and has no user interface.

### Why did a removed LaunchAgent come back?

The app that installed it is still on the Mac and wrote it again when it next opened or updated. Turn the feature off in the app, or uninstall the app, since removing the file alone will not last.

### Can a LaunchAgent be malware?

Yes. Persistent adware often installs here, because it survives a restart. An unfamiliar `Label` that runs something from a hidden folder or a temporary path deserves a closer look, so search the exact path and check who signed the program.

### Do I need to restart after removing one?

Not if you used `launchctl bootout`, which stops it at once. If you only moved the file, the job stays loaded until you log out or restart.

---

Canonical HTML page: https://mole.fit/blog/launchagents-launchdaemons-mac
Blog index for agents: https://mole.fit/blog/llms.txt
Site index for agents: https://mole.fit/llms.txt
