Where apps hide your files
Something launches when you log in and you want to know what and where it lives. A Mac keeps startup items in three plist folders and one System Settings list, and each removes differently.
~/Library/LaunchAgents/
/Library/LaunchAgents/
/Library/LaunchDaemons/
/System/Library/LaunchAgents/
/System/Library/LaunchDaemons/
The first is yours alone and runs at your login. The second runs for every user at login. The third runs for the whole Mac at startup, as root. The last two are Apple's and read-only. All five exist on the macOS Sequoia 15.6 Mac checked for this post. Each holds small .plist files named in reverse-DNS style, such as com.google.keystone.agent.plist or com.adobe.AdobeCreativeCloud.plist. Press ⇧⌘G in Finder to open one, or run open ~/Library/LaunchAgents in Terminal.
There is one more place, with no plist you can see: the Login Items list. Open System Settings > General > Login Items & Extensions (called Login Items on Sonoma and Ventura). Under Open at Login you add or remove apps with the + and - buttons, and under Allow in the Background you switch individual apps' background items on or off. On macOS 12 and older the list was in Users & Groups instead.
| Kind | Starts | Runs as | Typical use |
|---|---|---|---|
| LaunchAgent | When a user logs in | That user | Menu-bar helpers, updaters, sync tools |
| LaunchDaemon | At startup, before login | root | VPN helpers, privileged installers, Docker networking |
On the Mac checked, /Library/LaunchDaemons includes entries for Docker, OpenVPN, TeamViewer and Adobe, while /Library/LaunchAgents holds updaters for Google, Microsoft and Adobe. That mix is typical: most items are updaters or helpers left behind by an installer.
Each file is a property list with a few keys that matter: Label (its unique name), Program or ProgramArguments (what it runs), RunAtLoad (start straight away) and KeepAlive (restart if it quits). Open one in any text editor, or print it in Terminal, changing the file name to the one you want:
plutil -p ~/Library/LaunchAgents/com.example.agent.plist
To list what is loaded for your account right now, without changing anything:
launchctl list | grep -v com.apple
The first column is the process ID, or a dash if it is not running at the moment. The second is the last exit status, and the third is the label.
Work from the least invasive step up.
launchctl bootout gui/$(id -u) ~/Library/LaunchAgents/com.example.agent.plist
For a daemon in /Library/LaunchDaemons, which needs your administrator password:
sudo launchctl bootout system /Library/LaunchDaemons/com.example.daemon.plist
Replace the file names with the real ones. Moving files out of /Library/LaunchAgents or /Library/LaunchDaemons also asks for an administrator password. Never touch anything under /System/Library, and do not remove a plist you cannot identify: look up its label first, and keep a copy until you are sure nothing broke.
Newer apps register helpers through Apple's service-management framework instead of dropping a plist into the folders above. Those plists ship inside the app, in folders such as Contents/Library/LaunchAgents, Contents/Library/LaunchDaemons or Contents/Library/LoginItems (apps on the Mac checked use all three), and they show up only in Login Items & Extensions. Turn them off there; editing the app bundle breaks its signature.
macOS keeps its record of approved background items in /private/var/db/com.apple.backgroundtaskmanagement/, in a file named like BackgroundItems-v13.btm. Treat it as read-only: it is not a settings file you edit.
Some apps open at login through their own setting, such as a checkbox in their preferences. Those touch none of the folders above, so if an app keeps returning, look in its own settings first.
A plist rarely names its app plainly, so read the Label as a clue: com.adobe is Adobe, com.google.keystone is Google's updater, org.openvpn is OpenVPN. To see the state of one loaded agent without changing it, replace LABEL with its label:
launchctl print gui/$(id -u)/LABEL
If the label means nothing to you, compare the plist's date in Finder (⌘I, or the Date Modified column in List view) with when you installed software. The match usually points to the culprit.
A plist whose Program path points to an app you deleted is a leftover. Because the file is tiny it costs nothing in space; the reason to remove it is the repeated failed launch, or a background process you never wanted. For apps in Open at Login, Apple says a yellow warning triangle next to an item means it was moved or deleted and will not open.
Spotlight shows nothing from ~/Library, and it files /Library/LaunchAgents and /Library/LaunchDaemons away as system files, so a search for a vendor's name rarely turns up its agents. In Everywhere, typing a vendor's label prefix, such as keystone or com.adobe, lists every matching launch agent and daemon across all the folders at once, and ⌘↵ reveals one in Finder. It searches file names only, so it finds the plist, not the program path written inside it.
Your own is ~/Library/LaunchAgents. Agents for every user are in /Library/LaunchAgents, and Apple's are in /System/Library/LaunchAgents.
Open System Settings > General > Login Items & Extensions, remove the app from Open at Login or switch it off under Allow in the Background. For leftover plists from deleted apps, unload with launchctl bootout and move the file to the Trash.
An agent starts when a user logs in and runs as that user. A daemon starts at startup and runs as root, with no login needed.
Only for software you have already uninstalled and can identify. Unload it with sudo launchctl bootout system first, keep a copy, and never touch Apple's files under /System/Library.
Everywhere keeps track of every file on your Mac — including the folders Spotlight hides and drives you have unplugged. Free for a day, then $19 once.
Version 2.20.3 · macOS 13+ · 4.7 MB · notarised