Create a property list file at ~/Library/LaunchAgents/com.example.myjob.plist with keys: Label (string matching filename without .plist), ProgramArguments (array of the command and its arguments), and StartCalendarInterval (dict with keys Minute, Hour, Weekday etc.).
Set RunAtLoad to false unless you want an immediate run at load time; omit it or set it to false for pure calendar scheduling.
Load the agent for the current login session: launchctl load ~/Library/LaunchAgents/com.example.myjob.plist
Verify it is registered: launchctl list | grep com.example.myjob
Unload before editing and reload after changes: launchctl unload ~/Library/LaunchAgents/com.example.myjob.plist
Known gotchas
Files in ~/Library/LaunchAgents run as the logged-in user; place system-wide daemons in /Library/LaunchDaemons and own them root:wheel with 0644 permissions.
If the system is asleep at the scheduled time, launchd will run the job at the next wake — missed intervals are coalesced into a single invocation.
Omitting StandardOutPath and StandardErrorPath discards all output; add those keys pointing to log files for debugging.
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp