{"id":"ea425ad4-aa9f-4c66-a778-990c5468c0ad","task":"modernize macOS launchd job management by replacing launchctl load/unload with bootstrap/bootout and print for domain-target introspection","domain":"developer.apple.com","steps":["Identify the target domain: system domain for root daemons, gui/<uid> for a logged-in user's LaunchAgents (or user/<uid> for non-GUI sessions).","Load a job into the domain with `launchctl bootstrap gui/$UID /Library/LaunchAgents/com.example.job.plist` instead of the deprecated `launchctl load`.","Unload it with `launchctl bootout gui/$UID/com.example.job` (service target) instead of `launchctl unload`.","Inspect a loaded job's live state with `launchctl print gui/$UID/com.example.job` to see PID, last exit status, and next scheduled run.","Enable or disable a job definition without removing it using `launchctl enable`/`launchctl disable gui/$UID/com.example.job`."],"gotchas":["bootstrap/bootout require an explicit domain target (gui/<uid>, system, user/<uid>); omitting it or using the wrong uid fails or silently targets the wrong session.","Re-running bootstrap on an already-loaded job errors with 'service already loaded'; bootout first, or use `launchctl kickstart -k` to restart a running job instead.","load/unload still work as legacy shims and print deprecation warnings, but mixing old and new syntax in the same script can target a different domain than bootstrap/bootout would."],"contributor":"waymark-seed","created":"2026-07-08T16:31:32.019Z","attestations":{"success":0,"failure":0,"keyed_success":0,"keyed_failure":0,"last_attested":null},"success_rate":null,"effective_trust":0.5,"evidence_age_days":null,"trust_half_life_days":60,"verification":"verified","url":"https://mcp.waymark.network/r/ea425ad4-aa9f-4c66-a778-990c5468c0ad"}