DaemonControl Download

macOS app · free

Every launchd job,
in plain English.

launchd is what starts programs on your Mac at login, on a schedule, when a folder changes, and at boot. DaemonControl shows you all of it — and tells you why the one that stopped working stopped working.

Free · macOS 14+ · signed and notarized by Apple

0
privileges to read, search and diagnose every job on the machine — and none at all to change your own agents
1
password prompt per change to a system daemon, asked only when you make one, and skippable with the helper you opt into
127
the exit code that means the program was never found — one of the silent failures the doctor names for you

Nothing here runs as root by default. DaemonControl is a front end for launchd, not a replacement for it: it reads and writes the same jobs launchctl does.

See everything

Every job on the Mac, in one list.

Your own agents, Apple’s daemons, and the ones an app registered at runtime without leaving a file behind. Search by label, program or path; filter by running, failed, disabled or not loaded.

Agents and daemons together

Per-user agents and system-wide daemons in the same list, so you are not guessing which of the several launchd domains a job lives in.

Including the ones with no file

Jobs registered by an app at runtime never appear in the LaunchAgents folders. They appear here.

Filter by what went wrong

Running, failed, disabled, not loaded. The states that matter when you are looking for the thing that stopped.

Search by what you remember

Label, program or path — whichever part of it you can recall.

Understand it

A dictionary of integers is not a schedule.

Schedules are written out in words. Exit codes come with what they mean rather than just a number. And every key in the file is documented in the editor, next to the control that sets it — so you are not reading the launchd.plist man page in another window.

The plist is still the truth. DaemonControl just stops you having to hold it in your head.

The same job, both ways

<!-- what launchd stores -->
StartCalendarInterval
  { Hour: 9, Minute: 0, Weekday: 1 }
StandardErrorPath
  /tmp/sync.err
ThrottleInterval
  10

// what DaemonControl shows
At 09:00 on Mondays.
Errors to /tmp/sync.err
Waits 10s between restarts.

Fix it

The job runs. Nothing happens. No error anywhere.

That is the normal way a launchd job fails, and it is why they are miserable to debug. DaemonControl looks for the specific reasons, names the one it finds, and for most of them offers the fix.

What the doctor looks for

A program that is no longer thereUninstalled, moved, or renamed since the job was written. Fix
A path that only worked in your shelllaunchd has no PATH, so a bare command name never resolves. Fix
A label that does not match its filenamelaunchd is stricter about this than people expect. Fix
A log folder that was never createdThe job cannot write where it was told to write. Fix
A key spelled almost rightClose enough to look correct, wrong enough to be ignored. Fix
A crash loop, and permissions launchd refusesStarted, died, started again — or never allowed to start.

Named, not guessed at.

Each finding says which job, which key and which line — and what to change. Most come with a one-click fix, because most of them have exactly one correct answer: an absolute path, a created folder, a corrected spelling.

The ones that do not — a crash loop, a permission macOS will not grant — are still explained, because knowing which of the two it is saves the afternoon.

Change it safely

Nothing runs as root by default.

Your own agents need no privileges at all. Neither does reading and diagnosing every job on the machine — the entire list, and the entire doctor, run with none.

Changing a system daemon asks for your password, once per change. If you would rather not be asked, there is a privileged helper to opt into, with a plain account of what it can do and a log of everything it has done.

What needs what

Read every job, run every checkNo privileges.
Load, unload and edit your own agentsNo privileges.
Change a system daemonYour password, once per change.
The same, without being asked each timeOpt into the helper. Everything it does is logged.

From the terminal too

The same app, without the window.

A daemoncontrol command line tool ships inside the app, with the same list, doctor and control commands. There is an MCP server too, so an agent can inspect and manage jobs the same way you would.

daemoncontrol

# everything that is not healthy
$ daemoncontrol list --state failed

# why this one does nothing
$ daemoncontrol doctor com.example.sync
Exit 127 — program not found on launchd's PATH
  fix: use /opt/homebrew/bin/rclone

# and the usual controls
$ daemoncontrol start com.example.sync

Stop reading plists at midnight.

Every job on your Mac, the schedule in words, and the reason the broken one is broken.

Free · macOS 14+ · Apple silicon and Intel · signed and notarized

Questions

The things worth asking first.

Does it replace launchctl?

No. It reads and writes the same jobs launchctl does, in the same places. Anything you change here is a normal launchd job afterwards, and anything you made at the command line shows up here.

Does it need admin rights?

Not to read anything, and not to change your own agents. Changing a system daemon asks for your password once per change. The privileged helper is optional and off unless you turn it on.

Can it break my Mac?

It can do what launchctl can do, so treat Apple’s own daemons with the same care you would there. The list marks which jobs are the system’s, and nothing is changed without you asking for it.

Does it send anything anywhere?

No accounts, no servers, no analytics. It reads what is already on your Mac. The only network request it makes is the update check, and you can turn that off in the menu.

What is the MCP server for?

It lets an agent use the same list, doctor and control commands the CLI exposes — so “find out why my backup job stopped running” can be answered without you reading plists yourself.

Built with AI

I built DaemonControl with heavy use of AI coding tools.

Saying so seems more useful than leaving you to guess.