Your launch agents, in the menu bar
Bollard lists every launch agent in ~/Library/LaunchAgents. See at a glance which ones are loaded and which have a process running, and load or unload one with a switch. There is no main window.
macOS 11+ · Intel / Apple silicon · under 1 MB
Features
- At a glance
- One row per launch agent: the switch is on when it is loaded into launchd, and a running process shows its pid. Loaded agents come first.
- One flip
- The menu stays open after loading or unloading and shows the real state when it is done. If it fails, you get what launchctl said.
- Always current
- The list is read again every time you open the menu, so it never shows stale state.
- Knows “disabled”
- Agents disabled with
launchctl disableare marked. Turning one on re-enables it first, then loads it. - Readable names
- Give a cryptic label a name you recognise in
settings.json. - Chinese and English
- Follows the system language, or pick one in the menu.
- Automatic updates
- Checks and downloads new versions in the background, verifies them, and waits for you to install.
How it works
Bollard starts nothing and supervises nothing itself. It is a remote control for launchd, which ships with macOS: it reads launchd’s state into a menu and runs one launchctl command when you flip a switch.
- What a launch agent is
- launchd is the macOS process that starts background services and keeps an eye on them. Each plist in
~/Library/LaunchAgentsdescribes one service; at login launchd goes through the folder and loads them. Bollard only touches this folder, so it never needs an administrator password. - Three layers of state
- Whether the plist is in the folder decides if it loads at the next login. Loaded or not is whether launchd knows about it right now, and lasts until you log out. Disabled is a flag stored by launchd: loading is refused while it is set, and it survives a restart.
- Where the list comes from
- Every time the menu opens: list the plists and read each
Label, asklaunchctl listwhich are loaded and their pids, asklaunchctl print-disabledwhich are disabled, and match them byLabel. Nothing polls in the background. - Flipping a switch
- On runs
launchctl bootstrap(afterlaunchctl enablefor a disabled agent); off runslaunchctl bootout. launchctl’s exit code is unreliable, so success is judged by the state it is actually in afterwards. - On, but no pid
- Some agents are the service itself, such as redis: they show a pid, and switching them off stops the service. Others are only a trigger, such as an app’s launch-at-login item: it runs
openonce to start the app and exits, so it is on with no pid. Switching it off does not quit the app; it just stops it starting at the next login.
Install
Run these two lines in a terminal. Bollard installed this way opens without a prompt.
$ curl -fL https://bollard.tianyw0.xyz/Bollard.zip \ -o ~/Downloads/Bollard.zip $ unzip -o ~/Downloads/Bollard.zip -d /Applications
Bollard is ad-hoc signed and not notarized by Apple. If you download it with a browser, macOS blocks the first launch; go to System Settings → Privacy & Security and click Open Anyway.
Unloading an agent lasts until you log out: its plist is still in LaunchAgents, so macOS loads it again at the next login.
Specs
- Current version
- Loading
- System
- macOS 11 or later
- Chip
- Universal for Intel and Apple silicon, one package
- Scope
- The current user’s
~/Library/LaunchAgents - How it applies
launchctl bootstrap/bootout, no administrator password- Signature
- Ad-hoc, not notarized
- SHA-256
- Loading