Where the fleet automations live, what's in them, that they're tracked, and how to pick them up. 46 agents run on this Mac via launchd. Verified live 3 Jul 2026.
~/.launchagents-backup-2026-07-03/.| Thing | Location | Notes |
|---|---|---|
| Triggers / schedules | ~/Library/LaunchAgents/*.plist | macOS launchd. One .plist per agent = schedule + which script + env vars. 45 active. |
| Disabled agents | ~/Library/LaunchAgents/_disabled/ | Parked (mostly a separate trading project + retired jobs). 59. Moving a plist here = off. |
| The scripts | ~/*.py, ~/fleet-tools/*, ~/automations/*, ~/rank4ai-dashboard/scripts/* | The plist's ProgramArguments gives the exact path. |
| Logs | /tmp/*.log | ⚠️ /tmp wipes on reboot — an empty log ≠ never ran. Path is in each plist's StandardOutPath. |
| "Did it run?" markers | ~/.rank4ai_*, ~/.merchanthq_*, ~/.peptideclear_*, ~/.fleet_* | Dated dotfiles in home. The most reliable "is it producing?" signal. |
PeptideClear suite (blog, questions, deep-dive, weekly-intel, citation-refresh, data-fetch), MI gap-finder, github-publish
merchanthq, peptideclear, marketinvoice
merchanthq daily-indexing email, Google indexing, Bing monitor + reminder, weekly-citations, ai-citation-watch
site-audit, fleet-baseline-audit, antislop-spotcheck, deploy-health, embeddings-audit, content-refresh, reality-check
form-canary, lead-canary, lead-watcher, lead-telegram, forum-monitor, question-monitor, quora-prompt
companies-house, fca, boe-base-rate, licensing-refresh
dashboard, fleet-sync, fleet-inbox-sync, sync-icloud, functions-guard, audit-server, cloudflared-tunnel, bigquery-reminder
automation-health — see section 3
Full per-agent detail: ~/control-panel/FLEET_SITES_AND_AUTOMATIONS.md
| Script | ~/fleet-tools/automation-health.py (pinned to /usr/bin/python3 so a brew upgrade can't break it) |
|---|---|
| Agent | com.fleet.automation-health — runs 12:00 / 16:00 / 20:00 daily |
| Checks | (1) any agent with a non-zero last exit · (2) a critical agent that got disabled/unloaded · (3) a daily producer whose output marker is stale |
| Alerts | Telegram on any problem; silent when healthy |
| Status file | ~/control-panel/AUTOMATION_HEALTH.md — always shows the last result |
# what's running + last exit status (0 = ok, non-zero = failed last run) launchctl list | grep -iE "rank4ai|fleet|merchanthq|peptideclear" # current health in one shot /usr/bin/python3 ~/fleet-tools/automation-health.py # inspect one agent (schedule, script, log, env) plutil -p ~/Library/LaunchAgents/com.merchanthq.daily-indexing.plist # read its log + confirm it produced today tail -30 /tmp/merchanthq_daily_indexing.log ls -lat ~/.merchanthq_* # turn an agent ON / OFF / run it NOW launchctl load -w ~/Library/LaunchAgents/<label>.plist launchctl unload ~/Library/LaunchAgents/<label>.plist launchctl kickstart -k gui/$(id -u)/<label>
launchd only fires when the Mac is awake — a missed slot is skipped, not deferred. That's why we moved jobs into desk hours + added retries.
python3 is fragileA Homebrew upgrade to 3.14 broke every agent calling bare python3 (missing PIL / anthropic). Fixed by installing deps into brew python; pinned interpreters are immune.
/tmp log ≠ not runReboot wipes /tmp. Trust the ~/. dated markers, not the logs.
Two hosts running the same deploy/publish job = clobbering + double-posts. One host at a time.