Your Mac's automation,
visible and under control.
A native macOS dashboard for managing LaunchAgents. See every scheduled job, its status, logs, and schedule -- without writing XML or memorizing launchctl commands.
$ brew install launchpad
==> Downloading launchpad-1.0.0.arm64.pkg...
==> Installing...
LaunchPad installed successfully.
$ open -a LaunchPad
Scanning LaunchAgents...
Found 47 agents | 38 active | 2 failed | 7 idle
Dashboard ready at localhost:24680
The problem
Managing launchd is stuck in 2005
Apple provides zero GUI tooling for launchd. Power users are left cobbling together XML files, arcane CLI commands, and scattered log files.
XML plists are hostile
Creating a LaunchAgent means hand-writing well-formed XML. A single missing tag or wrong key type causes silent failure. No validation, no error messages -- just a job that never runs.
launchctl breaks between versions
The CLI has had multiple incompatible API changes. Legacy commands (load, unload) print deprecation warnings. Modern commands use an unintuitive gui/501/ domain syntax. Good luck remembering which to use.
Failures are completely silent
If a job fails at 3 AM, you will not know until you manually check. No notifications, no log aggregation, no status dashboard. Failures go unnoticed for days or weeks.
Features
Everything you need to manage launchd
Built for developers who want visibility into their macOS background jobs without digging through plist files and system logs.
Agent Discovery
Automatically scans every LaunchAgent across ~/Library/LaunchAgents and system paths. Parses plists, cross-references with launchctl, and shows live status -- loaded, running, failed, or idle.
Visual Job Builder
Create launchd jobs through a form -- not XML. Pick an executable, set arguments and environment variables, configure advanced options. LaunchPad generates a valid plist and registers it with the system.
Triple Schedule Engine
Three ways to define when a job runs: a visual calendar builder, a cron expression with human-readable preview, or plain English like "every weekday at 9am." All three stay in sync.
Event Triggers
Go beyond schedules. Trigger jobs on file system changes (WatchPaths), when items appear in a directory, on volume mount, network connect, or at login. Combine event triggers with time schedules.
Real-time Logs
Streaming stdout and stderr with search, filters, and ANSI color rendering. Full execution history per job -- start time, duration, exit code. No more tail -f across scattered log files.
Smart Organization
Folders for hierarchical grouping, color-coded tags for cross-cutting labels, and full-text search across job names, commands, and metadata. Manage 100+ agents without losing your mind.
Touch ID Security
Destructive operations -- deleting jobs, modifying commands, bulk actions -- require biometric confirmation via Touch ID. A defense-in-depth layer preventing accidental damage to critical automation.
How it works
Up and running in under a minute
No accounts, no cloud setup, no configuration files. Install, launch, and you are done.
Install
One Homebrew command. Supports Apple Silicon and Intel.
$ brew install launchpad
Launch
Open the app and it automatically discovers every LaunchAgent on your system. User agents, system agents, Homebrew services -- all in one place.
Manage
Create, edit, schedule, and monitor jobs from one dashboard. Start, stop, and restart with a click. Get notified the moment something fails.
Under the hood
Built on macOS, for macOS
LaunchPad is not a cross-platform Electron wrapper. It is a native macOS application purpose-built for the platform it manages.
Native SwiftUI
Built with Swift and SwiftUI for a fast, native feel that respects macOS conventions and system resources.
Local-first, no cloud
Zero network requests. No accounts, no telemetry, no data leaving your machine. Everything runs on localhost.
Sandboxed with privilege escalation
Runs with minimal permissions by default. Elevated operations (system agents, protected paths) use temporary privilege escalation via Touch ID.
SQLite + Keychain
Job metadata and execution history in a local SQLite database. Secrets and credentials stored in the macOS Keychain.
XPC Services for isolation
Privileged operations run in isolated XPC helper processes. If a helper crashes, the main app is unaffected.
What LaunchPad generates for you
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.user.backup-photos</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/rsync</string>
<string>-avz</string>
<string>~/Photos/</string>
<string>/Volumes/Backup/Photos/</string>
</array>
<key>StartCalendarInterval</key>
<dict>
<key>Hour</key>
<integer>2</integer>
<key>Minute</key>
<integer>0</integer>
</dict>
<key>StandardOutPath</key>
<string>~/Library/Logs/LaunchPad/backup-photos.log</string>
<key>StandardErrorPath</key>
<string>~/Library/Logs/LaunchPad/backup-photos.err</string>
</dict>
</plist>
A backup job generated by LaunchPad's visual builder. You fill in a form, it writes the XML.
FAQ
Frequently Asked Questions
~/Library/LaunchAgents and /Library/LaunchAgents for all existing plist files. It parses them, cross-references their status with launchctl, and displays them in the dashboard. Agents not created by LaunchPad are marked as "External" and shown as read-only -- you can view their config and logs, but editing and deletion require importing them first.
brew services creates plist files in ~/Library/LaunchAgents. LaunchPad automatically discovers them alongside your other agents. You can view their configuration, monitor their logs, and see their run status. They are displayed with a "Homebrew" badge for easy identification.
Stop fighting launchctl.
Start managing your Mac.
One dashboard for every LaunchAgent on your system. Create jobs in seconds, catch failures in minutes, and never write a plist by hand again.
Built for macOS Ventura and later. Apple Silicon and Intel. MIT License.